git: 6128053dce0e - main - net-mgmt/netbox: Update to 4.0.7

From: Kai Knoblich <kai_at_FreeBSD.org>
Date: Mon, 15 Jul 2024 17:13:13 UTC
The branch main has been updated by kai:

URL: https://cgit.FreeBSD.org/ports/commit/?id=6128053dce0e8a7fd9266cf5a4d7ea5e4cfb6413

commit 6128053dce0e8a7fd9266cf5a4d7ea5e4cfb6413
Author:     Kai Knoblich <kai@FreeBSD.org>
AuthorDate: 2024-07-15 16:54:39 +0000
Commit:     Kai Knoblich <kai@FreeBSD.org>
CommitDate: 2024-07-15 16:58:00 +0000

    net-mgmt/netbox: Update to 4.0.7
    
    It contains many bugfixes/enhancements and the following new features:
    
    * Complete UI Refresh
    * Dynamic REST API Fields
    * Strawberry GraphQL Engine
    * Advanced Form Rendering Functionality
    * Legacy Admin UI Disabled
    
    https://netbox.readthedocs.io/en/stable/release-notes/version-4.0/
    
    MFH:            No (feature release)
---
 net-mgmt/netbox/Makefile             |  70 ++---
 net-mgmt/netbox/distinfo             |   6 +-
 net-mgmt/netbox/files/pkg-message.in |  39 +++
 net-mgmt/netbox/pkg-plist            | 526 ++++++++++++++++++-----------------
 4 files changed, 355 insertions(+), 286 deletions(-)

diff --git a/net-mgmt/netbox/Makefile b/net-mgmt/netbox/Makefile
index c2235a20f051..844f81aa56af 100644
--- a/net-mgmt/netbox/Makefile
+++ b/net-mgmt/netbox/Makefile
@@ -1,7 +1,6 @@
 PORTNAME=	netbox
 DISTVERSIONPREFIX=	v
-DISTVERSION=	3.7.8
-PORTREVISION=	3
+DISTVERSION=	4.0.7
 CATEGORIES=	net-mgmt python
 
 MAINTAINER=	kai@FreeBSD.org
@@ -19,49 +18,52 @@ LICENSE_FILE=	${WRKSRC}/LICENSE.txt
 # Django packages that are known for regressions in conjunction with NetBox and
 # should therefore only be updated with caution.
 #
-# - devel/py-dj42-django-rq
-# - www/py-dj42-django-filter
-# - www/py-dj42-django-tables2
-# - www/py-dj42-djangorestframework
+# - devel/py-dj50-django-rq
+# - www/py-dj50-django-filter
+# - www/py-dj50-django-tables2
+# - www/py-dj50-djangorestframework
 #
-RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django42>=4.2.11<4.3:www/py-django42@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}django-cors-headers>=4.3.1<5:www/py-django-cors-headers@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}django-debug-toolbar>=4.3.0<5:www/py-django-debug-toolbar@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}django-filter>=23.5<25:www/py-django-filter@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}django-graphiql-debug-toolbar>=0.2.0<1:www/py-django-graphiql-debug-toolbar@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}django-mptt>=0.14.0<0.17:www/py-django-mptt@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}django-prometheus>=2.3.1<2.4:www/py-django-prometheus@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}django-redis>=5.4.0<6:www/py-django-redis@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}django-rich>=1.8.0<2:www/py-django-rich@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}django-rq>=2.10.2<2.11:devel/py-django-rq@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}django-tables2>=2.7.0<2.8:www/py-django-tables2@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}django-taggit>=5.0.1<6:www/py-django-taggit@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}django-timezone-field>=6.1.0<7:www/py-django-timezone-field@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}djangorestframework>=3.14.0,1<3.15.0,1:www/py-djangorestframework@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}drf-spectacular>=0.27.2<1:www/py-drf-spectacular@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}drf-spectacular-sidecar>=2024.5.1:www/py-drf-spectacular-sidecar@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}graphene-django300>=3.0.0<3.0.0_99:devel/py-graphene-django300@${PY_FLAVOR} \
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=5.0.7<5.1:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-cors-headers>=4.4.0<5:www/py-dj50-django-cors-headers@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-debug-toolbar>=4.3.0<4.3.0_99:www/py-dj50-django-debug-toolbar@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-filter>=24.2<25:www/py-dj50-django-filter@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-htmx>=1.18.0<2:www/py-dj50-django-htmx@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-mptt>=0.16.0<0.17:www/py-dj50-django-mptt@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-prometheus>=2.3.1<2.4:www/py-dj50-django-prometheus@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-redis>=5.4.0<6:www/py-dj50-django-redis@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-rich>=1.9.0<2:www/py-dj50-django-rich@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-rq>=2.10.2<2.11:devel/py-dj50-django-rq@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-tables2>=2.7.0<2.8:www/py-dj50-django-tables2@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-taggit>=5.0.1<6:www/py-dj50-django-taggit@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-timezone-field>=7.0<8:www/py-dj50-django-timezone-field@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-djangorestframework>=3.15.2<3.16.0:www/py-dj50-djangorestframework@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-drf-spectacular>=0.27.2<1:www/py-dj50-drf-spectacular@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-drf-spectacular-sidecar>=2024.7.1:www/py-dj50-drf-spectacular-sidecar@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-strawberry-graphql>=0.235.2<0.300:devel/py-dj50-strawberry-graphql@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-strawberry-graphql-django>=0.46.1<1:www/py-dj50-strawberry-graphql-django@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}django-pglocks>=1.0.4<1.1:www/py-django-pglocks@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}bleach>=6.1.0<7:www/py-bleach@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}feedparser>=6.0.11<7:textproc/py-feedparser@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}Jinja2>=3.1.3<4:devel/py-Jinja2@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}markdown>=3.5.2<3.7:textproc/py-markdown@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}mkdocs-material>=9.5.18<10:textproc/py-mkdocs-material@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}markdown>=3.6<3.7:textproc/py-markdown@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}mkdocs-material>=9.5.28<10:textproc/py-mkdocs-material@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}mkdocstrings>=0.25.1<1:textproc/py-mkdocstrings@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}mkdocstrings-python-legacy>0:textproc/py-mkdocstrings-python-legacy@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}netaddr>=1.2.1<2:net/py-netaddr@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}pillow>=10.3.0:graphics/py-pillow@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}psycopg>=3.1.18<4:databases/py-psycopg@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}requests>=2.31.0<3:www/py-requests@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}netaddr>=1.3.0<2:net/py-netaddr@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}nh3>=0.2.18<0.3:www/py-nh3@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pillow>=10.4.0:graphics/py-pillow@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}psycopg>=3.1.20<4:databases/py-psycopg@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}psycopg-c>=3.1.20<4:databases/py-psycopg-c@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}psycopg-pool>=3.2.1<4:databases/py-psycopg-pool@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}requests>=2.32.3<3:www/py-requests@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}social-auth-app-django>=5.4.1<6:www/py-social-auth-app-django@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}social-auth-core>=4.5.3<5:security/py-social-auth-core@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}social-auth-core>=4.5.4<5:security/py-social-auth-core@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}svgwrite>=1.4.3<2:graphics/py-svgwrite@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}tablib>=3.6.1<4:textproc/py-tablib@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}tzdata>=2024.1:devel/py-tzdata@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}pyyaml>=6.0.1<7:devel/py-pyyaml@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}gunicorn>=21.2.0<23:www/py-gunicorn@${PY_FLAVOR}
+		${PYTHON_PKGNAMEPREFIX}gunicorn>=22.0.0<23:www/py-gunicorn@${PY_FLAVOR}
 
-USES=		cpe pgsql:12+ python
+USES=		cpe pgsql:12+ python:3.10+
 CPE_VENDOR=	netbox
 USE_GITHUB=	yes
 GH_ACCOUNT=	netbox-community
@@ -81,7 +83,7 @@ S3_DESC=	Amazon S3 backend support
 SENTRY_DESC=	Sentry monitoring support
 
 GIT_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dulwich>0:devel/py-dulwich@${PY_FLAVOR}
-LDAP_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django-auth-ldap>0:www/py-django-auth-ldap
+LDAP_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dj50-django-auth-ldap>0:www/py-dj50-django-auth-ldap
 S3_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}boto3>0:www/py-boto3@${PY_FLAVOR}
 SENTRY_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}sentry-sdk>0:devel/py-sentry-sdk@${PY_FLAVOR}
 
diff --git a/net-mgmt/netbox/distinfo b/net-mgmt/netbox/distinfo
index a8e759d64639..bc2d4561b8cf 100644
--- a/net-mgmt/netbox/distinfo
+++ b/net-mgmt/netbox/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1715019574
-SHA256 (netbox-community-netbox-v3.7.8_GH0.tar.gz) = 1da9a5090fe134647fd0d2b820200d05cca6d713c0392b0bb0a663afbb541e21
-SIZE (netbox-community-netbox-v3.7.8_GH0.tar.gz) = 9328178
+TIMESTAMP = 1720615292
+SHA256 (netbox-community-netbox-v4.0.7_GH0.tar.gz) = f264af6262001f9b5c7e88534b23a95f4e58bdecaa1228883278bebc286c87b1
+SIZE (netbox-community-netbox-v4.0.7_GH0.tar.gz) = 18385915
diff --git a/net-mgmt/netbox/files/pkg-message.in b/net-mgmt/netbox/files/pkg-message.in
index 29b2c056fbfd..cf841f373300 100644
--- a/net-mgmt/netbox/files/pkg-message.in
+++ b/net-mgmt/netbox/files/pkg-message.in
@@ -375,4 +375,43 @@ EOD
    accordingly.
 EOD
 }
+{ type: upgrade
+  maximum_version: 4.0.5
+  message: <<EOD
+The NetBox 4.0 release contains major changes, so at least items 1.) and 2.)
+must be checked before proceeding with the upgrade.
+
+1. NetBox v4.0 requires Python 3.10 or later.
+
+2. Following items should be checked as well:
+
+    * The format for GraphQL query filters has changed.  Please see the
+      GraphQL documentation for details and examples.
+
+    * The deprecated "device_role" & "device_role_id" filters for devices have
+      been removed.  (Use "role" and "role_id" instead.)
+
+    * The obsolete "device_role" field has been removed from the REST API
+      serializer for devices.  (Use "role" instead.)
+
+    * The legacy reports functionality has been dropped. Reports will be
+      automatically converted to custom scripts on upgrade.
+
+    * The "parent" and "parent_id" filters for locations now return only
+      immediate children of the specified location.  (Use "ancestor" and
+      "ancestor_id" to return all descendants.)
+
+    * The "object_type" field on the "CustomField" model has been renamed to
+      "related_object_type".
+
+    * The "utilities.utils module" has been removed and its resources
+      reorganized into separate modules organized by function.
+
+    * The obsolete "NullableCharField" class has been removed.  (Use Django's
+      stock "CharField" class with "null=True" instead.)
+
+    * The "annotated_date" template filter and "annotated_now" template tag
+      have been removed.
+EOD
+}
 ]
diff --git a/net-mgmt/netbox/pkg-plist b/net-mgmt/netbox/pkg-plist
index 9c1670dfbdc9..db6fec809569 100644
--- a/net-mgmt/netbox/pkg-plist
+++ b/net-mgmt/netbox/pkg-plist
@@ -15,6 +15,9 @@
 %%DATADIR%%/circuits/api/__init__.py
 %%DATADIR%%/circuits/api/nested_serializers.py
 %%DATADIR%%/circuits/api/serializers.py
+%%DATADIR%%/circuits/api/serializers_/__init__.py
+%%DATADIR%%/circuits/api/serializers_/circuits.py
+%%DATADIR%%/circuits/api/serializers_/providers.py
 %%DATADIR%%/circuits/api/urls.py
 %%DATADIR%%/circuits/api/views.py
 %%DATADIR%%/circuits/apps.py
@@ -26,23 +29,13 @@
 %%DATADIR%%/circuits/forms/filtersets.py
 %%DATADIR%%/circuits/forms/model_forms.py
 %%DATADIR%%/circuits/graphql/__init__.py
+%%DATADIR%%/circuits/graphql/filters.py
 %%DATADIR%%/circuits/graphql/schema.py
 %%DATADIR%%/circuits/graphql/types.py
 %%DATADIR%%/circuits/migrations/0001_squashed.py
 %%DATADIR%%/circuits/migrations/0002_squashed_0029.py
-%%DATADIR%%/circuits/migrations/0003_extend_tag_support.py
-%%DATADIR%%/circuits/migrations/0004_rename_cable_peer.py
-%%DATADIR%%/circuits/migrations/0032_provider_service_id.py
-%%DATADIR%%/circuits/migrations/0033_standardize_id_fields.py
-%%DATADIR%%/circuits/migrations/0034_created_datetimefield.py
-%%DATADIR%%/circuits/migrations/0035_provider_asns.py
-%%DATADIR%%/circuits/migrations/0036_circuit_termination_date_tags_custom_fields.py
-%%DATADIR%%/circuits/migrations/0037_new_cabling_models.py
-%%DATADIR%%/circuits/migrations/0038_cabling_cleanup.py
-%%DATADIR%%/circuits/migrations/0039_unique_constraints.py
-%%DATADIR%%/circuits/migrations/0040_provider_remove_deprecated_fields.py
-%%DATADIR%%/circuits/migrations/0041_standardize_description_comments.py
-%%DATADIR%%/circuits/migrations/0042_provideraccount.py
+%%DATADIR%%/circuits/migrations/0003_squashed_0037.py
+%%DATADIR%%/circuits/migrations/0038_squashed_0042.py
 %%DATADIR%%/circuits/migrations/0043_circuittype_color.py
 %%DATADIR%%/circuits/migrations/__init__.py
 %%DATADIR%%/circuits/models/__init__.py
@@ -65,10 +58,14 @@
 %%DATADIR%%/core/api/nested_serializers.py
 %%DATADIR%%/core/api/schema.py
 %%DATADIR%%/core/api/serializers.py
+%%DATADIR%%/core/api/serializers_/__init__.py
+%%DATADIR%%/core/api/serializers_/data.py
+%%DATADIR%%/core/api/serializers_/jobs.py
 %%DATADIR%%/core/api/urls.py
 %%DATADIR%%/core/api/views.py
 %%DATADIR%%/core/apps.py
 %%DATADIR%%/core/choices.py
+%%DATADIR%%/core/constants.py
 %%DATADIR%%/core/data_backends.py
 %%DATADIR%%/core/exceptions.py
 %%DATADIR%%/core/filtersets.py
@@ -79,6 +76,7 @@
 %%DATADIR%%/core/forms/mixins.py
 %%DATADIR%%/core/forms/model_forms.py
 %%DATADIR%%/core/graphql/__init__.py
+%%DATADIR%%/core/graphql/filters.py
 %%DATADIR%%/core/graphql/schema.py
 %%DATADIR%%/core/graphql/types.py
 %%DATADIR%%/core/jobs.py
@@ -88,11 +86,7 @@
 %%DATADIR%%/core/management/commands/nbshell.py
 %%DATADIR%%/core/management/commands/rqworker.py
 %%DATADIR%%/core/management/commands/syncdatasource.py
-%%DATADIR%%/core/migrations/0001_initial.py
-%%DATADIR%%/core/migrations/0002_managedfile.py
-%%DATADIR%%/core/migrations/0003_job.py
-%%DATADIR%%/core/migrations/0004_replicate_jobresults.py
-%%DATADIR%%/core/migrations/0005_job_created_auto_now.py
+%%DATADIR%%/core/migrations/0001_squashed_0005.py
 %%DATADIR%%/core/migrations/0006_datasource_type_remove_choices.py
 %%DATADIR%%/core/migrations/0007_job_add_error_field.py
 %%DATADIR%%/core/migrations/0008_contenttype_proxy.py
@@ -112,6 +106,8 @@
 %%DATADIR%%/core/tables/config.py
 %%DATADIR%%/core/tables/data.py
 %%DATADIR%%/core/tables/jobs.py
+%%DATADIR%%/core/tables/plugins.py
+%%DATADIR%%/core/tables/tasks.py
 %%DATADIR%%/core/tests/__init__.py
 %%DATADIR%%/core/tests/test_api.py
 %%DATADIR%%/core/tests/test_filtersets.py
@@ -124,6 +120,21 @@
 %%DATADIR%%/dcim/api/exceptions.py
 %%DATADIR%%/dcim/api/nested_serializers.py
 %%DATADIR%%/dcim/api/serializers.py
+%%DATADIR%%/dcim/api/serializers_/__init__.py
+%%DATADIR%%/dcim/api/serializers_/base.py
+%%DATADIR%%/dcim/api/serializers_/cables.py
+%%DATADIR%%/dcim/api/serializers_/device_components.py
+%%DATADIR%%/dcim/api/serializers_/devices.py
+%%DATADIR%%/dcim/api/serializers_/devicetype_components.py
+%%DATADIR%%/dcim/api/serializers_/devicetypes.py
+%%DATADIR%%/dcim/api/serializers_/manufacturers.py
+%%DATADIR%%/dcim/api/serializers_/platforms.py
+%%DATADIR%%/dcim/api/serializers_/power.py
+%%DATADIR%%/dcim/api/serializers_/racks.py
+%%DATADIR%%/dcim/api/serializers_/rackunits.py
+%%DATADIR%%/dcim/api/serializers_/roles.py
+%%DATADIR%%/dcim/api/serializers_/sites.py
+%%DATADIR%%/dcim/api/serializers_/virtualchassis.py
 %%DATADIR%%/dcim/api/urls.py
 %%DATADIR%%/dcim/api/views.py
 %%DATADIR%%/dcim/apps.py
@@ -143,6 +154,7 @@
 %%DATADIR%%/dcim/forms/object_create.py
 %%DATADIR%%/dcim/forms/object_import.py
 %%DATADIR%%/dcim/graphql/__init__.py
+%%DATADIR%%/dcim/graphql/filters.py
 %%DATADIR%%/dcim/graphql/gfk_mixins.py
 %%DATADIR%%/dcim/graphql/mixins.py
 %%DATADIR%%/dcim/graphql/schema.py
@@ -155,62 +167,14 @@
 %%DATADIR%%/dcim/migrations/0001_squashed.py
 %%DATADIR%%/dcim/migrations/0002_squashed.py
 %%DATADIR%%/dcim/migrations/0003_squashed_0130.py
-%%DATADIR%%/dcim/migrations/0131_consoleport_speed.py
-%%DATADIR%%/dcim/migrations/0132_cable_length.py
-%%DATADIR%%/dcim/migrations/0133_port_colors.py
-%%DATADIR%%/dcim/migrations/0134_interface_wwn_bridge.py
-%%DATADIR%%/dcim/migrations/0135_tenancy_extensions.py
-%%DATADIR%%/dcim/migrations/0136_device_airflow.py
-%%DATADIR%%/dcim/migrations/0137_relax_uniqueness_constraints.py
-%%DATADIR%%/dcim/migrations/0138_extend_tag_support.py
-%%DATADIR%%/dcim/migrations/0139_rename_cable_peer.py
-%%DATADIR%%/dcim/migrations/0140_wireless.py
-%%DATADIR%%/dcim/migrations/0141_asn_model.py
-%%DATADIR%%/dcim/migrations/0142_rename_128gfc_qsfp28.py
-%%DATADIR%%/dcim/migrations/0143_remove_primary_for_related_name.py
-%%DATADIR%%/dcim/migrations/0144_fix_cable_abs_length.py
-%%DATADIR%%/dcim/migrations/0145_site_remove_deprecated_fields.py
-%%DATADIR%%/dcim/migrations/0146_modules.py
-%%DATADIR%%/dcim/migrations/0147_inventoryitemrole.py
-%%DATADIR%%/dcim/migrations/0148_inventoryitem_component.py
-%%DATADIR%%/dcim/migrations/0149_inventoryitem_templates.py
-%%DATADIR%%/dcim/migrations/0150_interface_vrf.py
-%%DATADIR%%/dcim/migrations/0151_interface_speed_duplex.py
-%%DATADIR%%/dcim/migrations/0152_standardize_id_fields.py
-%%DATADIR%%/dcim/migrations/0153_created_datetimefield.py
-%%DATADIR%%/dcim/migrations/0154_half_height_rack_units.py
-%%DATADIR%%/dcim/migrations/0155_interface_poe_mode_type.py
-%%DATADIR%%/dcim/migrations/0156_location_status.py
-%%DATADIR%%/dcim/migrations/0157_new_cabling_models.py
-%%DATADIR%%/dcim/migrations/0158_populate_cable_terminations.py
-%%DATADIR%%/dcim/migrations/0159_populate_cable_paths.py
-%%DATADIR%%/dcim/migrations/0160_populate_cable_ends.py
-%%DATADIR%%/dcim/migrations/0161_cabling_cleanup.py
-%%DATADIR%%/dcim/migrations/0162_unique_constraints.py
-%%DATADIR%%/dcim/migrations/0163_weight_fields.py
-%%DATADIR%%/dcim/migrations/0164_rack_mounting_depth.py
-%%DATADIR%%/dcim/migrations/0165_standardize_description_comments.py
-%%DATADIR%%/dcim/migrations/0166_virtualdevicecontext.py
-%%DATADIR%%/dcim/migrations/0167_module_status.py
-%%DATADIR%%/dcim/migrations/0168_interface_template_enabled.py
-%%DATADIR%%/dcim/migrations/0169_devicetype_default_platform.py
-%%DATADIR%%/dcim/migrations/0170_configtemplate.py
-%%DATADIR%%/dcim/migrations/0171_cabletermination_change_logging.py
-%%DATADIR%%/dcim/migrations/0172_larger_power_draw_values.py
-%%DATADIR%%/dcim/migrations/0173_remove_napalm_fields.py
-%%DATADIR%%/dcim/migrations/0174_device_latitude_device_longitude.py
-%%DATADIR%%/dcim/migrations/0174_rack_starting_unit.py
-%%DATADIR%%/dcim/migrations/0175_device_oob_ip.py
-%%DATADIR%%/dcim/migrations/0176_device_component_counters.py
-%%DATADIR%%/dcim/migrations/0177_devicetype_component_counters.py
-%%DATADIR%%/dcim/migrations/0178_virtual_chassis_member_counter.py
-%%DATADIR%%/dcim/migrations/0179_interfacetemplate_rf_role.py
-%%DATADIR%%/dcim/migrations/0180_powerfeed_tenant.py
-%%DATADIR%%/dcim/migrations/0181_rename_device_role_device_role.py
-%%DATADIR%%/dcim/migrations/0182_zero_length_cable_fix.py
+%%DATADIR%%/dcim/migrations/0131_squashed_0159.py
+%%DATADIR%%/dcim/migrations/0160_squashed_0166.py
+%%DATADIR%%/dcim/migrations/0167_squashed_0182.py
 %%DATADIR%%/dcim/migrations/0183_devicetype_exclude_from_utilization.py
 %%DATADIR%%/dcim/migrations/0184_protect_child_interfaces.py
 %%DATADIR%%/dcim/migrations/0185_gfk_indexes.py
+%%DATADIR%%/dcim/migrations/0186_location_facility.py
+%%DATADIR%%/dcim/migrations/0187_alter_device_vc_position.py
 %%DATADIR%%/dcim/migrations/__init__.py
 %%DATADIR%%/dcim/models/__init__.py
 %%DATADIR%%/dcim/models/cables.py
@@ -257,7 +221,6 @@
 %%DATADIR%%/docs/administration/permissions.md
 %%DATADIR%%/docs/administration/replicating-netbox.md
 %%DATADIR%%/docs/configuration/data-validation.md
-%%DATADIR%%/docs/configuration/date-time.md
 %%DATADIR%%/docs/configuration/default-values.md
 %%DATADIR%%/docs/configuration/development.md
 %%DATADIR%%/docs/configuration/error-reporting.md
@@ -319,7 +282,8 @@
 %%DATADIR%%/docs/installation/1-postgresql.md
 %%DATADIR%%/docs/installation/2-redis.md
 %%DATADIR%%/docs/installation/3-netbox.md
-%%DATADIR%%/docs/installation/4-gunicorn.md
+%%DATADIR%%/docs/installation/4a-gunicorn.md
+%%DATADIR%%/docs/installation/4b-uwsgi.md
 %%DATADIR%%/docs/installation/5-http-server.md
 %%DATADIR%%/docs/installation/6-ldap.md
 %%DATADIR%%/docs/installation/index.md
@@ -347,7 +311,8 @@
 %%DATADIR%%/docs/media/development/github_fork_button.png
 %%DATADIR%%/docs/media/development/github_fork_dialog.png
 %%DATADIR%%/docs/media/development/github_new_issue.png
-%%DATADIR%%/docs/media/development/transifex_download.png
+%%DATADIR%%/docs/media/development/transifex_pull_request.png
+%%DATADIR%%/docs/media/development/transifex_sync.png
 %%DATADIR%%/docs/media/installation/netbox_application_stack.png
 %%DATADIR%%/docs/media/installation/upgrade_paths.png
 %%DATADIR%%/docs/media/misc/netbox_cloud.png
@@ -476,6 +441,7 @@
 %%DATADIR%%/docs/plugins/development/forms.md
 %%DATADIR%%/docs/plugins/development/graphql-api.md
 %%DATADIR%%/docs/plugins/development/index.md
+%%DATADIR%%/docs/plugins/development/migration-v4.md
 %%DATADIR%%/docs/plugins/development/models.md
 %%DATADIR%%/docs/plugins/development/navigation.md
 %%DATADIR%%/docs/plugins/development/rest-api.md
@@ -511,12 +477,29 @@
 %%DATADIR%%/docs/release-notes/version-3.5.md
 %%DATADIR%%/docs/release-notes/version-3.6.md
 %%DATADIR%%/docs/release-notes/version-3.7.md
+%%DATADIR%%/docs/release-notes/version-4.0.md
 %%DATADIR%%/extras/__init__.py
 %%DATADIR%%/extras/api/__init__.py
 %%DATADIR%%/extras/api/customfields.py
 %%DATADIR%%/extras/api/mixins.py
 %%DATADIR%%/extras/api/nested_serializers.py
 %%DATADIR%%/extras/api/serializers.py
+%%DATADIR%%/extras/api/serializers_/__init__.py
+%%DATADIR%%/extras/api/serializers_/attachments.py
+%%DATADIR%%/extras/api/serializers_/bookmarks.py
+%%DATADIR%%/extras/api/serializers_/change_logging.py
+%%DATADIR%%/extras/api/serializers_/configcontexts.py
+%%DATADIR%%/extras/api/serializers_/configtemplates.py
+%%DATADIR%%/extras/api/serializers_/customfields.py
+%%DATADIR%%/extras/api/serializers_/customlinks.py
+%%DATADIR%%/extras/api/serializers_/dashboard.py
+%%DATADIR%%/extras/api/serializers_/events.py
+%%DATADIR%%/extras/api/serializers_/exporttemplates.py
+%%DATADIR%%/extras/api/serializers_/journaling.py
+%%DATADIR%%/extras/api/serializers_/objecttypes.py
+%%DATADIR%%/extras/api/serializers_/savedfilters.py
+%%DATADIR%%/extras/api/serializers_/scripts.py
+%%DATADIR%%/extras/api/serializers_/tags.py
 %%DATADIR%%/extras/api/urls.py
 %%DATADIR%%/extras/api/views.py
 %%DATADIR%%/extras/apps.py
@@ -545,6 +528,7 @@
 %%DATADIR%%/extras/forms/reports.py
 %%DATADIR%%/extras/forms/scripts.py
 %%DATADIR%%/extras/graphql/__init__.py
+%%DATADIR%%/extras/graphql/filters.py
 %%DATADIR%%/extras/graphql/mixins.py
 %%DATADIR%%/extras/graphql/schema.py
 %%DATADIR%%/extras/graphql/types.py
@@ -554,50 +538,12 @@
 %%DATADIR%%/extras/management/commands/housekeeping.py
 %%DATADIR%%/extras/management/commands/reindex.py
 %%DATADIR%%/extras/management/commands/renaturalize.py
-%%DATADIR%%/extras/management/commands/runreport.py
 %%DATADIR%%/extras/management/commands/runscript.py
 %%DATADIR%%/extras/management/commands/webhook_receiver.py
 %%DATADIR%%/extras/migrations/0001_squashed.py
 %%DATADIR%%/extras/migrations/0002_squashed_0059.py
-%%DATADIR%%/extras/migrations/0060_customlink_button_class.py
-%%DATADIR%%/extras/migrations/0061_extras_change_logging.py
-%%DATADIR%%/extras/migrations/0062_clear_secrets_changelog.py
-%%DATADIR%%/extras/migrations/0063_webhook_conditions.py
-%%DATADIR%%/extras/migrations/0064_configrevision.py
-%%DATADIR%%/extras/migrations/0065_imageattachment_change_logging.py
-%%DATADIR%%/extras/migrations/0066_customfield_name_validation.py
-%%DATADIR%%/extras/migrations/0067_customfield_min_max_values.py
-%%DATADIR%%/extras/migrations/0068_configcontext_cluster_types.py
-%%DATADIR%%/extras/migrations/0069_custom_object_field.py
-%%DATADIR%%/extras/migrations/0070_customlink_enabled.py
-%%DATADIR%%/extras/migrations/0071_standardize_id_fields.py
-%%DATADIR%%/extras/migrations/0072_created_datetimefield.py
-%%DATADIR%%/extras/migrations/0073_journalentry_tags_custom_fields.py
-%%DATADIR%%/extras/migrations/0074_customfield_extensions.py
-%%DATADIR%%/extras/migrations/0075_configcontext_locations.py
-%%DATADIR%%/extras/migrations/0076_tag_slug_unicode.py
-%%DATADIR%%/extras/migrations/0077_customlink_extend_text_and_url.py
-%%DATADIR%%/extras/migrations/0078_unique_constraints.py
-%%DATADIR%%/extras/migrations/0079_scheduled_jobs.py
-%%DATADIR%%/extras/migrations/0080_customlink_content_types.py
-%%DATADIR%%/extras/migrations/0081_exporttemplate_content_types.py
-%%DATADIR%%/extras/migrations/0082_savedfilter.py
-%%DATADIR%%/extras/migrations/0083_search.py
-%%DATADIR%%/extras/migrations/0084_staging.py
-%%DATADIR%%/extras/migrations/0085_synced_data.py
-%%DATADIR%%/extras/migrations/0086_configtemplate.py
-%%DATADIR%%/extras/migrations/0087_dashboard.py
-%%DATADIR%%/extras/migrations/0088_jobresult_webhooks.py
-%%DATADIR%%/extras/migrations/0089_customfield_is_cloneable.py
-%%DATADIR%%/extras/migrations/0090_objectchange_index_request_id.py
-%%DATADIR%%/extras/migrations/0091_create_managedfiles.py
-%%DATADIR%%/extras/migrations/0092_delete_jobresult.py
-%%DATADIR%%/extras/migrations/0093_configrevision_ordering.py
-%%DATADIR%%/extras/migrations/0094_tag_object_types.py
-%%DATADIR%%/extras/migrations/0095_bookmarks.py
-%%DATADIR%%/extras/migrations/0096_customfieldchoiceset.py
-%%DATADIR%%/extras/migrations/0097_customfield_remove_choices.py
-%%DATADIR%%/extras/migrations/0098_webhook_custom_field_data_webhook_tags.py
+%%DATADIR%%/extras/migrations/0060_squashed_0086.py
+%%DATADIR%%/extras/migrations/0087_squashed_0098.py
 %%DATADIR%%/extras/migrations/0099_cachedvalue_ordering.py
 %%DATADIR%%/extras/migrations/0100_customfield_ui_attrs.py
 %%DATADIR%%/extras/migrations/0101_eventrule.py
@@ -607,6 +553,14 @@
 %%DATADIR%%/extras/migrations/0105_customfield_min_max_values.py
 %%DATADIR%%/extras/migrations/0106_bookmark_user_cascade_deletion.py
 %%DATADIR%%/extras/migrations/0107_cachedvalue_extras_cachedvalue_object.py
+%%DATADIR%%/extras/migrations/0108_convert_reports_to_scripts.py
+%%DATADIR%%/extras/migrations/0109_script_model.py
+%%DATADIR%%/extras/migrations/0110_remove_eventrule_action_parameters.py
+%%DATADIR%%/extras/migrations/0111_rename_content_types.py
+%%DATADIR%%/extras/migrations/0112_tag_update_object_types.py
+%%DATADIR%%/extras/migrations/0113_customfield_rename_object_type.py
+%%DATADIR%%/extras/migrations/0114_customfield_add_comments.py
+%%DATADIR%%/extras/migrations/0115_convert_dashboard_widgets.py
 %%DATADIR%%/extras/migrations/__init__.py
 %%DATADIR%%/extras/models/__init__.py
 %%DATADIR%%/extras/models/change_logging.py
@@ -615,18 +569,10 @@
 %%DATADIR%%/extras/models/dashboard.py
 %%DATADIR%%/extras/models/mixins.py
 %%DATADIR%%/extras/models/models.py
-%%DATADIR%%/extras/models/reports.py
 %%DATADIR%%/extras/models/scripts.py
 %%DATADIR%%/extras/models/search.py
 %%DATADIR%%/extras/models/staging.py
 %%DATADIR%%/extras/models/tags.py
-%%DATADIR%%/extras/plugins/__init__.py
-%%DATADIR%%/extras/plugins/navigation.py
-%%DATADIR%%/extras/plugins/registration.py
-%%DATADIR%%/extras/plugins/templates.py
-%%DATADIR%%/extras/plugins/urls.py
-%%DATADIR%%/extras/plugins/utils.py
-%%DATADIR%%/extras/plugins/views.py
 %%DATADIR%%/extras/querysets.py
 %%DATADIR%%/extras/reports.py
 %%DATADIR%%/extras/scripts.py
@@ -645,7 +591,7 @@
 %%DATADIR%%/extras/tests/test_conditions.py
 %%DATADIR%%/extras/tests/test_custom_validation.py
 %%DATADIR%%/extras/tests/test_customfields.py
-%%DATADIR%%/extras/tests/test_customvalidation.py
+%%DATADIR%%/extras/tests/test_customvalidators.py
 %%DATADIR%%/extras/tests/test_event_rules.py
 %%DATADIR%%/extras/tests/test_filtersets.py
 %%DATADIR%%/extras/tests/test_forms.py
@@ -658,13 +604,20 @@
 %%DATADIR%%/extras/validators.py
 %%DATADIR%%/extras/views.py
 %%DATADIR%%/extras/webhooks.py
-%%DATADIR%%/extras/webhooks_worker.py
 %%DATADIR%%/generate_secret_key.py
 %%DATADIR%%/ipam/__init__.py
 %%DATADIR%%/ipam/api/__init__.py
 %%DATADIR%%/ipam/api/field_serializers.py
 %%DATADIR%%/ipam/api/nested_serializers.py
 %%DATADIR%%/ipam/api/serializers.py
+%%DATADIR%%/ipam/api/serializers_/__init__.py
+%%DATADIR%%/ipam/api/serializers_/asns.py
+%%DATADIR%%/ipam/api/serializers_/fhrpgroups.py
+%%DATADIR%%/ipam/api/serializers_/ip.py
+%%DATADIR%%/ipam/api/serializers_/roles.py
+%%DATADIR%%/ipam/api/serializers_/services.py
+%%DATADIR%%/ipam/api/serializers_/vlans.py
+%%DATADIR%%/ipam/api/serializers_/vrfs.py
 %%DATADIR%%/ipam/api/urls.py
 %%DATADIR%%/ipam/api/views.py
 %%DATADIR%%/ipam/apps.py
@@ -680,7 +633,7 @@
 %%DATADIR%%/ipam/forms/filtersets.py
 %%DATADIR%%/ipam/forms/model_forms.py
 %%DATADIR%%/ipam/graphql/__init__.py
-%%DATADIR%%/ipam/graphql/gfk_mixins.py
+%%DATADIR%%/ipam/graphql/filters.py
 %%DATADIR%%/ipam/graphql/mixins.py
 %%DATADIR%%/ipam/graphql/schema.py
 %%DATADIR%%/ipam/graphql/types.py
@@ -691,27 +644,8 @@
 %%DATADIR%%/ipam/managers.py
 %%DATADIR%%/ipam/migrations/0001_squashed.py
 %%DATADIR%%/ipam/migrations/0002_squashed_0046.py
-%%DATADIR%%/ipam/migrations/0047_prefix_depth_children.py
-%%DATADIR%%/ipam/migrations/0048_prefix_populate_depth_children.py
-%%DATADIR%%/ipam/migrations/0049_prefix_mark_utilized.py
-%%DATADIR%%/ipam/migrations/0050_iprange.py
-%%DATADIR%%/ipam/migrations/0051_extend_tag_support.py
-%%DATADIR%%/ipam/migrations/0052_fhrpgroup.py
-%%DATADIR%%/ipam/migrations/0053_asn_model.py
-%%DATADIR%%/ipam/migrations/0054_vlangroup_min_max_vids.py
-%%DATADIR%%/ipam/migrations/0055_servicetemplate.py
-%%DATADIR%%/ipam/migrations/0056_standardize_id_fields.py
-%%DATADIR%%/ipam/migrations/0057_created_datetimefield.py
-%%DATADIR%%/ipam/migrations/0058_ipaddress_nat_inside_nonunique.py
-%%DATADIR%%/ipam/migrations/0059_l2vpn.py
-%%DATADIR%%/ipam/migrations/0060_alter_l2vpn_slug.py
-%%DATADIR%%/ipam/migrations/0061_fhrpgroup_name.py
-%%DATADIR%%/ipam/migrations/0062_unique_constraints.py
-%%DATADIR%%/ipam/migrations/0063_standardize_description_comments.py
-%%DATADIR%%/ipam/migrations/0064_clear_search_cache.py
-%%DATADIR%%/ipam/migrations/0065_asnrange.py
-%%DATADIR%%/ipam/migrations/0066_iprange_mark_utilized.py
-%%DATADIR%%/ipam/migrations/0067_ipaddress_index_host.py
+%%DATADIR%%/ipam/migrations/0047_squashed_0053.py
+%%DATADIR%%/ipam/migrations/0054_squashed_0067.py
 %%DATADIR%%/ipam/migrations/0068_move_l2vpn.py
 %%DATADIR%%/ipam/migrations/0069_gfk_indexes.py
 %%DATADIR%%/ipam/migrations/__init__.py
@@ -765,7 +699,9 @@
 %%DATADIR%%/netbox/api/views.py
 %%DATADIR%%/netbox/api/viewsets/__init__.py
 %%DATADIR%%/netbox/api/viewsets/mixins.py
-%%DATADIR%%/netbox/authentication.py
+%%DATADIR%%/netbox/authentication/__init__.py
+%%DATADIR%%/netbox/authentication/misc.py
+%%DATADIR%%/netbox/choices.py
 %%DATADIR%%/netbox/config/__init__.py
 %%DATADIR%%/netbox/config/parameters.py
 %%DATADIR%%/netbox/configuration_example.py
@@ -780,11 +716,10 @@
 %%DATADIR%%/netbox/forms/base.py
 %%DATADIR%%/netbox/forms/mixins.py
 %%DATADIR%%/netbox/graphql/__init__.py
-%%DATADIR%%/netbox/graphql/fields.py
+%%DATADIR%%/netbox/graphql/filter_mixins.py
 %%DATADIR%%/netbox/graphql/scalars.py
 %%DATADIR%%/netbox/graphql/schema.py
 %%DATADIR%%/netbox/graphql/types.py
-%%DATADIR%%/netbox/graphql/utils.py
 %%DATADIR%%/netbox/graphql/views.py
 %%DATADIR%%/netbox/middleware.py
 %%DATADIR%%/netbox/models/__init__.py
@@ -860,33 +795,110 @@
 %%DATADIR%%/project-static/.prettierrc
 %%DATADIR%%/project-static/.sassrc
 %%DATADIR%%/project-static/bundle.js
+%%DATADIR%%/project-static/dist/Inter-Black-7VL4YR6G.woff
+%%DATADIR%%/project-static/dist/Inter-Black-NU3KAVPI.woff2
+%%DATADIR%%/project-static/dist/Inter-BlackItalic-4BVAVUVI.woff2
+%%DATADIR%%/project-static/dist/Inter-BlackItalic-HJLUEYVW.woff
+%%DATADIR%%/project-static/dist/Inter-Bold-6AVOS7AV.woff2
+%%DATADIR%%/project-static/dist/Inter-Bold-RTIBL5DO.woff
+%%DATADIR%%/project-static/dist/Inter-BoldItalic-AID2XGS3.woff2
+%%DATADIR%%/project-static/dist/Inter-BoldItalic-UU7SOVRI.woff
+%%DATADIR%%/project-static/dist/Inter-ExtraBold-B5RSZK6R.woff
+%%DATADIR%%/project-static/dist/Inter-ExtraBold-VAPCTO5F.woff2
+%%DATADIR%%/project-static/dist/Inter-ExtraBoldItalic-R7DLWYIK.woff
+%%DATADIR%%/project-static/dist/Inter-ExtraBoldItalic-W26CJYY7.woff2
+%%DATADIR%%/project-static/dist/Inter-ExtraLight-A7NHN7KT.woff
+%%DATADIR%%/project-static/dist/Inter-ExtraLight-DVW3SATI.woff2
+%%DATADIR%%/project-static/dist/Inter-ExtraLightItalic-KXZYPKOE.woff2
+%%DATADIR%%/project-static/dist/Inter-ExtraLightItalic-SKGXKLLA.woff
+%%DATADIR%%/project-static/dist/Inter-Italic-GHDVOOKA.woff
+%%DATADIR%%/project-static/dist/Inter-Italic-RW2ZALTO.woff2
+%%DATADIR%%/project-static/dist/Inter-Light-ARG5Y6MT.woff
+%%DATADIR%%/project-static/dist/Inter-Light-XBRUIIRZ.woff2
+%%DATADIR%%/project-static/dist/Inter-LightItalic-4OWY6V5R.woff2
+%%DATADIR%%/project-static/dist/Inter-LightItalic-WFS25IQZ.woff
+%%DATADIR%%/project-static/dist/Inter-Medium-JV63DMR7.woff2
+%%DATADIR%%/project-static/dist/Inter-Medium-KH2CGZVE.woff
+%%DATADIR%%/project-static/dist/Inter-MediumItalic-P7H6BBYU.woff2
+%%DATADIR%%/project-static/dist/Inter-MediumItalic-PO2E4FIG.woff
+%%DATADIR%%/project-static/dist/Inter-Regular-373XMOLM.woff2
+%%DATADIR%%/project-static/dist/Inter-Regular-DR3VC6YG.woff
+%%DATADIR%%/project-static/dist/Inter-SemiBold-TJ6HPMMH.woff
+%%DATADIR%%/project-static/dist/Inter-SemiBold-UMRILHOG.woff2
+%%DATADIR%%/project-static/dist/Inter-SemiBoldItalic-ABO2DCC7.woff2
+%%DATADIR%%/project-static/dist/Inter-SemiBoldItalic-DM4JJSFU.woff
+%%DATADIR%%/project-static/dist/Inter-Thin-MEKOZMGA.woff
+%%DATADIR%%/project-static/dist/Inter-Thin-TCINWRKS.woff2
+%%DATADIR%%/project-static/dist/Inter-ThinItalic-WRULPH3M.woff2
+%%DATADIR%%/project-static/dist/Inter-ThinItalic-ZFOL6JFL.woff
+%%DATADIR%%/project-static/dist/Inter-italic.var-7LS4VCXC.woff2
+%%DATADIR%%/project-static/dist/Inter-roman.var-EDENVCUS.woff2
+%%DATADIR%%/project-static/dist/Inter.var-FTIQFLGO.woff2
 %%DATADIR%%/project-static/dist/cable_trace.css
 %%DATADIR%%/project-static/dist/graphiql.css
 %%DATADIR%%/project-static/dist/graphiql.js
 %%DATADIR%%/project-static/dist/graphiql.js.map
-%%DATADIR%%/project-static/dist/materialdesignicons-webfont-DWVXV5L5.woff
-%%DATADIR%%/project-static/dist/materialdesignicons-webfont-ER2MFQKM.woff2
-%%DATADIR%%/project-static/dist/materialdesignicons-webfont-UHEFFMSX.eot
-%%DATADIR%%/project-static/dist/materialdesignicons-webfont-WM6M6ZHQ.ttf
+%%DATADIR%%/project-static/dist/graphiql.min.css
+%%DATADIR%%/project-static/dist/graphiql.min.js
+%%DATADIR%%/project-static/dist/graphiql/graphiql.min.css
+%%DATADIR%%/project-static/dist/graphiql/graphiql.min.js
+%%DATADIR%%/project-static/dist/graphiql/index.umd.js
+%%DATADIR%%/project-static/dist/graphiql/js.cookie.min.js
+%%DATADIR%%/project-static/dist/graphiql/plugin-explorer-style.css
+%%DATADIR%%/project-static/dist/graphiql/react-dom.production.min.js
+%%DATADIR%%/project-static/dist/graphiql/react.production.min.js
+%%DATADIR%%/project-static/dist/index.umd.js
+%%DATADIR%%/project-static/dist/js.cookie.min.js
+%%DATADIR%%/project-static/dist/materialdesignicons-webfont-4ZM36VVG.woff
+%%DATADIR%%/project-static/dist/materialdesignicons-webfont-7OXPFKOV.woff2
+%%DATADIR%%/project-static/dist/materialdesignicons-webfont-A5TO3SM5.eot
+%%DATADIR%%/project-static/dist/materialdesignicons-webfont-OFFE53R5.ttf
 %%DATADIR%%/project-static/dist/netbox-dark.css
 %%DATADIR%%/project-static/dist/netbox-external.css
 %%DATADIR%%/project-static/dist/netbox-light.css
 %%DATADIR%%/project-static/dist/netbox-print.css
+%%DATADIR%%/project-static/dist/netbox.css
 %%DATADIR%%/project-static/dist/netbox.js
 %%DATADIR%%/project-static/dist/netbox.js.map
+%%DATADIR%%/project-static/dist/plugin-explorer-style.css
 %%DATADIR%%/project-static/dist/rack_elevation.css
+%%DATADIR%%/project-static/dist/react-dom.production.min.js
+%%DATADIR%%/project-static/dist/react.production.min.js
+%%DATADIR%%/project-static/dist/roboto-mono-latin-100-JQJ4Z5FD.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-100-SMKVIC22.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-100italic-DARDHGP2.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-100italic-SF7I3UQS.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-200-GAB3DPCB.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-200-GNXGWAU7.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-200italic-MBEOZD5A.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-200italic-YC3AN6RQ.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-300-76QG53G7.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-300-KB4HCXJB.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-300italic-ATWQWJG4.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-300italic-UCTTXECO.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-400-L25YYWY3.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-400-OKRWGZOX.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-400italic-3G7XMJ7A.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-400italic-UPQRVZWX.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-500-4ZB2P7GK.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-500-67YXJMLO.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-500italic-RXGCSZS4.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-500italic-U7WRIR22.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-600-USMEYMTS.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-600-ZRZYGQNG.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-600italic-THUILB76.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-600italic-TLIW3M4P.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-700-PEQVO3WV.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-700-QNNSSZIK.woff2
+%%DATADIR%%/project-static/dist/roboto-mono-latin-700italic-KTWD2UYU.woff
+%%DATADIR%%/project-static/dist/roboto-mono-latin-700italic-WWLRMKIN.woff2
 %%DATADIR%%/project-static/docs/.info
-%%DATADIR%%/project-static/img/graphql.ico
 %%DATADIR%%/project-static/img/netbox.ico
 %%DATADIR%%/project-static/img/netbox_icon.svg
-%%DATADIR%%/project-static/img/netbox_logo.png
 %%DATADIR%%/project-static/img/netbox_logo.svg
 %%DATADIR%%/project-static/img/netbox_touch-icon-180.png
 %%DATADIR%%/project-static/img/rest-api.ico
-%%DATADIR%%/project-static/img/tint_20.png
 %%DATADIR%%/project-static/js/setmode.js
-%%DATADIR%%/project-static/netbox-graphiql/graphiql.scss
-%%DATADIR%%/project-static/netbox-graphiql/index.ts
 %%DATADIR%%/project-static/netbox-graphiql/package.json
 %%DATADIR%%/project-static/package.json
 %%DATADIR%%/project-static/src/bs.ts
@@ -905,25 +917,24 @@
 %%DATADIR%%/project-static/src/dateSelector.ts
 %%DATADIR%%/project-static/src/forms/elements.ts
 %%DATADIR%%/project-static/src/forms/index.ts
+%%DATADIR%%/project-static/src/forms/savedFiltersSelect.ts
 %%DATADIR%%/project-static/src/forms/scopeSelector.ts
 %%DATADIR%%/project-static/src/forms/speedSelector.ts
 %%DATADIR%%/project-static/src/global.d.ts
 %%DATADIR%%/project-static/src/htmx.ts
 %%DATADIR%%/project-static/src/index.ts
-%%DATADIR%%/project-static/src/links.ts
 %%DATADIR%%/project-static/src/messages.ts
 %%DATADIR%%/project-static/src/netbox.ts
 %%DATADIR%%/project-static/src/objectSelector.ts
 %%DATADIR%%/project-static/src/racks.ts
 %%DATADIR%%/project-static/src/search.ts
-%%DATADIR%%/project-static/src/select/api/apiSelect.ts
-%%DATADIR%%/project-static/src/select/api/dynamicParams.ts
-%%DATADIR%%/project-static/src/select/api/index.ts
-%%DATADIR%%/project-static/src/select/api/types.ts
-%%DATADIR%%/project-static/src/select/color.ts
+%%DATADIR%%/project-static/src/select/classes/dynamicParamsMap.ts
+%%DATADIR%%/project-static/src/select/classes/dynamicTomSelect.ts
+%%DATADIR%%/project-static/src/select/config.ts
+%%DATADIR%%/project-static/src/select/dynamic.ts
 %%DATADIR%%/project-static/src/select/index.ts
 %%DATADIR%%/project-static/src/select/static.ts
-%%DATADIR%%/project-static/src/select/util.ts
+%%DATADIR%%/project-static/src/select/types.ts
 %%DATADIR%%/project-static/src/sidenav.ts
 %%DATADIR%%/project-static/src/state/index.ts
 %%DATADIR%%/project-static/src/stores/index.ts
@@ -935,26 +946,26 @@
 %%DATADIR%%/project-static/src/tables/index.ts
 %%DATADIR%%/project-static/src/tables/interfaceTable.ts
 %%DATADIR%%/project-static/src/util.ts
-%%DATADIR%%/project-static/styles/_cable_trace.scss
-%%DATADIR%%/project-static/styles/_dark.scss
-%%DATADIR%%/project-static/styles/_external.scss
-%%DATADIR%%/project-static/styles/_light.scss
-%%DATADIR%%/project-static/styles/_print.scss
-%%DATADIR%%/project-static/styles/_rack_elevation.scss
-%%DATADIR%%/project-static/styles/bootstrap.scss
-%%DATADIR%%/project-static/styles/cable-trace.scss
-%%DATADIR%%/project-static/styles/extensions.scss
-%%DATADIR%%/project-static/styles/flatpickr-dark.scss
+%%DATADIR%%/project-static/styles/_variables.scss
+%%DATADIR%%/project-static/styles/custom/_code.scss
+%%DATADIR%%/project-static/styles/custom/_interfaces.scss
+%%DATADIR%%/project-static/styles/custom/_markdown.scss
+%%DATADIR%%/project-static/styles/custom/_misc.scss
+%%DATADIR%%/project-static/styles/external.scss
 %%DATADIR%%/project-static/styles/netbox.scss
-%%DATADIR%%/project-static/styles/overrides.scss
-%%DATADIR%%/project-static/styles/rack-elevation.scss
-%%DATADIR%%/project-static/styles/select.scss
-%%DATADIR%%/project-static/styles/sidenav.scss
-%%DATADIR%%/project-static/styles/theme-base.scss
-%%DATADIR%%/project-static/styles/theme-dark.scss
-%%DATADIR%%/project-static/styles/theme-light.scss
-%%DATADIR%%/project-static/styles/utilities.scss
-%%DATADIR%%/project-static/styles/variables.scss
+%%DATADIR%%/project-static/styles/overrides/_bootstrap.scss
+%%DATADIR%%/project-static/styles/overrides/_tabler.scss
+%%DATADIR%%/project-static/styles/overrides/_tomselect.scss
+%%DATADIR%%/project-static/styles/svg/cable_trace.scss
+%%DATADIR%%/project-static/styles/svg/rack_elevation.scss
+%%DATADIR%%/project-static/styles/transitional/_badges.scss
+%%DATADIR%%/project-static/styles/transitional/_cards.scss
+%%DATADIR%%/project-static/styles/transitional/_forms.scss
+%%DATADIR%%/project-static/styles/transitional/_layout.scss
+%%DATADIR%%/project-static/styles/transitional/_navigation.scss
+%%DATADIR%%/project-static/styles/transitional/_progress.scss
+%%DATADIR%%/project-static/styles/transitional/_tables.scss
+%%DATADIR%%/project-static/styles/transitional/_tabs.scss
 %%DATADIR%%/project-static/tsconfig.json
 %%DATADIR%%/project-static/yarn.lock
 %%DATADIR%%/reports/__init__.py
@@ -969,16 +980,15 @@
 %%DATADIR%%/templates/account/profile.html
 %%DATADIR%%/templates/account/token.html
 %%DATADIR%%/templates/account/token_list.html
-%%DATADIR%%/templates/admin/index.html
 %%DATADIR%%/templates/base/40x.html
 %%DATADIR%%/templates/base/base.html
 %%DATADIR%%/templates/base/layout.html
-%%DATADIR%%/templates/base/sidenav.html
 %%DATADIR%%/templates/circuits/circuit.html
 %%DATADIR%%/templates/circuits/circuit_terminations_swap.html
-%%DATADIR%%/templates/circuits/circuittermination_edit.html
+%%DATADIR%%/templates/circuits/circuittermination.html
 %%DATADIR%%/templates/circuits/circuittype.html
 %%DATADIR%%/templates/circuits/inc/circuit_termination.html
+%%DATADIR%%/templates/circuits/inc/circuit_termination_fields.html
 %%DATADIR%%/templates/circuits/provider.html
 %%DATADIR%%/templates/circuits/provideraccount.html
 %%DATADIR%%/templates/circuits/providernetwork.html
@@ -986,13 +996,19 @@
 %%DATADIR%%/templates/core/configrevision_restore.html
 %%DATADIR%%/templates/core/datafile.html
 %%DATADIR%%/templates/core/datasource.html
+%%DATADIR%%/templates/core/inc/config_data.html
 %%DATADIR%%/templates/core/job.html
 %%DATADIR%%/templates/core/object_jobs.html
+%%DATADIR%%/templates/core/rq_queue_list.html
+%%DATADIR%%/templates/core/rq_task.html
+%%DATADIR%%/templates/core/rq_task_list.html
+%%DATADIR%%/templates/core/rq_worker.html
+%%DATADIR%%/templates/core/rq_worker_list.html
+%%DATADIR%%/templates/core/system.html
 %%DATADIR%%/templates/dcim/bulk_disconnect.html
 %%DATADIR%%/templates/dcim/cable.html
 %%DATADIR%%/templates/dcim/cable_edit.html
 %%DATADIR%%/templates/dcim/cable_trace.html
-%%DATADIR%%/templates/dcim/component_create.html
 %%DATADIR%%/templates/dcim/component_list.html
 %%DATADIR%%/templates/dcim/connections_list.html
 %%DATADIR%%/templates/dcim/consoleport.html
@@ -1015,7 +1031,6 @@
 %%DATADIR%%/templates/dcim/device_edit.html
 %%DATADIR%%/templates/dcim/device_list.html
 %%DATADIR%%/templates/dcim/devicebay.html
-%%DATADIR%%/templates/dcim/devicebay_delete.html
 %%DATADIR%%/templates/dcim/devicebay_depopulate.html
 %%DATADIR%%/templates/dcim/devicebay_populate.html
 %%DATADIR%%/templates/dcim/devicerole.html
@@ -1033,10 +1048,7 @@
 %%DATADIR%%/templates/dcim/inc/rack_elevation.html
 %%DATADIR%%/templates/dcim/interface.html
 %%DATADIR%%/templates/dcim/inventoryitem.html
-%%DATADIR%%/templates/dcim/inventoryitem_bulk_delete.html
-%%DATADIR%%/templates/dcim/inventoryitem_edit.html
 %%DATADIR%%/templates/dcim/inventoryitemrole.html
-%%DATADIR%%/templates/dcim/inventoryitemtemplate_edit.html
 %%DATADIR%%/templates/dcim/location.html
 %%DATADIR%%/templates/dcim/manufacturer.html
 %%DATADIR%%/templates/dcim/module.html
@@ -1053,7 +1065,6 @@
 %%DATADIR%%/templates/dcim/rack/base.html
 %%DATADIR%%/templates/dcim/rack/non_racked_devices.html
 %%DATADIR%%/templates/dcim/rack/reservations.html
-%%DATADIR%%/templates/dcim/rack_edit.html
 %%DATADIR%%/templates/dcim/rack_elevation_list.html
 %%DATADIR%%/templates/dcim/rack_list.html
 %%DATADIR%%/templates/dcim/rackreservation.html
@@ -1075,11 +1086,15 @@
 %%DATADIR%%/templates/dcim/virtualchassis_edit.html
 %%DATADIR%%/templates/dcim/virtualchassis_remove_member.html
 %%DATADIR%%/templates/dcim/virtualdevicecontext.html
+%%DATADIR%%/templates/django/forms/widgets/attrs.html
 %%DATADIR%%/templates/django/forms/widgets/checkbox.html
+%%DATADIR%%/templates/django/forms/widgets/clearable_file_input.html
+%%DATADIR%%/templates/django/forms/widgets/input.html
+%%DATADIR%%/templates/django/forms/widgets/select.html
+%%DATADIR%%/templates/django/forms/widgets/textarea.html
 %%DATADIR%%/templates/exceptions/import_error.html
 %%DATADIR%%/templates/exceptions/permission_error.html
 %%DATADIR%%/templates/exceptions/programming_error.html
-%%DATADIR%%/templates/extras/admin/plugins_list.html
 %%DATADIR%%/templates/extras/configcontext.html
 %%DATADIR%%/templates/extras/configcontext_list.html
 %%DATADIR%%/templates/extras/configtemplate.html
@@ -1098,12 +1113,10 @@
 %%DATADIR%%/templates/extras/eventrule.html
 %%DATADIR%%/templates/extras/exporttemplate.html
 %%DATADIR%%/templates/extras/exporttemplate_list.html
-%%DATADIR%%/templates/extras/htmx/report_result.html
 %%DATADIR%%/templates/extras/htmx/script_result.html
 %%DATADIR%%/templates/extras/imageattachment.html
-%%DATADIR%%/templates/extras/imageattachment_edit.html
 %%DATADIR%%/templates/extras/inc/configcontext_data.html
-%%DATADIR%%/templates/extras/inc/configcontext_format.html
+%%DATADIR%%/templates/extras/inc/format_toggle.html
 %%DATADIR%%/templates/extras/inc/result_pending.html
 %%DATADIR%%/templates/extras/journalentry.html
 %%DATADIR%%/templates/extras/object_changelog.html
@@ -1111,12 +1124,9 @@
 %%DATADIR%%/templates/extras/object_journal.html
 %%DATADIR%%/templates/extras/objectchange.html
 %%DATADIR%%/templates/extras/objectchange_list.html
-%%DATADIR%%/templates/extras/report.html
 %%DATADIR%%/templates/extras/report/base.html
 %%DATADIR%%/templates/extras/report/jobs.html
 %%DATADIR%%/templates/extras/report/source.html
-%%DATADIR%%/templates/extras/report_list.html
-%%DATADIR%%/templates/extras/report_result.html
 %%DATADIR%%/templates/extras/savedfilter.html
 %%DATADIR%%/templates/extras/schema/devicetype_schema.jinja2
 %%DATADIR%%/templates/extras/script.html
@@ -1128,6 +1138,7 @@
 %%DATADIR%%/templates/extras/tag.html
 %%DATADIR%%/templates/extras/templatetags/log_level.html
 %%DATADIR%%/templates/extras/webhook.html
+%%DATADIR%%/templates/generic/_base.html
 %%DATADIR%%/templates/generic/bulk_add_component.html
 %%DATADIR%%/templates/generic/bulk_delete.html
 %%DATADIR%%/templates/generic/bulk_edit.html
@@ -1147,24 +1158,29 @@
 %%DATADIR%%/templates/htmx/object_selector.html
 %%DATADIR%%/templates/htmx/object_selector_results.html
 %%DATADIR%%/templates/htmx/table.html
+%%DATADIR%%/templates/inc/alerts/danger.html
+%%DATADIR%%/templates/inc/alerts/info.html
+%%DATADIR%%/templates/inc/alerts/success.html
+%%DATADIR%%/templates/inc/alerts/warning.html
+%%DATADIR%%/templates/inc/banner.html
 %%DATADIR%%/templates/inc/filter_list.html
 %%DATADIR%%/templates/inc/htmx_modal.html
+%%DATADIR%%/templates/inc/light_toggle.html
 %%DATADIR%%/templates/inc/messages.html
 %%DATADIR%%/templates/inc/missing_prerequisites.html
 %%DATADIR%%/templates/inc/paginator.html
-%%DATADIR%%/templates/inc/paginator_htmx.html
 %%DATADIR%%/templates/inc/panel_table.html
 %%DATADIR%%/templates/inc/panels/comments.html
 %%DATADIR%%/templates/inc/panels/custom_fields.html
 %%DATADIR%%/templates/inc/panels/image_attachments.html
 %%DATADIR%%/templates/inc/panels/related_objects.html
 %%DATADIR%%/templates/inc/panels/tags.html
-%%DATADIR%%/templates/inc/profile_button.html
-%%DATADIR%%/templates/inc/searchbar.html
 %%DATADIR%%/templates/inc/sync_warning.html
 %%DATADIR%%/templates/inc/table.html
 %%DATADIR%%/templates/inc/table_controls_htmx.html
 %%DATADIR%%/templates/inc/table_htmx.html
+%%DATADIR%%/templates/inc/toast.html
+%%DATADIR%%/templates/inc/user_menu.html
 %%DATADIR%%/templates/ipam/aggregate.html
 %%DATADIR%%/templates/ipam/aggregate/base.html
 %%DATADIR%%/templates/ipam/aggregate/prefixes.html
@@ -1172,7 +1188,6 @@
 %%DATADIR%%/templates/ipam/asnrange.html
 %%DATADIR%%/templates/ipam/asnrange/base.html
*** 295 LINES SKIPPED ***