diff --git a/.github/update.log b/.github/update.log
index a669d580c4..5b86ece6f2 100644
--- a/.github/update.log
+++ b/.github/update.log
@@ -1180,3 +1180,4 @@ Update On Sun Nov 9 19:36:09 CET 2025
Update On Mon Nov 10 19:41:15 CET 2025
Update On Tue Nov 11 19:39:14 CET 2025
Update On Wed Nov 12 19:37:25 CET 2025
+Update On Thu Nov 13 19:41:20 CET 2025
diff --git a/clash-meta/common/xsync/map.go b/clash-meta/common/xsync/map.go
index b85bf421b1..fd8faa8b1f 100644
--- a/clash-meta/common/xsync/map.go
+++ b/clash-meta/common/xsync/map.go
@@ -1,16 +1,17 @@
package xsync
-// copy and modified from https://github.com/puzpuzpuz/xsync/blob/v4.1.0/map.go
+// copy and modified from https://github.com/puzpuzpuz/xsync/blob/v4.2.0/map.go
// which is licensed under Apache v2.
//
// mihomo modified:
-// 1. parallel Map resize has been removed to decrease the memory using.
+// 1. restore xsync/v3's LoadOrCompute api and rename to LoadOrStoreFn.
// 2. the zero Map is ready for use.
import (
"fmt"
"math"
"math/bits"
+ "runtime"
"strings"
"sync"
"sync/atomic"
@@ -41,8 +42,28 @@ const (
metaMask uint64 = 0xffffffffff
defaultMetaMasked uint64 = defaultMeta & metaMask
emptyMetaSlot uint8 = 0x80
+ // minimal number of buckets to transfer when participating in cooperative
+ // resize; should be at least defaultMinMapTableLen
+ minResizeTransferStride = 64
+ // upper limit for max number of additional goroutines that participate
+ // in cooperative resize; must be changed simultaneously with resizeCtl
+ // and the related code
+ maxResizeHelpersLimit = (1 << 5) - 1
)
+// max number of additional goroutines that participate in cooperative resize;
+// "resize owner" goroutine isn't counted
+var maxResizeHelpers = func() int32 {
+ v := int32(parallelism() - 1)
+ if v < 1 {
+ v = 1
+ }
+ if v > maxResizeHelpersLimit {
+ v = maxResizeHelpersLimit
+ }
+ return v
+}()
+
type mapResizeHint int
const (
@@ -100,16 +121,25 @@ type Map[K comparable, V any] struct {
initOnce sync.Once
totalGrowths atomic.Int64
totalShrinks atomic.Int64
- resizing atomic.Bool // resize in progress flag
- resizeMu sync.Mutex // only used along with resizeCond
- resizeCond sync.Cond // used to wake up resize waiters (concurrent modifications)
table atomic.Pointer[mapTable[K, V]]
- minTableLen int
- growOnly bool
+ // table being transferred to
+ nextTable atomic.Pointer[mapTable[K, V]]
+ // resize control state: combines resize sequence number (upper 59 bits) and
+ // the current number of resize helpers (lower 5 bits);
+ // odd values of resize sequence mean in-progress resize
+ resizeCtl atomic.Uint64
+ // only used along with resizeCond
+ resizeMu sync.Mutex
+ // used to wake up resize waiters (concurrent writes)
+ resizeCond sync.Cond
+ // transfer progress index for resize
+ resizeIdx atomic.Int64
+ minTableLen int
+ growOnly bool
}
type mapTable[K comparable, V any] struct {
- buckets []bucketPadded[K, V]
+ buckets []bucketPadded
// striped counter for number of table entries;
// used to determine if a table shrinking is needed
// occupies min(buckets_memory/1024, 64KB) of memory
@@ -125,16 +155,16 @@ type counterStripe struct {
// bucketPadded is a CL-sized map bucket holding up to
// entriesPerMapBucket entries.
-type bucketPadded[K comparable, V any] struct {
+type bucketPadded struct {
//lint:ignore U1000 ensure each bucket takes two cache lines on both 32 and 64-bit archs
- pad [cacheLineSize - unsafe.Sizeof(bucket[K, V]{})]byte
- bucket[K, V]
+ pad [cacheLineSize - unsafe.Sizeof(bucket{})]byte
+ bucket
}
-type bucket[K comparable, V any] struct {
- meta atomic.Uint64
- entries [entriesPerMapBucket]atomic.Pointer[entry[K, V]] // *entry
- next atomic.Pointer[bucketPadded[K, V]] // *bucketPadded
+type bucket struct {
+ meta uint64
+ entries [entriesPerMapBucket]unsafe.Pointer // *entry
+ next unsafe.Pointer // *bucketPadded
mu sync.Mutex
}
@@ -194,15 +224,15 @@ func (m *Map[K, V]) init() {
m.minTableLen = defaultMinMapTableLen
}
m.resizeCond = *sync.NewCond(&m.resizeMu)
- table := newMapTable[K, V](m.minTableLen)
+ table := newMapTable[K, V](m.minTableLen, maphash.MakeSeed())
m.minTableLen = len(table.buckets)
m.table.Store(table)
}
-func newMapTable[K comparable, V any](minTableLen int) *mapTable[K, V] {
- buckets := make([]bucketPadded[K, V], minTableLen)
+func newMapTable[K comparable, V any](minTableLen int, seed maphash.Seed) *mapTable[K, V] {
+ buckets := make([]bucketPadded, minTableLen)
for i := range buckets {
- buckets[i].meta.Store(defaultMeta)
+ buckets[i].meta = defaultMeta
}
counterLen := minTableLen >> 10
if counterLen < minMapCounterLen {
@@ -214,7 +244,7 @@ func newMapTable[K comparable, V any](minTableLen int) *mapTable[K, V] {
t := &mapTable[K, V]{
buckets: buckets,
size: counter,
- seed: maphash.MakeSeed(),
+ seed: seed,
}
return t
}
@@ -246,22 +276,24 @@ func (m *Map[K, V]) Load(key K) (value V, ok bool) {
bidx := uint64(len(table.buckets)-1) & h1
b := &table.buckets[bidx]
for {
- metaw := b.meta.Load()
+ metaw := atomic.LoadUint64(&b.meta)
markedw := markZeroBytes(metaw^h2w) & metaMask
for markedw != 0 {
idx := firstMarkedByteIndex(markedw)
- e := b.entries[idx].Load()
- if e != nil {
+ eptr := atomic.LoadPointer(&b.entries[idx])
+ if eptr != nil {
+ e := (*entry[K, V])(eptr)
if e.key == key {
return e.value, true
}
}
markedw &= markedw - 1
}
- b = b.next.Load()
- if b == nil {
+ bptr := atomic.LoadPointer(&b.next)
+ if bptr == nil {
return
}
+ b = (*bucketPadded)(bptr)
}
}
@@ -399,7 +431,7 @@ func (m *Map[K, V]) doCompute(
for {
compute_attempt:
var (
- emptyb *bucketPadded[K, V]
+ emptyb *bucketPadded
emptyidx int
)
table := m.table.Load()
@@ -415,12 +447,13 @@ func (m *Map[K, V]) doCompute(
b := rootb
load:
for {
- metaw := b.meta.Load()
+ metaw := atomic.LoadUint64(&b.meta)
markedw := markZeroBytes(metaw^h2w) & metaMask
for markedw != 0 {
idx := firstMarkedByteIndex(markedw)
- e := b.entries[idx].Load()
- if e != nil {
+ eptr := atomic.LoadPointer(&b.entries[idx])
+ if eptr != nil {
+ e := (*entry[K, V])(eptr)
if e.key == key {
if loadOp == loadOrComputeOp {
return e.value, true
@@ -430,23 +463,24 @@ func (m *Map[K, V]) doCompute(
}
markedw &= markedw - 1
}
- b = b.next.Load()
- if b == nil {
+ bptr := atomic.LoadPointer(&b.next)
+ if bptr == nil {
if loadOp == loadAndDeleteOp {
return *new(V), false
}
break load
}
+ b = (*bucketPadded)(bptr)
}
}
rootb.mu.Lock()
// The following two checks must go in reverse to what's
// in the resize method.
- if m.resizeInProgress() {
- // Resize is in progress. Wait, then go for another attempt.
+ if seq := resizeSeq(m.resizeCtl.Load()); seq&1 == 1 {
+ // Resize is in progress. Help with the transfer, then go for another attempt.
rootb.mu.Unlock()
- m.waitForResize()
+ m.helpResize(seq)
goto compute_attempt
}
if m.newerTableExists(table) {
@@ -456,12 +490,13 @@ func (m *Map[K, V]) doCompute(
}
b := rootb
for {
- metaw := b.meta.Load()
+ metaw := b.meta
markedw := markZeroBytes(metaw^h2w) & metaMask
for markedw != 0 {
idx := firstMarkedByteIndex(markedw)
- e := b.entries[idx].Load()
- if e != nil {
+ eptr := b.entries[idx]
+ if eptr != nil {
+ e := (*entry[K, V])(eptr)
if e.key == key {
// In-place update/delete.
// We get a copy of the value via an interface{} on each call,
@@ -475,8 +510,8 @@ func (m *Map[K, V]) doCompute(
// Deletion.
// First we update the hash, then the entry.
newmetaw := setByte(metaw, emptyMetaSlot, idx)
- b.meta.Store(newmetaw)
- b.entries[idx].Store(nil)
+ atomic.StoreUint64(&b.meta, newmetaw)
+ atomic.StorePointer(&b.entries[idx], nil)
rootb.mu.Unlock()
table.addSize(bidx, -1)
// Might need to shrink the table if we left bucket empty.
@@ -488,7 +523,7 @@ func (m *Map[K, V]) doCompute(
newe := new(entry[K, V])
newe.key = key
newe.value = newv
- b.entries[idx].Store(newe)
+ atomic.StorePointer(&b.entries[idx], unsafe.Pointer(newe))
case CancelOp:
newv = oldv
}
@@ -512,7 +547,7 @@ func (m *Map[K, V]) doCompute(
emptyidx = idx
}
}
- if b.next.Load() == nil {
+ if b.next == nil {
if emptyb != nil {
// Insertion into an existing bucket.
var zeroV V
@@ -526,8 +561,8 @@ func (m *Map[K, V]) doCompute(
newe.key = key
newe.value = newValue
// First we update meta, then the entry.
- emptyb.meta.Store(setByte(emptyb.meta.Load(), h2, emptyidx))
- emptyb.entries[emptyidx].Store(newe)
+ atomic.StoreUint64(&emptyb.meta, setByte(emptyb.meta, h2, emptyidx))
+ atomic.StorePointer(&emptyb.entries[emptyidx], unsafe.Pointer(newe))
rootb.mu.Unlock()
table.addSize(bidx, 1)
return newValue, computeOnly
@@ -549,19 +584,19 @@ func (m *Map[K, V]) doCompute(
return newValue, false
default:
// Create and append a bucket.
- newb := new(bucketPadded[K, V])
- newb.meta.Store(setByte(defaultMeta, h2, 0))
+ newb := new(bucketPadded)
+ newb.meta = setByte(defaultMeta, h2, 0)
newe := new(entry[K, V])
newe.key = key
newe.value = newValue
- newb.entries[0].Store(newe)
- b.next.Store(newb)
+ newb.entries[0] = unsafe.Pointer(newe)
+ atomic.StorePointer(&b.next, unsafe.Pointer(newb))
rootb.mu.Unlock()
table.addSize(bidx, 1)
return newValue, computeOnly
}
}
- b = b.next.Load()
+ b = (*bucketPadded)(b.next)
}
}
}
@@ -570,13 +605,21 @@ func (m *Map[K, V]) newerTableExists(table *mapTable[K, V]) bool {
return table != m.table.Load()
}
-func (m *Map[K, V]) resizeInProgress() bool {
- return m.resizing.Load()
+func resizeSeq(ctl uint64) uint64 {
+ return ctl >> 5
+}
+
+func resizeHelpers(ctl uint64) uint64 {
+ return ctl & maxResizeHelpersLimit
+}
+
+func resizeCtl(seq uint64, helpers uint64) uint64 {
+ return (seq << 5) | (helpers & maxResizeHelpersLimit)
}
func (m *Map[K, V]) waitForResize() {
m.resizeMu.Lock()
- for m.resizeInProgress() {
+ for resizeSeq(m.resizeCtl.Load())&1 == 1 {
m.resizeCond.Wait()
}
m.resizeMu.Unlock()
@@ -593,9 +636,9 @@ func (m *Map[K, V]) resize(knownTable *mapTable[K, V], hint mapResizeHint) {
}
}
// Slow path.
- if !m.resizing.CompareAndSwap(false, true) {
- // Someone else started resize. Wait for it to finish.
- m.waitForResize()
+ seq := resizeSeq(m.resizeCtl.Load())
+ if seq&1 == 1 || !m.resizeCtl.CompareAndSwap(resizeCtl(seq, 0), resizeCtl(seq+1, 0)) {
+ m.helpResize(seq)
return
}
var newTable *mapTable[K, V]
@@ -604,64 +647,189 @@ func (m *Map[K, V]) resize(knownTable *mapTable[K, V], hint mapResizeHint) {
switch hint {
case mapGrowHint:
// Grow the table with factor of 2.
+ // We must keep the same table seed here to keep the same hash codes
+ // allowing us to avoid locking destination buckets when resizing.
m.totalGrowths.Add(1)
- newTable = newMapTable[K, V](tableLen << 1)
+ newTable = newMapTable[K, V](tableLen<<1, table.seed)
case mapShrinkHint:
shrinkThreshold := int64((tableLen * entriesPerMapBucket) / mapShrinkFraction)
if tableLen > m.minTableLen && table.sumSize() <= shrinkThreshold {
// Shrink the table with factor of 2.
+ // It's fine to generate a new seed since full locking
+ // is required anyway.
m.totalShrinks.Add(1)
- newTable = newMapTable[K, V](tableLen >> 1)
+ newTable = newMapTable[K, V](tableLen>>1, maphash.MakeSeed())
} else {
// No need to shrink. Wake up all waiters and give up.
m.resizeMu.Lock()
- m.resizing.Store(false)
+ m.resizeCtl.Store(resizeCtl(seq+2, 0))
m.resizeCond.Broadcast()
m.resizeMu.Unlock()
return
}
case mapClearHint:
- newTable = newMapTable[K, V](m.minTableLen)
+ newTable = newMapTable[K, V](m.minTableLen, maphash.MakeSeed())
default:
panic(fmt.Sprintf("unexpected resize hint: %d", hint))
}
+
// Copy the data only if we're not clearing the map.
if hint != mapClearHint {
- for i := 0; i < tableLen; i++ {
- copied := copyBucket(&table.buckets[i], newTable)
- newTable.addSizePlain(uint64(i), copied)
- }
+ // Set up cooperative transfer state.
+ // Next table must be published as the last step.
+ m.resizeIdx.Store(0)
+ m.nextTable.Store(newTable)
+ // Copy the buckets.
+ m.transfer(table, newTable)
+ }
+
+ // We're about to publish the new table, but before that
+ // we must wait for all helpers to finish.
+ for resizeHelpers(m.resizeCtl.Load()) != 0 {
+ runtime.Gosched()
}
- // Publish the new table and wake up all waiters.
m.table.Store(newTable)
+ m.nextTable.Store(nil)
+ ctl := resizeCtl(seq+1, 0)
+ newCtl := resizeCtl(seq+2, 0)
+ // Increment the sequence number and wake up all waiters.
m.resizeMu.Lock()
- m.resizing.Store(false)
+ // There may be slowpoke helpers who have just incremented
+ // the helper counter. This CAS loop makes sure to wait
+ // for them to back off.
+ for !m.resizeCtl.CompareAndSwap(ctl, newCtl) {
+ runtime.Gosched()
+ }
m.resizeCond.Broadcast()
m.resizeMu.Unlock()
}
-func copyBucket[K comparable, V any](
- b *bucketPadded[K, V],
+func (m *Map[K, V]) helpResize(seq uint64) {
+ for {
+ table := m.table.Load()
+ nextTable := m.nextTable.Load()
+ if resizeSeq(m.resizeCtl.Load()) == seq {
+ if nextTable == nil || nextTable == table {
+ // Carry on until the next table is set by the main
+ // resize goroutine or until the resize finishes.
+ runtime.Gosched()
+ continue
+ }
+ // The resize is still in-progress, so let's try registering
+ // as a helper.
+ for {
+ ctl := m.resizeCtl.Load()
+ if resizeSeq(ctl) != seq || resizeHelpers(ctl) >= uint64(maxResizeHelpers) {
+ // The resize has ended or there are too many helpers.
+ break
+ }
+ if m.resizeCtl.CompareAndSwap(ctl, ctl+1) {
+ // Yay, we're a resize helper!
+ m.transfer(table, nextTable)
+ // Don't forget to unregister as a helper.
+ m.resizeCtl.Add(^uint64(0))
+ break
+ }
+ }
+ m.waitForResize()
+ }
+ break
+ }
+}
+
+func (m *Map[K, V]) transfer(table, newTable *mapTable[K, V]) {
+ tableLen := len(table.buckets)
+ newTableLen := len(newTable.buckets)
+ stride := (tableLen >> 3) / int(maxResizeHelpers)
+ if stride < minResizeTransferStride {
+ stride = minResizeTransferStride
+ }
+ for {
+ // Claim work by incrementing resizeIdx.
+ nextIdx := m.resizeIdx.Add(int64(stride))
+ start := int(nextIdx) - stride
+ if start < 0 {
+ start = 0
+ }
+ if start > tableLen {
+ break
+ }
+ end := int(nextIdx)
+ if end > tableLen {
+ end = tableLen
+ }
+ // Transfer buckets in this range.
+ total := 0
+ if newTableLen > tableLen {
+ // We're growing the table with 2x multiplier, so entries from a N bucket can
+ // only be transferred to N and 2*N buckets in the new table. Thus, destination
+ // buckets written by the resize helpers don't intersect, so we don't need to
+ // acquire locks in the destination buckets.
+ for i := start; i < end; i++ {
+ total += transferBucketUnsafe(&table.buckets[i], newTable)
+ }
+ } else {
+ // We're shrinking the table, so all locks must be acquired.
+ for i := start; i < end; i++ {
+ total += transferBucket(&table.buckets[i], newTable)
+ }
+ }
+ // The exact counter stripe doesn't matter here, so pick up the one
+ // that corresponds to the start value to avoid contention.
+ newTable.addSize(uint64(start), total)
+ }
+}
+
+// Doesn't acquire dest bucket lock.
+func transferBucketUnsafe[K comparable, V any](
+ b *bucketPadded,
destTable *mapTable[K, V],
) (copied int) {
rootb := b
rootb.mu.Lock()
for {
for i := 0; i < entriesPerMapBucket; i++ {
- if e := b.entries[i].Load(); e != nil {
+ if eptr := b.entries[i]; eptr != nil {
+ e := (*entry[K, V])(eptr)
hash := maphash.Comparable(destTable.seed, e.key)
bidx := uint64(len(destTable.buckets)-1) & h1(hash)
destb := &destTable.buckets[bidx]
- appendToBucket(h2(hash), b.entries[i].Load(), destb)
+ appendToBucket(h2(hash), e, destb)
copied++
}
}
- if next := b.next.Load(); next == nil {
+ if b.next == nil {
rootb.mu.Unlock()
return
- } else {
- b = next
}
+ b = (*bucketPadded)(b.next)
+ }
+}
+
+func transferBucket[K comparable, V any](
+ b *bucketPadded,
+ destTable *mapTable[K, V],
+) (copied int) {
+ rootb := b
+ rootb.mu.Lock()
+ for {
+ for i := 0; i < entriesPerMapBucket; i++ {
+ if eptr := b.entries[i]; eptr != nil {
+ e := (*entry[K, V])(eptr)
+ hash := maphash.Comparable(destTable.seed, e.key)
+ bidx := uint64(len(destTable.buckets)-1) & h1(hash)
+ destb := &destTable.buckets[bidx]
+ destb.mu.Lock()
+ appendToBucket(h2(hash), e, destb)
+ destb.mu.Unlock()
+ copied++
+ }
+ }
+ if b.next == nil {
+ rootb.mu.Unlock()
+ return
+ }
+ b = (*bucketPadded)(b.next)
}
}
@@ -691,16 +859,15 @@ func (m *Map[K, V]) Range(f func(key K, value V) bool) {
rootb.mu.Lock()
for {
for i := 0; i < entriesPerMapBucket; i++ {
- if entry := b.entries[i].Load(); entry != nil {
- bentries = append(bentries, entry)
+ if b.entries[i] != nil {
+ bentries = append(bentries, (*entry[K, V])(b.entries[i]))
}
}
- if next := b.next.Load(); next == nil {
+ if b.next == nil {
rootb.mu.Unlock()
break
- } else {
- b = next
}
+ b = (*bucketPadded)(b.next)
}
// Call the function for all copied entries.
for j, e := range bentries {
@@ -727,24 +894,25 @@ func (m *Map[K, V]) Size() int {
return int(m.table.Load().sumSize())
}
-func appendToBucket[K comparable, V any](h2 uint8, e *entry[K, V], b *bucketPadded[K, V]) {
+// It is safe to use plain stores here because the destination bucket must be
+// either locked or exclusively written to by the helper during resize.
+func appendToBucket[K comparable, V any](h2 uint8, e *entry[K, V], b *bucketPadded) {
for {
for i := 0; i < entriesPerMapBucket; i++ {
- if b.entries[i].Load() == nil {
- b.meta.Store(setByte(b.meta.Load(), h2, i))
- b.entries[i].Store(e)
+ if b.entries[i] == nil {
+ b.meta = setByte(b.meta, h2, i)
+ b.entries[i] = unsafe.Pointer(e)
return
}
}
- if next := b.next.Load(); next == nil {
- newb := new(bucketPadded[K, V])
- newb.meta.Store(setByte(defaultMeta, h2, 0))
- newb.entries[0].Store(e)
- b.next.Store(newb)
+ if b.next == nil {
+ newb := new(bucketPadded)
+ newb.meta = setByte(defaultMeta, h2, 0)
+ newb.entries[0] = unsafe.Pointer(e)
+ b.next = unsafe.Pointer(newb)
return
- } else {
- b = next
}
+ b = (*bucketPadded)(b.next)
}
}
@@ -753,11 +921,6 @@ func (table *mapTable[K, V]) addSize(bucketIdx uint64, delta int) {
atomic.AddInt64(&table.size[cidx].c, int64(delta))
}
-func (table *mapTable[K, V]) addSizePlain(bucketIdx uint64, delta int) {
- cidx := uint64(len(table.size)-1) & bucketIdx
- table.size[cidx].c += int64(delta)
-}
-
func (table *mapTable[K, V]) sumSize() int64 {
sum := int64(0)
for i := range table.size {
@@ -856,7 +1019,7 @@ func (m *Map[K, V]) Stats() MapStats {
nentriesLocal := 0
stats.Capacity += entriesPerMapBucket
for i := 0; i < entriesPerMapBucket; i++ {
- if b.entries[i].Load() != nil {
+ if atomic.LoadPointer(&b.entries[i]) != nil {
stats.Size++
nentriesLocal++
}
@@ -865,11 +1028,10 @@ func (m *Map[K, V]) Stats() MapStats {
if nentriesLocal == 0 {
stats.EmptyBuckets++
}
- if next := b.next.Load(); next == nil {
+ if b.next == nil {
break
- } else {
- b = next
}
+ b = (*bucketPadded)(atomic.LoadPointer(&b.next))
stats.TotalBuckets++
}
if nentries < stats.MinEntries {
@@ -906,6 +1068,15 @@ func nextPowOf2(v uint32) uint32 {
return v
}
+func parallelism() uint32 {
+ maxProcs := uint32(runtime.GOMAXPROCS(0))
+ numCores := uint32(runtime.NumCPU())
+ if maxProcs < numCores {
+ return maxProcs
+ }
+ return numCores
+}
+
func broadcast(b uint8) uint64 {
return 0x101010101010101 * uint64(b)
}
@@ -920,6 +1091,7 @@ func markZeroBytes(w uint64) uint64 {
return ((w - 0x0101010101010101) & (^w) & 0x8080808080808080)
}
+// Sets byte of the input word at the specified index to the given value.
func setByte(w uint64, b uint8, idx int) uint64 {
shift := idx << 3
return (w &^ (0xff << shift)) | (uint64(b) << shift)
diff --git a/clash-meta/common/xsync/map_test.go b/clash-meta/common/xsync/map_test.go
index b40d412bbb..72ebfaea9d 100644
--- a/clash-meta/common/xsync/map_test.go
+++ b/clash-meta/common/xsync/map_test.go
@@ -3,6 +3,7 @@ package xsync
import (
"math"
"math/rand"
+ "runtime"
"strconv"
"sync"
"sync/atomic"
@@ -53,11 +54,11 @@ func runParallel(b *testing.B, benchFn func(pb *testing.PB)) {
}
func TestMap_BucketStructSize(t *testing.T) {
- size := unsafe.Sizeof(bucketPadded[string, int64]{})
+ size := unsafe.Sizeof(bucketPadded{})
if size != 64 {
t.Fatalf("size of 64B (one cache line) is expected, got: %d", size)
}
- size = unsafe.Sizeof(bucketPadded[struct{}, int32]{})
+ size = unsafe.Sizeof(bucketPadded{})
if size != 64 {
t.Fatalf("size of 64B (one cache line) is expected, got: %d", size)
}
@@ -743,10 +744,7 @@ func TestNewMapGrowOnly_OnlyShrinksOnClear(t *testing.T) {
}
func TestMapResize(t *testing.T) {
- testMapResize(t, NewMap[string, int]())
-}
-
-func testMapResize(t *testing.T, m *Map[string, int]) {
+ m := NewMap[string, int]()
const numEntries = 100_000
for i := 0; i < numEntries; i++ {
@@ -810,6 +808,147 @@ func TestMapResize_CounterLenLimit(t *testing.T) {
}
}
+func testParallelResize(t *testing.T, numGoroutines int) {
+ m := NewMap[int, int]()
+
+ // Fill the map to trigger resizing
+ const initialEntries = 10000
+ const newEntries = 5000
+ for i := 0; i < initialEntries; i++ {
+ m.Store(i, i*2)
+ }
+
+ // Start concurrent operations that should trigger helping behavior
+ var wg sync.WaitGroup
+
+ // Launch goroutines that will encounter resize operations
+ for g := 0; g < numGoroutines; g++ {
+ wg.Add(1)
+ go func(goroutineID int) {
+ defer wg.Done()
+
+ // Perform many operations to trigger resize and helping
+ for i := 0; i < newEntries; i++ {
+ key := goroutineID*newEntries + i + initialEntries
+ m.Store(key, key*2)
+
+ // Verify the value
+ if val, ok := m.Load(key); !ok || val != key*2 {
+ t.Errorf("Failed to load key %d: got %v, %v", key, val, ok)
+ return
+ }
+ }
+ }(g)
+ }
+
+ wg.Wait()
+
+ // Verify all entries are present
+ finalSize := m.Size()
+ expectedSize := initialEntries + numGoroutines*newEntries
+ if finalSize != expectedSize {
+ t.Errorf("Expected size %d, got %d", expectedSize, finalSize)
+ }
+
+ stats := m.Stats()
+ if stats.TotalGrowths == 0 {
+ t.Error("Expected at least one table growth due to concurrent operations")
+ }
+}
+
+func TestMapParallelResize(t *testing.T) {
+ testParallelResize(t, 1)
+ testParallelResize(t, runtime.GOMAXPROCS(0))
+ testParallelResize(t, 100)
+}
+
+func testParallelResizeWithSameKeys(t *testing.T, numGoroutines int) {
+ m := NewMap[int, int]()
+
+ // Fill the map to trigger resizing
+ const entries = 1000
+ for i := 0; i < entries; i++ {
+ m.Store(2*i, 2*i)
+ }
+
+ // Start concurrent operations that should trigger helping behavior
+ var wg sync.WaitGroup
+
+ // Launch goroutines that will encounter resize operations
+ for g := 0; g < numGoroutines; g++ {
+ wg.Add(1)
+ go func(goroutineID int) {
+ defer wg.Done()
+ for i := 0; i < 10*entries; i++ {
+ m.Store(i, i)
+ }
+ }(g)
+ }
+
+ wg.Wait()
+
+ // Verify all entries are present
+ finalSize := m.Size()
+ expectedSize := 10 * entries
+ if finalSize != expectedSize {
+ t.Errorf("Expected size %d, got %d", expectedSize, finalSize)
+ }
+
+ stats := m.Stats()
+ if stats.TotalGrowths == 0 {
+ t.Error("Expected at least one table growth due to concurrent operations")
+ }
+}
+
+func TestMapParallelResize_IntersectingKeys(t *testing.T) {
+ testParallelResizeWithSameKeys(t, 1)
+ testParallelResizeWithSameKeys(t, runtime.GOMAXPROCS(0))
+ testParallelResizeWithSameKeys(t, 100)
+}
+
+func testParallelShrinking(t *testing.T, numGoroutines int) {
+ m := NewMap[int, int]()
+
+ // Fill the map to trigger resizing
+ const entries = 100000
+ for i := 0; i < entries; i++ {
+ m.Store(i, i)
+ }
+
+ // Start concurrent operations that should trigger helping behavior
+ var wg sync.WaitGroup
+
+ // Launch goroutines that will encounter resize operations
+ for g := 0; g < numGoroutines; g++ {
+ wg.Add(1)
+ go func(goroutineID int) {
+ defer wg.Done()
+ for i := 0; i < entries; i++ {
+ m.Delete(i)
+ }
+ }(g)
+ }
+
+ wg.Wait()
+
+ // Verify all entries are present
+ finalSize := m.Size()
+ if finalSize != 0 {
+ t.Errorf("Expected size 0, got %d", finalSize)
+ }
+
+ stats := m.Stats()
+ if stats.TotalShrinks == 0 {
+ t.Error("Expected at least one table shrinking due to concurrent operations")
+ }
+}
+
+func TestMapParallelShrinking(t *testing.T) {
+ testParallelShrinking(t, 1)
+ testParallelShrinking(t, runtime.GOMAXPROCS(0))
+ testParallelShrinking(t, 100)
+}
+
func parallelSeqMapGrower(m *Map[int, int], numEntries int, positive bool, cdone chan bool) {
for i := 0; i < numEntries; i++ {
if positive {
@@ -1459,7 +1598,7 @@ func BenchmarkMapRange(b *testing.B) {
}
// Benchmarks noop performance of Compute
-func BenchmarkCompute(b *testing.B) {
+func BenchmarkMapCompute(b *testing.B) {
tests := []struct {
Name string
Op ComputeOp
@@ -1487,6 +1626,57 @@ func BenchmarkCompute(b *testing.B) {
}
}
+func BenchmarkMapParallelRehashing(b *testing.B) {
+ tests := []struct {
+ name string
+ goroutines int
+ numEntries int
+ }{
+ {"1goroutine_10M", 1, 10_000_000},
+ {"4goroutines_10M", 4, 10_000_000},
+ {"8goroutines_10M", 8, 10_000_000},
+ }
+ for _, test := range tests {
+ b.Run(test.name, func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ m := NewMap[int, int]()
+
+ var wg sync.WaitGroup
+ entriesPerGoroutine := test.numEntries / test.goroutines
+
+ start := time.Now()
+
+ for g := 0; g < test.goroutines; g++ {
+ wg.Add(1)
+ go func(goroutineID int) {
+ defer wg.Done()
+ base := goroutineID * entriesPerGoroutine
+ for j := 0; j < entriesPerGoroutine; j++ {
+ key := base + j
+ m.Store(key, key)
+ }
+ }(g)
+ }
+
+ wg.Wait()
+ duration := time.Since(start)
+
+ b.ReportMetric(float64(test.numEntries)/duration.Seconds(), "entries/s")
+
+ finalSize := m.Size()
+ if finalSize != test.numEntries {
+ b.Fatalf("Expected size %d, got %d", test.numEntries, finalSize)
+ }
+
+ stats := m.Stats()
+ if stats.TotalGrowths == 0 {
+ b.Error("Expected at least one table growth during rehashing")
+ }
+ }
+ })
+ }
+}
+
func TestNextPowOf2(t *testing.T) {
if nextPowOf2(0) != 1 {
t.Error("nextPowOf2 failed")
diff --git a/filebrowser/.github/workflows/main.yaml b/filebrowser/.github/workflows/ci.yaml
similarity index 62%
rename from filebrowser/.github/workflows/main.yaml
rename to filebrowser/.github/workflows/ci.yaml
index b14c0b4969..0f222ecdaf 100644
--- a/filebrowser/.github/workflows/main.yaml
+++ b/filebrowser/.github/workflows/ci.yaml
@@ -1,4 +1,4 @@
-name: main
+name: Continuous Integration
on:
push:
@@ -9,8 +9,8 @@ on:
pull_request:
jobs:
- # linters
lint-frontend:
+ name: Lint Frontend
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
@@ -19,57 +19,39 @@ jobs:
package_json_file: "frontend/package.json"
- uses: actions/setup-node@v6
with:
- node-version: "22.x"
+ node-version: "24.x"
cache: "pnpm"
cache-dependency-path: "frontend/pnpm-lock.yaml"
- - run: make lint-frontend
+ - working-directory: frontend
+ run: |
+ pnpm install --frozen-lockfile
+ pnpm run lint
+
lint-backend:
+ name: Lint Backend
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-go@v6
with:
- go-version: '1.25'
- - run: make lint-backend
- lint:
- runs-on: ubuntu-latest
- needs: [lint-frontend, lint-backend]
- steps:
- - run: echo "done"
+ go-version: "1.25.x"
+ - uses: golangci/golangci-lint-action@v9
+ with:
+ version: "latest"
- # tests
- test-frontend:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v5
- - uses: pnpm/action-setup@v4
- with:
- package_json_file: "frontend/package.json"
- - uses: actions/setup-node@v6
- with:
- node-version: "22.x"
- cache: "pnpm"
- cache-dependency-path: "frontend/pnpm-lock.yaml"
- - run: make test-frontend
- test-backend:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v5
- - uses: actions/setup-go@v6
- with:
- go-version: '1.25'
- - run: make test-backend
test:
+ name: Test
runs-on: ubuntu-latest
- needs: [test-frontend, test-backend]
steps:
- - run: echo "done"
+ - uses: actions/checkout@v5
+ - uses: actions/setup-go@v6
+ with:
+ go-version: "1.25.x"
+ - run: go test --race ./...
- # release
- release:
+ build:
+ name: Build
runs-on: ubuntu-latest
- needs: [lint, test]
- if: startsWith(github.event.ref, 'refs/tags/v')
steps:
- uses: actions/checkout@v5
with:
@@ -82,24 +64,52 @@ jobs:
package_json_file: "frontend/package.json"
- uses: actions/setup-node@v6
with:
- node-version: "22.x"
+ node-version: "24.x"
+ cache: "pnpm"
+ cache-dependency-path: "frontend/pnpm-lock.yaml"
+ - name: Install Task
+ uses: go-task/setup-task@v1
+ - run: task build
+
+ release:
+ name: Release
+ needs: ["lint-frontend", "lint-backend", "test", "build"]
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v5
+ with:
+ fetch-depth: 0
+ - uses: actions/setup-go@v6
+ with:
+ go-version: '1.25'
+ - uses: pnpm/action-setup@v4
+ with:
+ package_json_file: "frontend/package.json"
+ - uses: actions/setup-node@v6
+ with:
+ node-version: "24.x"
cache: "pnpm"
cache-dependency-path: "frontend/pnpm-lock.yaml"
- name: Set up QEMU
- uses: docker/setup-qemu-action@v1
+ uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v1
- - name: Build frontend
- run: make build-frontend
+ uses: docker/setup-buildx-action@v3
+ - name: Install Task
+ uses: go-task/setup-task@v1
+ - run: task build-frontend
- name: Login to Docker Hub
- uses: docker/login-action@v1
+ uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Run GoReleaser
- uses: goreleaser/goreleaser-action@v2
+ uses: goreleaser/goreleaser-action@v6
with:
version: latest
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GH_PAT }}
+
+
+
diff --git a/filebrowser/.github/workflows/docs.yml b/filebrowser/.github/workflows/docs.yml
new file mode 100644
index 0000000000..8eec974718
--- /dev/null
+++ b/filebrowser/.github/workflows/docs.yml
@@ -0,0 +1,52 @@
+name: Docs
+
+on:
+ pull_request:
+ paths:
+ - 'www'
+ - '*.md'
+ push:
+ branches:
+ - master
+
+jobs:
+ build:
+ name: Build Docs
+ if: github.event_name == 'pull_request'
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Install Task
+ uses: go-task/setup-task@v1
+ - name: Build site
+ run: task docs
+
+ build-and-release:
+ if: github.event_name == 'push' && github.ref == 'refs/heads/master'
+ name: Build and Release Docs
+ permissions:
+ contents: read
+ deployments: write
+ pull-requests: write
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Install Task
+ uses: go-task/setup-task@v1
+ - name: Build site
+ run: task docs
+ - name: Deploy to Cloudflare Pages
+ uses: cloudflare/wrangler-action@v3
+ with:
+ apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ command: pages deploy www/public --project-name=${{ secrets.CLOUDFLARE_PROJECT_NAME }}
+ gitHubToken: ${{ secrets.GITHUB_TOKEN }}
+
diff --git a/filebrowser/.github/workflows/pr-lint.yaml b/filebrowser/.github/workflows/lint-pr.yaml
similarity index 92%
rename from filebrowser/.github/workflows/pr-lint.yaml
rename to filebrowser/.github/workflows/lint-pr.yaml
index f2878cf2da..f00f44150f 100644
--- a/filebrowser/.github/workflows/pr-lint.yaml
+++ b/filebrowser/.github/workflows/lint-pr.yaml
@@ -13,10 +13,10 @@ permissions:
jobs:
main:
- name: Validate PR title
+ name: Validate Title
runs-on: ubuntu-latest
steps:
- - uses: amannn/action-semantic-pull-request@v5
+ - uses: amannn/action-semantic-pull-request@v6
id: lint_pr_title
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -43,4 +43,4 @@ jobs:
uses: marocchino/sticky-pull-request-comment@v2
with:
header: pr-title-lint-error
- delete: true
\ No newline at end of file
+ delete: true
diff --git a/filebrowser/.github/workflows/site-pr.yml b/filebrowser/.github/workflows/site-pr.yml
deleted file mode 100644
index 9bc3db17f8..0000000000
--- a/filebrowser/.github/workflows/site-pr.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-name: Build Site
-
-on:
- pull_request:
- paths:
- - 'www'
- - '*.md'
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v5
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v2
-
- - name: Build site
- run: make site
diff --git a/filebrowser/.github/workflows/site-publish.yml b/filebrowser/.github/workflows/site-publish.yml
deleted file mode 100644
index d41c00872d..0000000000
--- a/filebrowser/.github/workflows/site-publish.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-name: Build and Deploy Site
-
-on:
- push:
- branches:
- - master
-
-jobs:
- deploy:
- permissions:
- contents: read
- deployments: write
- pull-requests: write
- runs-on: ubuntu-latest
- timeout-minutes: 5
- steps:
- - name: Checkout
- uses: actions/checkout@v5
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v2
-
- - name: Build site
- run: make site
-
- - name: Deploy to Cloudflare Pages
- uses: cloudflare/wrangler-action@v3
- with:
- apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
- accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
- command: pages deploy www/public --project-name=${{ secrets.CLOUDFLARE_PROJECT_NAME }}
- gitHubToken: ${{ secrets.GITHUB_TOKEN }}
diff --git a/filebrowser/.gitignore b/filebrowser/.gitignore
index 47f3473297..b9ee1fe077 100644
--- a/filebrowser/.gitignore
+++ b/filebrowser/.gitignore
@@ -35,10 +35,5 @@ build/
/frontend/dist/*
!/frontend/dist/.gitkeep
-# Playwright files
-/frontend/test-results/
-/frontend/playwright-report/
-/frontend/playwright/.cache/
-
default.nix
Dockerfile.dev
diff --git a/filebrowser/CHANGELOG.md b/filebrowser/CHANGELOG.md
index f5c0c07043..2be8b2c823 100644
--- a/filebrowser/CHANGELOG.md
+++ b/filebrowser/CHANGELOG.md
@@ -1,6 +1,18 @@
# Changelog
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
+
+## [2.45.3](https://github.com/filebrowser/filebrowser/compare/v2.45.2...v2.45.3) (2025-11-13)
+
+This is a test release to ensure the updated workflow works.
+
+## [2.45.2](https://github.com/filebrowser/filebrowser/compare/v2.45.1...v2.45.2) (2025-11-13)
+
+
+### Bug Fixes
+
+* **deps:** update module github.com/shirou/gopsutil/v3 to v4 ([#5536](https://github.com/filebrowser/filebrowser/issues/5536)) ([fdff7a3](https://github.com/filebrowser/filebrowser/commit/fdff7a38f4711f2b58dfdd60bebbb057bd3a478d))
+* **deps:** update module gopkg.in/yaml.v2 to v3 ([#5537](https://github.com/filebrowser/filebrowser/issues/5537)) ([f26a685](https://github.com/filebrowser/filebrowser/commit/f26a68587d8432b536453093f42dc255d19d10fa))
### [2.45.1](https://github.com/filebrowser/filebrowser/compare/v2.45.0...v2.45.1) (2025-11-11)
diff --git a/filebrowser/CONTRIBUTING.md b/filebrowser/CONTRIBUTING.md
index 1cfc8a9277..d6e694f1e6 100644
--- a/filebrowser/CONTRIBUTING.md
+++ b/filebrowser/CONTRIBUTING.md
@@ -15,11 +15,23 @@ We encourage you to use git to manage your fork. To clone the main repository, j
git clone https://github.com/filebrowser/filebrowser
```
+We use [Taskfile](https://taskfile.dev/) to manage the different processes (building, releasing, etc) automatically.
+
## Build
+You can fully build the project in order to produce a binary by running:
+
+```bash
+task build
+```
+
+## Development
+
+For development, there are a few things to have in mind.
+
### Frontend
-We are using [Node.js](https://nodejs.org/en/) on the frontend to manage the build process. The steps to build it are:
+We use [Node.js](https://nodejs.org/en/) on the frontend to manage the build process. Prepare the frontend environment:
```bash
# From the root of the repo, go to frontend/
@@ -27,37 +39,62 @@ cd frontend
# Install the dependencies
pnpm install
+```
-# Build the frontend
+If you just want to develop the backend, you can create a static build of the frontend:
+
+```bash
pnpm run build
```
-This will install the dependencies and build the frontend so you can then embed it into the Go app. Although, if you want to play with it, you'll get bored of building it after every change you do. So, you can run the command below to watch for changes:
+If you want to develop the frontend, start a development server which watches for changes:
```bash
pnpm run dev
```
+Please note that you need to access File Browser's interface through the development server of the frontend.
+
### Backend
-First of all, you need to download the required dependencies. We are using the built-in `go mod` tool for dependency management. To get the modules, run:
+First prepare the backend environment by downloading all required dependencies:
```bash
go mod download
```
-The magic of File Browser is that the static assets are bundled into the final binary. For that, we use [Go embed.FS](https://golang.org/pkg/embed/). The files from `frontend/dist` will be embedded during the build process.
-
-To build File Browser is just like any other Go program:
+You can now build or run File Browser as any other Go project:
```bash
+# Build
go build
+
+# Run
+go run .
```
-To create a development build use the "dev" tag, this way the content inside the frontend folder will not be embedded in the binary but will be reloaded at every change:
+## Documentation
+
+We rely on Docker to abstract all the dependencies required for building the documentation.
+
+To build the documentation to `www/public`:
```bash
-go build -tags dev
+task docs
+```
+
+To start a local server on port `8000` to view the built documentation:
+
+```bash
+task docs-serve
+```
+
+## Release
+
+To make a release, just run:
+
+```bash
+task release
```
## Translations
diff --git a/filebrowser/Makefile b/filebrowser/Makefile
deleted file mode 100644
index 10ec3ea966..0000000000
--- a/filebrowser/Makefile
+++ /dev/null
@@ -1,88 +0,0 @@
-include common.mk
-include tools.mk
-
-LDFLAGS += -X "$(MODULE)/version.Version=$(VERSION)" -X "$(MODULE)/version.CommitSHA=$(VERSION_HASH)"
-
-SITE_DOCKER_FLAGS = \
- -v $(CURDIR)/www:/docs \
- -v $(CURDIR)/LICENSE:/docs/docs/LICENSE \
- -v $(CURDIR)/SECURITY.md:/docs/docs/security.md \
- -v $(CURDIR)/CHANGELOG.md:/docs/docs/changelog.md \
- -v $(CURDIR)/CODE-OF-CONDUCT.md:/docs/docs/code-of-conduct.md \
- -v $(CURDIR)/CONTRIBUTING.md:/docs/docs/contributing.md
-
-## Build:
-
-.PHONY: build
-build: | build-frontend build-backend ## Build binary
-
-.PHONY: build-frontend
-build-frontend: ## Build frontend
- $Q cd frontend && pnpm install --frozen-lockfile && pnpm run build
-
-.PHONY: build-backend
-build-backend: ## Build backend
- $Q $(go) build -ldflags '$(LDFLAGS)' -o .
-
-.PHONY: test
-test: | test-frontend test-backend ## Run all tests
-
-.PHONY: test-frontend
-test-frontend: ## Run frontend tests
- $Q cd frontend && pnpm install --frozen-lockfile && pnpm run typecheck
-
-.PHONY: test-backend
-test-backend: ## Run backend tests
- $Q $(go) test -v ./...
-
-.PHONY: lint
-lint: lint-frontend lint-backend ## Run all linters
-
-.PHONY: lint-frontend
-lint-frontend: ## Run frontend linters
- $Q cd frontend && pnpm install --frozen-lockfile && pnpm run lint
-
-.PHONY: lint-backend
-lint-backend: | $(golangci-lint) ## Run backend linters
- $Q $(golangci-lint) run -v
-
-.PHONY: lint-commits
-lint-commits: $(commitlint) ## Run commit linters
- $Q ./scripts/commitlint.sh
-
-fmt: $(goimports) ## Format source files
- $Q $(goimports) -local $(MODULE) -w $$(find . -type f -name '*.go' -not -path "./vendor/*")
-
-clean: clean-tools ## Clean
-
-## Release:
-
-.PHONY: bump-version
-bump-version: $(standard-version) ## Bump app version
- $Q ./scripts/bump_version.sh
-
-.PHONY: site
-site: ## Build site
- @rm -rf www/public
- docker build -f www/Dockerfile --progress=plain -t filebrowser.site www
- docker run --rm $(SITE_DOCKER_FLAGS) filebrowser.site build -d "public"
-
-.PHONY: site-serve
-site-serve: ## Serve site for development
- docker build -f www/Dockerfile --progress=plain -t filebrowser.site www
- docker run --rm -it -p 8000:8000 $(SITE_DOCKER_FLAGS) filebrowser.site
-
-## Help:
-help: ## Show this help
- @echo ''
- @echo 'Usage:'
- @echo ' ${YELLOW}make${RESET} ${GREEN} [options]${RESET}'
- @echo ''
- @echo 'Options:'
- @$(call global_option, "V [0|1]", "enable verbose mode (default:0)")
- @echo ''
- @echo 'Targets:'
- @awk 'BEGIN {FS = ":.*?## "} { \
- if (/^[a-zA-Z_-]+:.*?##.*$$/) {printf " ${YELLOW}%-20s${GREEN}%s${RESET}\n", $$1, $$2} \
- else if (/^## .*$$/) {printf " ${CYAN}%s${RESET}\n", substr($$1,4)} \
- }' $(MAKEFILE_LIST)
diff --git a/filebrowser/README.md b/filebrowser/README.md
index 607bca4673..33ecbde1c4 100644
--- a/filebrowser/README.md
+++ b/filebrowser/README.md
@@ -2,7 +2,7 @@
-[](https://github.com/filebrowser/filebrowser/actions/workflows/main.yaml)
+[](https://github.com/filebrowser/filebrowser/actions/workflows/ci.yaml)
[](https://goreportcard.com/report/github.com/filebrowser/filebrowser/v2)
[](https://github.com/filebrowser/filebrowser/releases/latest)
@@ -14,18 +14,12 @@ Documentation on how to install, configure, and contribute to this project is ho
## Project Status
-> [!WARNING]
->
-> This project is currently on **maintenance-only** mode, and is looking for new maintainers. For more information, please read the [discussion #4906](https://github.com/filebrowser/filebrowser/discussions/4906). Therefore, please note the following:
->
-> - It can take a while until someone gets back to you. Please be patient.
-> - [Issues][issues] are only being used to track bugs. Any unrelated issues will be converted into a [discussion][discussions].
-> - No new features will be implemented until further notice. The priority is on triaging issues and merge bug fixes.
->
-> If you're interested in maintaining this project, please reach out via the discussion above.
+This project is a finished product which fulfills its goal: be a single binary web File Browser which can be run by anyone anywhere. That means that File Browser is currently on **maintenance-only** mode. Therefore, please note the following:
-[issues]: https://github.com/filebrowser/filebrowser/issues
-[discussions]: https://github.com/filebrowser/filebrowser/discussions
+- It can take a while until someone gets back to you. Please be patient.
+- [Issues](https://github.com/filebrowser/filebrowser/issues) are meant to track bugs. Unrelated issues will be converted into [discussions](https://github.com/filebrowser/filebrowser/discussions).
+- No new features will be implemented by maintainers. Pull requests for new features will be reviewed on a case by case basis.
+- The priority is triaging issues, addressing security issues, and fixing bug fixes.
## Contributing
diff --git a/filebrowser/Taskfile.yml b/filebrowser/Taskfile.yml
new file mode 100644
index 0000000000..9721317f78
--- /dev/null
+++ b/filebrowser/Taskfile.yml
@@ -0,0 +1,69 @@
+version: '3'
+
+vars:
+ SITE_DOCKER_FLAGS: >-
+ -v ./www:/docs
+ -v ./LICENSE:/docs/docs/LICENSE
+ -v ./SECURITY.md:/docs/docs/security.md
+ -v ./CHANGELOG.md:/docs/docs/changelog.md
+ -v ./CODE-OF-CONDUCT.md:/docs/docs/code-of-conduct.md
+ -v ./CONTRIBUTING.md:/docs/docs/contributing.md
+
+tasks:
+ build-frontend:
+ desc: Build frontend assets
+ dir: frontend
+ cmds:
+ - pnpm install --frozen-lockfile
+ - pnpm run build
+
+ build-backend:
+ desc: Build backend binary
+ cmds:
+ - go build -ldflags='-s -w -X "github.com/filebrowser/filebrowser/v2/version.Version={{.VERSION}}" -X "github.com/filebrowser/filebrowser/v2/version.CommitSHA={{.GIT_COMMIT}}"' -o filebrowser .
+ vars:
+ GIT_COMMIT:
+ sh: git log -n 1 --format=%h
+ VERSION:
+ sh: git describe --tags --abbrev=0 --match=v* | cut -c 2-
+
+ build:
+ desc: Build both frontend and backend
+ cmds:
+ - task: build-frontend
+ - task: build-backend
+
+ release-make:
+ internal: true
+ prompt: Do you wish to proceed?
+ cmds:
+ - pnpm dlx commit-and-tag-version -s
+
+ release-dry-run:
+ internal: true
+ cmds:
+ - pnpm dlx commit-and-tag-version --dry-run --skip
+
+ release:
+ desc: Create a new release
+ cmds:
+ - task: release-dry-run
+ - task: release-make
+
+ docs-image-make:
+ internal: true
+ cmds:
+ - docker build -f www/Dockerfile --progress=plain -t filebrowser.site www
+
+ docs:
+ desc: Generate documentation
+ cmds:
+ - rm -rf www/public
+ - task: docs-image-make
+ - docker run --rm {{.SITE_DOCKER_FLAGS}} filebrowser.site build -d "public"
+
+ docs-serve:
+ desc: Serve documentation
+ cmds:
+ - task: docs-image-make
+ - docker run --rm -it -p 8000:8000 {{.SITE_DOCKER_FLAGS}} filebrowser.site
diff --git a/filebrowser/cmd/utils.go b/filebrowser/cmd/utils.go
index a4eb4d14cf..1971afd4b6 100644
--- a/filebrowser/cmd/utils.go
+++ b/filebrowser/cmd/utils.go
@@ -14,7 +14,7 @@ import (
"github.com/asdine/storm/v3"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
- yaml "gopkg.in/yaml.v2"
+ yaml "gopkg.in/yaml.v3"
"github.com/filebrowser/filebrowser/v2/settings"
"github.com/filebrowser/filebrowser/v2/storage"
diff --git a/filebrowser/commitlint.config.js b/filebrowser/commitlint.config.js
deleted file mode 100644
index 23d0036766..0000000000
--- a/filebrowser/commitlint.config.js
+++ /dev/null
@@ -1,34 +0,0 @@
-module.exports = {
- rules: {
- 'body-leading-blank': [1, 'always'],
- 'body-max-line-length': [2, 'always', 100],
- 'footer-leading-blank': [1, 'always'],
- 'footer-max-line-length': [2, 'always', 100],
- 'header-max-length': [2, 'always', 100],
- 'scope-case': [2, 'always', 'lower-case'],
- 'subject-case': [
- 2,
- 'never',
- ['sentence-case', 'start-case', 'pascal-case', 'upper-case'],
- ],
- 'subject-full-stop': [2, 'never', '.'],
- 'type-case': [2, 'always', 'lower-case'],
- 'type-empty': [2, 'never'],
- 'type-enum': [
- 2,
- 'always',
- [
- 'feat',
- 'fix',
- 'perf',
- 'revert',
- 'refactor',
- 'build',
- 'ci',
- 'test',
- 'chore',
- 'docs',
- ],
- ],
- },
-};
diff --git a/filebrowser/common.mk b/filebrowser/common.mk
deleted file mode 100644
index 206fc7502e..0000000000
--- a/filebrowser/common.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-SHELL := /usr/bin/env bash
-DATE ?= $(shell date +%FT%T%z)
-BASE_PATH := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
-VERSION ?= $(shell git describe --tags --always --match=v* 2> /dev/null || \
- cat $(CURDIR)/.version 2> /dev/null || echo v0)
-VERSION_HASH = $(shell git rev-parse HEAD)
-BRANCH = $(shell git rev-parse --abbrev-ref HEAD)
-
-go = GOGC=off go
-MODULE = $(shell env GO111MODULE=on go list -m)
-
-# printing
-# $Q (quiet) is used in the targets as a replacer for @.
-# This macro helps to print the command for debugging by setting V to 1. Example `make test-unit V=1`
-V = 0
-Q = $(if $(filter 1,$V),,@)
-# $M is a macro to print a colored ▶ character. Example `$(info $(M) running coverage tests…)` will print "▶ running coverage tests…"
-M = $(shell printf "\033[34;1m▶\033[0m")
-
-GREEN := $(shell tput -Txterm setaf 2)
-YELLOW := $(shell tput -Txterm setaf 3)
-WHITE := $(shell tput -Txterm setaf 7)
-CYAN := $(shell tput -Txterm setaf 6)
-RESET := $(shell tput -Txterm sgr0)
-
-define global_option
- printf " ${YELLOW}%-20s${GREEN}%s${RESET}\n" $(1) $(2)
-endef
diff --git a/filebrowser/frontend/assets_dev.go b/filebrowser/frontend/assets_dev.go
deleted file mode 100644
index 01938ebe00..0000000000
--- a/filebrowser/frontend/assets_dev.go
+++ /dev/null
@@ -1,14 +0,0 @@
-//go:build dev
-
-package frontend
-
-import (
- "io/fs"
- "os"
-)
-
-var assets fs.FS = os.DirFS("frontend")
-
-func Assets() fs.FS {
- return assets
-}
diff --git a/filebrowser/frontend/index.html b/filebrowser/frontend/index.html
index 3b54dcdf02..b3de680496 100644
--- a/filebrowser/frontend/index.html
+++ b/filebrowser/frontend/index.html
@@ -12,7 +12,11 @@
-
+
diff --git a/filebrowser/frontend/package.json b/filebrowser/frontend/package.json
index befb3f3131..ade91ff1ed 100644
--- a/filebrowser/frontend/package.json
+++ b/filebrowser/frontend/package.json
@@ -4,37 +4,35 @@
"private": true,
"type": "module",
"engines": {
- "node": ">=22.0.0",
- "pnpm": ">=9.0.0"
+ "node": ">=24.0.0",
+ "pnpm": ">=10.0.0"
},
"scripts": {
"dev": "vite dev",
"build": "pnpm run typecheck && vite build",
"clean": "find ./dist -maxdepth 1 -mindepth 1 ! -name '.gitkeep' -exec rm -r {} +",
- "typecheck": "vue-tsc -p ./tsconfig.tsc.json --noEmit",
+ "typecheck": "vue-tsc -p ./tsconfig.app.json --noEmit",
"lint": "eslint src/",
"lint:fix": "eslint --fix src/",
- "format": "prettier --write .",
- "test": "playwright test"
+ "format": "prettier --write ."
},
"dependencies": {
"@chenfengyuan/vue-number-input": "^2.0.1",
- "@vueuse/core": "^12.5.0",
- "@vueuse/integrations": "^12.5.0",
+ "@vueuse/core": "^14.0.0",
+ "@vueuse/integrations": "^14.0.0",
"ace-builds": "^1.43.2",
- "core-js": "^3.44.0",
"dayjs": "^1.11.13",
"dompurify": "^3.2.6",
"epubjs": "^0.3.93",
- "filesize": "^10.1.1",
+ "filesize": "^11.0.13",
"js-base64": "^3.7.7",
"jwt-decode": "^4.0.0",
"lodash-es": "^4.17.21",
- "marked": "^15.0.6",
+ "marked": "^17.0.0",
"material-icons": "^1.13.14",
"normalize.css": "^8.0.1",
- "pinia": "^2.3.1",
- "pretty-bytes": "^6.1.1",
+ "pinia": "^3.0.4",
+ "pretty-bytes": "^7.1.0",
"qrcode.vue": "^3.6.0",
"tus-js-client": "^4.3.1",
"utif": "^3.1.0",
@@ -50,30 +48,28 @@
"vue-toastification": "^2.0.0-rc.5"
},
"devDependencies": {
- "@intlify/unplugin-vue-i18n": "^6.0.8",
- "@playwright/test": "^1.54.1",
- "@tsconfig/node22": "^22.0.2",
+ "@intlify/unplugin-vue-i18n": "^11.0.1",
+ "@tsconfig/node24": "^24.0.2",
"@types/lodash-es": "^4.17.12",
- "@types/node": "^22.10.10",
+ "@types/node": "^24.10.1",
"@typescript-eslint/eslint-plugin": "^8.37.0",
- "@vitejs/plugin-legacy": "^6.0.0",
- "@vitejs/plugin-vue": "^5.0.4",
+ "@vitejs/plugin-legacy": "^7.2.1",
+ "@vitejs/plugin-vue": "^6.0.1",
"@vue/eslint-config-prettier": "^10.2.0",
"@vue/eslint-config-typescript": "^14.6.0",
- "@vue/tsconfig": "^0.7.0",
+ "@vue/tsconfig": "^0.8.1",
"autoprefixer": "^10.4.21",
- "concurrently": "^9.2.0",
"eslint": "^9.31.0",
"eslint-config-prettier": "^10.1.5",
"eslint-plugin-prettier": "^5.5.1",
- "eslint-plugin-vue": "^9.24.0",
- "jsdom": "^26.1.0",
+ "eslint-plugin-vue": "^10.5.1",
"postcss": "^8.5.6",
"prettier": "^3.6.2",
"terser": "^5.43.1",
- "vite": "^6.4.1",
- "vite-plugin-compression2": "^1.0.0",
- "vue-tsc": "^2.2.0"
+ "typescript": "^5.9.3",
+ "vite": "^7.2.2",
+ "vite-plugin-compression2": "^2.3.1",
+ "vue-tsc": "^3.1.3"
},
- "packageManager": "pnpm@9.15.9+sha512.68046141893c66fad01c079231128e9afb89ef87e2691d69e4d40eee228988295fd4682181bae55b58418c3a253bde65a505ec7c5f9403ece5cc3cd37dcf2531"
+ "packageManager": "pnpm@10.22.0+sha512.bf049efe995b28f527fd2b41ae0474ce29186f7edcb3bf545087bd61fbbebb2bf75362d1307fda09c2d288e1e499787ac12d4fcb617a974718a6051f2eee741c"
}
diff --git a/filebrowser/frontend/playwright.config.ts b/filebrowser/frontend/playwright.config.ts
deleted file mode 100644
index af335a17f8..0000000000
--- a/filebrowser/frontend/playwright.config.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-import { defineConfig, devices } from "@playwright/test";
-
-/**
- * Read environment variables from file.
- * https://github.com/motdotla/dotenv
- */
-// require('dotenv').config();
-
-/**
- * See https://playwright.dev/docs/test-configuration.
- */
-export default defineConfig({
- testDir: "./tests",
- /* Run tests in files in parallel */
- fullyParallel: true,
- /* Fail the build on CI if you accidentally left test.only in the source code. */
- forbidOnly: !!process.env.CI,
- /* Retry on CI only */
- retries: process.env.CI ? 2 : 0,
- /* Opt out of parallel tests on CI. */
- workers: process.env.CI ? 1 : undefined,
- /* Reporter to use. See https://playwright.dev/docs/test-reporters */
- reporter: "html",
- /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
- use: {
- /* Base URL to use in actions like `await page.goto('/')`. */
- baseURL: "http://127.0.0.1:5173",
-
- /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
- trace: "on-first-retry",
-
- /* Set default locale to English (US) */
- locale: "en-US",
- },
-
- /* Configure projects for major browsers */
- projects: [
- {
- name: "chromium",
- use: { ...devices["Desktop Chrome"] },
- },
-
- {
- name: "firefox",
- use: { ...devices["Desktop Firefox"] },
- },
-
- // {
- // name: "webkit",
- // use: { ...devices["Desktop Safari"] },
- // },
-
- /* Test against mobile viewports. */
- // {
- // name: 'Mobile Chrome',
- // use: { ...devices['Pixel 5'] },
- // },
- // {
- // name: 'Mobile Safari',
- // use: { ...devices['iPhone 12'] },
- // },
-
- /* Test against branded browsers. */
- // {
- // name: 'Microsoft Edge',
- // use: { ...devices['Desktop Edge'], channel: 'msedge' },
- // },
- // {
- // name: 'Google Chrome',
- // use: { ...devices['Desktop Chrome'], channel: 'chrome' },
- // },
- ],
-
- /* Run your local dev server before starting the tests */
- webServer: {
- command: "npm run dev",
- url: "http://127.0.0.1:5173",
- reuseExistingServer: !process.env.CI,
- },
-});
diff --git a/filebrowser/frontend/pnpm-lock.yaml b/filebrowser/frontend/pnpm-lock.yaml
index ae9b474bee..4f4907ee5c 100644
--- a/filebrowser/frontend/pnpm-lock.yaml
+++ b/filebrowser/frontend/pnpm-lock.yaml
@@ -10,19 +10,16 @@ importers:
dependencies:
'@chenfengyuan/vue-number-input':
specifier: ^2.0.1
- version: 2.0.1(vue@3.5.24(typescript@5.6.3))
+ version: 2.0.1(vue@3.5.24(typescript@5.9.3))
'@vueuse/core':
- specifier: ^12.5.0
- version: 12.8.2(typescript@5.6.3)
+ specifier: ^14.0.0
+ version: 14.0.0(vue@3.5.24(typescript@5.9.3))
'@vueuse/integrations':
- specifier: ^12.5.0
- version: 12.8.2(focus-trap@7.6.2)(jwt-decode@4.0.0)(typescript@5.6.3)
+ specifier: ^14.0.0
+ version: 14.0.0(focus-trap@7.6.2)(jwt-decode@4.0.0)(vue@3.5.24(typescript@5.9.3))
ace-builds:
specifier: ^1.43.2
version: 1.43.4
- core-js:
- specifier: ^3.44.0
- version: 3.46.0
dayjs:
specifier: ^1.11.13
version: 1.11.19
@@ -33,8 +30,8 @@ importers:
specifier: ^0.3.93
version: 0.3.93
filesize:
- specifier: ^10.1.1
- version: 10.1.6
+ specifier: ^11.0.13
+ version: 11.0.13
js-base64:
specifier: ^3.7.7
version: 3.7.8
@@ -45,8 +42,8 @@ importers:
specifier: ^4.17.21
version: 4.17.21
marked:
- specifier: ^15.0.6
- version: 15.0.12
+ specifier: ^17.0.0
+ version: 17.0.0
material-icons:
specifier: ^1.13.14
version: 1.13.14
@@ -54,14 +51,14 @@ importers:
specifier: ^8.0.1
version: 8.0.1
pinia:
- specifier: ^2.3.1
- version: 2.3.1(typescript@5.6.3)(vue@3.5.24(typescript@5.6.3))
+ specifier: ^3.0.4
+ version: 3.0.4(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3))
pretty-bytes:
- specifier: ^6.1.1
- version: 6.1.1
+ specifier: ^7.1.0
+ version: 7.1.0
qrcode.vue:
specifier: ^3.6.0
- version: 3.6.0(vue@3.5.24(typescript@5.6.3))
+ version: 3.6.0(vue@3.5.24(typescript@5.9.3))
tus-js-client:
specifier: ^4.3.1
version: 4.3.1
@@ -79,13 +76,13 @@ importers:
version: 1.1.1(video.js@8.23.4)
vue:
specifier: ^3.5.17
- version: 3.5.24(typescript@5.6.3)
+ version: 3.5.24(typescript@5.9.3)
vue-final-modal:
specifier: ^4.5.5
- version: 4.5.5(@vueuse/core@12.8.2(typescript@5.6.3))(@vueuse/integrations@12.8.2(focus-trap@7.6.2)(jwt-decode@4.0.0)(typescript@5.6.3))(focus-trap@7.6.2)(vue@3.5.24(typescript@5.6.3))
+ version: 4.5.5(@vueuse/core@14.0.0(vue@3.5.24(typescript@5.9.3)))(@vueuse/integrations@14.0.0(focus-trap@7.6.2)(jwt-decode@4.0.0)(vue@3.5.24(typescript@5.9.3)))(focus-trap@7.6.2)(vue@3.5.24(typescript@5.9.3))
vue-i18n:
specifier: ^11.1.10
- version: 11.1.12(vue@3.5.24(typescript@5.6.3))
+ version: 11.1.12(vue@3.5.24(typescript@5.9.3))
vue-lazyload:
specifier: ^3.0.0
version: 3.0.0
@@ -94,50 +91,44 @@ importers:
version: 1.3.3
vue-router:
specifier: ^4.5.1
- version: 4.6.3(vue@3.5.24(typescript@5.6.3))
+ version: 4.6.3(vue@3.5.24(typescript@5.9.3))
vue-toastification:
specifier: ^2.0.0-rc.5
- version: 2.0.0-rc.5(vue@3.5.24(typescript@5.6.3))
+ version: 2.0.0-rc.5(vue@3.5.24(typescript@5.9.3))
devDependencies:
'@intlify/unplugin-vue-i18n':
- specifier: ^6.0.8
- version: 6.0.8(@vue/compiler-dom@3.5.24)(eslint@9.39.1)(rollup@4.52.5)(typescript@5.6.3)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.6.3)))(vue@3.5.24(typescript@5.6.3))
- '@playwright/test':
- specifier: ^1.54.1
- version: 1.56.1
- '@tsconfig/node22':
- specifier: ^22.0.2
- version: 22.0.2
+ specifier: ^11.0.1
+ version: 11.0.1(@vue/compiler-dom@3.5.24)(eslint@9.39.1)(rollup@4.52.5)(typescript@5.9.3)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3))
+ '@tsconfig/node24':
+ specifier: ^24.0.2
+ version: 24.0.2
'@types/lodash-es':
specifier: ^4.17.12
version: 4.17.12
'@types/node':
- specifier: ^22.10.10
- version: 22.19.1
+ specifier: ^24.10.1
+ version: 24.10.1
'@typescript-eslint/eslint-plugin':
specifier: ^8.37.0
- version: 8.46.4(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.6.3))(eslint@9.39.1)(typescript@5.6.3)
+ version: 8.46.4(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@vitejs/plugin-legacy':
- specifier: ^6.0.0
- version: 6.1.1(terser@5.44.1)(vite@6.4.1(@types/node@22.19.1)(terser@5.44.1)(yaml@2.7.0))
+ specifier: ^7.2.1
+ version: 7.2.1(terser@5.44.1)(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))
'@vitejs/plugin-vue':
- specifier: ^5.0.4
- version: 5.2.4(vite@6.4.1(@types/node@22.19.1)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.24(typescript@5.6.3))
+ specifier: ^6.0.1
+ version: 6.0.1(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.24(typescript@5.9.3))
'@vue/eslint-config-prettier':
specifier: ^10.2.0
version: 10.2.0(eslint@9.39.1)(prettier@3.6.2)
'@vue/eslint-config-typescript':
specifier: ^14.6.0
- version: 14.6.0(eslint-plugin-vue@9.33.0(eslint@9.39.1))(eslint@9.39.1)(typescript@5.6.3)
+ version: 14.6.0(eslint-plugin-vue@10.5.1(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1)))(eslint@9.39.1)(typescript@5.9.3)
'@vue/tsconfig':
- specifier: ^0.7.0
- version: 0.7.0(typescript@5.6.3)(vue@3.5.24(typescript@5.6.3))
+ specifier: ^0.8.1
+ version: 0.8.1(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3))
autoprefixer:
specifier: ^10.4.21
version: 10.4.22(postcss@8.5.6)
- concurrently:
- specifier: ^9.2.0
- version: 9.2.1
eslint:
specifier: ^9.31.0
version: 9.39.1
@@ -148,11 +139,8 @@ importers:
specifier: ^5.5.1
version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.1))(eslint@9.39.1)(prettier@3.6.2)
eslint-plugin-vue:
- specifier: ^9.24.0
- version: 9.33.0(eslint@9.39.1)
- jsdom:
- specifier: ^26.1.0
- version: 26.1.0
+ specifier: ^10.5.1
+ version: 10.5.1(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1))
postcss:
specifier: ^8.5.6
version: 8.5.6
@@ -162,21 +150,21 @@ importers:
terser:
specifier: ^5.43.1
version: 5.44.1
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
vite:
- specifier: ^6.4.1
- version: 6.4.1(@types/node@22.19.1)(terser@5.44.1)(yaml@2.7.0)
+ specifier: ^7.2.2
+ version: 7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0)
vite-plugin-compression2:
- specifier: ^1.0.0
- version: 1.4.0(rollup@4.52.5)(vite@6.4.1(@types/node@22.19.1)(terser@5.44.1)(yaml@2.7.0))
+ specifier: ^2.3.1
+ version: 2.3.1(rollup@4.52.5)
vue-tsc:
- specifier: ^2.2.0
- version: 2.2.12(typescript@5.6.3)
+ specifier: ^3.1.3
+ version: 3.1.3(typescript@5.9.3)
packages:
- '@asamuzakjp/css-color@2.8.3':
- resolution: {integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==}
-
'@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
@@ -677,34 +665,6 @@ packages:
peerDependencies:
vue: ^3.0.0
- '@csstools/color-helpers@5.0.1':
- resolution: {integrity: sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==}
- engines: {node: '>=18'}
-
- '@csstools/css-calc@2.1.1':
- resolution: {integrity: sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==}
- engines: {node: '>=18'}
- peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.4
- '@csstools/css-tokenizer': ^3.0.3
-
- '@csstools/css-color-parser@3.0.7':
- resolution: {integrity: sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==}
- engines: {node: '>=18'}
- peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.4
- '@csstools/css-tokenizer': ^3.0.3
-
- '@csstools/css-parser-algorithms@3.0.4':
- resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==}
- engines: {node: '>=18'}
- peerDependencies:
- '@csstools/css-tokenizer': ^3.0.3
-
- '@csstools/css-tokenizer@3.0.3':
- resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==}
- engines: {node: '>=18'}
-
'@esbuild/aix-ppc64@0.25.11':
resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==}
engines: {node: '>=18'}
@@ -861,12 +821,6 @@ packages:
cpu: [x64]
os: [win32]
- '@eslint-community/eslint-utils@4.4.1':
- resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
'@eslint-community/eslint-utils@4.9.0':
resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -921,9 +875,9 @@ packages:
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
- '@intlify/bundle-utils@10.0.1':
- resolution: {integrity: sha512-WkaXfSevtpgtUR4t8K2M6lbR7g03mtOxFeh+vXp5KExvPqS12ppaRj1QxzwRuRI5VUto54A22BjKoBMLyHILWQ==}
- engines: {node: '>= 18'}
+ '@intlify/bundle-utils@11.0.1':
+ resolution: {integrity: sha512-5l10G5wE2cQRsZMS9y0oSFMOLW5IG/SgbkIUltqnwF1EMRrRbUAHFiPabXdGTHeexCsMTcxj/1w9i0rzjJU9IQ==}
+ engines: {node: '>= 20'}
peerDependencies:
petite-vue-i18n: '*'
vue-i18n: '*'
@@ -941,25 +895,13 @@ packages:
resolution: {integrity: sha512-Fv9iQSJoJaXl4ZGkOCN1LDM3trzze0AS2zRz2EHLiwenwL6t0Ki9KySYlyr27yVOj5aVz0e55JePO+kELIvfdQ==}
engines: {node: '>= 16'}
- '@intlify/message-compiler@11.1.2':
- resolution: {integrity: sha512-T/xbNDzi+Yv0Qn2Dfz2CWCAJiwNgU5d95EhhAEf4YmOgjCKktpfpiUSmLcBvK1CtLpPQ85AMMQk/2NCcXnNj1g==}
- engines: {node: '>= 16'}
-
'@intlify/shared@11.1.12':
resolution: {integrity: sha512-Om86EjuQtA69hdNj3GQec9ZC0L0vPSAnXzB3gP/gyJ7+mA7t06d9aOAiqMZ+xEOsumGP4eEBlfl8zF2LOTzf2A==}
engines: {node: '>= 16'}
- '@intlify/shared@11.1.2':
- resolution: {integrity: sha512-dF2iMMy8P9uKVHV/20LA1ulFLL+MKSbfMiixSmn6fpwqzvix38OIc7ebgnFbBqElvghZCW9ACtzKTGKsTGTWGA==}
- engines: {node: '>= 16'}
-
- '@intlify/shared@11.1.7':
- resolution: {integrity: sha512-4yZeMt2Aa/7n5Ehy4KalUlvt3iRLcg1tq9IBVfOgkyWFArN4oygn6WxgGIFibP3svpaH8DarbNaottq+p0gUZQ==}
- engines: {node: '>= 16'}
-
- '@intlify/unplugin-vue-i18n@6.0.8':
- resolution: {integrity: sha512-Vvm3KhjE6TIBVUQAk37rBiaYy2M5OcWH0ZcI1XKEsOTeN1o0bErk+zeuXmcrcMc/73YggfI8RoxOUz9EB/69JQ==}
- engines: {node: '>= 18'}
+ '@intlify/unplugin-vue-i18n@11.0.1':
+ resolution: {integrity: sha512-nH5NJdNjy/lO6Ne8LDtZzv4SbpVsMhPE+LbvBDmMeIeJDiino8sOJN2QB3MXzTliYTnqe3aB9Fw5+LJ/XVaXCg==}
+ engines: {node: '>= 20'}
peerDependencies:
petite-vue-i18n: '*'
vue: ^3.2.25
@@ -1023,19 +965,8 @@ packages:
resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
- '@playwright/test@1.56.1':
- resolution: {integrity: sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==}
- engines: {node: '>=18'}
- hasBin: true
-
- '@rollup/pluginutils@5.1.4':
- resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
- peerDependenciesMeta:
- rollup:
- optional: true
+ '@rolldown/pluginutils@1.0.0-beta.29':
+ resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==}
'@rollup/pluginutils@5.3.0':
resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
@@ -1156,8 +1087,8 @@ packages:
cpu: [x64]
os: [win32]
- '@tsconfig/node22@22.0.2':
- resolution: {integrity: sha512-Kmwj4u8sDRDrMYRoN9FDEcXD8UpBSaPQQ24Gz+Gamqfm7xxn+GBR7ge/Z7pK8OXNGyUzbSwJj+TH6B+DS/epyA==}
+ '@tsconfig/node24@24.0.2':
+ resolution: {integrity: sha512-CNeOLUPI9PjbBc1DSIqb3GF/u+3kX/TDe9DKCzoI62mYI4dEDrMQ0r/9+SfYACP4UNMbiTlz7n8H7Rx/xTisQg==}
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
@@ -1175,8 +1106,8 @@ packages:
'@types/lodash@4.17.13':
resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==}
- '@types/node@22.19.1':
- resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==}
+ '@types/node@24.10.1':
+ resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
'@types/trusted-types@2.0.7':
resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
@@ -1219,10 +1150,6 @@ packages:
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.21.0':
- resolution: {integrity: sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
'@typescript-eslint/scope-manager@8.37.0':
resolution: {integrity: sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1257,10 +1184,6 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.21.0':
- resolution: {integrity: sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
'@typescript-eslint/types@8.37.0':
resolution: {integrity: sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1269,12 +1192,6 @@ packages:
resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.21.0':
- resolution: {integrity: sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <5.8.0'
-
'@typescript-eslint/typescript-estree@8.37.0':
resolution: {integrity: sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1301,10 +1218,6 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/visitor-keys@8.21.0':
- resolution: {integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
'@typescript-eslint/visitor-keys@8.37.0':
resolution: {integrity: sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1326,28 +1239,28 @@ packages:
'@videojs/xhr@2.7.0':
resolution: {integrity: sha512-giab+EVRanChIupZK7gXjHy90y3nncA2phIOyG3Ne5fvpiMJzvqYwiTOnEVW2S4CoYcuKJkomat7bMXA/UoUZQ==}
- '@vitejs/plugin-legacy@6.1.1':
- resolution: {integrity: sha512-BvusL+mYZ0q5qS5Rq3D70QxZBmhyiHRaXLtYJHH5AEsAmdSqJR4xe5KwMi1H3w8/9lVJwhkLYqFQ9vmWYWy6kA==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ '@vitejs/plugin-legacy@7.2.1':
+ resolution: {integrity: sha512-CaXb/y0mlfu7jQRELEJJc2/5w2bX2m1JraARgFnvSB2yfvnCNJVWWlqAo6WjnKoepOwKx8gs0ugJThPLKCOXIg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
terser: ^5.16.0
- vite: ^6.0.0
+ vite: ^7.0.0
- '@vitejs/plugin-vue@5.2.4':
- resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
- engines: {node: ^18.0.0 || >=20.0.0}
+ '@vitejs/plugin-vue@6.0.1':
+ resolution: {integrity: sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- vite: ^5.0.0 || ^6.0.0
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0
vue: ^3.2.25
- '@volar/language-core@2.4.15':
- resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==}
+ '@volar/language-core@2.4.23':
+ resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==}
- '@volar/source-map@2.4.15':
- resolution: {integrity: sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==}
+ '@volar/source-map@2.4.23':
+ resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==}
- '@volar/typescript@2.4.15':
- resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==}
+ '@volar/typescript@2.4.23':
+ resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==}
'@vue/compiler-core@3.5.24':
resolution: {integrity: sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==}
@@ -1361,12 +1274,18 @@ packages:
'@vue/compiler-ssr@3.5.24':
resolution: {integrity: sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==}
- '@vue/compiler-vue2@2.7.16':
- resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
-
'@vue/devtools-api@6.6.4':
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
+ '@vue/devtools-api@7.7.8':
+ resolution: {integrity: sha512-BtFcAmDbtXGwurWUFf8ogIbgZyR+rcVES1TSNEI8Em80fD8Anu+qTRN1Fc3J6vdRHlVM3fzPV1qIo+B4AiqGzw==}
+
+ '@vue/devtools-kit@7.7.8':
+ resolution: {integrity: sha512-4Y8op+AoxOJhB9fpcEF6d5vcJXWKgHxC3B0ytUB8zz15KbP9g9WgVzral05xluxi2fOeAy6t140rdQ943GcLRQ==}
+
+ '@vue/devtools-shared@7.7.8':
+ resolution: {integrity: sha512-XHpO3jC5nOgYr40M9p8Z4mmKfTvUxKyRcUnpBAYg11pE78eaRFBKb0kG5yKLroMuJeeNH9LWmKp2zMU5LUc7CA==}
+
'@vue/eslint-config-prettier@10.2.0':
resolution: {integrity: sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==}
peerDependencies:
@@ -1384,8 +1303,8 @@ packages:
typescript:
optional: true
- '@vue/language-core@2.2.12':
- resolution: {integrity: sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==}
+ '@vue/language-core@3.1.3':
+ resolution: {integrity: sha512-KpR1F/eGAG9D1RZ0/T6zWJs6dh/pRLfY5WupecyYKJ1fjVmDMgTPw9wXmKv2rBjo4zCJiOSiyB8BDP1OUwpMEA==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
@@ -1409,8 +1328,8 @@ packages:
'@vue/shared@3.5.24':
resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==}
- '@vue/tsconfig@0.7.0':
- resolution: {integrity: sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==}
+ '@vue/tsconfig@0.8.1':
+ resolution: {integrity: sha512-aK7feIWPXFSUhsCP9PFqPyFOcz4ENkb8hZ2pneL6m2UjCkccvaOhC/5KCKluuBufvp2KzkbdA2W2pk20vLzu3g==}
peerDependencies:
typescript: 5.x
vue: ^3.4.0
@@ -1420,11 +1339,13 @@ packages:
vue:
optional: true
- '@vueuse/core@12.8.2':
- resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==}
+ '@vueuse/core@14.0.0':
+ resolution: {integrity: sha512-d6tKRWkZE8IQElX2aHBxXOMD478fHIYV+Dzm2y9Ag122ICBpNKtGICiXKOhWU3L1kKdttDD9dCMS4bGP3jhCTQ==}
+ peerDependencies:
+ vue: ^3.5.0
- '@vueuse/integrations@12.8.2':
- resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==}
+ '@vueuse/integrations@14.0.0':
+ resolution: {integrity: sha512-5A0X7q9qyLtM3xyghq5nK/NEESf7cpcZlkQgXTMuW4JWiAMYxc1ImdhhGrk4negFBsq3ejvAlRmLdNrkcTzk1Q==}
peerDependencies:
async-validator: ^4
axios: ^1
@@ -1437,7 +1358,8 @@ packages:
nprogress: ^0.2
qrcode: ^1.5
sortablejs: ^1
- universal-cookie: ^7
+ universal-cookie: ^7 || ^8
+ vue: ^3.5.0
peerDependenciesMeta:
async-validator:
optional: true
@@ -1464,11 +1386,13 @@ packages:
universal-cookie:
optional: true
- '@vueuse/metadata@12.8.2':
- resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==}
+ '@vueuse/metadata@14.0.0':
+ resolution: {integrity: sha512-6yoGqbJcMldVCevkFiHDBTB1V5Hq+G/haPlGIuaFZHpXC0HADB0EN1ryQAAceiW+ryS3niUwvdFbGiqHqBrfVA==}
- '@vueuse/shared@12.8.2':
- resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==}
+ '@vueuse/shared@14.0.0':
+ resolution: {integrity: sha512-mTCA0uczBgurRlwVaQHfG0Ja7UdGe4g9mwffiJmvLiTtp1G4AQyIjej6si/k8c8pUwTfVpNufck+23gXptPAkw==}
+ peerDependencies:
+ vue: ^3.5.0
'@xmldom/xmldom@0.7.13':
resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==}
@@ -1495,19 +1419,11 @@ packages:
aes-decrypter@4.0.2:
resolution: {integrity: sha512-lc+/9s6iJvuaRe5qDlMTpCFjnwpkeOXp8qP3oiZ5jsj1MRg+SBVUmmICrhxHvc8OELSmc+fEyyxAuppY6hrWzw==}
- agent-base@7.1.3:
- resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
- engines: {node: '>= 14'}
-
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
- alien-signals@1.0.13:
- resolution: {integrity: sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==}
-
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
+ alien-signals@3.1.0:
+ resolution: {integrity: sha512-yufC6VpSy8tK3I0lO67pjumo5JvDQVQyr38+3OHqe6CHl1t2VZekKZ7EKKZSqk0cRmE7U7tfZbpXiKNzuc+ckg==}
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
@@ -1545,6 +1461,9 @@ packages:
resolution: {integrity: sha512-73lC1ugzwoaWCLJ1LvOgrR5xsMLTqSKIEoMHVtL9E/HNk0PXtTM76ZIm84856/SF7Nv8mPZxKoBsgpm0tR1u1Q==}
hasBin: true
+ birpc@2.8.0:
+ resolution: {integrity: sha512-Bz2a4qD/5GRhiHSwj30c/8kC8QGj12nNDwz3D4ErQ4Xhy35dsSDvF+RA/tWpjyU0pdGtSDiEk6B5fBGE1qNVhw==}
+
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
@@ -1584,10 +1503,6 @@ packages:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
- cliui@8.0.1:
- resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
- engines: {node: '>=12'}
-
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@@ -1604,17 +1519,13 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- concurrently@9.2.1:
- resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==}
- engines: {node: '>=18'}
- hasBin: true
-
- confbox@0.1.8:
- resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
-
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ copy-anything@4.0.5:
+ resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
+ engines: {node: '>=18'}
+
core-js-compat@3.46.0:
resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==}
@@ -1633,10 +1544,6 @@ packages:
engines: {node: '>=4'}
hasBin: true
- cssstyle@4.2.1:
- resolution: {integrity: sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==}
- engines: {node: '>=18'}
-
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
@@ -1647,25 +1554,9 @@ packages:
resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==}
engines: {node: '>=0.12'}
- data-urls@5.0.0:
- resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
- engines: {node: '>=18'}
-
dayjs@1.11.19:
resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
- de-indent@1.0.2:
- resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
-
- debug@4.4.0:
- resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
@@ -1675,9 +1566,6 @@ packages:
supports-color:
optional: true
- decimal.js@10.5.0:
- resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
-
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -1690,9 +1578,6 @@ packages:
electron-to-chromium@1.5.250:
resolution: {integrity: sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==}
- emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
@@ -1749,15 +1634,19 @@ packages:
eslint-config-prettier:
optional: true
- eslint-plugin-vue@9.33.0:
- resolution: {integrity: sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==}
- engines: {node: ^14.17.0 || >=16.0.0}
+ eslint-plugin-vue@10.5.1:
+ resolution: {integrity: sha512-SbR9ZBUFKgvWAbq3RrdCtWaW0IKm6wwUiApxf3BVTNfqUIo4IQQmreMg2iHFJJ6C/0wss3LXURBJ1OwS/MhFcQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
-
- eslint-scope@7.2.2:
- resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
+ '@typescript-eslint/parser': ^7.0.0 || ^8.0.0
+ eslint: ^8.57.0 || ^9.0.0
+ vue-eslint-parser: ^10.0.0
+ peerDependenciesMeta:
+ '@stylistic/eslint-plugin':
+ optional: true
+ '@typescript-eslint/parser':
+ optional: true
eslint-scope@8.4.0:
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
@@ -1855,9 +1744,9 @@ packages:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
- filesize@10.1.6:
- resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==}
- engines: {node: '>= 10.4.0'}
+ filesize@11.0.13:
+ resolution: {integrity: sha512-mYJ/qXKvREuO0uH8LTQJ6v7GsUvVOguqxg2VTwQUkyTPXXRRWPdjuUPVqdBrJQhvci48OHlNGRnux+Slr2Rnvw==}
+ engines: {node: '>= 10.8.0'}
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
@@ -1880,11 +1769,6 @@ packages:
fraction.js@5.3.4:
resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
- fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
-
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -1897,10 +1781,6 @@ packages:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
- get-caller-file@2.0.5:
- resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
- engines: {node: 6.* || 8.* || >= 10.*}
-
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -1912,10 +1792,6 @@ packages:
global@4.4.0:
resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==}
- globals@13.24.0:
- resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
- engines: {node: '>=8'}
-
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -1934,25 +1810,8 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
- he@1.2.0:
- resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
- hasBin: true
-
- html-encoding-sniffer@4.0.0:
- resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
- engines: {node: '>=18'}
-
- http-proxy-agent@7.0.2:
- resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
- engines: {node: '>= 14'}
-
- https-proxy-agent@7.0.6:
- resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
- engines: {node: '>= 14'}
-
- iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
+ hookable@5.5.3:
+ resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
@@ -1984,10 +1843,6 @@ packages:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
- is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
-
is-function@1.0.2:
resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==}
@@ -1999,13 +1854,14 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
- is-potential-custom-element-name@1.0.1:
- resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
-
is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
+ is-what@5.5.0:
+ resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
+ engines: {node: '>=18'}
+
isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
@@ -2022,15 +1878,6 @@ packages:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
- jsdom@26.1.0:
- resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==}
- engines: {node: '>=18'}
- peerDependencies:
- canvas: ^3.0.0
- peerDependenciesMeta:
- canvas:
- optional: true
-
jsesc@3.1.0:
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
engines: {node: '>=6'}
@@ -2117,9 +1964,6 @@ packages:
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
- lru-cache@10.4.3:
- resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
-
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
@@ -2129,9 +1973,9 @@ packages:
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
- marked@15.0.12:
- resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==}
- engines: {node: '>= 18'}
+ marked@17.0.0:
+ resolution: {integrity: sha512-KkDYEWEEiYJw/KC+DVm1zzlpMQSMIu6YRltkcCvwheCp8HWPXCk9JwOmHJKBlGfzcpzcIt6x3sMnTsRm/51oDg==}
+ engines: {node: '>= 20'}
hasBin: true
marks-pane@1.0.9:
@@ -2162,8 +2006,8 @@ packages:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
- mlly@1.7.4:
- resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
mpd-parser@1.3.1:
resolution: {integrity: sha512-1FuyEWI5k2HcmhS1HkKnUAQV7yFPfXPht2DnRRGtoiiAAW+ESTbtEXIDpRkwdU+XyrQuwrIym7UkoPKsZ0SyFw==}
@@ -2204,9 +2048,6 @@ packages:
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
- nwsapi@2.2.16:
- resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==}
-
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -2226,9 +2067,6 @@ packages:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
- parse5@7.2.1:
- resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
-
path-browserify@1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
@@ -2246,11 +2084,11 @@ packages:
path-webpack@0.0.3:
resolution: {integrity: sha512-AmeDxedoo5svf7aB3FYqSAKqMxys014lVKBzy1o/5vv9CtU7U4wgGWL1dA2o6MOzcD53ScN4Jmiq6VbtLz1vIQ==}
- pathe@1.1.2:
- resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
- pathe@2.0.2:
- resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==}
+ perfect-debounce@1.0.0:
+ resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -2263,11 +2101,11 @@ packages:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
- pinia@2.3.1:
- resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==}
+ pinia@3.0.4:
+ resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==}
peerDependencies:
- typescript: '>=4.4.4'
- vue: ^2.7.0 || ^3.5.11
+ typescript: '>=4.5.0'
+ vue: ^3.5.11
peerDependenciesMeta:
typescript:
optional: true
@@ -2276,19 +2114,6 @@ packages:
resolution: {integrity: sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ==}
hasBin: true
- pkg-types@1.3.1:
- resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
-
- playwright-core@1.56.1:
- resolution: {integrity: sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==}
- engines: {node: '>=18'}
- hasBin: true
-
- playwright@1.56.1:
- resolution: {integrity: sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==}
- engines: {node: '>=18'}
- hasBin: true
-
postcss-selector-parser@6.1.2:
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
engines: {node: '>=4'}
@@ -2313,9 +2138,9 @@ packages:
engines: {node: '>=14'}
hasBin: true
- pretty-bytes@6.1.1:
- resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
- engines: {node: ^14.13.1 || >=16.0.0}
+ pretty-bytes@7.1.0:
+ resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==}
+ engines: {node: '>=20'}
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
@@ -2366,10 +2191,6 @@ packages:
resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==}
hasBin: true
- require-directory@2.1.1:
- resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
- engines: {node: '>=0.10.0'}
-
requires-port@1.0.0:
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
@@ -2390,30 +2211,20 @@ packages:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
rollup@4.52.5:
resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
- rrweb-cssom@0.8.0:
- resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
-
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
- rxjs@7.8.2:
- resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
-
safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
- safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
- saxes@6.0.0:
- resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
- engines: {node: '>=v12.22.7'}
-
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -2434,10 +2245,6 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
- shell-quote@1.8.3:
- resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
- engines: {node: '>= 0.4'}
-
signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
@@ -2452,36 +2259,29 @@ packages:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
- string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
+ speakingurl@14.0.1:
+ resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
+ engines: {node: '>=0.10.0'}
string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
- strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
-
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ superjson@2.2.5:
+ resolution: {integrity: sha512-zWPTX96LVsA/eVYnqOM2+ofcdPqdS1dAF1LN4TS2/MWuUpfitd9ctTa87wt4xrYnZnkLtS69xpBdSxVBP5Rm6w==}
+ engines: {node: '>=16'}
+
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
- supports-color@8.1.1:
- resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
- engines: {node: '>=10'}
-
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- symbol-tree@3.2.4:
- resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
-
synckit@0.11.11:
resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==}
engines: {node: ^14.18.0 || >=16.0.0}
@@ -2504,38 +2304,16 @@ packages:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
- tldts-core@6.1.74:
- resolution: {integrity: sha512-gTwtY6L2GfuxiL4CWpLknv9JDYYqBvKCk/BT5uAaAvCA0s6pzX7lr2IrkQZSUlnSjRHIjTl8ZwKCVXJ7XNRWYw==}
-
- tldts@6.1.74:
- resolution: {integrity: sha512-O5vTZ1UmmEmrLl/59U9igitnSMlprALLaLgbv//dEvjobPT9vyURhHXKMCDLEhn3qxZFIkb9PwAfNYV0Ol7RPQ==}
- hasBin: true
-
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
- tough-cookie@5.1.2:
- resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
- engines: {node: '>=16'}
-
- tr46@5.1.1:
- resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
- engines: {node: '>=18'}
-
- tree-kill@1.2.2:
- resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
- hasBin: true
-
ts-api-utils@2.1.0:
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.8.4'
- tslib@2.8.1:
- resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
-
tus-js-client@4.3.1:
resolution: {integrity: sha512-ZLeYmjrkaU1fUsKbIi8JML52uAocjEZtBx4DKjRrqzrZa0O4MYwT6db+oqePlspV+FxXJAyFBc/L5gwUi2OFsg==}
engines: {node: '>=18'}
@@ -2544,10 +2322,6 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
- type-fest@0.20.2:
- resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
- engines: {node: '>=10'}
-
type@2.7.3:
resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==}
@@ -2558,16 +2332,13 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
- typescript@5.6.3:
- resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
hasBin: true
- ufo@1.5.4:
- resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
-
- undici-types@6.21.0:
- resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
unicode-canonical-property-names-ecmascript@2.0.1:
resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
@@ -2585,9 +2356,9 @@ packages:
resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==}
engines: {node: '>=4'}
- unplugin@1.16.1:
- resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
- engines: {node: '>=14.0.0'}
+ unplugin@2.3.10:
+ resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==}
+ engines: {node: '>=18.12.0'}
update-browserslist-db@1.1.4:
resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
@@ -2631,24 +2402,22 @@ packages:
videojs-vtt.js@0.15.5:
resolution: {integrity: sha512-yZbBxvA7QMYn15Lr/ZfhhLPrNpI/RmCSCqgIff57GC2gIrV5YfyzLfLyZMj0NnZSAz8syB4N0nHXpZg9MyrMOQ==}
- vite-plugin-compression2@1.4.0:
- resolution: {integrity: sha512-UEk0Bq1IkkwqbDLoLOHZ8WTmN1QbvR28fvNl2liB88/6SG1oLrTVkxfjqW3pdla/rKQ6QXn+pJpv3GBbl+k56g==}
- peerDependencies:
- vite: ^2.0.0||^3.0.0||^4.0.0||^5.0.0 ||^6.0.0
+ vite-plugin-compression2@2.3.1:
+ resolution: {integrity: sha512-bnhLTsurtvOiiP6EMISIKVsOMCeTAjE6FJbyqQus3W4mtAxF7pCuC4puUIAiCgNs98tOCpqo6GIXJXTLufzIaw==}
- vite@6.4.1:
- resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ vite@7.2.2:
+ resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
- '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ '@types/node': ^20.19.0 || >=22.12.0
jiti: '>=1.21.0'
- less: '*'
+ less: ^4.0.0
lightningcss: ^1.21.0
- sass: '*'
- sass-embedded: '*'
- stylus: '*'
- sugarss: '*'
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
@@ -2679,29 +2448,12 @@ packages:
vscode-uri@3.1.0:
resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
- vue-demi@0.14.10:
- resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
- engines: {node: '>=12'}
- hasBin: true
- peerDependencies:
- '@vue/composition-api': ^1.0.0-rc.1
- vue: ^3.0.0-0 || ^2.6.0
- peerDependenciesMeta:
- '@vue/composition-api':
- optional: true
-
vue-eslint-parser@10.2.0:
resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
- vue-eslint-parser@9.4.3:
- resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==}
- engines: {node: ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: '>=6.0.0'
-
vue-final-modal@4.5.5:
resolution: {integrity: sha512-A6xgsXqE6eLw9e6Tq/W6pxDBmimPuSuvq20WL9TOZpZy7itPdGeNn8e1P15PCGqP2yHM3q2gJIchPY9ZJd8YsA==}
peerDependencies:
@@ -2732,8 +2484,8 @@ packages:
peerDependencies:
vue: ^3.0.2
- vue-tsc@2.2.12:
- resolution: {integrity: sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==}
+ vue-tsc@3.1.3:
+ resolution: {integrity: sha512-StMNfZHwPIXQgY3KxPKM0Jsoc8b46mDV3Fn2UlHCBIwRJApjqrSwqeMYgWf0zpN+g857y74pv7GWuBm+UqQe1w==}
hasBin: true
peerDependencies:
typescript: '>=5.0.0'
@@ -2746,29 +2498,9 @@ packages:
typescript:
optional: true
- w3c-xmlserializer@5.0.0:
- resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
- engines: {node: '>=18'}
-
- webidl-conversions@7.0.0:
- resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
- engines: {node: '>=12'}
-
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
- whatwg-encoding@3.1.1:
- resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
- engines: {node: '>=18'}
-
- whatwg-mimetype@4.0.0:
- resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
- engines: {node: '>=18'}
-
- whatwg-url@14.2.0:
- resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
- engines: {node: '>=18'}
-
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@@ -2778,37 +2510,10 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
- wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
-
- ws@8.18.0:
- resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
-
xml-name-validator@4.0.0:
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
engines: {node: '>=12'}
- xml-name-validator@5.0.0:
- resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
- engines: {node: '>=18'}
-
- xmlchars@2.2.0:
- resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
-
- y18n@5.0.8:
- resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
- engines: {node: '>=10'}
-
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
@@ -2821,28 +2526,12 @@ packages:
engines: {node: '>= 14'}
hasBin: true
- yargs-parser@21.1.1:
- resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
- engines: {node: '>=12'}
-
- yargs@17.7.2:
- resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
- engines: {node: '>=12'}
-
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
snapshots:
- '@asamuzakjp/css-color@2.8.3':
- dependencies:
- '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-tokenizer': 3.0.3
- lru-cache: 10.4.3
-
'@babel/code-frame@7.27.1':
dependencies:
'@babel/helper-validator-identifier': 7.28.5
@@ -3497,29 +3186,9 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@chenfengyuan/vue-number-input@2.0.1(vue@3.5.24(typescript@5.6.3))':
+ '@chenfengyuan/vue-number-input@2.0.1(vue@3.5.24(typescript@5.9.3))':
dependencies:
- vue: 3.5.24(typescript@5.6.3)
-
- '@csstools/color-helpers@5.0.1': {}
-
- '@csstools/css-calc@2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
- dependencies:
- '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-tokenizer': 3.0.3
-
- '@csstools/css-color-parser@3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
- dependencies:
- '@csstools/color-helpers': 5.0.1
- '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-tokenizer': 3.0.3
-
- '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)':
- dependencies:
- '@csstools/css-tokenizer': 3.0.3
-
- '@csstools/css-tokenizer@3.0.3': {}
+ vue: 3.5.24(typescript@5.9.3)
'@esbuild/aix-ppc64@0.25.11':
optional: true
@@ -3599,11 +3268,6 @@ snapshots:
'@esbuild/win32-x64@0.25.11':
optional: true
- '@eslint-community/eslint-utils@4.4.1(eslint@9.39.1)':
- dependencies:
- eslint: 9.39.1
- eslint-visitor-keys: 3.4.3
-
'@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)':
dependencies:
eslint: 9.39.1
@@ -3661,19 +3325,19 @@ snapshots:
'@humanwhocodes/retry@0.4.3': {}
- '@intlify/bundle-utils@10.0.1(vue-i18n@11.1.12(vue@3.5.24(typescript@5.6.3)))':
+ '@intlify/bundle-utils@11.0.1(vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3)))':
dependencies:
- '@intlify/message-compiler': 11.1.2
- '@intlify/shared': 11.1.7
+ '@intlify/message-compiler': 11.1.12
+ '@intlify/shared': 11.1.12
acorn: 8.15.0
+ esbuild: 0.25.11
escodegen: 2.1.0
estree-walker: 2.0.2
jsonc-eslint-parser: 2.4.0
- mlly: 1.7.4
source-map-js: 1.2.1
yaml-eslint-parser: 1.2.3
optionalDependencies:
- vue-i18n: 11.1.12(vue@3.5.24(typescript@5.6.3))
+ vue-i18n: 11.1.12(vue@3.5.24(typescript@5.9.3))
'@intlify/core-base@11.1.12':
dependencies:
@@ -3685,37 +3349,25 @@ snapshots:
'@intlify/shared': 11.1.12
source-map-js: 1.2.1
- '@intlify/message-compiler@11.1.2':
- dependencies:
- '@intlify/shared': 11.1.2
- source-map-js: 1.2.1
-
'@intlify/shared@11.1.12': {}
- '@intlify/shared@11.1.2': {}
-
- '@intlify/shared@11.1.7': {}
-
- '@intlify/unplugin-vue-i18n@6.0.8(@vue/compiler-dom@3.5.24)(eslint@9.39.1)(rollup@4.52.5)(typescript@5.6.3)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.6.3)))(vue@3.5.24(typescript@5.6.3))':
+ '@intlify/unplugin-vue-i18n@11.0.1(@vue/compiler-dom@3.5.24)(eslint@9.39.1)(rollup@4.52.5)(typescript@5.9.3)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3))':
dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@9.39.1)
- '@intlify/bundle-utils': 10.0.1(vue-i18n@11.1.12(vue@3.5.24(typescript@5.6.3)))
- '@intlify/shared': 11.1.7
- '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.7)(@vue/compiler-dom@3.5.24)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.6.3)))(vue@3.5.24(typescript@5.6.3))
- '@rollup/pluginutils': 5.1.4(rollup@4.52.5)
- '@typescript-eslint/scope-manager': 8.21.0
- '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.6.3)
- debug: 4.4.0
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ '@intlify/bundle-utils': 11.0.1(vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3)))
+ '@intlify/shared': 11.1.12
+ '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.12)(@vue/compiler-dom@3.5.24)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3))
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.5)
+ '@typescript-eslint/scope-manager': 8.46.4
+ '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3)
+ debug: 4.4.3
fast-glob: 3.3.3
- js-yaml: 4.1.0
- json5: 2.2.3
- pathe: 1.1.2
+ pathe: 2.0.3
picocolors: 1.1.1
- source-map-js: 1.2.1
- unplugin: 1.16.1
- vue: 3.5.24(typescript@5.6.3)
+ unplugin: 2.3.10
+ vue: 3.5.24(typescript@5.9.3)
optionalDependencies:
- vue-i18n: 11.1.12(vue@3.5.24(typescript@5.6.3))
+ vue-i18n: 11.1.12(vue@3.5.24(typescript@5.9.3))
transitivePeerDependencies:
- '@vue/compiler-dom'
- eslint
@@ -3723,14 +3375,14 @@ snapshots:
- supports-color
- typescript
- '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.7)(@vue/compiler-dom@3.5.24)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.6.3)))(vue@3.5.24(typescript@5.6.3))':
+ '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.12)(@vue/compiler-dom@3.5.24)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3))':
dependencies:
'@babel/parser': 7.28.5
optionalDependencies:
- '@intlify/shared': 11.1.7
+ '@intlify/shared': 11.1.12
'@vue/compiler-dom': 3.5.24
- vue: 3.5.24(typescript@5.6.3)
- vue-i18n: 11.1.12(vue@3.5.24(typescript@5.6.3))
+ vue: 3.5.24(typescript@5.9.3)
+ vue-i18n: 11.1.12(vue@3.5.24(typescript@5.9.3))
'@jridgewell/gen-mapping@0.3.13':
dependencies:
@@ -3770,17 +3422,7 @@ snapshots:
'@pkgr/core@0.2.9': {}
- '@playwright/test@1.56.1':
- dependencies:
- playwright: 1.56.1
-
- '@rollup/pluginutils@5.1.4(rollup@4.52.5)':
- dependencies:
- '@types/estree': 1.0.8
- estree-walker: 2.0.2
- picomatch: 4.0.3
- optionalDependencies:
- rollup: 4.52.5
+ '@rolldown/pluginutils@1.0.0-beta.29': {}
'@rollup/pluginutils@5.3.0(rollup@4.52.5)':
dependencies:
@@ -3856,7 +3498,7 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.52.5':
optional: true
- '@tsconfig/node22@22.0.2': {}
+ '@tsconfig/node24@24.0.2': {}
'@types/estree@1.0.8': {}
@@ -3872,84 +3514,79 @@ snapshots:
'@types/lodash@4.17.13': {}
- '@types/node@22.19.1':
+ '@types/node@24.10.1':
dependencies:
- undici-types: 6.21.0
+ undici-types: 7.16.0
'@types/trusted-types@2.0.7':
optional: true
'@types/web-bluetooth@0.0.21': {}
- '@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.6.3))(eslint@9.39.1)(typescript@5.6.3)':
+ '@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.37.0(eslint@9.39.1)(typescript@5.6.3)
+ '@typescript-eslint/parser': 8.37.0(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/scope-manager': 8.37.0
- '@typescript-eslint/type-utils': 8.37.0(eslint@9.39.1)(typescript@5.6.3)
- '@typescript-eslint/utils': 8.37.0(eslint@9.39.1)(typescript@5.6.3)
+ '@typescript-eslint/type-utils': 8.37.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.37.0(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.37.0
eslint: 9.39.1
graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
- ts-api-utils: 2.1.0(typescript@5.6.3)
- typescript: 5.6.3
+ ts-api-utils: 2.1.0(typescript@5.9.3)
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.6.3))(eslint@9.39.1)(typescript@5.6.3)':
+ '@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.37.0(eslint@9.39.1)(typescript@5.6.3)
+ '@typescript-eslint/parser': 8.37.0(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/scope-manager': 8.46.4
- '@typescript-eslint/type-utils': 8.46.4(eslint@9.39.1)(typescript@5.6.3)
- '@typescript-eslint/utils': 8.46.4(eslint@9.39.1)(typescript@5.6.3)
+ '@typescript-eslint/type-utils': 8.46.4(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.46.4(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.46.4
eslint: 9.39.1
graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
- ts-api-utils: 2.1.0(typescript@5.6.3)
- typescript: 5.6.3
+ ts-api-utils: 2.1.0(typescript@5.9.3)
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.6.3)':
+ '@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.37.0
'@typescript-eslint/types': 8.37.0
- '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.6.3)
+ '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.37.0
debug: 4.4.3
eslint: 9.39.1
- typescript: 5.6.3
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.37.0(typescript@5.6.3)':
+ '@typescript-eslint/project-service@8.37.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.6.3)
+ '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.9.3)
'@typescript-eslint/types': 8.37.0
debug: 4.4.3
- typescript: 5.6.3
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.46.4(typescript@5.6.3)':
+ '@typescript-eslint/project-service@8.46.4(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.6.3)
+ '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3)
'@typescript-eslint/types': 8.46.4
debug: 4.4.3
- typescript: 5.6.3
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.21.0':
- dependencies:
- '@typescript-eslint/types': 8.21.0
- '@typescript-eslint/visitor-keys': 8.21.0
-
'@typescript-eslint/scope-manager@8.37.0':
dependencies:
'@typescript-eslint/types': 8.37.0
@@ -3960,62 +3597,46 @@ snapshots:
'@typescript-eslint/types': 8.46.4
'@typescript-eslint/visitor-keys': 8.46.4
- '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.6.3)':
+ '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.9.3)':
dependencies:
- typescript: 5.6.3
+ typescript: 5.9.3
- '@typescript-eslint/tsconfig-utils@8.46.4(typescript@5.6.3)':
+ '@typescript-eslint/tsconfig-utils@8.46.4(typescript@5.9.3)':
dependencies:
- typescript: 5.6.3
+ typescript: 5.9.3
- '@typescript-eslint/type-utils@8.37.0(eslint@9.39.1)(typescript@5.6.3)':
+ '@typescript-eslint/type-utils@8.37.0(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
'@typescript-eslint/types': 8.37.0
- '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.6.3)
- '@typescript-eslint/utils': 8.37.0(eslint@9.39.1)(typescript@5.6.3)
+ '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.37.0(eslint@9.39.1)(typescript@5.9.3)
debug: 4.4.3
eslint: 9.39.1
- ts-api-utils: 2.1.0(typescript@5.6.3)
- typescript: 5.6.3
+ ts-api-utils: 2.1.0(typescript@5.9.3)
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/type-utils@8.46.4(eslint@9.39.1)(typescript@5.6.3)':
+ '@typescript-eslint/type-utils@8.46.4(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
'@typescript-eslint/types': 8.46.4
- '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.6.3)
- '@typescript-eslint/utils': 8.46.4(eslint@9.39.1)(typescript@5.6.3)
+ '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.46.4(eslint@9.39.1)(typescript@5.9.3)
debug: 4.4.3
eslint: 9.39.1
- ts-api-utils: 2.1.0(typescript@5.6.3)
- typescript: 5.6.3
+ ts-api-utils: 2.1.0(typescript@5.9.3)
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.21.0': {}
-
'@typescript-eslint/types@8.37.0': {}
'@typescript-eslint/types@8.46.4': {}
- '@typescript-eslint/typescript-estree@8.21.0(typescript@5.6.3)':
+ '@typescript-eslint/typescript-estree@8.37.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.21.0
- '@typescript-eslint/visitor-keys': 8.21.0
- debug: 4.4.0
- fast-glob: 3.3.3
- is-glob: 4.0.3
- minimatch: 9.0.5
- semver: 7.7.3
- ts-api-utils: 2.1.0(typescript@5.6.3)
- typescript: 5.6.3
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/typescript-estree@8.37.0(typescript@5.6.3)':
- dependencies:
- '@typescript-eslint/project-service': 8.37.0(typescript@5.6.3)
- '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.6.3)
+ '@typescript-eslint/project-service': 8.37.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.9.3)
'@typescript-eslint/types': 8.37.0
'@typescript-eslint/visitor-keys': 8.37.0
debug: 4.4.3
@@ -4023,15 +3644,15 @@ snapshots:
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.3
- ts-api-utils: 2.1.0(typescript@5.6.3)
- typescript: 5.6.3
+ ts-api-utils: 2.1.0(typescript@5.9.3)
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/typescript-estree@8.46.4(typescript@5.6.3)':
+ '@typescript-eslint/typescript-estree@8.46.4(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.46.4(typescript@5.6.3)
- '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.6.3)
+ '@typescript-eslint/project-service': 8.46.4(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3)
'@typescript-eslint/types': 8.46.4
'@typescript-eslint/visitor-keys': 8.46.4
debug: 4.4.3
@@ -4039,38 +3660,33 @@ snapshots:
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.3
- ts-api-utils: 2.1.0(typescript@5.6.3)
- typescript: 5.6.3
+ ts-api-utils: 2.1.0(typescript@5.9.3)
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.37.0(eslint@9.39.1)(typescript@5.6.3)':
+ '@typescript-eslint/utils@8.37.0(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
'@typescript-eslint/scope-manager': 8.37.0
'@typescript-eslint/types': 8.37.0
- '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.6.3)
+ '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.9.3)
eslint: 9.39.1
- typescript: 5.6.3
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.46.4(eslint@9.39.1)(typescript@5.6.3)':
+ '@typescript-eslint/utils@8.46.4(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
'@typescript-eslint/scope-manager': 8.46.4
'@typescript-eslint/types': 8.46.4
- '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.6.3)
+ '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3)
eslint: 9.39.1
- typescript: 5.6.3
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.21.0':
- dependencies:
- '@typescript-eslint/types': 8.21.0
- eslint-visitor-keys: 4.2.1
-
'@typescript-eslint/visitor-keys@8.37.0':
dependencies:
'@typescript-eslint/types': 8.37.0
@@ -4103,10 +3719,14 @@ snapshots:
global: 4.4.0
is-function: 1.0.2
- '@vitejs/plugin-legacy@6.1.1(terser@5.44.1)(vite@6.4.1(@types/node@22.19.1)(terser@5.44.1)(yaml@2.7.0))':
+ '@vitejs/plugin-legacy@7.2.1(terser@5.44.1)(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))':
dependencies:
'@babel/core': 7.28.5
+ '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.28.5)
'@babel/preset-env': 7.28.5(@babel/core@7.28.5)
+ babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5)
+ babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5)
browserslist: 4.28.0
browserslist-to-esbuild: 2.1.1(browserslist@4.28.0)
core-js: 3.46.0
@@ -4114,24 +3734,25 @@ snapshots:
regenerator-runtime: 0.14.1
systemjs: 6.15.1
terser: 5.44.1
- vite: 6.4.1(@types/node@22.19.1)(terser@5.44.1)(yaml@2.7.0)
+ vite: 7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@22.19.1)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.24(typescript@5.6.3))':
+ '@vitejs/plugin-vue@6.0.1(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.24(typescript@5.9.3))':
dependencies:
- vite: 6.4.1(@types/node@22.19.1)(terser@5.44.1)(yaml@2.7.0)
- vue: 3.5.24(typescript@5.6.3)
+ '@rolldown/pluginutils': 1.0.0-beta.29
+ vite: 7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0)
+ vue: 3.5.24(typescript@5.9.3)
- '@volar/language-core@2.4.15':
+ '@volar/language-core@2.4.23':
dependencies:
- '@volar/source-map': 2.4.15
+ '@volar/source-map': 2.4.23
- '@volar/source-map@2.4.15': {}
+ '@volar/source-map@2.4.23': {}
- '@volar/typescript@2.4.15':
+ '@volar/typescript@2.4.23':
dependencies:
- '@volar/language-core': 2.4.15
+ '@volar/language-core': 2.4.23
path-browserify: 1.0.1
vscode-uri: 3.1.0
@@ -4165,13 +3786,26 @@ snapshots:
'@vue/compiler-dom': 3.5.24
'@vue/shared': 3.5.24
- '@vue/compiler-vue2@2.7.16':
- dependencies:
- de-indent: 1.0.2
- he: 1.2.0
-
'@vue/devtools-api@6.6.4': {}
+ '@vue/devtools-api@7.7.8':
+ dependencies:
+ '@vue/devtools-kit': 7.7.8
+
+ '@vue/devtools-kit@7.7.8':
+ dependencies:
+ '@vue/devtools-shared': 7.7.8
+ birpc: 2.8.0
+ hookable: 5.5.3
+ mitt: 3.0.1
+ perfect-debounce: 1.0.0
+ speakingurl: 14.0.1
+ superjson: 2.2.5
+
+ '@vue/devtools-shared@7.7.8':
+ dependencies:
+ rfdc: 1.4.1
+
'@vue/eslint-config-prettier@10.2.0(eslint@9.39.1)(prettier@3.6.2)':
dependencies:
eslint: 9.39.1
@@ -4181,31 +3815,30 @@ snapshots:
transitivePeerDependencies:
- '@types/eslint'
- '@vue/eslint-config-typescript@14.6.0(eslint-plugin-vue@9.33.0(eslint@9.39.1))(eslint@9.39.1)(typescript@5.6.3)':
+ '@vue/eslint-config-typescript@14.6.0(eslint-plugin-vue@10.5.1(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1)))(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/utils': 8.37.0(eslint@9.39.1)(typescript@5.6.3)
+ '@typescript-eslint/utils': 8.37.0(eslint@9.39.1)(typescript@5.9.3)
eslint: 9.39.1
- eslint-plugin-vue: 9.33.0(eslint@9.39.1)
+ eslint-plugin-vue: 10.5.1(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1))
fast-glob: 3.3.3
- typescript-eslint: 8.37.0(eslint@9.39.1)(typescript@5.6.3)
+ typescript-eslint: 8.37.0(eslint@9.39.1)(typescript@5.9.3)
vue-eslint-parser: 10.2.0(eslint@9.39.1)
optionalDependencies:
- typescript: 5.6.3
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@vue/language-core@2.2.12(typescript@5.6.3)':
+ '@vue/language-core@3.1.3(typescript@5.9.3)':
dependencies:
- '@volar/language-core': 2.4.15
+ '@volar/language-core': 2.4.23
'@vue/compiler-dom': 3.5.24
- '@vue/compiler-vue2': 2.7.16
'@vue/shared': 3.5.24
- alien-signals: 1.0.13
- minimatch: 9.0.5
+ alien-signals: 3.1.0
muggle-string: 0.4.1
path-browserify: 1.0.1
+ picomatch: 4.0.3
optionalDependencies:
- typescript: 5.6.3
+ typescript: 5.9.3
'@vue/reactivity@3.5.24':
dependencies:
@@ -4223,46 +3856,40 @@ snapshots:
'@vue/shared': 3.5.24
csstype: 3.1.3
- '@vue/server-renderer@3.5.24(vue@3.5.24(typescript@5.6.3))':
+ '@vue/server-renderer@3.5.24(vue@3.5.24(typescript@5.9.3))':
dependencies:
'@vue/compiler-ssr': 3.5.24
'@vue/shared': 3.5.24
- vue: 3.5.24(typescript@5.6.3)
+ vue: 3.5.24(typescript@5.9.3)
'@vue/shared@3.5.24': {}
- '@vue/tsconfig@0.7.0(typescript@5.6.3)(vue@3.5.24(typescript@5.6.3))':
+ '@vue/tsconfig@0.8.1(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3))':
optionalDependencies:
- typescript: 5.6.3
- vue: 3.5.24(typescript@5.6.3)
+ typescript: 5.9.3
+ vue: 3.5.24(typescript@5.9.3)
- '@vueuse/core@12.8.2(typescript@5.6.3)':
+ '@vueuse/core@14.0.0(vue@3.5.24(typescript@5.9.3))':
dependencies:
'@types/web-bluetooth': 0.0.21
- '@vueuse/metadata': 12.8.2
- '@vueuse/shared': 12.8.2(typescript@5.6.3)
- vue: 3.5.24(typescript@5.6.3)
- transitivePeerDependencies:
- - typescript
+ '@vueuse/metadata': 14.0.0
+ '@vueuse/shared': 14.0.0(vue@3.5.24(typescript@5.9.3))
+ vue: 3.5.24(typescript@5.9.3)
- '@vueuse/integrations@12.8.2(focus-trap@7.6.2)(jwt-decode@4.0.0)(typescript@5.6.3)':
+ '@vueuse/integrations@14.0.0(focus-trap@7.6.2)(jwt-decode@4.0.0)(vue@3.5.24(typescript@5.9.3))':
dependencies:
- '@vueuse/core': 12.8.2(typescript@5.6.3)
- '@vueuse/shared': 12.8.2(typescript@5.6.3)
- vue: 3.5.24(typescript@5.6.3)
+ '@vueuse/core': 14.0.0(vue@3.5.24(typescript@5.9.3))
+ '@vueuse/shared': 14.0.0(vue@3.5.24(typescript@5.9.3))
+ vue: 3.5.24(typescript@5.9.3)
optionalDependencies:
focus-trap: 7.6.2
jwt-decode: 4.0.0
- transitivePeerDependencies:
- - typescript
- '@vueuse/metadata@12.8.2': {}
+ '@vueuse/metadata@14.0.0': {}
- '@vueuse/shared@12.8.2(typescript@5.6.3)':
+ '@vueuse/shared@14.0.0(vue@3.5.24(typescript@5.9.3))':
dependencies:
- vue: 3.5.24(typescript@5.6.3)
- transitivePeerDependencies:
- - typescript
+ vue: 3.5.24(typescript@5.9.3)
'@xmldom/xmldom@0.7.13': {}
@@ -4283,8 +3910,6 @@ snapshots:
global: 4.4.0
pkcs7: 1.0.4
- agent-base@7.1.3: {}
-
ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
@@ -4292,9 +3917,7 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- alien-signals@1.0.13: {}
-
- ansi-regex@5.0.1: {}
+ alien-signals@3.1.0: {}
ansi-styles@4.3.0:
dependencies:
@@ -4340,6 +3963,8 @@ snapshots:
baseline-browser-mapping@2.8.26: {}
+ birpc@2.8.0: {}
+
boolbase@1.0.0: {}
brace-expansion@1.1.12:
@@ -4379,12 +4004,6 @@ snapshots:
ansi-styles: 4.3.0
supports-color: 7.2.0
- cliui@8.0.1:
- dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 7.0.0
-
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
@@ -4400,19 +4019,12 @@ snapshots:
concat-map@0.0.1: {}
- concurrently@9.2.1:
- dependencies:
- chalk: 4.1.2
- rxjs: 7.8.2
- shell-quote: 1.8.3
- supports-color: 8.1.1
- tree-kill: 1.2.2
- yargs: 17.7.2
-
- confbox@0.1.8: {}
-
convert-source-map@2.0.0: {}
+ copy-anything@4.0.5:
+ dependencies:
+ is-what: 5.5.0
+
core-js-compat@3.46.0:
dependencies:
browserslist: 4.28.0
@@ -4429,11 +4041,6 @@ snapshots:
cssesc@3.0.0: {}
- cssstyle@4.2.1:
- dependencies:
- '@asamuzakjp/css-color': 2.8.3
- rrweb-cssom: 0.8.0
-
csstype@3.1.3: {}
custom-error-instance@2.1.1: {}
@@ -4443,25 +4050,12 @@ snapshots:
es5-ext: 0.10.64
type: 2.7.3
- data-urls@5.0.0:
- dependencies:
- whatwg-mimetype: 4.0.0
- whatwg-url: 14.2.0
-
dayjs@1.11.19: {}
- de-indent@1.0.2: {}
-
- debug@4.4.0:
- dependencies:
- ms: 2.1.3
-
debug@4.4.3:
dependencies:
ms: 2.1.3
- decimal.js@10.5.0: {}
-
deep-is@0.1.4: {}
dom-walk@0.1.2: {}
@@ -4472,8 +4066,6 @@ snapshots:
electron-to-chromium@1.5.250: {}
- emoji-regex@8.0.0: {}
-
entities@4.5.0: {}
epubjs@0.3.93:
@@ -4560,24 +4152,18 @@ snapshots:
optionalDependencies:
eslint-config-prettier: 10.1.8(eslint@9.39.1)
- eslint-plugin-vue@9.33.0(eslint@9.39.1):
+ eslint-plugin-vue@10.5.1(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1)):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
eslint: 9.39.1
- globals: 13.24.0
natural-compare: 1.4.0
nth-check: 2.1.1
postcss-selector-parser: 6.1.2
semver: 7.7.3
- vue-eslint-parser: 9.4.3(eslint@9.39.1)
+ vue-eslint-parser: 10.2.0(eslint@9.39.1)
xml-name-validator: 4.0.0
- transitivePeerDependencies:
- - supports-color
-
- eslint-scope@7.2.2:
- dependencies:
- esrecurse: 4.3.0
- estraverse: 5.3.0
+ optionalDependencies:
+ '@typescript-eslint/parser': 8.37.0(eslint@9.39.1)(typescript@5.9.3)
eslint-scope@8.4.0:
dependencies:
@@ -4699,7 +4285,7 @@ snapshots:
dependencies:
flat-cache: 4.0.1
- filesize@10.1.6: {}
+ filesize@11.0.13: {}
fill-range@7.1.1:
dependencies:
@@ -4723,9 +4309,6 @@ snapshots:
fraction.js@5.3.4: {}
- fsevents@2.3.2:
- optional: true
-
fsevents@2.3.3:
optional: true
@@ -4733,8 +4316,6 @@ snapshots:
gensync@1.0.0-beta.2: {}
- get-caller-file@2.0.5: {}
-
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
@@ -4748,10 +4329,6 @@ snapshots:
min-document: 2.19.2
process: 0.11.10
- globals@13.24.0:
- dependencies:
- type-fest: 0.20.2
-
globals@14.0.0: {}
graceful-fs@4.2.11: {}
@@ -4764,29 +4341,7 @@ snapshots:
dependencies:
function-bind: 1.1.2
- he@1.2.0: {}
-
- html-encoding-sniffer@4.0.0:
- dependencies:
- whatwg-encoding: 3.1.1
-
- http-proxy-agent@7.0.2:
- dependencies:
- agent-base: 7.1.3
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- https-proxy-agent@7.0.6:
- dependencies:
- agent-base: 7.1.3
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- iconv-lite@0.6.3:
- dependencies:
- safer-buffer: 2.1.2
+ hookable@5.5.3: {}
ignore@5.3.2: {}
@@ -4809,8 +4364,6 @@ snapshots:
is-extglob@2.1.1: {}
- is-fullwidth-code-point@3.0.0: {}
-
is-function@1.0.2: {}
is-glob@4.0.3:
@@ -4819,10 +4372,10 @@ snapshots:
is-number@7.0.0: {}
- is-potential-custom-element-name@1.0.1: {}
-
is-stream@2.0.1: {}
+ is-what@5.5.0: {}
+
isarray@1.0.0: {}
isexe@2.0.0: {}
@@ -4835,33 +4388,6 @@ snapshots:
dependencies:
argparse: 2.0.1
- jsdom@26.1.0:
- dependencies:
- cssstyle: 4.2.1
- data-urls: 5.0.0
- decimal.js: 10.5.0
- html-encoding-sniffer: 4.0.0
- http-proxy-agent: 7.0.2
- https-proxy-agent: 7.0.6
- is-potential-custom-element-name: 1.0.1
- nwsapi: 2.2.16
- parse5: 7.2.1
- rrweb-cssom: 0.8.0
- saxes: 6.0.0
- symbol-tree: 3.2.4
- tough-cookie: 5.1.2
- w3c-xmlserializer: 5.0.0
- webidl-conversions: 7.0.0
- whatwg-encoding: 3.1.1
- whatwg-mimetype: 4.0.0
- whatwg-url: 14.2.0
- ws: 8.18.0
- xml-name-validator: 5.0.0
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
-
jsesc@3.1.0: {}
json-buffer@3.0.1: {}
@@ -4947,8 +4473,6 @@ snapshots:
lodash@4.17.21: {}
- lru-cache@10.4.3: {}
-
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
@@ -4963,7 +4487,7 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
- marked@15.0.12: {}
+ marked@17.0.0: {}
marks-pane@1.0.9: {}
@@ -4990,12 +4514,7 @@ snapshots:
dependencies:
brace-expansion: 2.0.2
- mlly@1.7.4:
- dependencies:
- acorn: 8.15.0
- pathe: 2.0.2
- pkg-types: 1.3.1
- ufo: 1.5.4
+ mitt@3.0.1: {}
mpd-parser@1.3.1:
dependencies:
@@ -5029,8 +4548,6 @@ snapshots:
dependencies:
boolbase: 1.0.0
- nwsapi@2.2.16: {}
-
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
@@ -5054,10 +4571,6 @@ snapshots:
dependencies:
callsites: 3.1.0
- parse5@7.2.1:
- dependencies:
- entities: 4.5.0
-
path-browserify@1.0.1: {}
path-exists@4.0.0: {}
@@ -5068,9 +4581,9 @@ snapshots:
path-webpack@0.0.3: {}
- pathe@1.1.2: {}
+ pathe@2.0.3: {}
- pathe@2.0.2: {}
+ perfect-debounce@1.0.0: {}
picocolors@1.1.1: {}
@@ -5078,34 +4591,17 @@ snapshots:
picomatch@4.0.3: {}
- pinia@2.3.1(typescript@5.6.3)(vue@3.5.24(typescript@5.6.3)):
+ pinia@3.0.4(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3)):
dependencies:
- '@vue/devtools-api': 6.6.4
- vue: 3.5.24(typescript@5.6.3)
- vue-demi: 0.14.10(vue@3.5.24(typescript@5.6.3))
+ '@vue/devtools-api': 7.7.8
+ vue: 3.5.24(typescript@5.9.3)
optionalDependencies:
- typescript: 5.6.3
- transitivePeerDependencies:
- - '@vue/composition-api'
+ typescript: 5.9.3
pkcs7@1.0.4:
dependencies:
'@babel/runtime': 7.28.4
- pkg-types@1.3.1:
- dependencies:
- confbox: 0.1.8
- mlly: 1.7.4
- pathe: 2.0.2
-
- playwright-core@1.56.1: {}
-
- playwright@1.56.1:
- dependencies:
- playwright-core: 1.56.1
- optionalDependencies:
- fsevents: 2.3.2
-
postcss-selector-parser@6.1.2:
dependencies:
cssesc: 3.0.0
@@ -5127,7 +4623,7 @@ snapshots:
prettier@3.6.2: {}
- pretty-bytes@6.1.1: {}
+ pretty-bytes@7.1.0: {}
process-nextick-args@2.0.1: {}
@@ -5141,9 +4637,9 @@ snapshots:
punycode@2.3.1: {}
- qrcode.vue@3.6.0(vue@3.5.24(typescript@5.6.3)):
+ qrcode.vue@3.6.0(vue@3.5.24(typescript@5.9.3)):
dependencies:
- vue: 3.5.24(typescript@5.6.3)
+ vue: 3.5.24(typescript@5.9.3)
querystringify@2.2.0: {}
@@ -5182,8 +4678,6 @@ snapshots:
dependencies:
jsesc: 3.1.0
- require-directory@2.1.1: {}
-
requires-port@1.0.0: {}
resolve-from@4.0.0: {}
@@ -5198,6 +4692,8 @@ snapshots:
reusify@1.0.4: {}
+ rfdc@1.4.1: {}
+
rollup@4.52.5:
dependencies:
'@types/estree': 1.0.8
@@ -5226,24 +4722,12 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.52.5
fsevents: 2.3.3
- rrweb-cssom@0.8.0: {}
-
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
- rxjs@7.8.2:
- dependencies:
- tslib: 2.8.1
-
safe-buffer@5.1.2: {}
- safer-buffer@2.1.2: {}
-
- saxes@6.0.0:
- dependencies:
- xmlchars: 2.2.0
-
semver@6.3.1: {}
semver@7.7.3: {}
@@ -5256,8 +4740,6 @@ snapshots:
shebang-regex@3.0.0: {}
- shell-quote@1.8.3: {}
-
signal-exit@3.0.7: {}
source-map-js@1.2.1: {}
@@ -5269,34 +4751,24 @@ snapshots:
source-map@0.6.1: {}
- string-width@4.2.3:
- dependencies:
- emoji-regex: 8.0.0
- is-fullwidth-code-point: 3.0.0
- strip-ansi: 6.0.1
+ speakingurl@14.0.1: {}
string_decoder@1.1.1:
dependencies:
safe-buffer: 5.1.2
- strip-ansi@6.0.1:
- dependencies:
- ansi-regex: 5.0.1
-
strip-json-comments@3.1.1: {}
+ superjson@2.2.5:
+ dependencies:
+ copy-anything: 4.0.5
+
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
- supports-color@8.1.1:
- dependencies:
- has-flag: 4.0.0
-
supports-preserve-symlinks-flag@1.0.0: {}
- symbol-tree@3.2.4: {}
-
synckit@0.11.11:
dependencies:
'@pkgr/core': 0.2.9
@@ -5319,31 +4791,13 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
- tldts-core@6.1.74: {}
-
- tldts@6.1.74:
- dependencies:
- tldts-core: 6.1.74
-
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
- tough-cookie@5.1.2:
+ ts-api-utils@2.1.0(typescript@5.9.3):
dependencies:
- tldts: 6.1.74
-
- tr46@5.1.1:
- dependencies:
- punycode: 2.3.1
-
- tree-kill@1.2.2: {}
-
- ts-api-utils@2.1.0(typescript@5.6.3):
- dependencies:
- typescript: 5.6.3
-
- tslib@2.8.1: {}
+ typescript: 5.9.3
tus-js-client@4.3.1:
dependencies:
@@ -5359,26 +4813,22 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
- type-fest@0.20.2: {}
-
type@2.7.3: {}
- typescript-eslint@8.37.0(eslint@9.39.1)(typescript@5.6.3):
+ typescript-eslint@8.37.0(eslint@9.39.1)(typescript@5.9.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.6.3))(eslint@9.39.1)(typescript@5.6.3)
- '@typescript-eslint/parser': 8.37.0(eslint@9.39.1)(typescript@5.6.3)
- '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.6.3)
- '@typescript-eslint/utils': 8.37.0(eslint@9.39.1)(typescript@5.6.3)
+ '@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.37.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.37.0(eslint@9.39.1)(typescript@5.9.3)
eslint: 9.39.1
- typescript: 5.6.3
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- typescript@5.6.3: {}
+ typescript@5.9.3: {}
- ufo@1.5.4: {}
-
- undici-types@6.21.0: {}
+ undici-types@7.16.0: {}
unicode-canonical-property-names-ecmascript@2.0.1: {}
@@ -5391,9 +4841,11 @@ snapshots:
unicode-property-aliases-ecmascript@2.2.0: {}
- unplugin@1.16.1:
+ unplugin@2.3.10:
dependencies:
+ '@jridgewell/remapping': 2.3.5
acorn: 8.15.0
+ picomatch: 4.0.3
webpack-virtual-modules: 0.6.2
update-browserslist-db@1.1.4(browserslist@4.28.0):
@@ -5450,15 +4902,14 @@ snapshots:
dependencies:
global: 4.4.0
- vite-plugin-compression2@1.4.0(rollup@4.52.5)(vite@6.4.1(@types/node@22.19.1)(terser@5.44.1)(yaml@2.7.0)):
+ vite-plugin-compression2@2.3.1(rollup@4.52.5):
dependencies:
'@rollup/pluginutils': 5.3.0(rollup@4.52.5)
tar-mini: 0.2.0
- vite: 6.4.1(@types/node@22.19.1)(terser@5.44.1)(yaml@2.7.0)
transitivePeerDependencies:
- rollup
- vite@6.4.1(@types/node@22.19.1)(terser@5.44.1)(yaml@2.7.0):
+ vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0):
dependencies:
esbuild: 0.25.11
fdir: 6.5.0(picomatch@4.0.3)
@@ -5467,17 +4918,13 @@ snapshots:
rollup: 4.52.5
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 22.19.1
+ '@types/node': 24.10.1
fsevents: 2.3.3
terser: 5.44.1
yaml: 2.7.0
vscode-uri@3.1.0: {}
- vue-demi@0.14.10(vue@3.5.24(typescript@5.6.3)):
- dependencies:
- vue: 3.5.24(typescript@5.6.3)
-
vue-eslint-parser@10.2.0(eslint@9.39.1):
dependencies:
debug: 4.4.3
@@ -5490,32 +4937,19 @@ snapshots:
transitivePeerDependencies:
- supports-color
- vue-eslint-parser@9.4.3(eslint@9.39.1):
+ vue-final-modal@4.5.5(@vueuse/core@14.0.0(vue@3.5.24(typescript@5.9.3)))(@vueuse/integrations@14.0.0(focus-trap@7.6.2)(jwt-decode@4.0.0)(vue@3.5.24(typescript@5.9.3)))(focus-trap@7.6.2)(vue@3.5.24(typescript@5.9.3)):
dependencies:
- debug: 4.4.3
- eslint: 9.39.1
- eslint-scope: 7.2.2
- eslint-visitor-keys: 3.4.3
- espree: 9.6.1
- esquery: 1.6.0
- lodash: 4.17.21
- semver: 7.7.3
- transitivePeerDependencies:
- - supports-color
-
- vue-final-modal@4.5.5(@vueuse/core@12.8.2(typescript@5.6.3))(@vueuse/integrations@12.8.2(focus-trap@7.6.2)(jwt-decode@4.0.0)(typescript@5.6.3))(focus-trap@7.6.2)(vue@3.5.24(typescript@5.6.3)):
- dependencies:
- '@vueuse/core': 12.8.2(typescript@5.6.3)
- '@vueuse/integrations': 12.8.2(focus-trap@7.6.2)(jwt-decode@4.0.0)(typescript@5.6.3)
+ '@vueuse/core': 14.0.0(vue@3.5.24(typescript@5.9.3))
+ '@vueuse/integrations': 14.0.0(focus-trap@7.6.2)(jwt-decode@4.0.0)(vue@3.5.24(typescript@5.9.3))
focus-trap: 7.6.2
- vue: 3.5.24(typescript@5.6.3)
+ vue: 3.5.24(typescript@5.9.3)
- vue-i18n@11.1.12(vue@3.5.24(typescript@5.6.3)):
+ vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3)):
dependencies:
'@intlify/core-base': 11.1.12
'@intlify/shared': 11.1.12
'@vue/devtools-api': 6.6.4
- vue: 3.5.24(typescript@5.6.3)
+ vue: 3.5.24(typescript@5.9.3)
vue-lazyload@3.0.0: {}
@@ -5523,72 +4957,41 @@ snapshots:
dependencies:
epubjs: 0.3.93
- vue-router@4.6.3(vue@3.5.24(typescript@5.6.3)):
+ vue-router@4.6.3(vue@3.5.24(typescript@5.9.3)):
dependencies:
'@vue/devtools-api': 6.6.4
- vue: 3.5.24(typescript@5.6.3)
+ vue: 3.5.24(typescript@5.9.3)
- vue-toastification@2.0.0-rc.5(vue@3.5.24(typescript@5.6.3)):
+ vue-toastification@2.0.0-rc.5(vue@3.5.24(typescript@5.9.3)):
dependencies:
- vue: 3.5.24(typescript@5.6.3)
+ vue: 3.5.24(typescript@5.9.3)
- vue-tsc@2.2.12(typescript@5.6.3):
+ vue-tsc@3.1.3(typescript@5.9.3):
dependencies:
- '@volar/typescript': 2.4.15
- '@vue/language-core': 2.2.12(typescript@5.6.3)
- typescript: 5.6.3
+ '@volar/typescript': 2.4.23
+ '@vue/language-core': 3.1.3(typescript@5.9.3)
+ typescript: 5.9.3
- vue@3.5.24(typescript@5.6.3):
+ vue@3.5.24(typescript@5.9.3):
dependencies:
'@vue/compiler-dom': 3.5.24
'@vue/compiler-sfc': 3.5.24
'@vue/runtime-dom': 3.5.24
- '@vue/server-renderer': 3.5.24(vue@3.5.24(typescript@5.6.3))
+ '@vue/server-renderer': 3.5.24(vue@3.5.24(typescript@5.9.3))
'@vue/shared': 3.5.24
optionalDependencies:
- typescript: 5.6.3
-
- w3c-xmlserializer@5.0.0:
- dependencies:
- xml-name-validator: 5.0.0
-
- webidl-conversions@7.0.0: {}
+ typescript: 5.9.3
webpack-virtual-modules@0.6.2: {}
- whatwg-encoding@3.1.1:
- dependencies:
- iconv-lite: 0.6.3
-
- whatwg-mimetype@4.0.0: {}
-
- whatwg-url@14.2.0:
- dependencies:
- tr46: 5.1.1
- webidl-conversions: 7.0.0
-
which@2.0.2:
dependencies:
isexe: 2.0.0
word-wrap@1.2.5: {}
- wrap-ansi@7.0.0:
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
-
- ws@8.18.0: {}
-
xml-name-validator@4.0.0: {}
- xml-name-validator@5.0.0: {}
-
- xmlchars@2.2.0: {}
-
- y18n@5.0.8: {}
-
yallist@3.1.1: {}
yaml-eslint-parser@1.2.3:
@@ -5599,16 +5002,4 @@ snapshots:
yaml@2.7.0: {}
- yargs-parser@21.1.1: {}
-
- yargs@17.7.2:
- dependencies:
- cliui: 8.0.1
- escalade: 3.2.0
- get-caller-file: 2.0.5
- require-directory: 2.1.1
- string-width: 4.2.3
- y18n: 5.0.8
- yargs-parser: 21.1.1
-
yocto-queue@0.1.0: {}
diff --git a/filebrowser/frontend/public/index.html b/filebrowser/frontend/public/index.html
index 4675b268f9..15ff375ec7 100644
--- a/filebrowser/frontend/public/index.html
+++ b/filebrowser/frontend/public/index.html
@@ -18,9 +18,17 @@
-
+
-
+
diff --git a/filebrowser/frontend/src/css/fonts.css b/filebrowser/frontend/src/css/fonts.css
index 2e65cff6d9..fdad54b955 100644
--- a/filebrowser/frontend/src/css/fonts.css
+++ b/filebrowser/frontend/src/css/fonts.css
@@ -63,8 +63,8 @@
local("Roboto"),
local("Roboto-Regular"),
url(../assets/fonts/roboto/normal-latin-ext.woff2) format("woff2");
- unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF,
- U+2C60-2C7F, U+A720-A7FF;
+ unicode-range:
+ U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
@@ -75,8 +75,9 @@
local("Roboto"),
local("Roboto-Regular"),
url(../assets/fonts/roboto/normal-latin.woff2) format("woff2");
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC,
- U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
+ unicode-range:
+ U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F,
+ U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
}
@font-face {
@@ -142,8 +143,8 @@
local("Roboto Medium"),
local("Roboto-Medium"),
url(../assets/fonts/roboto/medium-latin-ext.woff2) format("woff2");
- unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF,
- U+2C60-2C7F, U+A720-A7FF;
+ unicode-range:
+ U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
@@ -154,8 +155,9 @@
local("Roboto Medium"),
local("Roboto-Medium"),
url(../assets/fonts/roboto/medium-latin.woff2) format("woff2");
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC,
- U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
+ unicode-range:
+ U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F,
+ U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
}
@font-face {
@@ -221,8 +223,8 @@
local("Roboto Bold"),
local("Roboto-Bold"),
url(../assets/fonts/roboto/bold-latin-ext.woff2) format("woff2");
- unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF,
- U+2C60-2C7F, U+A720-A7FF;
+ unicode-range:
+ U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
@@ -233,8 +235,9 @@
local("Roboto Bold"),
local("Roboto-Bold"),
url(../assets/fonts/roboto/bold-latin.woff2) format("woff2");
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC,
- U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
+ unicode-range:
+ U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F,
+ U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
}
.material-icons {
diff --git a/filebrowser/frontend/test-results/.last-run.json b/filebrowser/frontend/test-results/.last-run.json
new file mode 100644
index 0000000000..544c11fbc3
--- /dev/null
+++ b/filebrowser/frontend/test-results/.last-run.json
@@ -0,0 +1,4 @@
+{
+ "status": "failed",
+ "failedTests": []
+}
diff --git a/filebrowser/frontend/tests-examples/demo-todo-app.spec.ts b/filebrowser/frontend/tests-examples/demo-todo-app.spec.ts
deleted file mode 100644
index c06e84614c..0000000000
--- a/filebrowser/frontend/tests-examples/demo-todo-app.spec.ts
+++ /dev/null
@@ -1,489 +0,0 @@
-import { test, expect, type Page } from "@playwright/test";
-
-test.beforeEach(async ({ page }) => {
- await page.goto("https://demo.playwright.dev/todomvc");
-});
-
-const TODO_ITEMS = [
- "buy some cheese",
- "feed the cat",
- "book a doctors appointment",
-];
-
-test.describe("New Todo", () => {
- test("should allow me to add todo items", async ({ page }) => {
- // create a new todo locator
- const newTodo = page.getByPlaceholder("What needs to be done?");
-
- // Create 1st todo.
- await newTodo.fill(TODO_ITEMS[0]);
- await newTodo.press("Enter");
-
- // Make sure the list only has one todo item.
- await expect(page.getByTestId("todo-title")).toHaveText([TODO_ITEMS[0]]);
-
- // Create 2nd todo.
- await newTodo.fill(TODO_ITEMS[1]);
- await newTodo.press("Enter");
-
- // Make sure the list now has two todo items.
- await expect(page.getByTestId("todo-title")).toHaveText([
- TODO_ITEMS[0],
- TODO_ITEMS[1],
- ]);
-
- await checkNumberOfTodosInLocalStorage(page, 2);
- });
-
- test("should clear text input field when an item is added", async ({
- page,
- }) => {
- // create a new todo locator
- const newTodo = page.getByPlaceholder("What needs to be done?");
-
- // Create one todo item.
- await newTodo.fill(TODO_ITEMS[0]);
- await newTodo.press("Enter");
-
- // Check that input is empty.
- await expect(newTodo).toBeEmpty();
- await checkNumberOfTodosInLocalStorage(page, 1);
- });
-
- test("should append new items to the bottom of the list", async ({
- page,
- }) => {
- // Create 3 items.
- await createDefaultTodos(page);
-
- // create a todo count locator
- const todoCount = page.getByTestId("todo-count");
-
- // Check test using different methods.
- await expect(page.getByText("3 items left")).toBeVisible();
- await expect(todoCount).toHaveText("3 items left");
- await expect(todoCount).toContainText("3");
- await expect(todoCount).toHaveText(/3/);
-
- // Check all items in one call.
- await expect(page.getByTestId("todo-title")).toHaveText(TODO_ITEMS);
- await checkNumberOfTodosInLocalStorage(page, 3);
- });
-});
-
-test.describe("Mark all as completed", () => {
- test.beforeEach(async ({ page }) => {
- await createDefaultTodos(page);
- await checkNumberOfTodosInLocalStorage(page, 3);
- });
-
- test.afterEach(async ({ page }) => {
- await checkNumberOfTodosInLocalStorage(page, 3);
- });
-
- test("should allow me to mark all items as completed", async ({ page }) => {
- // Complete all todos.
- await page.getByLabel("Mark all as complete").check();
-
- // Ensure all todos have 'completed' class.
- await expect(page.getByTestId("todo-item")).toHaveClass([
- "completed",
- "completed",
- "completed",
- ]);
- await checkNumberOfCompletedTodosInLocalStorage(page, 3);
- });
-
- test("should allow me to clear the complete state of all items", async ({
- page,
- }) => {
- const toggleAll = page.getByLabel("Mark all as complete");
- // Check and then immediately uncheck.
- await toggleAll.check();
- await toggleAll.uncheck();
-
- // Should be no completed classes.
- await expect(page.getByTestId("todo-item")).toHaveClass(["", "", ""]);
- });
-
- test("complete all checkbox should update state when items are completed / cleared", async ({
- page,
- }) => {
- const toggleAll = page.getByLabel("Mark all as complete");
- await toggleAll.check();
- await expect(toggleAll).toBeChecked();
- await checkNumberOfCompletedTodosInLocalStorage(page, 3);
-
- // Uncheck first todo.
- const firstTodo = page.getByTestId("todo-item").nth(0);
- await firstTodo.getByRole("checkbox").uncheck();
-
- // Reuse toggleAll locator and make sure its not checked.
- await expect(toggleAll).not.toBeChecked();
-
- await firstTodo.getByRole("checkbox").check();
- await checkNumberOfCompletedTodosInLocalStorage(page, 3);
-
- // Assert the toggle all is checked again.
- await expect(toggleAll).toBeChecked();
- });
-});
-
-test.describe("Item", () => {
- test("should allow me to mark items as complete", async ({ page }) => {
- // create a new todo locator
- const newTodo = page.getByPlaceholder("What needs to be done?");
-
- // Create two items.
- for (const item of TODO_ITEMS.slice(0, 2)) {
- await newTodo.fill(item);
- await newTodo.press("Enter");
- }
-
- // Check first item.
- const firstTodo = page.getByTestId("todo-item").nth(0);
- await firstTodo.getByRole("checkbox").check();
- await expect(firstTodo).toHaveClass("completed");
-
- // Check second item.
- const secondTodo = page.getByTestId("todo-item").nth(1);
- await expect(secondTodo).not.toHaveClass("completed");
- await secondTodo.getByRole("checkbox").check();
-
- // Assert completed class.
- await expect(firstTodo).toHaveClass("completed");
- await expect(secondTodo).toHaveClass("completed");
- });
-
- test("should allow me to un-mark items as complete", async ({ page }) => {
- // create a new todo locator
- const newTodo = page.getByPlaceholder("What needs to be done?");
-
- // Create two items.
- for (const item of TODO_ITEMS.slice(0, 2)) {
- await newTodo.fill(item);
- await newTodo.press("Enter");
- }
-
- const firstTodo = page.getByTestId("todo-item").nth(0);
- const secondTodo = page.getByTestId("todo-item").nth(1);
- const firstTodoCheckbox = firstTodo.getByRole("checkbox");
-
- await firstTodoCheckbox.check();
- await expect(firstTodo).toHaveClass("completed");
- await expect(secondTodo).not.toHaveClass("completed");
- await checkNumberOfCompletedTodosInLocalStorage(page, 1);
-
- await firstTodoCheckbox.uncheck();
- await expect(firstTodo).not.toHaveClass("completed");
- await expect(secondTodo).not.toHaveClass("completed");
- await checkNumberOfCompletedTodosInLocalStorage(page, 0);
- });
-
- test("should allow me to edit an item", async ({ page }) => {
- await createDefaultTodos(page);
-
- const todoItems = page.getByTestId("todo-item");
- const secondTodo = todoItems.nth(1);
- await secondTodo.dblclick();
- await expect(secondTodo.getByRole("textbox", { name: "Edit" })).toHaveValue(
- TODO_ITEMS[1]
- );
- await secondTodo
- .getByRole("textbox", { name: "Edit" })
- .fill("buy some sausages");
- await secondTodo.getByRole("textbox", { name: "Edit" }).press("Enter");
-
- // Explicitly assert the new text value.
- await expect(todoItems).toHaveText([
- TODO_ITEMS[0],
- "buy some sausages",
- TODO_ITEMS[2],
- ]);
- await checkTodosInLocalStorage(page, "buy some sausages");
- });
-});
-
-test.describe("Editing", () => {
- test.beforeEach(async ({ page }) => {
- await createDefaultTodos(page);
- await checkNumberOfTodosInLocalStorage(page, 3);
- });
-
- test("should hide other controls when editing", async ({ page }) => {
- const todoItem = page.getByTestId("todo-item").nth(1);
- await todoItem.dblclick();
- await expect(todoItem.getByRole("checkbox")).not.toBeVisible();
- await expect(
- todoItem.locator("label", {
- hasText: TODO_ITEMS[1],
- })
- ).not.toBeVisible();
- await checkNumberOfTodosInLocalStorage(page, 3);
- });
-
- test("should save edits on blur", async ({ page }) => {
- const todoItems = page.getByTestId("todo-item");
- await todoItems.nth(1).dblclick();
- await todoItems
- .nth(1)
- .getByRole("textbox", { name: "Edit" })
- .fill("buy some sausages");
- await todoItems
- .nth(1)
- .getByRole("textbox", { name: "Edit" })
- .dispatchEvent("blur");
-
- await expect(todoItems).toHaveText([
- TODO_ITEMS[0],
- "buy some sausages",
- TODO_ITEMS[2],
- ]);
- await checkTodosInLocalStorage(page, "buy some sausages");
- });
-
- test("should trim entered text", async ({ page }) => {
- const todoItems = page.getByTestId("todo-item");
- await todoItems.nth(1).dblclick();
- await todoItems
- .nth(1)
- .getByRole("textbox", { name: "Edit" })
- .fill(" buy some sausages ");
- await todoItems
- .nth(1)
- .getByRole("textbox", { name: "Edit" })
- .press("Enter");
-
- await expect(todoItems).toHaveText([
- TODO_ITEMS[0],
- "buy some sausages",
- TODO_ITEMS[2],
- ]);
- await checkTodosInLocalStorage(page, "buy some sausages");
- });
-
- test("should remove the item if an empty text string was entered", async ({
- page,
- }) => {
- const todoItems = page.getByTestId("todo-item");
- await todoItems.nth(1).dblclick();
- await todoItems.nth(1).getByRole("textbox", { name: "Edit" }).fill("");
- await todoItems
- .nth(1)
- .getByRole("textbox", { name: "Edit" })
- .press("Enter");
-
- await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]);
- });
-
- test("should cancel edits on escape", async ({ page }) => {
- const todoItems = page.getByTestId("todo-item");
- await todoItems.nth(1).dblclick();
- await todoItems
- .nth(1)
- .getByRole("textbox", { name: "Edit" })
- .fill("buy some sausages");
- await todoItems
- .nth(1)
- .getByRole("textbox", { name: "Edit" })
- .press("Escape");
- await expect(todoItems).toHaveText(TODO_ITEMS);
- });
-});
-
-test.describe("Counter", () => {
- test("should display the current number of todo items", async ({ page }) => {
- // create a new todo locator
- const newTodo = page.getByPlaceholder("What needs to be done?");
-
- // create a todo count locator
- const todoCount = page.getByTestId("todo-count");
-
- await newTodo.fill(TODO_ITEMS[0]);
- await newTodo.press("Enter");
-
- await expect(todoCount).toContainText("1");
-
- await newTodo.fill(TODO_ITEMS[1]);
- await newTodo.press("Enter");
- await expect(todoCount).toContainText("2");
-
- await checkNumberOfTodosInLocalStorage(page, 2);
- });
-});
-
-test.describe("Clear completed button", () => {
- test.beforeEach(async ({ page }) => {
- await createDefaultTodos(page);
- });
-
- test("should display the correct text", async ({ page }) => {
- await page.locator(".todo-list li .toggle").first().check();
- await expect(
- page.getByRole("button", { name: "Clear completed" })
- ).toBeVisible();
- });
-
- test("should remove completed items when clicked", async ({ page }) => {
- const todoItems = page.getByTestId("todo-item");
- await todoItems.nth(1).getByRole("checkbox").check();
- await page.getByRole("button", { name: "Clear completed" }).click();
- await expect(todoItems).toHaveCount(2);
- await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]);
- });
-
- test("should be hidden when there are no items that are completed", async ({
- page,
- }) => {
- await page.locator(".todo-list li .toggle").first().check();
- await page.getByRole("button", { name: "Clear completed" }).click();
- await expect(
- page.getByRole("button", { name: "Clear completed" })
- ).toBeHidden();
- });
-});
-
-test.describe("Persistence", () => {
- test("should persist its data", async ({ page }) => {
- // create a new todo locator
- const newTodo = page.getByPlaceholder("What needs to be done?");
-
- for (const item of TODO_ITEMS.slice(0, 2)) {
- await newTodo.fill(item);
- await newTodo.press("Enter");
- }
-
- const todoItems = page.getByTestId("todo-item");
- const firstTodoCheck = todoItems.nth(0).getByRole("checkbox");
- await firstTodoCheck.check();
- await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]);
- await expect(firstTodoCheck).toBeChecked();
- await expect(todoItems).toHaveClass(["completed", ""]);
-
- // Ensure there is 1 completed item.
- await checkNumberOfCompletedTodosInLocalStorage(page, 1);
-
- // Now reload.
- await page.reload();
- await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]);
- await expect(firstTodoCheck).toBeChecked();
- await expect(todoItems).toHaveClass(["completed", ""]);
- });
-});
-
-test.describe("Routing", () => {
- test.beforeEach(async ({ page }) => {
- await createDefaultTodos(page);
- // make sure the app had a chance to save updated todos in storage
- // before navigating to a new view, otherwise the items can get lost :(
- // in some frameworks like Durandal
- await checkTodosInLocalStorage(page, TODO_ITEMS[0]);
- });
-
- test("should allow me to display active items", async ({ page }) => {
- const todoItem = page.getByTestId("todo-item");
- await page.getByTestId("todo-item").nth(1).getByRole("checkbox").check();
-
- await checkNumberOfCompletedTodosInLocalStorage(page, 1);
- await page.getByRole("link", { name: "Active" }).click();
- await expect(todoItem).toHaveCount(2);
- await expect(todoItem).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]);
- });
-
- test("should respect the back button", async ({ page }) => {
- const todoItem = page.getByTestId("todo-item");
- await page.getByTestId("todo-item").nth(1).getByRole("checkbox").check();
-
- await checkNumberOfCompletedTodosInLocalStorage(page, 1);
-
- await test.step("Showing all items", async () => {
- await page.getByRole("link", { name: "All" }).click();
- await expect(todoItem).toHaveCount(3);
- });
-
- await test.step("Showing active items", async () => {
- await page.getByRole("link", { name: "Active" }).click();
- });
-
- await test.step("Showing completed items", async () => {
- await page.getByRole("link", { name: "Completed" }).click();
- });
-
- await expect(todoItem).toHaveCount(1);
- await page.goBack();
- await expect(todoItem).toHaveCount(2);
- await page.goBack();
- await expect(todoItem).toHaveCount(3);
- });
-
- test("should allow me to display completed items", async ({ page }) => {
- await page.getByTestId("todo-item").nth(1).getByRole("checkbox").check();
- await checkNumberOfCompletedTodosInLocalStorage(page, 1);
- await page.getByRole("link", { name: "Completed" }).click();
- await expect(page.getByTestId("todo-item")).toHaveCount(1);
- });
-
- test("should allow me to display all items", async ({ page }) => {
- await page.getByTestId("todo-item").nth(1).getByRole("checkbox").check();
- await checkNumberOfCompletedTodosInLocalStorage(page, 1);
- await page.getByRole("link", { name: "Active" }).click();
- await page.getByRole("link", { name: "Completed" }).click();
- await page.getByRole("link", { name: "All" }).click();
- await expect(page.getByTestId("todo-item")).toHaveCount(3);
- });
-
- test("should highlight the currently applied filter", async ({ page }) => {
- await expect(page.getByRole("link", { name: "All" })).toHaveClass(
- "selected"
- );
-
- //create locators for active and completed links
- const activeLink = page.getByRole("link", { name: "Active" });
- const completedLink = page.getByRole("link", { name: "Completed" });
- await activeLink.click();
-
- // Page change - active items.
- await expect(activeLink).toHaveClass("selected");
- await completedLink.click();
-
- // Page change - completed items.
- await expect(completedLink).toHaveClass("selected");
- });
-});
-
-async function createDefaultTodos(page: Page) {
- // create a new todo locator
- const newTodo = page.getByPlaceholder("What needs to be done?");
-
- for (const item of TODO_ITEMS) {
- await newTodo.fill(item);
- await newTodo.press("Enter");
- }
-}
-
-async function checkNumberOfTodosInLocalStorage(page: Page, expected: number) {
- return await page.waitForFunction((e) => {
- return JSON.parse(localStorage["react-todos"]).length === e;
- }, expected);
-}
-
-async function checkNumberOfCompletedTodosInLocalStorage(
- page: Page,
- expected: number
-) {
- return await page.waitForFunction((e) => {
- return (
- JSON.parse(localStorage["react-todos"]).filter(
- (todo: any) => todo.completed
- ).length === e
- );
- }, expected);
-}
-
-async function checkTodosInLocalStorage(page: Page, title: string) {
- return await page.waitForFunction((t) => {
- return JSON.parse(localStorage["react-todos"])
- .map((todo: any) => todo.title)
- .includes(t);
- }, title);
-}
diff --git a/filebrowser/frontend/tests/auth.spec.ts b/filebrowser/frontend/tests/auth.spec.ts
deleted file mode 100644
index 4273bceed6..0000000000
--- a/filebrowser/frontend/tests/auth.spec.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { test, expect } from "./fixtures/auth";
-
-test("redirect to login", async ({ page }) => {
- await page.goto("/");
- await expect(page).toHaveURL(/\/login/);
-
- await page.goto("/files/");
- await expect(page).toHaveURL(/\/login\?redirect=\/files\//);
-});
-
-test("login and logout", async ({ authPage, page, context }) => {
- await authPage.goto();
- await expect(page).toHaveTitle(/Login - File Browser$/);
-
- await authPage.loginAs("fake", "fake");
- await expect(authPage.wrongCredentials).toBeVisible();
-
- await authPage.loginAs();
- await expect(authPage.wrongCredentials).toBeHidden();
- // await page.waitForURL("**/files/", { timeout: 5000 });
- await expect(page).toHaveTitle(/.*Files - File Browser$/);
-
- let cookies = await context.cookies();
- expect(cookies.find((c) => c.name == "auth")?.value).toBeDefined();
-
- await authPage.logout();
- // await page.waitForURL("**/login", { timeout: 5000 });
- await expect(page).toHaveTitle(/Login - File Browser$/);
-
- cookies = await context.cookies();
- expect(cookies.find((c) => c.name == "auth")?.value).toBeUndefined();
-});
diff --git a/filebrowser/frontend/tests/fixtures/auth.ts b/filebrowser/frontend/tests/fixtures/auth.ts
deleted file mode 100644
index ad1b015eaa..0000000000
--- a/filebrowser/frontend/tests/fixtures/auth.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import {
- type Page,
- type Locator,
- test as base,
- expect,
-} from "@playwright/test";
-
-export class AuthPage {
- public readonly wrongCredentials: Locator;
-
- constructor(public readonly page: Page) {
- this.wrongCredentials = this.page.locator("div.wrong");
- }
-
- async goto() {
- await this.page.goto("/login");
- }
-
- async loginAs(username = "admin", password = "admin") {
- await this.page.getByPlaceholder("Username").fill(username);
- await this.page.getByPlaceholder("Password").fill(password);
- await this.page.getByRole("button", { name: "Login" }).click();
- }
-
- async logout() {
- await this.page.getByRole("button", { name: "Logout" }).click();
- }
-}
-
-const test = base.extend<{ authPage: AuthPage }>({
- authPage: async ({ page }, use) => {
- const authPage = new AuthPage(page);
- await authPage.goto();
- await authPage.loginAs();
- await use(authPage);
- // await authPage.logout();
- },
-});
-
-export { test, expect };
diff --git a/filebrowser/frontend/tests/fixtures/settings.ts b/filebrowser/frontend/tests/fixtures/settings.ts
deleted file mode 100644
index aa0027c99f..0000000000
--- a/filebrowser/frontend/tests/fixtures/settings.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import {
- type Locator,
- type Page,
- test as base,
- expect,
-} from "@playwright/test";
-import { AuthPage } from "./auth";
-
-type SettingsType = "profile" | "shares" | "global" | "users";
-
-export class SettingsPage {
- public readonly hideDotfiles: Locator; // checkbox
- public readonly singleClick: Locator; // checkbox
- public readonly dateFormat: Locator; // checkbox
- private readonly languages: Locator; // selection
- private readonly submitProfile: Locator; // submit
- private readonly submitPassword: Locator; // submit
-
- constructor(public readonly page: Page) {
- this.hideDotfiles = this.page.locator('input[name="hideDotfiles"]');
- this.singleClick = this.page.locator('input[name="singleClick"]');
- this.dateFormat = this.page.locator('input[name="dateFormat"]');
- this.languages = this.page.locator('select[name="selectLanguage"]');
- this.submitProfile = this.page.locator('input[name="submitProfile"]');
- this.submitPassword = this.page.locator('input[name="submitPassword"]');
- }
-
- async goto(type: SettingsType = "profile") {
- await this.page.goto(`/settings/${type}`);
- }
-
- async setLanguage(locale: string = "en") {
- await this.languages.selectOption(locale);
- }
-
- async saveProfile() {
- await this.submitProfile.click();
- }
-
- async savePassword() {
- await this.submitPassword.click();
- }
-}
-
-const test = base.extend<{ settingsPage: SettingsPage }>({
- page: async ({ page }, use) => {
- // Sign in with our account.
- const authPage = new AuthPage(page);
- await authPage.goto();
- await authPage.loginAs();
- await expect(page).toHaveTitle(/.*Files - File Browser$/);
- // Use signed-in page in the test.
- await use(page);
- },
- settingsPage: async ({ page }, use) => {
- const settingsPage = new SettingsPage(page);
- await use(settingsPage);
- },
-});
-
-export { test, expect };
diff --git a/filebrowser/frontend/tests/fixtures/toast.ts b/filebrowser/frontend/tests/fixtures/toast.ts
deleted file mode 100644
index 4b5ebbf5f7..0000000000
--- a/filebrowser/frontend/tests/fixtures/toast.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-//classes: Vue-Toastification__toast Vue-Toastification__toast--success bottom-center
-import { type Page, type Locator, expect } from "@playwright/test";
-
-export class Toast {
- private readonly success: Locator;
- private readonly error: Locator;
-
- constructor(public readonly page: Page) {
- this.success = this.page.locator("div.Vue-Toastification__toast--success");
- this.error = this.page.locator("div.Vue-Toastification__toast--error");
- }
-
- async isSuccess() {
- await expect(this.success).toBeVisible();
- }
-
- async isError() {
- await expect(this.error).toBeVisible();
- }
-}
diff --git a/filebrowser/frontend/tests/settings.spec.ts b/filebrowser/frontend/tests/settings.spec.ts
deleted file mode 100644
index c8726e428f..0000000000
--- a/filebrowser/frontend/tests/settings.spec.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { test, expect } from "./fixtures/settings";
-import { Toast } from "./fixtures/toast";
-
-// test.describe("profile settings", () => {
-test("settings button", async ({ page }) => {
- const button = page.getByLabel("Settings", { exact: true });
- await expect(button).toBeVisible();
- await button.click();
- await expect(page).toHaveTitle(/^Profile Settings/);
- await expect(
- page.getByRole("heading", { name: "Profile Settings" })
- ).toBeVisible();
-});
-
-test("set locale", async ({ settingsPage, page }) => {
- const toast = new Toast(page);
-
- await settingsPage.goto("profile");
- await expect(page).toHaveTitle(/^Profile Settings/);
- // await settingsPage.saveProfile();
- // await toast.isSuccess();
- // await expect(
- // page.getByText("Settings updated!", { exact: true })
- // ).toBeVisible();
-
- await settingsPage.setLanguage("hu");
- await settingsPage.saveProfile();
- await toast.isSuccess();
- await expect(
- page.getByText("Beállítások frissítve!", { exact: true })
- ).toBeVisible();
- await expect(
- page.getByRole("heading", { name: "Profilbeállítások" })
- ).toBeVisible();
-
- await settingsPage.setLanguage("en");
- await settingsPage.saveProfile();
- await toast.isSuccess();
- await expect(
- page.getByText("Settings updated!", { exact: true })
- ).toBeVisible();
- await expect(
- page.getByRole("heading", { name: "Profile Settings" })
- ).toBeVisible();
-});
-// });
diff --git a/filebrowser/frontend/tsconfig.app.json b/filebrowser/frontend/tsconfig.app.json
index c8f9b4576a..7b77334a6f 100644
--- a/filebrowser/frontend/tsconfig.app.json
+++ b/filebrowser/frontend/tsconfig.app.json
@@ -1,13 +1,29 @@
{
"extends": "@vue/tsconfig/tsconfig.dom.json",
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
- "exclude": ["src/**/__tests__/*"],
+ "exclude": [
+ "src/**/__tests__/*",
+ // Excluding non-TS Vue files which use the old Options API.
+ // This can be removed once those files are properly migrated to
+ // the new Composition API with TS support.
+ "src/components/Shell.vue",
+ "src/components/prompts/Copy.vue",
+ "src/components/prompts/Move.vue",
+ "src/components/prompts/Delete.vue",
+ "src/components/prompts/FileList.vue",
+ "src/components/prompts/Rename.vue",
+ "src/components/prompts/Share.vue"
+ ],
"compilerOptions": {
"composite": true,
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"types": ["vite/client", "@intlify/unplugin-vue-i18n/messages"],
"paths": {
"@/*": ["./src/*"]
- }
+ },
+ // Version 0.8.0 of @vue/tsconfig enabled this automatically.
+ // Disabling for now since it's causing quite a lot of errors.
+ // Should be revisited.
+ "noUncheckedIndexedAccess": false
}
}
diff --git a/filebrowser/frontend/tsconfig.node.json b/filebrowser/frontend/tsconfig.node.json
index ba9a7ac380..29e9167400 100644
--- a/filebrowser/frontend/tsconfig.node.json
+++ b/filebrowser/frontend/tsconfig.node.json
@@ -1,11 +1,10 @@
{
- "extends": "@tsconfig/node22/tsconfig.json",
+ "extends": "@tsconfig/node24/tsconfig.json",
"include": [
"vite.config.*",
"vitest.config.*",
"cypress.config.*",
- "nightwatch.conf.*",
- "playwright.config.*"
+ "nightwatch.conf.*"
],
"compilerOptions": {
"composite": true,
diff --git a/filebrowser/frontend/tsconfig.tsc.json b/filebrowser/frontend/tsconfig.tsc.json
deleted file mode 100644
index 90ee28d014..0000000000
--- a/filebrowser/frontend/tsconfig.tsc.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "extends": "./tsconfig.app.json",
- // vue-tsc wont shut up about error TS9005
- // in non-TS vue files so exclude them
- "exclude": [
- "src/components/Shell.vue",
- "src/components/prompts/Copy.vue",
- "src/components/prompts/Move.vue",
- "src/components/prompts/Delete.vue",
- "src/components/prompts/FileList.vue",
- "src/components/prompts/Rename.vue",
- "src/components/prompts/Share.vue"
- ]
-}
diff --git a/filebrowser/go.mod b/filebrowser/go.mod
index d7fedced8c..7736fe11bf 100644
--- a/filebrowser/go.mod
+++ b/filebrowser/go.mod
@@ -8,7 +8,7 @@ require (
github.com/disintegration/imaging v1.6.2
github.com/dsoprea/go-exif/v3 v3.0.1
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568
- github.com/golang-jwt/jwt/v4 v4.5.2
+ github.com/golang-jwt/jwt/v5 v5.3.0
github.com/gorilla/mux v1.8.1
github.com/gorilla/websocket v1.5.3
github.com/jellydator/ttlcache/v3 v3.4.0
@@ -17,7 +17,7 @@ require (
github.com/mholt/archives v0.1.5
github.com/mitchellh/go-homedir v1.1.0
github.com/pelletier/go-toml/v2 v2.2.4
- github.com/shirou/gopsutil/v3 v3.24.5
+ github.com/shirou/gopsutil/v4 v4.25.10
github.com/spf13/afero v1.15.0
github.com/spf13/cobra v1.10.1
github.com/spf13/pflag v1.0.10
@@ -29,7 +29,7 @@ require (
golang.org/x/image v0.33.0
golang.org/x/text v0.31.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
- gopkg.in/yaml.v2 v2.4.0
+ gopkg.in/yaml.v3 v3.0.1
)
require (
@@ -44,6 +44,7 @@ require (
github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 // indirect
github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd // indirect
github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349 // indirect
+ github.com/ebitengine/purego v0.9.0 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/go-errors/errors v1.5.1 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
@@ -73,5 +74,5 @@ require (
golang.org/x/sync v0.18.0 // indirect
golang.org/x/sys v0.38.0 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
- gopkg.in/yaml.v3 v3.0.1 // indirect
+ gopkg.in/yaml.v2 v2.4.0 // indirect
)
diff --git a/filebrowser/go.sum b/filebrowser/go.sum
index 92d28b3054..0b37400712 100644
--- a/filebrowser/go.sum
+++ b/filebrowser/go.sum
@@ -74,6 +74,8 @@ github.com/dsoprea/go-utility/v2 v2.0.0-20221003142440-7a1927d49d9d/go.mod h1:LV
github.com/dsoprea/go-utility/v2 v2.0.0-20221003160719-7bc88537c05e/go.mod h1:VZ7cB0pTjm1ADBWhJUOHESu4ZYy9JN+ZPqjfiW09EPU=
github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349 h1:DilThiXje0z+3UQ5YjYiSRRzVdtamFpvBQXKwMglWqw=
github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349/go.mod h1:4GC5sXji84i/p+irqghpPFZBF8tRN/Q7+700G0/DLe8=
+github.com/ebitengine/purego v0.9.0 h1:mh0zpKBIXDceC63hpvPuGLiJ8ZAa3DfrFTudmfi8A4k=
+github.com/ebitengine/purego v0.9.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
@@ -95,8 +97,8 @@ github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
-github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI=
-github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
+github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
+github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
github.com/golang/geo v0.0.0-20200319012246-673a6f80352d/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
github.com/golang/geo v0.0.0-20210211234256-740aa86cb551/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
@@ -198,8 +200,8 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk=
github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc=
github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik=
-github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI=
-github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk=
+github.com/shirou/gopsutil/v4 v4.25.10 h1:at8lk/5T1OgtuCp+AwrDofFRjnvosn0nkN2OLQ6g8tA=
+github.com/shirou/gopsutil/v4 v4.25.10/go.mod h1:+kSwyC8DRUD9XXEHCAFjK+0nuArFJM0lva+StQAcskM=
github.com/sorairolake/lzip-go v0.3.8 h1:j5Q2313INdTA80ureWYRhX+1K78mUXfMoPZCw/ivWik=
github.com/sorairolake/lzip-go v0.3.8/go.mod h1:JcBqGMV0frlxwrsE9sMWXDjqn3EeVf0/54YPsw66qkU=
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
diff --git a/filebrowser/http/auth.go b/filebrowser/http/auth.go
index 3604c122e5..2e4518f089 100644
--- a/filebrowser/http/auth.go
+++ b/filebrowser/http/auth.go
@@ -9,8 +9,8 @@ import (
"strings"
"time"
- "github.com/golang-jwt/jwt/v4"
- "github.com/golang-jwt/jwt/v4/request"
+ "github.com/golang-jwt/jwt/v5"
+ "github.com/golang-jwt/jwt/v5/request"
fbErrors "github.com/filebrowser/filebrowser/v2/errors"
"github.com/filebrowser/filebrowser/v2/users"
@@ -69,15 +69,19 @@ func withUser(fn handleFunc) handleFunc {
var tk authToken
token, err := request.ParseFromRequest(r, &extractor{}, keyFunc, request.WithClaims(&tk))
-
if err != nil || !token.Valid {
return http.StatusUnauthorized, nil
}
- expired := !tk.VerifyExpiresAt(time.Now().Add(time.Hour), true)
+ err = jwt.NewValidator(jwt.WithExpirationRequired()).Validate(tk)
+ if err != nil {
+ return http.StatusUnauthorized, nil
+ }
+
+ expiresSoon := tk.ExpiresAt != nil && time.Until(tk.ExpiresAt.Time) < time.Hour
updated := tk.IssuedAt != nil && tk.IssuedAt.Unix() < d.store.Users.LastUpdate(tk.User.ID)
- if expired || updated {
+ if expiresSoon || updated {
w.Header().Add("X-Renew-Token", "true")
}
diff --git a/filebrowser/http/headers_dev.go b/filebrowser/http/headers_dev.go
deleted file mode 100644
index 8ef7824f86..0000000000
--- a/filebrowser/http/headers_dev.go
+++ /dev/null
@@ -1,14 +0,0 @@
-//go:build dev
-
-package http
-
-// global headers to append to every response
-// cross-origin headers are necessary to be able to
-// access them from a different URL during development
-var globalHeaders = map[string]string{
- "Cache-Control": "no-cache, no-store, must-revalidate",
- "Access-Control-Allow-Origin": "*",
- "Access-Control-Allow-Headers": "*",
- "Access-Control-Allow-Methods": "*",
- "Access-Control-Allow-Credentials": "true",
-}
diff --git a/filebrowser/http/resource.go b/filebrowser/http/resource.go
index 74d7e6c3be..8785c681e6 100644
--- a/filebrowser/http/resource.go
+++ b/filebrowser/http/resource.go
@@ -14,7 +14,7 @@ import (
"path/filepath"
"strings"
- "github.com/shirou/gopsutil/v3/disk"
+ "github.com/shirou/gopsutil/v4/disk"
"github.com/spf13/afero"
fbErrors "github.com/filebrowser/filebrowser/v2/errors"
diff --git a/filebrowser/renovate.json b/filebrowser/renovate.json
index a1aad25e78..2cc079ccbc 100644
--- a/filebrowser/renovate.json
+++ b/filebrowser/renovate.json
@@ -4,7 +4,8 @@
"config:recommended",
"group:allNonMajor",
"group:allDigest",
- ":disableDependencyDashboard"
+ ":disableDependencyDashboard",
+ ":semanticCommitTypeAll(chore)"
],
"postUpdateOptions": [
"gomodUpdateImportPaths",
diff --git a/filebrowser/scripts/bump_version.sh b/filebrowser/scripts/bump_version.sh
deleted file mode 100755
index 43df6276c6..0000000000
--- a/filebrowser/scripts/bump_version.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-if ! [ -x "$(command -v standard-version)" ]; then
- echo "standard-version is not installed. please run 'npm i -g standard-version'"
- exit 1
-fi
-
-standard-version --dry-run --skip
-read -p "Continue (y/n)? " -n 1 -r
-echo ;
-if [[ $REPLY =~ ^[Yy]$ ]]; then
- standard-version -s ;
-fi
\ No newline at end of file
diff --git a/filebrowser/scripts/commitlint.sh b/filebrowser/scripts/commitlint.sh
deleted file mode 100755
index d5895ce2ba..0000000000
--- a/filebrowser/scripts/commitlint.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-if ! [ -x "$(command -v commitlint)" ]; then
- echo "commitlint is not installed. please run 'npm i -g commitlint'"
- exit 1
-fi
-
-for commit_hash in $(git log --pretty=format:%H origin/master..HEAD); do
- commitlint -f ${commit_hash}~1 -t ${commit_hash}
-done
diff --git a/filebrowser/settings.json b/filebrowser/settings.json
deleted file mode 100644
index e787ef875d..0000000000
--- a/filebrowser/settings.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "port": 80,
- "baseURL": "",
- "address": "",
- "log": "stdout",
- "database": "/database/filebrowser.db",
- "root": "/srv"
-}
\ No newline at end of file
diff --git a/filebrowser/storage/bolt/importer/conf.go b/filebrowser/storage/bolt/importer/conf.go
index bafeb45233..b3ac0ba7d0 100644
--- a/filebrowser/storage/bolt/importer/conf.go
+++ b/filebrowser/storage/bolt/importer/conf.go
@@ -9,7 +9,7 @@ import (
"github.com/asdine/storm/v3"
"github.com/pelletier/go-toml/v2"
- "gopkg.in/yaml.v2"
+ "gopkg.in/yaml.v3"
"github.com/filebrowser/filebrowser/v2/auth"
"github.com/filebrowser/filebrowser/v2/settings"
diff --git a/filebrowser/tools.mk b/filebrowser/tools.mk
deleted file mode 100644
index 724434746f..0000000000
--- a/filebrowser/tools.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-include common.mk
-
-# tools
-TOOLS_DIR := $(BASE_PATH)/tools
-TOOLS_GO_DEPS := $(TOOLS_DIR)/go.mod $(TOOLS_DIR)/go.sum
-TOOLS_BIN := $(TOOLS_DIR)/bin
-$(eval $(shell mkdir -p $(TOOLS_BIN)))
-PATH := $(TOOLS_BIN):$(PATH)
-export PATH
-
-.PHONY: clean-tools
-clean-tools:
- $Q rm -rf $(TOOLS_BIN)
-
-goimports=$(TOOLS_BIN)/goimports
-$(goimports): $(TOOLS_GO_DEPS)
- $Q cd $(TOOLS_DIR) && $(go) build -o $@ golang.org/x/tools/cmd/goimports
-
-golangci-lint=$(TOOLS_BIN)/golangci-lint
-$(golangci-lint): $(TOOLS_GO_DEPS)
- $Q cd $(TOOLS_DIR) && $(go) build -o $@ github.com/golangci/golangci-lint/v2/cmd/golangci-lint
-
-# js tools
-TOOLS_JS_DEPS=$(TOOLS_DIR)/node_modules/.modified
-$(TOOLS_JS_DEPS): $(TOOLS_DIR)/package.json $(TOOLS_DIR)/yarn.lock
- $Q cd ${TOOLS_DIR} && yarn install
- $Q touch -am $@
-
-standard-version=$(TOOLS_BIN)/standard-version
-$(standard-version): $(TOOLS_JS_DEPS)
- $Q ln -sf $(TOOLS_DIR)/node_modules/.bin/standard-version $@
- $Q touch -am $@
-
-commitlint=$(TOOLS_BIN)/commitlint
-$(commitlint): $(TOOLS_JS_DEPS)
- $Q ln -sf $(TOOLS_DIR)/node_modules/.bin/commitlint $@
- $Q touch -am $@
\ No newline at end of file
diff --git a/filebrowser/tools/go.mod b/filebrowser/tools/go.mod
deleted file mode 100644
index 8c900fb13b..0000000000
--- a/filebrowser/tools/go.mod
+++ /dev/null
@@ -1,216 +0,0 @@
-module github.com/filebrowser/filebrowser/v2/tools
-
-go 1.25
-
-require (
- github.com/golangci/golangci-lint/v2 v2.6.1
- golang.org/x/tools v0.38.0
-)
-
-require (
- 4d63.com/gocheckcompilerdirectives v1.3.0 // indirect
- 4d63.com/gochecknoglobals v0.2.2 // indirect
- codeberg.org/chavacava/garif v0.2.0 // indirect
- dev.gaijin.team/go/exhaustruct/v4 v4.0.0 // indirect
- dev.gaijin.team/go/golib v0.6.0 // indirect
- github.com/4meepo/tagalign v1.4.3 // indirect
- github.com/Abirdcfly/dupword v0.1.7 // indirect
- github.com/AdminBenni/iota-mixing v1.0.0 // indirect
- github.com/AlwxSin/noinlineerr v1.0.5 // indirect
- github.com/Antonboom/errname v1.1.1 // indirect
- github.com/Antonboom/nilnil v1.1.1 // indirect
- github.com/Antonboom/testifylint v1.6.4 // indirect
- github.com/BurntSushi/toml v1.5.0 // indirect
- github.com/Djarvur/go-err113 v0.1.1 // indirect
- github.com/Masterminds/semver/v3 v3.4.0 // indirect
- github.com/MirrexOne/unqueryvet v1.2.1 // indirect
- github.com/OpenPeeDeeP/depguard/v2 v2.2.1 // indirect
- github.com/alecthomas/chroma/v2 v2.20.0 // indirect
- github.com/alecthomas/go-check-sumtype v0.3.1 // indirect
- github.com/alexkohler/nakedret/v2 v2.0.6 // indirect
- github.com/alexkohler/prealloc v1.0.0 // indirect
- github.com/alfatraining/structtag v1.0.0 // indirect
- github.com/alingse/asasalint v0.0.11 // indirect
- github.com/alingse/nilnesserr v0.2.0 // indirect
- github.com/ashanbrown/forbidigo/v2 v2.3.0 // indirect
- github.com/ashanbrown/makezero/v2 v2.1.0 // indirect
- github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
- github.com/beorn7/perks v1.0.1 // indirect
- github.com/bkielbasa/cyclop v1.2.3 // indirect
- github.com/blizzy78/varnamelen v0.8.0 // indirect
- github.com/bombsimon/wsl/v4 v4.7.0 // indirect
- github.com/bombsimon/wsl/v5 v5.3.0 // indirect
- github.com/breml/bidichk v0.3.3 // indirect
- github.com/breml/errchkjson v0.4.1 // indirect
- github.com/butuzov/ireturn v0.4.0 // indirect
- github.com/butuzov/mirror v1.3.0 // indirect
- github.com/catenacyber/perfsprint v0.10.0 // indirect
- github.com/ccojocar/zxcvbn-go v1.0.4 // indirect
- github.com/cespare/xxhash/v2 v2.3.0 // indirect
- github.com/charithe/durationcheck v0.0.11 // indirect
- github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
- github.com/charmbracelet/lipgloss v1.1.0 // indirect
- github.com/charmbracelet/x/ansi v0.8.0 // indirect
- github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect
- github.com/charmbracelet/x/term v0.2.1 // indirect
- github.com/ckaznocha/intrange v0.3.1 // indirect
- github.com/curioswitch/go-reassign v0.3.0 // indirect
- github.com/daixiang0/gci v0.13.7 // indirect
- github.com/dave/dst v0.27.3 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/denis-tingaikin/go-header v0.5.0 // indirect
- github.com/dlclark/regexp2 v1.11.5 // indirect
- github.com/ettle/strcase v0.2.0 // indirect
- github.com/fatih/color v1.18.0 // indirect
- github.com/fatih/structtag v1.2.0 // indirect
- github.com/firefart/nonamedreturns v1.0.6 // indirect
- github.com/fsnotify/fsnotify v1.5.4 // indirect
- github.com/fzipp/gocyclo v0.6.0 // indirect
- github.com/ghostiam/protogetter v0.3.17 // indirect
- github.com/go-critic/go-critic v0.14.2 // indirect
- github.com/go-toolsmith/astcast v1.1.0 // indirect
- github.com/go-toolsmith/astcopy v1.1.0 // indirect
- github.com/go-toolsmith/astequal v1.2.0 // indirect
- github.com/go-toolsmith/astfmt v1.1.0 // indirect
- github.com/go-toolsmith/astp v1.1.0 // indirect
- github.com/go-toolsmith/strparse v1.1.0 // indirect
- github.com/go-toolsmith/typep v1.1.0 // indirect
- github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
- github.com/go-xmlfmt/xmlfmt v1.1.3 // indirect
- github.com/gobwas/glob v0.2.3 // indirect
- github.com/godoc-lint/godoc-lint v0.10.1 // indirect
- github.com/gofrs/flock v0.13.0 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
- github.com/golangci/asciicheck v0.5.0 // indirect
- github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 // indirect
- github.com/golangci/go-printf-func-name v0.1.1 // indirect
- github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d // indirect
- github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95 // indirect
- github.com/golangci/misspell v0.7.0 // indirect
- github.com/golangci/plugin-module-register v0.1.2 // indirect
- github.com/golangci/revgrep v0.8.0 // indirect
- github.com/golangci/swaggoswag v0.0.0-20250504205917-77f2aca3143e // indirect
- github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e // indirect
- github.com/google/go-cmp v0.7.0 // indirect
- github.com/gordonklaus/ineffassign v0.2.0 // indirect
- github.com/gostaticanalysis/analysisutil v0.7.1 // indirect
- github.com/gostaticanalysis/comment v1.5.0 // indirect
- github.com/gostaticanalysis/forcetypeassert v0.2.0 // indirect
- github.com/gostaticanalysis/nilerr v0.1.2 // indirect
- github.com/hashicorp/go-immutable-radix/v2 v2.1.0 // indirect
- github.com/hashicorp/go-version v1.7.0 // indirect
- github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
- github.com/hashicorp/hcl v1.0.0 // indirect
- github.com/hexops/gotextdiff v1.0.3 // indirect
- github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/jgautheron/goconst v1.8.2 // indirect
- github.com/jingyugao/rowserrcheck v1.1.1 // indirect
- github.com/jjti/go-spancheck v0.6.5 // indirect
- github.com/julz/importas v0.2.0 // indirect
- github.com/karamaru-alpha/copyloopvar v1.2.2 // indirect
- github.com/kisielk/errcheck v1.9.0 // indirect
- github.com/kkHAIKE/contextcheck v1.1.6 // indirect
- github.com/kulti/thelper v0.7.1 // indirect
- github.com/kunwardeep/paralleltest v1.0.15 // indirect
- github.com/lasiar/canonicalheader v1.1.2 // indirect
- github.com/ldez/exptostd v0.4.5 // indirect
- github.com/ldez/gomoddirectives v0.7.1 // indirect
- github.com/ldez/grignotin v0.10.1 // indirect
- github.com/ldez/tagliatelle v0.7.2 // indirect
- github.com/ldez/usetesting v0.5.0 // indirect
- github.com/leonklingele/grouper v1.1.2 // indirect
- github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
- github.com/macabu/inamedparam v0.2.0 // indirect
- github.com/magiconair/properties v1.8.6 // indirect
- github.com/manuelarte/embeddedstructfieldcheck v0.4.0 // indirect
- github.com/manuelarte/funcorder v0.5.0 // indirect
- github.com/maratori/testableexamples v1.0.0 // indirect
- github.com/maratori/testpackage v1.1.1 // indirect
- github.com/matoous/godox v1.1.0 // indirect
- github.com/mattn/go-colorable v0.1.14 // indirect
- github.com/mattn/go-isatty v0.0.20 // indirect
- github.com/mattn/go-runewidth v0.0.16 // indirect
- github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
- github.com/mgechev/revive v1.12.0 // indirect
- github.com/mitchellh/go-homedir v1.1.0 // indirect
- github.com/mitchellh/mapstructure v1.5.0 // indirect
- github.com/moricho/tparallel v0.3.2 // indirect
- github.com/muesli/termenv v0.16.0 // indirect
- github.com/nakabonne/nestif v0.3.1 // indirect
- github.com/nishanths/exhaustive v0.12.0 // indirect
- github.com/nishanths/predeclared v0.2.2 // indirect
- github.com/nunnatsa/ginkgolinter v0.21.2 // indirect
- github.com/pelletier/go-toml v1.9.5 // indirect
- github.com/pelletier/go-toml/v2 v2.2.4 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/polyfloyd/go-errorlint v1.8.0 // indirect
- github.com/prometheus/client_golang v1.12.1 // indirect
- github.com/prometheus/client_model v0.2.0 // indirect
- github.com/prometheus/common v0.32.1 // indirect
- github.com/prometheus/procfs v0.7.3 // indirect
- github.com/quasilyte/go-ruleguard v0.4.5 // indirect
- github.com/quasilyte/go-ruleguard/dsl v0.3.23 // indirect
- github.com/quasilyte/gogrep v0.5.0 // indirect
- github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect
- github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect
- github.com/raeperd/recvcheck v0.2.0 // indirect
- github.com/rivo/uniseg v0.4.7 // indirect
- github.com/rogpeppe/go-internal v1.14.1 // indirect
- github.com/ryancurrah/gomodguard v1.4.1 // indirect
- github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect
- github.com/sanposhiho/wastedassign/v2 v2.1.0 // indirect
- github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect
- github.com/sashamelentyev/interfacebloat v1.1.0 // indirect
- github.com/sashamelentyev/usestdlibvars v1.29.0 // indirect
- github.com/securego/gosec/v2 v2.22.10 // indirect
- github.com/sirupsen/logrus v1.9.3 // indirect
- github.com/sivchari/containedctx v1.0.3 // indirect
- github.com/sonatard/noctx v0.4.0 // indirect
- github.com/sourcegraph/go-diff v0.7.0 // indirect
- github.com/spf13/afero v1.14.0 // indirect
- github.com/spf13/cast v1.5.0 // indirect
- github.com/spf13/cobra v1.10.1 // indirect
- github.com/spf13/jwalterweatherman v1.1.0 // indirect
- github.com/spf13/pflag v1.0.10 // indirect
- github.com/spf13/viper v1.12.0 // indirect
- github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect
- github.com/stbenjam/no-sprintf-host-port v0.2.0 // indirect
- github.com/stretchr/objx v0.5.2 // indirect
- github.com/stretchr/testify v1.11.1 // indirect
- github.com/subosito/gotenv v1.4.1 // indirect
- github.com/tetafro/godot v1.5.4 // indirect
- github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67 // indirect
- github.com/timonwong/loggercheck v0.11.0 // indirect
- github.com/tomarrell/wrapcheck/v2 v2.11.0 // indirect
- github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect
- github.com/ultraware/funlen v0.2.0 // indirect
- github.com/ultraware/whitespace v0.2.0 // indirect
- github.com/uudashr/gocognit v1.2.0 // indirect
- github.com/uudashr/iface v1.4.1 // indirect
- github.com/xen0n/gosmopolitan v1.3.0 // indirect
- github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
- github.com/yagipy/maintidx v1.0.0 // indirect
- github.com/yeya24/promlinter v0.3.0 // indirect
- github.com/ykadowak/zerologlint v0.1.5 // indirect
- gitlab.com/bosi/decorder v0.4.2 // indirect
- go-simpler.org/musttag v0.14.0 // indirect
- go-simpler.org/sloglint v0.11.1 // indirect
- go.augendre.info/arangolint v0.3.1 // indirect
- go.augendre.info/fatcontext v0.9.0 // indirect
- go.uber.org/automaxprocs v1.6.0 // indirect
- go.uber.org/multierr v1.10.0 // indirect
- go.uber.org/zap v1.27.0 // indirect
- golang.org/x/exp/typeparams v0.0.0-20251023183803-a4bb9ffd2546 // indirect
- golang.org/x/mod v0.29.0 // indirect
- golang.org/x/sync v0.17.0 // indirect
- golang.org/x/sys v0.37.0 // indirect
- golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 // indirect
- golang.org/x/text v0.30.0 // indirect
- google.golang.org/protobuf v1.36.8 // indirect
- gopkg.in/ini.v1 v1.67.0 // indirect
- gopkg.in/yaml.v2 v2.4.0 // indirect
- gopkg.in/yaml.v3 v3.0.1 // indirect
- honnef.co/go/tools v0.6.1 // indirect
- mvdan.cc/gofumpt v0.9.2 // indirect
- mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15 // indirect
-)
diff --git a/filebrowser/tools/go.sum b/filebrowser/tools/go.sum
deleted file mode 100644
index f2e0157b29..0000000000
--- a/filebrowser/tools/go.sum
+++ /dev/null
@@ -1,1001 +0,0 @@
-4d63.com/gocheckcompilerdirectives v1.3.0 h1:Ew5y5CtcAAQeTVKUVFrE7EwHMrTO6BggtEj8BZSjZ3A=
-4d63.com/gocheckcompilerdirectives v1.3.0/go.mod h1:ofsJ4zx2QAuIP/NO/NAh1ig6R1Fb18/GI7RVMwz7kAY=
-4d63.com/gochecknoglobals v0.2.2 h1:H1vdnwnMaZdQW/N+NrkT1SZMTBmcwHe9Vq8lJcYYTtU=
-4d63.com/gochecknoglobals v0.2.2/go.mod h1:lLxwTQjL5eIesRbvnzIP3jZtG140FnTdz+AlMa+ogt0=
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
-cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
-cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
-cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
-cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
-cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
-cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
-cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
-cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
-cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
-cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
-cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
-cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
-cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
-cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
-cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
-cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
-cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
-cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
-cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
-cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
-cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
-cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
-cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
-cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
-cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
-cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
-cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
-cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
-cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-codeberg.org/chavacava/garif v0.2.0 h1:F0tVjhYbuOCnvNcU3YSpO6b3Waw6Bimy4K0mM8y6MfY=
-codeberg.org/chavacava/garif v0.2.0/go.mod h1:P2BPbVbT4QcvLZrORc2T29szK3xEOlnl0GiPTJmEqBQ=
-dev.gaijin.team/go/exhaustruct/v4 v4.0.0 h1:873r7aNneqoBB3IaFIzhvt2RFYTuHgmMjoKfwODoI1Y=
-dev.gaijin.team/go/exhaustruct/v4 v4.0.0/go.mod h1:aZ/k2o4Y05aMJtiux15x8iXaumE88YdiB0Ai4fXOzPI=
-dev.gaijin.team/go/golib v0.6.0 h1:v6nnznFTs4bppib/NyU1PQxobwDHwCXXl15P7DV5Zgo=
-dev.gaijin.team/go/golib v0.6.0/go.mod h1:uY1mShx8Z/aNHWDyAkZTkX+uCi5PdX7KsG1eDQa2AVE=
-dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-github.com/4meepo/tagalign v1.4.3 h1:Bnu7jGWwbfpAie2vyl63Zup5KuRv21olsPIha53BJr8=
-github.com/4meepo/tagalign v1.4.3/go.mod h1:00WwRjiuSbrRJnSVeGWPLp2epS5Q/l4UEy0apLLS37c=
-github.com/Abirdcfly/dupword v0.1.7 h1:2j8sInznrje4I0CMisSL6ipEBkeJUJAmK1/lfoNGWrQ=
-github.com/Abirdcfly/dupword v0.1.7/go.mod h1:K0DkBeOebJ4VyOICFdppB23Q0YMOgVafM0zYW0n9lF4=
-github.com/AdminBenni/iota-mixing v1.0.0 h1:Os6lpjG2dp/AE5fYBPAA1zfa2qMdCAWwPMCgpwKq7wo=
-github.com/AdminBenni/iota-mixing v1.0.0/go.mod h1:i4+tpAaB+qMVIV9OK3m4/DAynOd5bQFaOu+2AhtBCNY=
-github.com/AlwxSin/noinlineerr v1.0.5 h1:RUjt63wk1AYWTXtVXbSqemlbVTb23JOSRiNsshj7TbY=
-github.com/AlwxSin/noinlineerr v1.0.5/go.mod h1:+QgkkoYrMH7RHvcdxdlI7vYYEdgeoFOVjU9sUhw/rQc=
-github.com/Antonboom/errname v1.1.1 h1:bllB7mlIbTVzO9jmSWVWLjxTEbGBVQ1Ff/ClQgtPw9Q=
-github.com/Antonboom/errname v1.1.1/go.mod h1:gjhe24xoxXp0ScLtHzjiXp0Exi1RFLKJb0bVBtWKCWQ=
-github.com/Antonboom/nilnil v1.1.1 h1:9Mdr6BYd8WHCDngQnNVV0b554xyisFioEKi30sksufQ=
-github.com/Antonboom/nilnil v1.1.1/go.mod h1:yCyAmSw3doopbOWhJlVci+HuyNRuHJKIv6V2oYQa8II=
-github.com/Antonboom/testifylint v1.6.4 h1:gs9fUEy+egzxkEbq9P4cpcMB6/G0DYdMeiFS87UiqmQ=
-github.com/Antonboom/testifylint v1.6.4/go.mod h1:YO33FROXX2OoUfwjz8g+gUxQXio5i9qpVy7nXGbxDD4=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
-github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/Djarvur/go-err113 v0.1.1 h1:eHfopDqXRwAi+YmCUas75ZE0+hoBHJ2GQNLYRSxao4g=
-github.com/Djarvur/go-err113 v0.1.1/go.mod h1:IaWJdYFLg76t2ihfflPZnM1LIQszWOsFDh2hhhAVF6k=
-github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
-github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
-github.com/MirrexOne/unqueryvet v1.2.1 h1:M+zdXMq84g+E1YOLa7g7ExN3dWfZQrdDSTCM7gC+m/A=
-github.com/MirrexOne/unqueryvet v1.2.1/go.mod h1:IWwCwMQlSWjAIteW0t+28Q5vouyktfujzYznSIWiuOg=
-github.com/OpenPeeDeeP/depguard/v2 v2.2.1 h1:vckeWVESWp6Qog7UZSARNqfu/cZqvki8zsuj3piCMx4=
-github.com/OpenPeeDeeP/depguard/v2 v2.2.1/go.mod h1:q4DKzC4UcVaAvcfd41CZh0PWpGgzrVxUYBlgKNGquUo=
-github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
-github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
-github.com/alecthomas/chroma/v2 v2.20.0 h1:sfIHpxPyR07/Oylvmcai3X/exDlE8+FA820NTz+9sGw=
-github.com/alecthomas/chroma/v2 v2.20.0/go.mod h1:e7tViK0xh/Nf4BYHl00ycY6rV7b8iXBksI9E359yNmA=
-github.com/alecthomas/go-check-sumtype v0.3.1 h1:u9aUvbGINJxLVXiFvHUlPEaD7VDULsrxJb4Aq31NLkU=
-github.com/alecthomas/go-check-sumtype v0.3.1/go.mod h1:A8TSiN3UPRw3laIgWEUOHHLPa6/r9MtoigdlP5h3K/E=
-github.com/alecthomas/repr v0.5.1 h1:E3G4t2QbHTSNpPKBgMTln5KLkZHLOcU7r37J4pXBuIg=
-github.com/alecthomas/repr v0.5.1/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alexkohler/nakedret/v2 v2.0.6 h1:ME3Qef1/KIKr3kWX3nti3hhgNxw6aqN5pZmQiFSsuzQ=
-github.com/alexkohler/nakedret/v2 v2.0.6/go.mod h1:l3RKju/IzOMQHmsEvXwkqMDzHHvurNQfAgE1eVmT40Q=
-github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw=
-github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE=
-github.com/alfatraining/structtag v1.0.0 h1:2qmcUqNcCoyVJ0up879K614L9PazjBSFruTB0GOFjCc=
-github.com/alfatraining/structtag v1.0.0/go.mod h1:p3Xi5SwzTi+Ryj64DqjLWz7XurHxbGsq6y3ubePJPus=
-github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw=
-github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I=
-github.com/alingse/nilnesserr v0.2.0 h1:raLem5KG7EFVb4UIDAXgrv3N2JIaffeKNtcEXkEWd/w=
-github.com/alingse/nilnesserr v0.2.0/go.mod h1:1xJPrXonEtX7wyTq8Dytns5P2hNzoWymVUIaKm4HNFg=
-github.com/ashanbrown/forbidigo/v2 v2.3.0 h1:OZZDOchCgsX5gvToVtEBoV2UWbFfI6RKQTir2UZzSxo=
-github.com/ashanbrown/forbidigo/v2 v2.3.0/go.mod h1:5p6VmsG5/1xx3E785W9fouMxIOkvY2rRV9nMdWadd6c=
-github.com/ashanbrown/makezero/v2 v2.1.0 h1:snuKYMbqosNokUKm+R6/+vOPs8yVAi46La7Ck6QYSaE=
-github.com/ashanbrown/makezero/v2 v2.1.0/go.mod h1:aEGT/9q3S8DHeE57C88z2a6xydvgx8J5hgXIGWgo0MY=
-github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
-github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
-github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
-github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
-github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/bkielbasa/cyclop v1.2.3 h1:faIVMIGDIANuGPWH031CZJTi2ymOQBULs9H21HSMa5w=
-github.com/bkielbasa/cyclop v1.2.3/go.mod h1:kHTwA9Q0uZqOADdupvcFJQtp/ksSnytRMe8ztxG8Fuo=
-github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M=
-github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k=
-github.com/bombsimon/wsl/v4 v4.7.0 h1:1Ilm9JBPRczjyUs6hvOPKvd7VL1Q++PL8M0SXBDf+jQ=
-github.com/bombsimon/wsl/v4 v4.7.0/go.mod h1:uV/+6BkffuzSAVYD+yGyld1AChO7/EuLrCF/8xTiapg=
-github.com/bombsimon/wsl/v5 v5.3.0 h1:nZWREJFL6U3vgW/B1lfDOigl+tEF6qgs6dGGbFeR0UM=
-github.com/bombsimon/wsl/v5 v5.3.0/go.mod h1:Gp8lD04z27wm3FANIUPZycXp+8huVsn0oxc+n4qfV9I=
-github.com/breml/bidichk v0.3.3 h1:WSM67ztRusf1sMoqH6/c4OBCUlRVTKq+CbSeo0R17sE=
-github.com/breml/bidichk v0.3.3/go.mod h1:ISbsut8OnjB367j5NseXEGGgO/th206dVa427kR8YTE=
-github.com/breml/errchkjson v0.4.1 h1:keFSS8D7A2T0haP9kzZTi7o26r7kE3vymjZNeNDRDwg=
-github.com/breml/errchkjson v0.4.1/go.mod h1:a23OvR6Qvcl7DG/Z4o0el6BRAjKnaReoPQFciAl9U3s=
-github.com/butuzov/ireturn v0.4.0 h1:+s76bF/PfeKEdbG8b54aCocxXmi0wvYdOVsWxVO7n8E=
-github.com/butuzov/ireturn v0.4.0/go.mod h1:ghI0FrCmap8pDWZwfPisFD1vEc56VKH4NpQUxDHta70=
-github.com/butuzov/mirror v1.3.0 h1:HdWCXzmwlQHdVhwvsfBb2Au0r3HyINry3bDWLYXiKoc=
-github.com/butuzov/mirror v1.3.0/go.mod h1:AEij0Z8YMALaq4yQj9CPPVYOyJQyiexpQEQgihajRfI=
-github.com/catenacyber/perfsprint v0.10.0 h1:AZj1mYyxbxLRqmnYOeguZXEQwWOgQGm2wzLI5d7Hl/0=
-github.com/catenacyber/perfsprint v0.10.0/go.mod h1:DJTGsi/Zufpuus6XPGJyKOTMELe347o6akPvWG9Zcsc=
-github.com/ccojocar/zxcvbn-go v1.0.4 h1:FWnCIRMXPj43ukfX000kvBZvV6raSxakYr1nzyNrUcc=
-github.com/ccojocar/zxcvbn-go v1.0.4/go.mod h1:3GxGX+rHmueTUMvm5ium7irpyjmm7ikxYFOSJB21Das=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
-github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/charithe/durationcheck v0.0.11 h1:g1/EX1eIiKS57NTWsYtHDZ/APfeXKhye1DidBcABctk=
-github.com/charithe/durationcheck v0.0.11/go.mod h1:x5iZaixRNl8ctbM+3B2RrPG5t856TxRyVQEnbIEM2X4=
-github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs=
-github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk=
-github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
-github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
-github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
-github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
-github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8=
-github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
-github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
-github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
-github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/ckaznocha/intrange v0.3.1 h1:j1onQyXvHUsPWujDH6WIjhyH26gkRt/txNlV7LspvJs=
-github.com/ckaznocha/intrange v0.3.1/go.mod h1:QVepyz1AkUoFQkpEqksSYpNpUo3c5W7nWh/s6SHIJJk=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
-github.com/curioswitch/go-reassign v0.3.0 h1:dh3kpQHuADL3cobV/sSGETA8DOv457dwl+fbBAhrQPs=
-github.com/curioswitch/go-reassign v0.3.0/go.mod h1:nApPCCTtqLJN/s8HfItCcKV0jIPwluBOvZP+dsJGA88=
-github.com/daixiang0/gci v0.13.7 h1:+0bG5eK9vlI08J+J/NWGbWPTNiXPG4WhNLJOkSxWITQ=
-github.com/daixiang0/gci v0.13.7/go.mod h1:812WVN6JLFY9S6Tv76twqmNqevN0pa3SX3nih0brVzQ=
-github.com/dave/dst v0.27.3 h1:P1HPoMza3cMEquVf9kKy8yXsFirry4zEnWOdYPOoIzY=
-github.com/dave/dst v0.27.3/go.mod h1:jHh6EOibnHgcUW3WjKHisiooEkYwqpHLBSX1iOBhEyc=
-github.com/dave/jennifer v1.7.1 h1:B4jJJDHelWcDhlRQxWeo0Npa/pYKBLrirAQoTN45txo=
-github.com/dave/jennifer v1.7.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3RmGZc=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/denis-tingaikin/go-header v0.5.0 h1:SRdnP5ZKvcO9KKRP1KJrhFR3RrlGuD+42t4429eC9k8=
-github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okegmwQ3UgWl4V1D8gjlY=
-github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
-github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q=
-github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A=
-github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
-github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
-github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
-github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
-github.com/firefart/nonamedreturns v1.0.6 h1:vmiBcKV/3EqKY3ZiPxCINmpS431OcE1S47AQUwhrg8E=
-github.com/firefart/nonamedreturns v1.0.6/go.mod h1:R8NisJnSIpvPWheCq0mNRXJok6D8h7fagJTF8EMEwCo=
-github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
-github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
-github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
-github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
-github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo=
-github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA=
-github.com/ghostiam/protogetter v0.3.17 h1:sjGPErP9o7i2Ym+z3LsQzBdLCNaqbYy2iJQPxGXg04Q=
-github.com/ghostiam/protogetter v0.3.17/go.mod h1:AivIX1eKA/TcUmzZdzbl+Tb8tjIe8FcyG6JFyemQAH4=
-github.com/go-critic/go-critic v0.14.2 h1:PMvP5f+LdR8p6B29npvChUXbD1vrNlKDf60NJtgMBOo=
-github.com/go-critic/go-critic v0.14.2/go.mod h1:xwntfW6SYAd7h1OqDzmN6hBX/JxsEKl5up/Y2bsxgVQ=
-github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
-github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
-github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
-github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
-github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI=
-github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow=
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/go-toolsmith/astcast v1.1.0 h1:+JN9xZV1A+Re+95pgnMgDboWNVnIMMQXwfBwLRPgSC8=
-github.com/go-toolsmith/astcast v1.1.0/go.mod h1:qdcuFWeGGS2xX5bLM/c3U9lewg7+Zu4mr+xPwZIB4ZU=
-github.com/go-toolsmith/astcopy v1.1.0 h1:YGwBN0WM+ekI/6SS6+52zLDEf8Yvp3n2seZITCUBt5s=
-github.com/go-toolsmith/astcopy v1.1.0/go.mod h1:hXM6gan18VA1T/daUEHCFcYiW8Ai1tIwIzHY6srfEAw=
-github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4=
-github.com/go-toolsmith/astequal v1.1.0/go.mod h1:sedf7VIdCL22LD8qIvv7Nn9MuWJruQA/ysswh64lffQ=
-github.com/go-toolsmith/astequal v1.2.0 h1:3Fs3CYZ1k9Vo4FzFhwwewC3CHISHDnVUPC4x0bI2+Cw=
-github.com/go-toolsmith/astequal v1.2.0/go.mod h1:c8NZ3+kSFtFY/8lPso4v8LuJjdJiUFVnSuU3s0qrrDY=
-github.com/go-toolsmith/astfmt v1.1.0 h1:iJVPDPp6/7AaeLJEruMsBUlOYCmvg0MoCfJprsOmcco=
-github.com/go-toolsmith/astfmt v1.1.0/go.mod h1:OrcLlRwu0CuiIBp/8b5PYF9ktGVZUjlNMV634mhwuQ4=
-github.com/go-toolsmith/astp v1.1.0 h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA=
-github.com/go-toolsmith/astp v1.1.0/go.mod h1:0T1xFGz9hicKs8Z5MfAqSUitoUYS30pDMsRVIDHs8CA=
-github.com/go-toolsmith/pkgload v1.2.2 h1:0CtmHq/02QhxcF7E9N5LIFcYFsMR5rdovfqTtRKkgIk=
-github.com/go-toolsmith/pkgload v1.2.2/go.mod h1:R2hxLNRKuAsiXCo2i5J6ZQPhnPMOVtU+f0arbFPWCus=
-github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8=
-github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQiyP2Bvw=
-github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ=
-github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus=
-github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig=
-github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
-github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
-github.com/go-xmlfmt/xmlfmt v1.1.3 h1:t8Ey3Uy7jDSEisW2K3somuMKIpzktkWptA0iFCnRUWY=
-github.com/go-xmlfmt/xmlfmt v1.1.3/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM=
-github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
-github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
-github.com/godoc-lint/godoc-lint v0.10.1 h1:ZPUVzlDtJfA+P688JfPJPkI/SuzcBr/753yGIk5bOPA=
-github.com/godoc-lint/godoc-lint v0.10.1/go.mod h1:KleLcHu/CGSvkjUH2RvZyoK1MBC7pDQg4NxMYLcBBsw=
-github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw=
-github.com/gofrs/flock v0.13.0/go.mod h1:jxeyy9R1auM5S6JYDBhDt+E2TCo7DkratH4Pgi8P+Z0=
-github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
-github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golangci/asciicheck v0.5.0 h1:jczN/BorERZwK8oiFBOGvlGPknhvq0bjnysTj4nUfo0=
-github.com/golangci/asciicheck v0.5.0/go.mod h1:5RMNAInbNFw2krqN6ibBxN/zfRFa9S6tA1nPdM0l8qQ=
-github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 h1:WUvBfQL6EW/40l6OmeSBYQJNSif4O11+bmWEz+C7FYw=
-github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32/go.mod h1:NUw9Zr2Sy7+HxzdjIULge71wI6yEg1lWQr7Evcu8K0E=
-github.com/golangci/go-printf-func-name v0.1.1 h1:hIYTFJqAGp1iwoIfsNTpoq1xZAarogrvjO9AfiW3B4U=
-github.com/golangci/go-printf-func-name v0.1.1/go.mod h1:Es64MpWEZbh0UBtTAICOZiB+miW53w/K9Or/4QogJss=
-github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d h1:viFft9sS/dxoYY0aiOTsLKO2aZQAPT4nlQCsimGcSGE=
-github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d/go.mod h1:ivJ9QDg0XucIkmwhzCDsqcnxxlDStoTl89jDMIoNxKY=
-github.com/golangci/golangci-lint/v2 v2.6.1 h1:yTYVG6BJ4eG9QE815BAQDrC2xBbTB8lW11jg+YQ0b1c=
-github.com/golangci/golangci-lint/v2 v2.6.1/go.mod h1:zlg/a5aw46LvRBHZ3OOwwsCtkjWTrn3wm5qowoteCRg=
-github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95 h1:AkK+w9FZBXlU/xUmBtSJN1+tAI4FIvy5WtnUnY8e4p8=
-github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95/go.mod h1:k9mmcyWKSTMcPPvQUCfRWWQ9VHJ1U9Dc0R7kaXAgtnQ=
-github.com/golangci/misspell v0.7.0 h1:4GOHr/T1lTW0hhR4tgaaV1WS/lJ+ncvYCoFKmqJsj0c=
-github.com/golangci/misspell v0.7.0/go.mod h1:WZyyI2P3hxPY2UVHs3cS8YcllAeyfquQcKfdeE9AFVg=
-github.com/golangci/plugin-module-register v0.1.2 h1:e5WM6PO6NIAEcij3B053CohVp3HIYbzSuP53UAYgOpg=
-github.com/golangci/plugin-module-register v0.1.2/go.mod h1:1+QGTsKBvAIvPvoY/os+G5eoqxWn70HYDm2uvUyGuVw=
-github.com/golangci/revgrep v0.8.0 h1:EZBctwbVd0aMeRnNUsFogoyayvKHyxlV3CdUA46FX2s=
-github.com/golangci/revgrep v0.8.0/go.mod h1:U4R/s9dlXZsg8uJmaR1GrloUr14D7qDl8gi2iPXJH8k=
-github.com/golangci/swaggoswag v0.0.0-20250504205917-77f2aca3143e h1:ai0EfmVYE2bRA5htgAG9r7s3tHsfjIhN98WshBTJ9jM=
-github.com/golangci/swaggoswag v0.0.0-20250504205917-77f2aca3143e/go.mod h1:Vrn4B5oR9qRwM+f54koyeH3yzphlecwERs0el27Fr/s=
-github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e h1:gD6P7NEo7Eqtt0ssnqSJNNndxe69DOQ24A5h7+i3KpM=
-github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e/go.mod h1:h+wZwLjUTJnm/P2rwlbJdRPZXOzaT36/FwnPnY2inzc=
-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
-github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
-github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
-github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6 h1:EEHtgt9IwisQ2AZ4pIsMjahcegHh6rmhqxzIRQIyepY=
-github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6/go.mod h1:I6V7YzU0XDpsHqbsyrghnFZLO1gwK6NPTNvmetQIk9U=
-github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
-github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
-github.com/gordonklaus/ineffassign v0.2.0 h1:Uths4KnmwxNJNzq87fwQQDDnbNb7De00VOk9Nu0TySs=
-github.com/gordonklaus/ineffassign v0.2.0/go.mod h1:TIpymnagPSexySzs7F9FnO1XFTy8IT3a59vmZp5Y9Lw=
-github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk=
-github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc=
-github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM=
-github.com/gostaticanalysis/comment v1.5.0 h1:X82FLl+TswsUMpMh17srGRuKaaXprTaytmEpgnKIDu8=
-github.com/gostaticanalysis/comment v1.5.0/go.mod h1:V6eb3gpCv9GNVqb6amXzEUX3jXLVK/AdA+IrAMSqvEc=
-github.com/gostaticanalysis/forcetypeassert v0.2.0 h1:uSnWrrUEYDr86OCxWa4/Tp2jeYDlogZiZHzGkWFefTk=
-github.com/gostaticanalysis/forcetypeassert v0.2.0/go.mod h1:M5iPavzE9pPqWyeiVXSFghQjljW1+l/Uke3PXHS6ILY=
-github.com/gostaticanalysis/nilerr v0.1.2 h1:S6nk8a9N8g062nsx63kUkF6AzbHGw7zzyHMcpu52xQU=
-github.com/gostaticanalysis/nilerr v0.1.2/go.mod h1:A19UHhoY3y8ahoL7YKz6sdjDtduwTSI4CsymaC2htPA=
-github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M=
-github.com/gostaticanalysis/testutil v0.5.0 h1:Dq4wT1DdTwTGCQQv3rl3IvD5Ld0E6HiY+3Zh0sUGqw8=
-github.com/gostaticanalysis/testutil v0.5.0/go.mod h1:OLQSbuM6zw2EvCcXTz1lVq5unyoNft372msDY0nY5Hs=
-github.com/hashicorp/go-immutable-radix/v2 v2.1.0 h1:CUW5RYIcysz+D3B+l1mDeXrQ7fUvGGCwJfdASSzbrfo=
-github.com/hashicorp/go-immutable-radix/v2 v2.1.0/go.mod h1:hgdqLXA4f6NIjRVisM1TJ9aOJVNRqKZj+xDGF6m7PBw=
-github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
-github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
-github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
-github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
-github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
-github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
-github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
-github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
-github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
-github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
-github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/jgautheron/goconst v1.8.2 h1:y0XF7X8CikZ93fSNT6WBTb/NElBu9IjaY7CCYQrCMX4=
-github.com/jgautheron/goconst v1.8.2/go.mod h1:A0oxgBCHy55NQn6sYpO7UdnA9p+h7cPtoOZUmvNIako=
-github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs=
-github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c=
-github.com/jjti/go-spancheck v0.6.5 h1:lmi7pKxa37oKYIMScialXUK6hP3iY5F1gu+mLBPgYB8=
-github.com/jjti/go-spancheck v0.6.5/go.mod h1:aEogkeatBrbYsyW6y5TgDfihCulDYciL1B7rG2vSsrU=
-github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
-github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
-github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/julz/importas v0.2.0 h1:y+MJN/UdL63QbFJHws9BVC5RpA2iq0kpjrFajTGivjQ=
-github.com/julz/importas v0.2.0/go.mod h1:pThlt589EnCYtMnmhmRYY/qn9lCf/frPOK+WMx3xiJY=
-github.com/karamaru-alpha/copyloopvar v1.2.2 h1:yfNQvP9YaGQR7VaWLYcfZUlRP2eo2vhExWKxD/fP6q0=
-github.com/karamaru-alpha/copyloopvar v1.2.2/go.mod h1:oY4rGZqZ879JkJMtX3RRkcXRkmUvH0x35ykgaKgsgJY=
-github.com/kisielk/errcheck v1.9.0 h1:9xt1zI9EBfcYBvdU1nVrzMzzUPUtPKs9bVSIM3TAb3M=
-github.com/kisielk/errcheck v1.9.0/go.mod h1:kQxWMMVZgIkDq7U8xtG/n2juOjbLgZtedi0D+/VL/i8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kkHAIKE/contextcheck v1.1.6 h1:7HIyRcnyzxL9Lz06NGhiKvenXq7Zw6Q0UQu/ttjfJCE=
-github.com/kkHAIKE/contextcheck v1.1.6/go.mod h1:3dDbMRNBFaq8HFXWC1JyvDSPm43CmE6IuHam8Wr0rkg=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/kulti/thelper v0.7.1 h1:fI8QITAoFVLx+y+vSyuLBP+rcVIB8jKooNSCT2EiI98=
-github.com/kulti/thelper v0.7.1/go.mod h1:NsMjfQEy6sd+9Kfw8kCP61W1I0nerGSYSFnGaxQkcbs=
-github.com/kunwardeep/paralleltest v1.0.15 h1:ZMk4Qt306tHIgKISHWFJAO1IDQJLc6uDyJMLyncOb6w=
-github.com/kunwardeep/paralleltest v1.0.15/go.mod h1:di4moFqtfz3ToSKxhNjhOZL+696QtJGCFe132CbBLGk=
-github.com/lasiar/canonicalheader v1.1.2 h1:vZ5uqwvDbyJCnMhmFYimgMZnJMjwljN5VGY0VKbMXb4=
-github.com/lasiar/canonicalheader v1.1.2/go.mod h1:qJCeLFS0G/QlLQ506T+Fk/fWMa2VmBUiEI2cuMK4djI=
-github.com/ldez/exptostd v0.4.5 h1:kv2ZGUVI6VwRfp/+bcQ6Nbx0ghFWcGIKInkG/oFn1aQ=
-github.com/ldez/exptostd v0.4.5/go.mod h1:QRjHRMXJrCTIm9WxVNH6VW7oN7KrGSht69bIRwvdFsM=
-github.com/ldez/gomoddirectives v0.7.1 h1:FaULkvUIG36hj6chpwa+FdCNGZBsD7/fO+p7CCsM6pE=
-github.com/ldez/gomoddirectives v0.7.1/go.mod h1:auDNtakWJR1rC+YX7ar+HmveqXATBAyEK1KYpsIRW/8=
-github.com/ldez/grignotin v0.10.1 h1:keYi9rYsgbvqAZGI1liek5c+jv9UUjbvdj3Tbn5fn4o=
-github.com/ldez/grignotin v0.10.1/go.mod h1:UlDbXFCARrXbWGNGP3S5vsysNXAPhnSuBufpTEbwOas=
-github.com/ldez/tagliatelle v0.7.2 h1:KuOlL70/fu9paxuxbeqlicJnCspCRjH0x8FW+NfgYUk=
-github.com/ldez/tagliatelle v0.7.2/go.mod h1:PtGgm163ZplJfZMZ2sf5nhUT170rSuPgBimoyYtdaSI=
-github.com/ldez/usetesting v0.5.0 h1:3/QtzZObBKLy1F4F8jLuKJiKBjjVFi1IavpoWbmqLwc=
-github.com/ldez/usetesting v0.5.0/go.mod h1:Spnb4Qppf8JTuRgblLrEWb7IE6rDmUpGvxY3iRrzvDQ=
-github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY=
-github.com/leonklingele/grouper v1.1.2/go.mod h1:6D0M/HVkhs2yRKRFZUoGjeDy7EZTfFBE9gl4kjmIGkA=
-github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
-github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
-github.com/macabu/inamedparam v0.2.0 h1:VyPYpOc10nkhI2qeNUdh3Zket4fcZjEWe35poddBCpE=
-github.com/macabu/inamedparam v0.2.0/go.mod h1:+Pee9/YfGe5LJ62pYXqB89lJ+0k5bsR8Wgz/C0Zlq3U=
-github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
-github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
-github.com/manuelarte/embeddedstructfieldcheck v0.4.0 h1:3mAIyaGRtjK6EO9E73JlXLtiy7ha80b2ZVGyacxgfww=
-github.com/manuelarte/embeddedstructfieldcheck v0.4.0/go.mod h1:z8dFSyXqp+fC6NLDSljRJeNQJJDWnY7RoWFzV3PC6UM=
-github.com/manuelarte/funcorder v0.5.0 h1:llMuHXXbg7tD0i/LNw8vGnkDTHFpTnWqKPI85Rknc+8=
-github.com/manuelarte/funcorder v0.5.0/go.mod h1:Yt3CiUQthSBMBxjShjdXMexmzpP8YGvGLjrxJNkO2hA=
-github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI=
-github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE=
-github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1rNTU04=
-github.com/maratori/testpackage v1.1.1/go.mod h1:s4gRK/ym6AMrqpOa/kEbQTV4Q4jb7WeLZzVhVVVOQMc=
-github.com/matoous/godox v1.1.0 h1:W5mqwbyWrwZv6OQ5Z1a/DHGMOvXYCBP3+Ht7KMoJhq4=
-github.com/matoous/godox v1.1.0/go.mod h1:jgE/3fUXiTurkdHOLT5WEkThTSuE7yxHv5iWPa80afs=
-github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE=
-github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
-github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
-github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
-github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
-github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
-github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
-github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
-github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/mgechev/revive v1.12.0 h1:Q+/kkbbwerrVYPv9d9efaPGmAO/NsxwW/nE6ahpQaCU=
-github.com/mgechev/revive v1.12.0/go.mod h1:VXsY2LsTigk8XU9BpZauVLjVrhICMOV3k1lpB3CXrp8=
-github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
-github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
-github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/moricho/tparallel v0.3.2 h1:odr8aZVFA3NZrNybggMkYO3rgPRcqjeQUlBBFVxKHTI=
-github.com/moricho/tparallel v0.3.2/go.mod h1:OQ+K3b4Ln3l2TZveGCywybl68glfLEwFGqvnjok8b+U=
-github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
-github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
-github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U=
-github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE=
-github.com/nishanths/exhaustive v0.12.0 h1:vIY9sALmw6T/yxiASewa4TQcFsVYZQQRUQJhKRf3Swg=
-github.com/nishanths/exhaustive v0.12.0/go.mod h1:mEZ95wPIZW+x8kC4TgC+9YCUgiST7ecevsVDTgc2obs=
-github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk=
-github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c=
-github.com/nunnatsa/ginkgolinter v0.21.2 h1:khzWfm2/Br8ZemX8QM1pl72LwM+rMeW6VUbQ4rzh0Po=
-github.com/nunnatsa/ginkgolinter v0.21.2/go.mod h1:GItSI5fw7mCGLPmkvGYrr1kEetZe7B593jcyOpyabsY=
-github.com/onsi/ginkgo/v2 v2.26.0 h1:1J4Wut1IlYZNEAWIV3ALrT9NfiaGW2cDCJQSFQMs/gE=
-github.com/onsi/ginkgo/v2 v2.26.0/go.mod h1:qhEywmzWTBUY88kfO0BRvX4py7scov9yR+Az2oavUzw=
-github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A=
-github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k=
-github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw=
-github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU=
-github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w=
-github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
-github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
-github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
-github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
-github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
-github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
-github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
-github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
-github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/polyfloyd/go-errorlint v1.8.0 h1:DL4RestQqRLr8U4LygLw8g2DX6RN1eBJOpa2mzsrl1Q=
-github.com/polyfloyd/go-errorlint v1.8.0/go.mod h1:G2W0Q5roxbLCt0ZQbdoxQxXktTjwNyDbEaj3n7jvl4s=
-github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
-github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
-github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk=
-github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
-github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
-github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
-github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4=
-github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
-github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/quasilyte/go-ruleguard v0.4.5 h1:AGY0tiOT5hJX9BTdx/xBdoCubQUAE2grkqY2lSwvZcA=
-github.com/quasilyte/go-ruleguard v0.4.5/go.mod h1:Vl05zJ538vcEEwu16V/Hdu7IYZWyKSwIy4c88Ro1kRE=
-github.com/quasilyte/go-ruleguard/dsl v0.3.23 h1:lxjt5B6ZCiBeeNO8/oQsegE6fLeCzuMRoVWSkXC4uvY=
-github.com/quasilyte/go-ruleguard/dsl v0.3.23/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU=
-github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo=
-github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng=
-github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl980XxGFEZSS6KlBGIV0diGdySzxATTWoqaU=
-github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0=
-github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs=
-github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ=
-github.com/raeperd/recvcheck v0.2.0 h1:GnU+NsbiCqdC2XX5+vMZzP+jAJC5fht7rcVTAhX74UI=
-github.com/raeperd/recvcheck v0.2.0/go.mod h1:n04eYkwIR0JbgD73wT8wL4JjPC3wm0nFtzBnWNocnYU=
-github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
-github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
-github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
-github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
-github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
-github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/ryancurrah/gomodguard v1.4.1 h1:eWC8eUMNZ/wM/PWuZBv7JxxqT5fiIKSIyTvjb7Elr+g=
-github.com/ryancurrah/gomodguard v1.4.1/go.mod h1:qnMJwV1hX9m+YJseXEBhd2s90+1Xn6x9dLz11ualI1I=
-github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9fJfSfdyCU=
-github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ=
-github.com/sanposhiho/wastedassign/v2 v2.1.0 h1:crurBF7fJKIORrV85u9UUpePDYGWnwvv3+A96WvwXT0=
-github.com/sanposhiho/wastedassign/v2 v2.1.0/go.mod h1:+oSmSC+9bQ+VUAxA66nBb0Z7N8CK7mscKTDYC6aIek4=
-github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ=
-github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU=
-github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw=
-github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ=
-github.com/sashamelentyev/usestdlibvars v1.29.0 h1:8J0MoRrw4/NAXtjQqTHrbW9NN+3iMf7Knkq057v4XOQ=
-github.com/sashamelentyev/usestdlibvars v1.29.0/go.mod h1:8PpnjHMk5VdeWlVb4wCdrB8PNbLqZ3wBZTZWkrpZZL8=
-github.com/securego/gosec/v2 v2.22.10 h1:ntbBqdWXnu46DUOXn+R2SvPo3PiJCDugTCgTW2g4tQg=
-github.com/securego/gosec/v2 v2.22.10/go.mod h1:9UNjK3tLpv/w2b0+7r82byV43wCJDNtEDQMeS+H/g2w=
-github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
-github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
-github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
-github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
-github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
-github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
-github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
-github.com/sivchari/containedctx v1.0.3 h1:x+etemjbsh2fB5ewm5FeLNi5bUjK0V8n0RB+Wwfd0XE=
-github.com/sivchari/containedctx v1.0.3/go.mod h1:c1RDvCbnJLtH4lLcYD/GqwiBSSf4F5Qk0xld2rBqzJ4=
-github.com/sonatard/noctx v0.4.0 h1:7MC/5Gg4SQ4lhLYR6mvOP6mQVSxCrdyiExo7atBs27o=
-github.com/sonatard/noctx v0.4.0/go.mod h1:64XdbzFb18XL4LporKXp8poqZtPKbCrqQ402CV+kJas=
-github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCpA8G0=
-github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs=
-github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA=
-github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo=
-github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
-github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
-github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
-github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
-github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
-github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
-github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ=
-github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI=
-github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0=
-github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I=
-github.com/stbenjam/no-sprintf-host-port v0.2.0 h1:i8pxvGrt1+4G0czLr/WnmyH7zbZ8Bg8etvARQ1rpyl4=
-github.com/stbenjam/no-sprintf-host-port v0.2.0/go.mod h1:eL0bQ9PasS0hsyTyfTjjG+E80QIyPnBVQbYZyv20Jfk=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
-github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
-github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
-github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs=
-github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
-github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA=
-github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0=
-github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag=
-github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY=
-github.com/tetafro/godot v1.5.4 h1:u1ww+gqpRLiIA16yF2PV1CV1n/X3zhyezbNXC3E14Sg=
-github.com/tetafro/godot v1.5.4/go.mod h1:eOkMrVQurDui411nBY2FA05EYH01r14LuWY/NrVDVcU=
-github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67 h1:9LPGD+jzxMlnk5r6+hJnar67cgpDIz/iyD+rfl5r2Vk=
-github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67/go.mod h1:mkjARE7Yr8qU23YcGMSALbIxTQ9r9QBVahQOBRfU460=
-github.com/timonwong/loggercheck v0.11.0 h1:jdaMpYBl+Uq9mWPXv1r8jc5fC3gyXx4/WGwTnnNKn4M=
-github.com/timonwong/loggercheck v0.11.0/go.mod h1:HEAWU8djynujaAVX7QI65Myb8qgfcZ1uKbdpg3ZzKl8=
-github.com/tomarrell/wrapcheck/v2 v2.11.0 h1:BJSt36snX9+4WTIXeJ7nvHBQBcm1h2SjQMSlmQ6aFSU=
-github.com/tomarrell/wrapcheck/v2 v2.11.0/go.mod h1:wFL9pDWDAbXhhPZZt+nG8Fu+h29TtnZ2MW6Lx4BRXIU=
-github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw=
-github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw=
-github.com/ultraware/funlen v0.2.0 h1:gCHmCn+d2/1SemTdYMiKLAHFYxTYz7z9VIDRaTGyLkI=
-github.com/ultraware/funlen v0.2.0/go.mod h1:ZE0q4TsJ8T1SQcjmkhN/w+MceuatI6pBFSxxyteHIJA=
-github.com/ultraware/whitespace v0.2.0 h1:TYowo2m9Nfj1baEQBjuHzvMRbp19i+RCcRYrSWoFa+g=
-github.com/ultraware/whitespace v0.2.0/go.mod h1:XcP1RLD81eV4BW8UhQlpaR+SDc2givTvyI8a586WjW8=
-github.com/uudashr/gocognit v1.2.0 h1:3BU9aMr1xbhPlvJLSydKwdLN3tEUUrzPSSM8S4hDYRA=
-github.com/uudashr/gocognit v1.2.0/go.mod h1:k/DdKPI6XBZO1q7HgoV2juESI2/Ofj9AcHPZhBBdrTU=
-github.com/uudashr/iface v1.4.1 h1:J16Xl1wyNX9ofhpHmQ9h9gk5rnv2A6lX/2+APLTo0zU=
-github.com/uudashr/iface v1.4.1/go.mod h1:pbeBPlbuU2qkNDn0mmfrxP2X+wjPMIQAy+r1MBXSXtg=
-github.com/xen0n/gosmopolitan v1.3.0 h1:zAZI1zefvo7gcpbCOrPSHJZJYA9ZgLfJqtKzZ5pHqQM=
-github.com/xen0n/gosmopolitan v1.3.0/go.mod h1:rckfr5T6o4lBtM1ga7mLGKZmLxswUoH1zxHgNXOsEt4=
-github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
-github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
-github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM=
-github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk=
-github.com/yeya24/promlinter v0.3.0 h1:JVDbMp08lVCP7Y6NP3qHroGAO6z2yGKQtS5JsjqtoFs=
-github.com/yeya24/promlinter v0.3.0/go.mod h1:cDfJQQYv9uYciW60QT0eeHlFodotkYZlL+YcPQN+mW4=
-github.com/ykadowak/zerologlint v0.1.5 h1:Gy/fMz1dFQN9JZTPjv1hxEk+sRWm05row04Yoolgdiw=
-github.com/ykadowak/zerologlint v0.1.5/go.mod h1:KaUskqF3e/v59oPmdq1U1DnKcuHokl2/K1U4pmIELKg=
-github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-gitlab.com/bosi/decorder v0.4.2 h1:qbQaV3zgwnBZ4zPMhGLW4KZe7A7NwxEhJx39R3shffo=
-gitlab.com/bosi/decorder v0.4.2/go.mod h1:muuhHoaJkA9QLcYHq4Mj8FJUwDZ+EirSHRiaTcTf6T8=
-go-simpler.org/assert v0.9.0 h1:PfpmcSvL7yAnWyChSjOz6Sp6m9j5lyK8Ok9pEL31YkQ=
-go-simpler.org/assert v0.9.0/go.mod h1:74Eqh5eI6vCK6Y5l3PI8ZYFXG4Sa+tkr70OIPJAUr28=
-go-simpler.org/musttag v0.14.0 h1:XGySZATqQYSEV3/YTy+iX+aofbZZllJaqwFWs+RTtSo=
-go-simpler.org/musttag v0.14.0/go.mod h1:uP8EymctQjJ4Z1kUnjX0u2l60WfUdQxCwSNKzE1JEOE=
-go-simpler.org/sloglint v0.11.1 h1:xRbPepLT/MHPTCA6TS/wNfZrDzkGvCCqUv4Bdwc3H7s=
-go-simpler.org/sloglint v0.11.1/go.mod h1:2PowwiCOK8mjiF+0KGifVOT8ZsCNiFzvfyJeJOIt8MQ=
-go.augendre.info/arangolint v0.3.1 h1:n2E6p8f+zfXSFLa2e2WqFPp4bfvcuRdd50y6cT65pSo=
-go.augendre.info/arangolint v0.3.1/go.mod h1:6ZKzEzIZuBQwoSvlKT+qpUfIbBfFCE5gbAoTg0/117g=
-go.augendre.info/fatcontext v0.9.0 h1:Gt5jGD4Zcj8CDMVzjOJITlSb9cEch54hjRRlN3qDojE=
-go.augendre.info/fatcontext v0.9.0/go.mod h1:L94brOAT1OOUNue6ph/2HnwxoNlds9aXDF2FcUntbNw=
-go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
-go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
-go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
-go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
-go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
-golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
-golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
-golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
-golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
-golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
-golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
-golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
-golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
-golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
-golang.org/x/exp/typeparams v0.0.0-20251023183803-a4bb9ffd2546 h1:HDjDiATsGqvuqvkDvgJjD1IgPrVekcSXVVE21JwvzGE=
-golang.org/x/exp/typeparams v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:4Mzdyp/6jzw9auFDJ3OMF5qksa7UvPnzKqTVGcb04ms=
-golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
-golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
-golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
-golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
-golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
-golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
-golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
-golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
-golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
-golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 h1:LvzTn0GQhWuvKH/kVRS3R3bVAsdQWI7hvfLHGgh9+lU=
-golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
-golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
-golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
-golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
-golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
-golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU=
-golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU=
-golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
-golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
-golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
-golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
-golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
-golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
-golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
-golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
-golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
-google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
-google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
-google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
-google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
-google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
-google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
-google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
-google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
-google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
-google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
-gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-honnef.co/go/tools v0.6.1 h1:R094WgE8K4JirYjBaOpz/AvTyUu/3wbmAoskKN/pxTI=
-honnef.co/go/tools v0.6.1/go.mod h1:3puzxxljPCe8RGJX7BIy1plGbxEOZni5mR2aXe3/uk4=
-mvdan.cc/gofumpt v0.9.2 h1:zsEMWL8SVKGHNztrx6uZrXdp7AX8r421Vvp23sz7ik4=
-mvdan.cc/gofumpt v0.9.2/go.mod h1:iB7Hn+ai8lPvofHd9ZFGVg2GOr8sBUw1QUWjNbmIL/s=
-mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15 h1:ssMzja7PDPJV8FStj7hq9IKiuiKhgz9ErWw+m68e7DI=
-mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15/go.mod h1:4M5MMXl2kW6fivUT6yRGpLLPNfuGtU2Z0cPvFquGDYU=
-rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
-rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
-rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
diff --git a/filebrowser/tools/package.json b/filebrowser/tools/package.json
deleted file mode 100644
index 9433b94ec4..0000000000
--- a/filebrowser/tools/package.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "dependencies": {
- "@commitlint/cli": "^15.0.0",
- "@commitlint/config-conventional": "^15.0.0",
- "standard-version": "^9.3.2"
- },
- "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
-}
diff --git a/filebrowser/tools/tools.go b/filebrowser/tools/tools.go
deleted file mode 100644
index 5f7440097a..0000000000
--- a/filebrowser/tools/tools.go
+++ /dev/null
@@ -1,15 +0,0 @@
-//go:build tools
-// +build tools
-
-package tools
-
-// Manage tool dependencies via go.mod.
-//
-// https://github.com/golang/go/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module
-// https://github.com/golang/go/issues/25922
-//
-// nolint
-import (
- _ "github.com/golangci/golangci-lint/v2/cmd/golangci-lint"
- _ "golang.org/x/tools/cmd/goimports"
-)
diff --git a/filebrowser/tools/yarn.lock b/filebrowser/tools/yarn.lock
deleted file mode 100644
index ac478ea49c..0000000000
--- a/filebrowser/tools/yarn.lock
+++ /dev/null
@@ -1,1740 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@babel/code-frame@^7.0.0":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
- integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
- dependencies:
- "@babel/helper-validator-identifier" "^7.27.1"
- js-tokens "^4.0.0"
- picocolors "^1.1.1"
-
-"@babel/helper-validator-identifier@^7.27.1":
- version "7.28.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4"
- integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==
-
-"@commitlint/cli@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-15.0.0.tgz#8e78e86ee2b6955c1a5d140e734a6c171ce367ee"
- integrity sha512-Y5xmDCweytqzo4N4lOI2YRiuX35xTjcs8n5hUceBH8eyK0YbwtgWX50BJOH2XbkwEmII9blNhlBog6AdQsqicg==
- dependencies:
- "@commitlint/format" "^15.0.0"
- "@commitlint/lint" "^15.0.0"
- "@commitlint/load" "^15.0.0"
- "@commitlint/read" "^15.0.0"
- "@commitlint/types" "^15.0.0"
- lodash "^4.17.19"
- resolve-from "5.0.0"
- resolve-global "1.0.0"
- yargs "^17.0.0"
-
-"@commitlint/config-conventional@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-15.0.0.tgz#3bf1adf319e3b431de12ba82dc399524038b2d8f"
- integrity sha512-eZBRL8Lk3hMNHp1wUMYj0qrZQEsST1ai7KHR8J1IDD9aHgT7L2giciibuQ+Og7vxVhR5WtYDvh9xirXFVPaSkQ==
- dependencies:
- conventional-changelog-conventionalcommits "^4.3.1"
-
-"@commitlint/ensure@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-15.0.0.tgz#06a63738e2393970a085b428e6cf80fa1fe76f48"
- integrity sha512-7DV4iNIald3vycwaWBNGk5FbonaNzOlU8nBe5m5AgU2dIeNKuXwLm+zzJzG27j0Ho56rgz//3F6RIvmsoxY9ZA==
- dependencies:
- "@commitlint/types" "^15.0.0"
- lodash "^4.17.19"
-
-"@commitlint/execute-rule@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-15.0.0.tgz#6bff7962df38e89ff9fdbc00abd79b8849c7e9f9"
- integrity sha512-pyE4ApxjbWhb1TXz5vRiGwI2ssdMMgZbaaheZq1/7WC0xRnqnIhE1yUC1D2q20qPtvkZPstTYvMiRVtF+DvjUg==
-
-"@commitlint/format@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-15.0.0.tgz#10935180913de9384bea4c9217f4c6c5ee100ab3"
- integrity sha512-bPhAfqwRhPk92WiuY0ktEJNpRRHSCd+Eg1MdhGyL9Bl3U25E5zvuInA+dNctnzZiOBSH/37ZaD0eOKCpQE6acg==
- dependencies:
- "@commitlint/types" "^15.0.0"
- chalk "^4.0.0"
-
-"@commitlint/is-ignored@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-15.0.0.tgz#382bf9f6f8d810f2ffc59ccc527f4389eadd7949"
- integrity sha512-edtnkf2QZ/7e/YCJDgn1WDw9wfF1WfOitW5YEoSOb4SxjJEb/oE87kxNPZ2j8mnDMuunspcMfGHeg6fRlwaEWg==
- dependencies:
- "@commitlint/types" "^15.0.0"
- semver "7.3.5"
-
-"@commitlint/lint@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-15.0.0.tgz#a93b8896fb25b05ab2ed0246d365f4908654588d"
- integrity sha512-hUi2+Im/2dJ5FBvWnodypTkg+5haCgsDzB0fyMApWLUA1IucYUAqRCQCW5em1Mhk9Crw1pd5YzFNikhIclkqCw==
- dependencies:
- "@commitlint/is-ignored" "^15.0.0"
- "@commitlint/parse" "^15.0.0"
- "@commitlint/rules" "^15.0.0"
- "@commitlint/types" "^15.0.0"
-
-"@commitlint/load@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-15.0.0.tgz#5bd391c1387aafe92b54cf2a86b76a5228fcf4ef"
- integrity sha512-Ak1YPeOhvxmY3ioe0o6m1yLGvUAYb4BdfGgShU8jiTCmU3Mnmms0Xh/kfQz8AybhezCC3AmVTyBLaBZxOHR8kg==
- dependencies:
- "@commitlint/execute-rule" "^15.0.0"
- "@commitlint/resolve-extends" "^15.0.0"
- "@commitlint/types" "^15.0.0"
- "@endemolshinegroup/cosmiconfig-typescript-loader" "^3.0.2"
- chalk "^4.0.0"
- cosmiconfig "^7.0.0"
- lodash "^4.17.19"
- resolve-from "^5.0.0"
- typescript "^4.4.3"
-
-"@commitlint/message@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-15.0.0.tgz#98a38aca1b3cd996a0fcdbd9ad67e9039df60b0a"
- integrity sha512-L8euabzboKavPuDJsdIYAY2wx97LbiGEYsckMo6NmV8pOun50c8hQx6ouXFSAx4pp+mX9yUGmMiVqfrk2LKDJQ==
-
-"@commitlint/parse@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-15.0.0.tgz#cac77b7514748b8d01d00c0e67d5e54c695c302c"
- integrity sha512-7fweM67tZfBNS7zw1KTuuT5K2u9nGytUJqFqT/1Ln3Na9cBCsoAqR47mfsNOTlRCgGwakm4xiQ7BpS2gN0OGuw==
- dependencies:
- "@commitlint/types" "^15.0.0"
- conventional-changelog-angular "^5.0.11"
- conventional-commits-parser "^3.2.2"
-
-"@commitlint/read@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-15.0.0.tgz#da839f3b4d49b05586a9cd2666cc8c4a36b9ec91"
- integrity sha512-5yI1o2HKZFVe7RTjL7IhuhHMKar/MDNY34vEHqqz9gMI7BK/rdP8uVb4Di1efl2V0UPnwID0nPKWESjQ8Ti0gw==
- dependencies:
- "@commitlint/top-level" "^15.0.0"
- "@commitlint/types" "^15.0.0"
- fs-extra "^10.0.0"
- git-raw-commits "^2.0.0"
-
-"@commitlint/resolve-extends@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-15.0.0.tgz#baf21227e2ac52cef546ec35dd6732e9b0b6e57c"
- integrity sha512-7apfRJjgJsKja7lHsPfEFixKjA/fk/UeD3owkOw1174yYu4u8xBDLSeU3IinGPdMuF9m245eX8wo7vLUy+EBSg==
- dependencies:
- import-fresh "^3.0.0"
- lodash "^4.17.19"
- resolve-from "^5.0.0"
- resolve-global "^1.0.0"
-
-"@commitlint/rules@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-15.0.0.tgz#326370abc004492fcb5543198d1d55b14e25e3c8"
- integrity sha512-SqXfp6QUlwBS+0IZm4FEA/NmmAwcFQIkG3B05BtemOVWXQdZ8j1vV6hDwvA9oMPCmUSrrGpHOtZK7HaHhng2yA==
- dependencies:
- "@commitlint/ensure" "^15.0.0"
- "@commitlint/message" "^15.0.0"
- "@commitlint/to-lines" "^15.0.0"
- "@commitlint/types" "^15.0.0"
- execa "^5.0.0"
-
-"@commitlint/to-lines@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-15.0.0.tgz#b86ac98f319688990ecc2e09227fadf591b65c92"
- integrity sha512-mY3MNA9ujPqVpiJjTYG9MDsYCobue5PJFO0MfcIzS1mCVvngH8ZFTPAh1fT5t+t1h876boS88+9WgqjRvbYItw==
-
-"@commitlint/top-level@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-15.0.0.tgz#467ec8377e81dfc916e1a20a27558862be1a4254"
- integrity sha512-7Gz3t7xcuuUw1d1Nou6YLaztzp2Em+qZ6YdCzrqYc+aquca3Vt0O696nuiBDU/oE+tls4Hx2CNpAbWhTgEwB5A==
- dependencies:
- find-up "^5.0.0"
-
-"@commitlint/types@^15.0.0":
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-15.0.0.tgz#46fa7bda3e6340caf3e3a2e415bcb78ff0195eed"
- integrity sha512-OMSLX+QJnyNoTwws54ULv9sOvuw9GdVezln76oyUd4YbMMJyaav62aSXDuCdWyL2sm9hTkSzyEi52PNaIj/vqw==
- dependencies:
- chalk "^4.0.0"
-
-"@endemolshinegroup/cosmiconfig-typescript-loader@^3.0.2":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz#eea4635828dde372838b0909693ebd9aafeec22d"
- integrity sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==
- dependencies:
- lodash.get "^4"
- make-error "^1"
- ts-node "^9"
- tslib "^2"
-
-"@hutson/parse-repository-url@^3.0.0":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340"
- integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==
-
-"@types/minimist@^1.2.0":
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e"
- integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==
-
-"@types/normalize-package-data@^2.4.0":
- version "2.4.4"
- resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901"
- integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==
-
-"@types/parse-json@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
- integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
-
-JSONStream@^1.0.4:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
- integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
- dependencies:
- jsonparse "^1.2.0"
- through ">=2.2.7 <3"
-
-add-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa"
- integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==
-
-ansi-regex@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
- integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-ansi-styles@^4.0.0, ansi-styles@^4.1.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
- integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
- dependencies:
- color-convert "^2.0.1"
-
-arg@^4.1.0:
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
- integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
-
-array-ify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
- integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==
-
-arrify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
- integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==
-
-balanced-match@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-brace-expansion@^1.1.7:
- version "1.1.12"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843"
- integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-buffer-from@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
- integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-
-callsites@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
- integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
-
-camelcase-keys@^6.2.2:
- version "6.2.2"
- resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
- integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==
- dependencies:
- camelcase "^5.3.1"
- map-obj "^4.0.0"
- quick-lru "^4.0.1"
-
-camelcase@^5.3.1:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
- integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chalk@^4.0.0:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
- integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
-cliui@^7.0.2:
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
- integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
- dependencies:
- string-width "^4.2.0"
- strip-ansi "^6.0.0"
- wrap-ansi "^7.0.0"
-
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
-color-convert@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
- integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
- dependencies:
- color-name "~1.1.4"
-
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-
-color-name@~1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
-compare-func@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3"
- integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==
- dependencies:
- array-ify "^1.0.0"
- dot-prop "^5.1.0"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
-
-concat-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
- integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
- dependencies:
- buffer-from "^1.0.0"
- inherits "^2.0.3"
- readable-stream "^3.0.2"
- typedarray "^0.0.6"
-
-conventional-changelog-angular@^5.0.11, conventional-changelog-angular@^5.0.12:
- version "5.0.13"
- resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c"
- integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==
- dependencies:
- compare-func "^2.0.0"
- q "^1.5.1"
-
-conventional-changelog-atom@^2.0.8:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de"
- integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-codemirror@^2.0.8:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc"
- integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-config-spec@2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz#874a635287ef8b581fd8558532bf655d4fb59f2d"
- integrity sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==
-
-conventional-changelog-conventionalcommits@4.6.3, conventional-changelog-conventionalcommits@^4.5.0:
- version "4.6.3"
- resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz#0765490f56424b46f6cb4db9135902d6e5a36dc2"
- integrity sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==
- dependencies:
- compare-func "^2.0.0"
- lodash "^4.17.15"
- q "^1.5.1"
-
-conventional-changelog-conventionalcommits@^4.3.1:
- version "4.6.1"
- resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.1.tgz#f4c0921937050674e578dc7875f908351ccf4014"
- integrity sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw==
- dependencies:
- compare-func "^2.0.0"
- lodash "^4.17.15"
- q "^1.5.1"
-
-conventional-changelog-core@^4.2.1:
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f"
- integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==
- dependencies:
- add-stream "^1.0.0"
- conventional-changelog-writer "^5.0.0"
- conventional-commits-parser "^3.2.0"
- dateformat "^3.0.0"
- get-pkg-repo "^4.0.0"
- git-raw-commits "^2.0.8"
- git-remote-origin-url "^2.0.0"
- git-semver-tags "^4.1.1"
- lodash "^4.17.15"
- normalize-package-data "^3.0.0"
- q "^1.5.1"
- read-pkg "^3.0.0"
- read-pkg-up "^3.0.0"
- through2 "^4.0.0"
-
-conventional-changelog-ember@^2.0.9:
- version "2.0.9"
- resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962"
- integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-eslint@^3.0.9:
- version "3.0.9"
- resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb"
- integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-express@^2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8"
- integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-jquery@^3.0.11:
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf"
- integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-jshint@^2.0.9:
- version "2.0.9"
- resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff"
- integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==
- dependencies:
- compare-func "^2.0.0"
- q "^1.5.1"
-
-conventional-changelog-preset-loader@^2.3.4:
- version "2.3.4"
- resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c"
- integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==
-
-conventional-changelog-writer@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359"
- integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==
- dependencies:
- conventional-commits-filter "^2.0.7"
- dateformat "^3.0.0"
- handlebars "^4.7.7"
- json-stringify-safe "^5.0.1"
- lodash "^4.17.15"
- meow "^8.0.0"
- semver "^6.0.0"
- split "^1.0.0"
- through2 "^4.0.0"
-
-conventional-changelog@3.1.25:
- version "3.1.25"
- resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.25.tgz#3e227a37d15684f5aa1fb52222a6e9e2536ccaff"
- integrity sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==
- dependencies:
- conventional-changelog-angular "^5.0.12"
- conventional-changelog-atom "^2.0.8"
- conventional-changelog-codemirror "^2.0.8"
- conventional-changelog-conventionalcommits "^4.5.0"
- conventional-changelog-core "^4.2.1"
- conventional-changelog-ember "^2.0.9"
- conventional-changelog-eslint "^3.0.9"
- conventional-changelog-express "^2.0.6"
- conventional-changelog-jquery "^3.0.11"
- conventional-changelog-jshint "^2.0.9"
- conventional-changelog-preset-loader "^2.3.4"
-
-conventional-commits-filter@^2.0.7:
- version "2.0.7"
- resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3"
- integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==
- dependencies:
- lodash.ismatch "^4.4.0"
- modify-values "^1.0.0"
-
-conventional-commits-parser@^3.2.0:
- version "3.2.4"
- resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972"
- integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==
- dependencies:
- JSONStream "^1.0.4"
- is-text-path "^1.0.1"
- lodash "^4.17.15"
- meow "^8.0.0"
- split2 "^3.0.0"
- through2 "^4.0.0"
-
-conventional-commits-parser@^3.2.2:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e"
- integrity sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==
- dependencies:
- JSONStream "^1.0.4"
- is-text-path "^1.0.1"
- lodash "^4.17.15"
- meow "^8.0.0"
- split2 "^3.0.0"
- through2 "^4.0.0"
-
-conventional-recommended-bump@6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55"
- integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==
- dependencies:
- concat-stream "^2.0.0"
- conventional-changelog-preset-loader "^2.3.4"
- conventional-commits-filter "^2.0.7"
- conventional-commits-parser "^3.2.0"
- git-raw-commits "^2.0.8"
- git-semver-tags "^4.1.1"
- meow "^8.0.0"
- q "^1.5.1"
-
-core-util-is@~1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
- integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
-
-cosmiconfig@^7.0.0:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d"
- integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==
- dependencies:
- "@types/parse-json" "^4.0.0"
- import-fresh "^3.2.1"
- parse-json "^5.0.0"
- path-type "^4.0.0"
- yaml "^1.10.0"
-
-create-require@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
- integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
-
-cross-spawn@^7.0.3:
- version "7.0.6"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
- integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
- dependencies:
- path-key "^3.1.0"
- shebang-command "^2.0.0"
- which "^2.0.1"
-
-dargs@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc"
- integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==
-
-dateformat@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
- integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
-
-decamelize-keys@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8"
- integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==
- dependencies:
- decamelize "^1.1.0"
- map-obj "^1.0.0"
-
-decamelize@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
- integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
-
-detect-indent@^6.0.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6"
- integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==
-
-detect-newline@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
- integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
-
-diff@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
- integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
-
-dot-prop@^5.1.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
- integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
- dependencies:
- is-obj "^2.0.0"
-
-dotgitignore@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-2.1.0.tgz#a4b15a4e4ef3cf383598aaf1dfa4a04bcc089b7b"
- integrity sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==
- dependencies:
- find-up "^3.0.0"
- minimatch "^3.0.4"
-
-emoji-regex@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
- integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-
-error-ex@^1.3.1:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414"
- integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==
- dependencies:
- is-arrayish "^0.2.1"
-
-escalade@^3.1.1:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
- integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
-
-escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
-
-execa@^5.0.0:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
- integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
- dependencies:
- cross-spawn "^7.0.3"
- get-stream "^6.0.0"
- human-signals "^2.1.0"
- is-stream "^2.0.0"
- merge-stream "^2.0.0"
- npm-run-path "^4.0.1"
- onetime "^5.1.2"
- signal-exit "^3.0.3"
- strip-final-newline "^2.0.0"
-
-figures@^3.1.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
- integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
- dependencies:
- escape-string-regexp "^1.0.5"
-
-find-up@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
- integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==
- dependencies:
- locate-path "^2.0.0"
-
-find-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
- integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
- dependencies:
- locate-path "^3.0.0"
-
-find-up@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
- integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
- dependencies:
- locate-path "^5.0.0"
- path-exists "^4.0.0"
-
-find-up@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
- integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
- dependencies:
- locate-path "^6.0.0"
- path-exists "^4.0.0"
-
-fs-extra@^10.0.0:
- version "10.0.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1"
- integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==
- dependencies:
- graceful-fs "^4.2.0"
- jsonfile "^6.0.1"
- universalify "^2.0.0"
-
-function-bind@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
- integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-
-get-caller-file@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
- integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
-get-pkg-repo@^4.0.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385"
- integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==
- dependencies:
- "@hutson/parse-repository-url" "^3.0.0"
- hosted-git-info "^4.0.0"
- through2 "^2.0.0"
- yargs "^16.2.0"
-
-get-stream@^6.0.0:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
- integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-
-git-raw-commits@^2.0.0:
- version "2.0.10"
- resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1"
- integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==
- dependencies:
- dargs "^7.0.0"
- lodash "^4.17.15"
- meow "^8.0.0"
- split2 "^3.0.0"
- through2 "^4.0.0"
-
-git-raw-commits@^2.0.8:
- version "2.0.11"
- resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723"
- integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==
- dependencies:
- dargs "^7.0.0"
- lodash "^4.17.15"
- meow "^8.0.0"
- split2 "^3.0.0"
- through2 "^4.0.0"
-
-git-remote-origin-url@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f"
- integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==
- dependencies:
- gitconfiglocal "^1.0.0"
- pify "^2.3.0"
-
-git-semver-tags@^4.0.0, git-semver-tags@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780"
- integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==
- dependencies:
- meow "^8.0.0"
- semver "^6.0.0"
-
-gitconfiglocal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b"
- integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==
- dependencies:
- ini "^1.3.2"
-
-global-dirs@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
- integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
- dependencies:
- ini "^1.3.4"
-
-graceful-fs@^4.1.2:
- version "4.2.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
- integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-
-graceful-fs@^4.1.6, graceful-fs@^4.2.0:
- version "4.2.8"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
- integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
-
-handlebars@^4.7.7:
- version "4.7.8"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9"
- integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==
- dependencies:
- minimist "^1.2.5"
- neo-async "^2.6.2"
- source-map "^0.6.1"
- wordwrap "^1.0.0"
- optionalDependencies:
- uglify-js "^3.1.4"
-
-hard-rejection@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
- integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
-
-has-flag@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
- integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-
-hasown@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
- integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
- dependencies:
- function-bind "^1.1.2"
-
-hosted-git-info@^2.1.4:
- version "2.8.9"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
- integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
-
-hosted-git-info@^4.0.0, hosted-git-info@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
- integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
- dependencies:
- lru-cache "^6.0.0"
-
-human-signals@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
- integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-
-import-fresh@^3.0.0, import-fresh@^3.2.1:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
- integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
- dependencies:
- parent-module "^1.0.0"
- resolve-from "^4.0.0"
-
-indent-string@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
- integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
-
-inherits@^2.0.3, inherits@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-ini@^1.3.2, ini@^1.3.4:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
- integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
- integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
-
-is-core-module@^2.16.1, is-core-module@^2.5.0:
- version "2.16.1"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
- integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
- dependencies:
- hasown "^2.0.2"
-
-is-fullwidth-code-point@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
- integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-
-is-obj@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
- integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
-
-is-plain-obj@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
- integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==
-
-is-stream@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
- integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
-
-is-text-path@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
- integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==
- dependencies:
- text-extensions "^1.0.0"
-
-isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
- integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-
-js-tokens@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
- integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-json-parse-better-errors@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
- integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
-json-parse-even-better-errors@^2.3.0:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
- integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
-
-json-stringify-safe@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
- integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
-
-jsonfile@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
- integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
- dependencies:
- universalify "^2.0.0"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonparse@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
- integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
-
-kind-of@^6.0.3:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
- integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-
-lines-and-columns@^1.1.6:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
- integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
-
-load-json-file@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
- integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^4.0.0"
- pify "^3.0.0"
- strip-bom "^3.0.0"
-
-locate-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
- integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==
- dependencies:
- p-locate "^2.0.0"
- path-exists "^3.0.0"
-
-locate-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
- integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
- dependencies:
- p-locate "^3.0.0"
- path-exists "^3.0.0"
-
-locate-path@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
- integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
- dependencies:
- p-locate "^4.1.0"
-
-locate-path@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
- integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
- dependencies:
- p-locate "^5.0.0"
-
-lodash.get@^4:
- version "4.4.2"
- resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
- integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
-
-lodash.ismatch@^4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
- integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==
-
-lodash@^4.17.15, lodash@^4.17.19:
- version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
- integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-
-lru-cache@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
- integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
- dependencies:
- yallist "^4.0.0"
-
-make-error@^1, make-error@^1.1.1:
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
- integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
-
-map-obj@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
- integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==
-
-map-obj@^4.0.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
- integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
-
-meow@^8.0.0:
- version "8.1.2"
- resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897"
- integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==
- dependencies:
- "@types/minimist" "^1.2.0"
- camelcase-keys "^6.2.2"
- decamelize-keys "^1.1.0"
- hard-rejection "^2.1.0"
- minimist-options "4.1.0"
- normalize-package-data "^3.0.0"
- read-pkg-up "^7.0.1"
- redent "^3.0.0"
- trim-newlines "^3.0.0"
- type-fest "^0.18.0"
- yargs-parser "^20.2.3"
-
-merge-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
- integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-
-mimic-fn@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
- integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
-min-indent@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
- integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
-
-minimatch@^3.0.4:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
- integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimist-options@4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
- integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
- dependencies:
- arrify "^1.0.1"
- is-plain-obj "^1.1.0"
- kind-of "^6.0.3"
-
-minimist@^1.2.5:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
- integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-
-modify-values@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
- integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
-
-neo-async@^2.6.2:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
- integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
-
-normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
- integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
- dependencies:
- hosted-git-info "^2.1.4"
- resolve "^1.10.0"
- semver "2 || 3 || 4 || 5"
- validate-npm-package-license "^3.0.1"
-
-normalize-package-data@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e"
- integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==
- dependencies:
- hosted-git-info "^4.0.1"
- is-core-module "^2.5.0"
- semver "^7.3.4"
- validate-npm-package-license "^3.0.1"
-
-npm-run-path@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
- integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
- dependencies:
- path-key "^3.0.0"
-
-onetime@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
- integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
- dependencies:
- mimic-fn "^2.1.0"
-
-p-limit@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
- integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
- dependencies:
- p-try "^1.0.0"
-
-p-limit@^2.0.0, p-limit@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
- integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
- dependencies:
- p-try "^2.0.0"
-
-p-limit@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
- integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
- dependencies:
- yocto-queue "^0.1.0"
-
-p-locate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
- integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==
- dependencies:
- p-limit "^1.1.0"
-
-p-locate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
- integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
- dependencies:
- p-limit "^2.0.0"
-
-p-locate@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
- integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
- dependencies:
- p-limit "^2.2.0"
-
-p-locate@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
- integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
- dependencies:
- p-limit "^3.0.2"
-
-p-try@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
- integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==
-
-p-try@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
- integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
-parent-module@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
- integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
- dependencies:
- callsites "^3.0.0"
-
-parse-json@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
- integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
- dependencies:
- error-ex "^1.3.1"
- json-parse-better-errors "^1.0.1"
-
-parse-json@^5.0.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
- integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
- dependencies:
- "@babel/code-frame" "^7.0.0"
- error-ex "^1.3.1"
- json-parse-even-better-errors "^2.3.0"
- lines-and-columns "^1.1.6"
-
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
- integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
-
-path-exists@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
- integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
-
-path-key@^3.0.0, path-key@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
- integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-
-path-parse@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
- integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-
-path-type@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
- integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
- dependencies:
- pify "^3.0.0"
-
-path-type@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
- integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
-
-picocolors@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
- integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
-
-pify@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
- integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
-
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
- integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
-
-process-nextick-args@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-q@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
- integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==
-
-quick-lru@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
- integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
-
-read-pkg-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
- integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==
- dependencies:
- find-up "^2.0.0"
- read-pkg "^3.0.0"
-
-read-pkg-up@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
- integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
- dependencies:
- find-up "^4.1.0"
- read-pkg "^5.2.0"
- type-fest "^0.8.1"
-
-read-pkg@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
- integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==
- dependencies:
- load-json-file "^4.0.0"
- normalize-package-data "^2.3.2"
- path-type "^3.0.0"
-
-read-pkg@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
- integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
- dependencies:
- "@types/normalize-package-data" "^2.4.0"
- normalize-package-data "^2.5.0"
- parse-json "^5.0.0"
- type-fest "^0.6.0"
-
-readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
- integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
-readable-stream@~2.3.6:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
- integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-redent@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
- integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
- dependencies:
- indent-string "^4.0.0"
- strip-indent "^3.0.0"
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
- integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
-
-resolve-from@5.0.0, resolve-from@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
- integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
-
-resolve-from@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
- integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
-
-resolve-global@1.0.0, resolve-global@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255"
- integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==
- dependencies:
- global-dirs "^0.1.1"
-
-resolve@^1.10.0:
- version "1.22.11"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262"
- integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==
- dependencies:
- is-core-module "^2.16.1"
- path-parse "^1.0.7"
- supports-preserve-symlinks-flag "^1.0.0"
-
-safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@~5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-"semver@2 || 3 || 4 || 5":
- version "5.7.2"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
- integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
-
-semver@7.3.5:
- version "7.3.5"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
- integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
- dependencies:
- lru-cache "^6.0.0"
-
-semver@^6.0.0:
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
- integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-
-semver@^7.1.1, semver@^7.3.4:
- version "7.7.3"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946"
- integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==
-
-shebang-command@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
- integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
- dependencies:
- shebang-regex "^3.0.0"
-
-shebang-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
- integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-
-signal-exit@^3.0.3:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af"
- integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==
-
-source-map-support@^0.5.17:
- version "0.5.21"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
- integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map@^0.6.0, source-map@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-spdx-correct@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c"
- integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==
- dependencies:
- spdx-expression-parse "^3.0.0"
- spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66"
- integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==
-
-spdx-expression-parse@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
- integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
- dependencies:
- spdx-exceptions "^2.1.0"
- spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
- version "3.0.22"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz#abf5a08a6f5d7279559b669f47f0a43e8f3464ef"
- integrity sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==
-
-split2@^3.0.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f"
- integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==
- dependencies:
- readable-stream "^3.0.0"
-
-split@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
- integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
- dependencies:
- through "2"
-
-standard-version@^9.3.2:
- version "9.5.0"
- resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-9.5.0.tgz#851d6dcddf5320d5079601832aeb185dbf497949"
- integrity sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==
- dependencies:
- chalk "^2.4.2"
- conventional-changelog "3.1.25"
- conventional-changelog-config-spec "2.1.0"
- conventional-changelog-conventionalcommits "4.6.3"
- conventional-recommended-bump "6.1.0"
- detect-indent "^6.0.0"
- detect-newline "^3.1.0"
- dotgitignore "^2.1.0"
- figures "^3.1.0"
- find-up "^5.0.0"
- git-semver-tags "^4.0.0"
- semver "^7.1.1"
- stringify-package "^1.0.1"
- yargs "^16.0.0"
-
-string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
-stringify-package@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85"
- integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==
-
-strip-ansi@^6.0.0, strip-ansi@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
-strip-bom@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
- integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
-
-strip-final-newline@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
- integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-
-strip-indent@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
- integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
- dependencies:
- min-indent "^1.0.0"
-
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
-supports-color@^7.1.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
- integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
- dependencies:
- has-flag "^4.0.0"
-
-supports-preserve-symlinks-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
- integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-
-text-extensions@^1.0.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
- integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
-
-through2@^2.0.0:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
- integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
- dependencies:
- readable-stream "~2.3.6"
- xtend "~4.0.1"
-
-through2@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
- integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
- dependencies:
- readable-stream "3"
-
-through@2, "through@>=2.2.7 <3":
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
- integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
-
-trim-newlines@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
- integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
-
-ts-node@^9:
- version "9.1.1"
- resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d"
- integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==
- dependencies:
- arg "^4.1.0"
- create-require "^1.1.0"
- diff "^4.0.1"
- make-error "^1.1.1"
- source-map-support "^0.5.17"
- yn "3.1.1"
-
-tslib@^2:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
- integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
-
-type-fest@^0.18.0:
- version "0.18.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
- integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
-
-type-fest@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
- integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
-
-type-fest@^0.8.1:
- version "0.8.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
- integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
-
-typedarray@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
- integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
-
-typescript@^4.4.3:
- version "4.5.4"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8"
- integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==
-
-uglify-js@^3.1.4:
- version "3.19.3"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f"
- integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==
-
-universalify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
- integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
-
-util-deprecate@^1.0.1, util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-
-validate-npm-package-license@^3.0.1:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
- integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
- dependencies:
- spdx-correct "^3.0.0"
- spdx-expression-parse "^3.0.0"
-
-which@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
- integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
- dependencies:
- isexe "^2.0.0"
-
-wordwrap@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
- integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
-
-wrap-ansi@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-xtend@~4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-
-y18n@^5.0.5:
- version "5.0.8"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
- integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
-
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-
-yaml@^1.10.0:
- version "1.10.2"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
- integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
-
-yargs-parser@^20.2.2, yargs-parser@^20.2.3:
- version "20.2.9"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
- integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
-
-yargs-parser@^21.0.0:
- version "21.0.0"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55"
- integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==
-
-yargs@^16.0.0, yargs@^16.2.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
- integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
- dependencies:
- cliui "^7.0.2"
- escalade "^3.1.1"
- get-caller-file "^2.0.5"
- require-directory "^2.1.1"
- string-width "^4.2.0"
- y18n "^5.0.5"
- yargs-parser "^20.2.2"
-
-yargs@^17.0.0:
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.0.tgz#295c4ffd0eef148ef3e48f7a2e0f58d0e4f26b1c"
- integrity sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==
- dependencies:
- cliui "^7.0.2"
- escalade "^3.1.1"
- get-caller-file "^2.0.5"
- require-directory "^2.1.1"
- string-width "^4.2.3"
- y18n "^5.0.5"
- yargs-parser "^21.0.0"
-
-yn@3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
- integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
-
-yocto-queue@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
- integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/filebrowser/www/docs/configuration.md b/filebrowser/www/docs/configuration.md
index 77f341a454..157a54e80e 100644
--- a/filebrowser/www/docs/configuration.md
+++ b/filebrowser/www/docs/configuration.md
@@ -2,6 +2,12 @@
Most of the configuration can be understood through the command line interface documentation. To access it, you need to install File Browser and run `filebrowser --help`. In this page, we cover some specific, more complex, topics.
+## Flags as Environment Variables
+
+In some situations, it is easier to use environment variables instead of flags. For example, if you're using our provided Docker image, it's easier for you to use environment variables to customize the settings instead of flags.
+
+All flags should be available as environment variables prefixed with `FB_`. For example, the flag `--disable-thumbnails` is available as `FB_DISABLE_THUMBNAILS`.
+
## Custom Branding
You can customize File Browser to use your own branding. This includes the following:
diff --git a/filebrowser/www/docs/index.md b/filebrowser/www/docs/index.md
index 8e3e265fcf..cb79bd3e1a 100644
--- a/filebrowser/www/docs/index.md
+++ b/filebrowser/www/docs/index.md
@@ -10,7 +10,7 @@
> [!WARNING]
>
-> This project is currently on **maintenance-only** mode. For more information, read the information on [GitHub](https://github.com/filebrowser/filebrowser#project-status).
+> This project is on **maintenance-only** mode. For more information, read the information on [GitHub](https://github.com/filebrowser/filebrowser#project-status).

diff --git a/lede/target/linux/airoha/Makefile b/lede/target/linux/airoha/Makefile
index 3803fda9da..61b7b87692 100644
--- a/lede/target/linux/airoha/Makefile
+++ b/lede/target/linux/airoha/Makefile
@@ -3,11 +3,10 @@ include $(TOPDIR)/rules.mk
ARCH:=arm
BOARD:=airoha
BOARDNAME:=Airoha ARM
-SUBTARGETS:=an7581 en7523
+SUBTARGETS:=en7523 an7581
FEATURES:=dt squashfs nand ramdisk gpio
-KERNEL_PATCHVER:=6.12
-KERNEL_TESTING_PATCHVER:=6.6
+KERNEL_PATCHVER:=6.6
include $(INCLUDE_DIR)/target.mk
diff --git a/lede/target/linux/airoha/an7581/base-files/etc/board.d/02_network b/lede/target/linux/airoha/an7581/base-files/etc/board.d/02_network
deleted file mode 100644
index 0d79ef6a77..0000000000
--- a/lede/target/linux/airoha/an7581/base-files/etc/board.d/02_network
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# Copyright (c) 2015 The Linux Foundation. All rights reserved.
-# Copyright (c) 2011-2015 OpenWrt.org
-#
-
-. /lib/functions/uci-defaults.sh
-. /lib/functions/system.sh
-
-an7581_setup_interfaces()
-{
- local board="$1"
-
- case "$board" in
- bell,xg-040g-md)
- ucidef_set_interfaces_lan_wan "lan2 lan3 lan4" "eth1"
- ;;
- *)
- echo "Unsupported hardware. Network interfaces not initialized"
- ;;
- esac
-}
-
-board_config_update
-board=$(board_name)
-an7581_setup_interfaces $board
-board_config_flush
-
-exit 0
diff --git a/lede/target/linux/airoha/an7581/base-files/lib/upgrade/platform.sh b/lede/target/linux/airoha/an7581/base-files/lib/upgrade/platform.sh
deleted file mode 100644
index 556caa19fe..0000000000
--- a/lede/target/linux/airoha/an7581/base-files/lib/upgrade/platform.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-REQUIRE_IMAGE_METADATA=1
-
-platform_do_upgrade() {
- local board=$(board_name)
-
- case "$board" in
- *)
- nand_do_upgrade "$1"
- ;;
- esac
-}
-
-platform_check_image() {
- return 0
-}
diff --git a/lede/target/linux/airoha/an7581/config-6.12 b/lede/target/linux/airoha/an7581/config-6.12
deleted file mode 100644
index 77bd649276..0000000000
--- a/lede/target/linux/airoha/an7581/config-6.12
+++ /dev/null
@@ -1,413 +0,0 @@
-CONFIG_64BIT=y
-CONFIG_AIROHA_CPU_PM_DOMAIN=y
-CONFIG_AIROHA_SCU_SSR=y
-CONFIG_AIROHA_THERMAL=y
-CONFIG_AIROHA_WATCHDOG=y
-CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
-CONFIG_ARCH_AIROHA=y
-CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS=y
-CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y
-CONFIG_ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG=y
-CONFIG_ARCH_DMA_ADDR_T_64BIT=y
-CONFIG_ARCH_FORCE_MAX_ORDER=10
-CONFIG_ARCH_KEEP_MEMBLOCK=y
-CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
-CONFIG_ARCH_MMAP_RND_BITS=18
-CONFIG_ARCH_MMAP_RND_BITS_MAX=24
-CONFIG_ARCH_MMAP_RND_BITS_MIN=18
-CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
-CONFIG_ARCH_PKEY_BITS=3
-CONFIG_ARCH_PROC_KCORE_TEXT=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_STACKWALK=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ARCH_WANTS_EXECMEM_LATE=y
-CONFIG_ARCH_WANTS_NO_INSTR=y
-CONFIG_ARCH_WANTS_THP_SWAP=y
-CONFIG_ARM64=y
-CONFIG_ARM64_4K_PAGES=y
-CONFIG_ARM64_ERRATUM_843419=y
-CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y
-CONFIG_ARM64_PA_BITS=48
-CONFIG_ARM64_PA_BITS_48=y
-CONFIG_ARM64_PLATFORM_DEVICES=y
-CONFIG_ARM64_TAGGED_ADDR_ABI=y
-CONFIG_ARM64_VA_BITS=39
-CONFIG_ARM64_VA_BITS_39=y
-CONFIG_ARM_AIROHA_SOC_CPUFREQ=y
-CONFIG_ARM_AMBA=y
-CONFIG_ARM_ARCH_TIMER=y
-CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
-CONFIG_ARM_GIC=y
-CONFIG_ARM_GIC_V2M=y
-CONFIG_ARM_GIC_V3=y
-CONFIG_ARM_GIC_V3_ITS=y
-CONFIG_ARM_PMU=y
-CONFIG_ARM_PMUV3=y
-CONFIG_ARM_PSCI_FW=y
-CONFIG_ARM_SMCCC_SOC_ID=y
-CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
-CONFIG_BLK_MQ_PCI=y
-CONFIG_BLK_PM=y
-CONFIG_BLOCK_NOTIFIERS=y
-CONFIG_BUFFER_HEAD=y
-CONFIG_BUILTIN_RETURN_ADDRESS_STRIPS_PAC=y
-CONFIG_CC_HAVE_SHADOW_CALL_STACK=y
-CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
-CONFIG_CLONE_BACKWARDS=y
-CONFIG_COMMON_CLK=y
-CONFIG_COMMON_CLK_EN7523=y
-CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
-# CONFIG_COMPAT_32BIT_TIME is not set
-CONFIG_CONTEXT_TRACKING=y
-CONFIG_CONTEXT_TRACKING_IDLE=y
-CONFIG_CPUFREQ_DT=y
-CONFIG_CPUFREQ_DT_PLATDEV=y
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-CONFIG_CPU_FREQ_GOV_ATTR_SET=y
-CONFIG_CPU_FREQ_GOV_COMMON=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_LITTLE_ENDIAN=y
-CONFIG_CPU_MITIGATIONS=y
-CONFIG_CPU_RMAP=y
-CONFIG_CRC16=y
-CONFIG_CRC_CCITT=y
-CONFIG_CRYPTO_AUTHENC=y
-CONFIG_CRYPTO_CBC=y
-CONFIG_CRYPTO_CRC32C=y
-CONFIG_CRYPTO_DEFLATE=y
-CONFIG_CRYPTO_DRBG=y
-CONFIG_CRYPTO_DRBG_HMAC=y
-CONFIG_CRYPTO_DRBG_MENU=y
-CONFIG_CRYPTO_ECB=y
-CONFIG_CRYPTO_ECHAINIV=y
-CONFIG_CRYPTO_GENIV=y
-CONFIG_CRYPTO_HASH_INFO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_JITTERENTROPY=y
-CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=64
-CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=32
-CONFIG_CRYPTO_JITTERENTROPY_OSR=1
-CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
-CONFIG_CRYPTO_LIB_GF128MUL=y
-CONFIG_CRYPTO_LIB_SHA1=y
-CONFIG_CRYPTO_LIB_SHA256=y
-CONFIG_CRYPTO_LIB_UTILS=y
-CONFIG_CRYPTO_LZO=y
-CONFIG_CRYPTO_RNG=y
-CONFIG_CRYPTO_RNG2=y
-CONFIG_CRYPTO_RNG_DEFAULT=y
-CONFIG_CRYPTO_SEQIV=y
-CONFIG_CRYPTO_SHA256=y
-CONFIG_CRYPTO_SHA3=y
-CONFIG_CRYPTO_SHA512=y
-CONFIG_CRYPTO_ZSTD=y
-CONFIG_DCACHE_WORD_ACCESS=y
-CONFIG_DEBUG_INFO=y
-CONFIG_DEBUG_MISC=y
-CONFIG_DEV_COREDUMP=y
-CONFIG_DMADEVICES=y
-CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC=y
-CONFIG_DMA_DIRECT_REMAP=y
-CONFIG_DMA_ENGINE=y
-CONFIG_DMA_NEED_SYNC=y
-CONFIG_DMA_OF=y
-CONFIG_DTC=y
-CONFIG_EDAC_SUPPORT=y
-CONFIG_EXCLUSIVE_SYSTEM_RAM=y
-CONFIG_EXT4_FS=y
-CONFIG_FIXED_PHY=y
-CONFIG_FIX_EARLYCON_MEM=y
-CONFIG_FRAME_POINTER=y
-CONFIG_FS_IOMAP=y
-CONFIG_FS_MBCACHE=y
-CONFIG_FUNCTION_ALIGNMENT=4
-CONFIG_FUNCTION_ALIGNMENT_4B=y
-CONFIG_FWNODE_MDIO=y
-# CONFIG_FW_LOADER_USER_HELPER is not set
-CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y
-CONFIG_GENERIC_ALLOCATOR=y
-CONFIG_GENERIC_ARCH_TOPOLOGY=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
-CONFIG_GENERIC_CPU_AUTOPROBE=y
-CONFIG_GENERIC_CPU_DEVICES=y
-CONFIG_GENERIC_CPU_VULNERABILITIES=y
-CONFIG_GENERIC_CSUM=y
-CONFIG_GENERIC_EARLY_IOREMAP=y
-CONFIG_GENERIC_GETTIMEOFDAY=y
-CONFIG_GENERIC_IDLE_POLL_SETUP=y
-CONFIG_GENERIC_IOREMAP=y
-CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
-CONFIG_GENERIC_IRQ_MIGRATION=y
-CONFIG_GENERIC_IRQ_SHOW=y
-CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
-CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y
-CONFIG_GENERIC_MSI_IRQ=y
-CONFIG_GENERIC_PCI_IOMAP=y
-CONFIG_GENERIC_PHY=y
-CONFIG_GENERIC_PINCONF=y
-CONFIG_GENERIC_PINCTRL_GROUPS=y
-CONFIG_GENERIC_PINMUX_FUNCTIONS=y
-CONFIG_GENERIC_SCHED_CLOCK=y
-CONFIG_GENERIC_SMP_IDLE_THREAD=y
-CONFIG_GENERIC_STRNCPY_FROM_USER=y
-CONFIG_GENERIC_STRNLEN_USER=y
-CONFIG_GENERIC_TIME_VSYSCALL=y
-CONFIG_GLOB=y
-CONFIG_GPIOLIB_IRQCHIP=y
-CONFIG_GPIO_CDEV=y
-CONFIG_GPIO_EN7523=y
-CONFIG_GPIO_GENERIC=y
-CONFIG_GRO_CELLS=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_IOPORT_MAP=y
-CONFIG_HOTPLUG_CORE_SYNC=y
-CONFIG_HOTPLUG_CORE_SYNC_DEAD=y
-CONFIG_HOTPLUG_CPU=y
-CONFIG_HW_RANDOM=y
-CONFIG_HW_RANDOM_AIROHA=y
-CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
-CONFIG_INET_AH=y
-CONFIG_INET_ESP=y
-# CONFIG_INET_ESP_OFFLOAD is not set
-CONFIG_INET_IPCOMP=y
-CONFIG_INET_TUNNEL=y
-CONFIG_INET_XFRM_TUNNEL=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_IO_URING=y
-CONFIG_IPV6=y
-CONFIG_IPV6_MULTIPLE_TABLES=y
-# CONFIG_IPV6_SUBTREES is not set
-CONFIG_IP_MROUTE=y
-CONFIG_IP_MROUTE_COMMON=y
-# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_IP_ROUTE_MULTIPATH is not set
-# CONFIG_IP_ROUTE_VERBOSE is not set
-CONFIG_IRQCHIP=y
-CONFIG_IRQ_DOMAIN=y
-CONFIG_IRQ_DOMAIN_HIERARCHY=y
-CONFIG_IRQ_FORCED_THREADING=y
-CONFIG_IRQ_MSI_LIB=y
-CONFIG_IRQ_WORK=y
-CONFIG_JBD2=y
-CONFIG_LIBFDT=y
-CONFIG_LOCK_DEBUGGING_SUPPORT=y
-CONFIG_LOCK_SPIN_ON_OWNER=y
-CONFIG_LRU_GEN_WALKS_MMU=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-# CONFIG_MDIO_AIROHA is not set
-CONFIG_MDIO_BUS=y
-CONFIG_MDIO_DEVICE=y
-CONFIG_MDIO_DEVRES=y
-CONFIG_MEDIATEK_GE_SOC_PHY=y
-CONFIG_MFD_SYSCON=y
-CONFIG_MIGRATION=y
-CONFIG_MMC=y
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_CQHCI=y
-CONFIG_MMC_MTK=y
-CONFIG_MMU_LAZY_TLB_REFCOUNT=y
-CONFIG_MODULES_TREE_LOOKUP=y
-CONFIG_MODULES_USE_ELF_RELA=y
-CONFIG_MTD_NAND_CORE=y
-CONFIG_MTD_NAND_ECC=y
-CONFIG_MTD_NAND_MTK_BMT=y
-CONFIG_MTD_RAW_NAND=y
-CONFIG_MTD_SPI_NAND=y
-CONFIG_MTD_SPLIT_FIRMWARE=y
-CONFIG_MTD_SPLIT_FIT_FW=y
-CONFIG_MTD_UBI=y
-CONFIG_MTD_UBI_BEB_LIMIT=20
-CONFIG_MTD_UBI_BLOCK=y
-CONFIG_MTD_UBI_WL_THRESHOLD=4096
-CONFIG_MTK_NET_PHYLIB=y
-CONFIG_MUTEX_SPIN_ON_OWNER=y
-CONFIG_NEED_DMA_MAP_STATE=y
-CONFIG_NEED_SG_DMA_LENGTH=y
-CONFIG_NET_AIROHA=y
-CONFIG_NET_AIROHA_FLOW_STATS=y
-CONFIG_NET_AIROHA_NPU=y
-CONFIG_NET_DEVLINK=y
-CONFIG_NET_DSA=y
-CONFIG_NET_DSA_MT7530=y
-# CONFIG_NET_DSA_MT7530_MDIO is not set
-CONFIG_NET_DSA_MT7530_MMIO=y
-CONFIG_NET_DSA_TAG_MTK=y
-CONFIG_NET_EGRESS=y
-CONFIG_NET_FLOW_LIMIT=y
-CONFIG_NET_INGRESS=y
-CONFIG_NET_SELFTESTS=y
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_NET_VENDOR_AIROHA=y
-# CONFIG_NET_VENDOR_MEDIATEK is not set
-CONFIG_NET_XGRESS=y
-CONFIG_NLS=y
-CONFIG_NO_HZ_COMMON=y
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NR_CPUS=4
-CONFIG_NVMEM=y
-CONFIG_NVMEM_BLOCK=y
-CONFIG_NVMEM_LAYOUTS=y
-CONFIG_NVMEM_LAYOUT_ASCII_ENV=y
-CONFIG_NVMEM_SYSFS=y
-CONFIG_OF=y
-CONFIG_OF_ADDRESS=y
-CONFIG_OF_EARLY_FLATTREE=y
-CONFIG_OF_FLATTREE=y
-CONFIG_OF_GPIO=y
-CONFIG_OF_IRQ=y
-CONFIG_OF_KOBJ=y
-CONFIG_OF_MDIO=y
-CONFIG_PADATA=y
-CONFIG_PAGE_POOL=y
-CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
-CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
-CONFIG_PARTITION_PERCPU=y
-CONFIG_PCI=y
-CONFIG_PCIEAER=y
-CONFIG_PCIEASPM=y
-# CONFIG_PCIEASPM_DEFAULT is not set
-CONFIG_PCIEASPM_PERFORMANCE=y
-# CONFIG_PCIEASPM_POWERSAVE is not set
-# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
-CONFIG_PCIEPORTBUS=y
-CONFIG_PCIE_MEDIATEK=y
-CONFIG_PCIE_MEDIATEK_GEN3=y
-CONFIG_PCIE_PME=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PCI_DOMAINS_GENERIC=y
-CONFIG_PCI_MSI=y
-CONFIG_PCS_AIROHA=y
-CONFIG_PCS_AIROHA_AN7581=y
-# CONFIG_PCS_AIROHA_AN7583 is not set
-CONFIG_PERF_EVENTS=y
-CONFIG_PER_VMA_LOCK=y
-CONFIG_PGTABLE_LEVELS=3
-CONFIG_PHYLIB=y
-CONFIG_PHYLIB_LEDS=y
-CONFIG_PHYLINK=y
-CONFIG_PHYS_ADDR_T_64BIT=y
-CONFIG_PHY_AIROHA_PCIE=y
-CONFIG_PHY_AIROHA_USB=y
-CONFIG_PINCTRL=y
-CONFIG_PINCTRL_AIROHA=y
-# CONFIG_PINCTRL_MT2712 is not set
-# CONFIG_PINCTRL_MT6765 is not set
-# CONFIG_PINCTRL_MT6795 is not set
-# CONFIG_PINCTRL_MT6797 is not set
-# CONFIG_PINCTRL_MT7622 is not set
-# CONFIG_PINCTRL_MT7981 is not set
-# CONFIG_PINCTRL_MT7986 is not set
-# CONFIG_PINCTRL_MT8173 is not set
-# CONFIG_PINCTRL_MT8183 is not set
-# CONFIG_PINCTRL_MT8186 is not set
-# CONFIG_PINCTRL_MT8188 is not set
-# CONFIG_PINCTRL_MT8516 is not set
-CONFIG_PM=y
-CONFIG_PM_CLK=y
-CONFIG_PM_GENERIC_DOMAINS=y
-CONFIG_PM_GENERIC_DOMAINS_OF=y
-CONFIG_PM_OPP=y
-CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
-CONFIG_POWER_RESET=y
-CONFIG_POWER_RESET_SYSCON=y
-CONFIG_POWER_SUPPLY=y
-CONFIG_PTP_1588_CLOCK_OPTIONAL=y
-CONFIG_QUEUED_RWLOCKS=y
-CONFIG_QUEUED_SPINLOCKS=y
-CONFIG_RANDSTRUCT_NONE=y
-CONFIG_RAS=y
-CONFIG_RATIONAL=y
-CONFIG_REGMAP=y
-CONFIG_REGMAP_MMIO=y
-CONFIG_REGULATOR=y
-CONFIG_REGULATOR_FIXED_VOLTAGE=y
-CONFIG_RELOCATABLE=y
-CONFIG_RESET_CONTROLLER=y
-CONFIG_RFS_ACCEL=y
-CONFIG_RODATA_FULL_DEFAULT_ENABLED=y
-CONFIG_RPS=y
-CONFIG_RWSEM_SPIN_ON_OWNER=y
-CONFIG_SERIAL_8250_AIROHA=y
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_FSL=y
-CONFIG_SERIAL_8250_NR_UARTS=5
-CONFIG_SERIAL_8250_RUNTIME_UARTS=5
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_MCTRL_GPIO=y
-CONFIG_SERIAL_OF_PLATFORM=y
-CONFIG_SGL_ALLOC=y
-CONFIG_SKB_EXTENSIONS=y
-CONFIG_SMP=y
-CONFIG_SOCK_RX_QUEUE_MAPPING=y
-CONFIG_SOC_BUS=y
-CONFIG_SOFTIRQ_ON_OWN_STACK=y
-CONFIG_SPARSEMEM=y
-CONFIG_SPARSEMEM_EXTREME=y
-CONFIG_SPARSEMEM_VMEMMAP=y
-CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
-CONFIG_SPARSE_IRQ=y
-CONFIG_SPI=y
-# CONFIG_SPI_AIROHA_EN7523 is not set
-CONFIG_SPI_AIROHA_SNFI=y
-CONFIG_SPI_MASTER=y
-CONFIG_SPI_MEM=y
-CONFIG_SPLIT_PMD_PTLOCKS=y
-CONFIG_SPLIT_PTE_PTLOCKS=y
-CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
-CONFIG_SWIOTLB=y
-CONFIG_SWPHY=y
-CONFIG_SYSCTL_EXCEPTION_TRACE=y
-CONFIG_THERMAL=y
-CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
-CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
-CONFIG_THERMAL_GOV_STEP_WISE=y
-CONFIG_THERMAL_OF=y
-CONFIG_THREAD_INFO_IN_TASK=y
-CONFIG_TICK_CPU_ACCOUNTING=y
-CONFIG_TIMER_OF=y
-CONFIG_TIMER_PROBE=y
-CONFIG_TOOLS_SUPPORT_RELR=y
-CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
-CONFIG_TREE_RCU=y
-CONFIG_TREE_SRCU=y
-CONFIG_UBIFS_FS=y
-# CONFIG_UNMAP_KERNEL_AT_EL0 is not set
-CONFIG_USER_STACKTRACE_SUPPORT=y
-CONFIG_VDSO_GETRANDOM=y
-CONFIG_VMAP_STACK=y
-CONFIG_WANT_DEV_COREDUMP=y
-CONFIG_WATCHDOG_CORE=y
-# CONFIG_WLAN is not set
-# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
-CONFIG_XFRM_AH=y
-CONFIG_XFRM_ALGO=y
-CONFIG_XFRM_ESP=y
-CONFIG_XFRM_IPCOMP=y
-CONFIG_XFRM_MIGRATE=y
-CONFIG_XPS=y
-CONFIG_XXHASH=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZONE_DMA32=y
-CONFIG_ZSTD_COMMON=y
-CONFIG_ZSTD_COMPRESS=y
-CONFIG_ZSTD_DECOMPRESS=y
diff --git a/lede/target/linux/airoha/an7583/base-files/etc/board.d/02_network b/lede/target/linux/airoha/an7583/base-files/etc/board.d/02_network
deleted file mode 100644
index 077d193ed5..0000000000
--- a/lede/target/linux/airoha/an7583/base-files/etc/board.d/02_network
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# Copyright (c) 2015 The Linux Foundation. All rights reserved.
-# Copyright (c) 2011-2015 OpenWrt.org
-#
-
-. /lib/functions/uci-defaults.sh
-. /lib/functions/system.sh
-
-an7583_setup_interfaces()
-{
- local board="$1"
-
- case "$board" in
- airoha,an7583-evb)
- ucidef_set_interface_lan "lan1 lan2 lan3 lan4 eth1"
- ;;
- *)
- echo "Unsupported hardware. Network interfaces not initialized"
- ;;
- esac
-}
-
-board_config_update
-board=$(board_name)
-an7583_setup_interfaces $board
-board_config_flush
-
-exit 0
diff --git a/lede/target/linux/airoha/an7583/config-6.12 b/lede/target/linux/airoha/an7583/config-6.12
deleted file mode 100644
index f3d4effeda..0000000000
--- a/lede/target/linux/airoha/an7583/config-6.12
+++ /dev/null
@@ -1,402 +0,0 @@
-CONFIG_64BIT=y
-CONFIG_AIROHA_CPU_PM_DOMAIN=y
-CONFIG_AIROHA_SCU_SSR=y
-CONFIG_AIROHA_THERMAL=y
-CONFIG_AIROHA_WATCHDOG=y
-CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
-CONFIG_ARCH_AIROHA=y
-CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS=y
-CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y
-CONFIG_ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG=y
-CONFIG_ARCH_DMA_ADDR_T_64BIT=y
-CONFIG_ARCH_FORCE_MAX_ORDER=10
-CONFIG_ARCH_KEEP_MEMBLOCK=y
-CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
-CONFIG_ARCH_MMAP_RND_BITS=18
-CONFIG_ARCH_MMAP_RND_BITS_MAX=24
-CONFIG_ARCH_MMAP_RND_BITS_MIN=18
-CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
-CONFIG_ARCH_PROC_KCORE_TEXT=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_STACKWALK=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ARCH_WANTS_NO_INSTR=y
-CONFIG_ARCH_WANTS_THP_SWAP=y
-CONFIG_ARM64=y
-CONFIG_ARM64_4K_PAGES=y
-CONFIG_ARM64_ERRATUM_843419=y
-CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y
-CONFIG_ARM64_PA_BITS=48
-CONFIG_ARM64_PA_BITS_48=y
-CONFIG_ARM64_PLATFORM_DEVICES=y
-CONFIG_ARM64_TAGGED_ADDR_ABI=y
-CONFIG_ARM64_VA_BITS=39
-CONFIG_ARM64_VA_BITS_39=y
-# CONFIG_ARM64_VA_BITS_48 is not set
-# CONFIG_ARM64_VA_BITS_52 is not set
-CONFIG_ARM_AIROHA_SOC_CPUFREQ=y
-CONFIG_ARM_AMBA=y
-CONFIG_ARM_ARCH_TIMER=y
-CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
-# CONFIG_ARM_DEBUG_WX is not set
-CONFIG_ARM_GIC=y
-CONFIG_ARM_GIC_V2M=y
-CONFIG_ARM_GIC_V3=y
-CONFIG_ARM_GIC_V3_ITS=y
-CONFIG_ARM_PMU=y
-CONFIG_ARM_PMUV3=y
-CONFIG_ARM_PSCI_FW=y
-CONFIG_ARM_SMCCC_SOC_ID=y
-# CONFIG_ARM_SMMU is not set
-# CONFIG_ARM_SMMU_V3 is not set
-CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
-CONFIG_BLK_MQ_PCI=y
-CONFIG_BLK_PM=y
-CONFIG_BUFFER_HEAD=y
-CONFIG_BUILTIN_RETURN_ADDRESS_STRIPS_PAC=y
-CONFIG_CC_HAVE_SHADOW_CALL_STACK=y
-CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
-CONFIG_CLONE_BACKWARDS=y
-CONFIG_COMMON_CLK=y
-CONFIG_COMMON_CLK_EN7523=y
-CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
-# CONFIG_COMPAT_32BIT_TIME is not set
-# CONFIG_COMPRESSED_INSTALL is not set
-CONFIG_CONTEXT_TRACKING=y
-CONFIG_CONTEXT_TRACKING_IDLE=y
-CONFIG_CPUFREQ_DT=y
-CONFIG_CPUFREQ_DT_PLATDEV=y
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-CONFIG_CPU_FREQ_GOV_ATTR_SET=y
-CONFIG_CPU_FREQ_GOV_COMMON=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_LITTLE_ENDIAN=y
-CONFIG_CPU_RMAP=y
-CONFIG_CRC16=y
-CONFIG_CRC_CCITT=y
-CONFIG_CRYPTO_CRC32C=y
-CONFIG_CRYPTO_DEFLATE=y
-CONFIG_CRYPTO_DEV_EIP93=y
-CONFIG_CRYPTO_DRBG=y
-CONFIG_CRYPTO_DRBG_HMAC=y
-CONFIG_CRYPTO_DRBG_MENU=y
-CONFIG_CRYPTO_ECB=y
-CONFIG_CRYPTO_HASH_INFO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_JITTERENTROPY=y
-CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=64
-CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=32
-CONFIG_CRYPTO_JITTERENTROPY_OSR=1
-CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
-CONFIG_CRYPTO_LIB_GF128MUL=y
-CONFIG_CRYPTO_LIB_SHA1=y
-CONFIG_CRYPTO_LIB_SHA256=y
-CONFIG_CRYPTO_LIB_UTILS=y
-CONFIG_CRYPTO_LZO=y
-CONFIG_CRYPTO_RNG=y
-CONFIG_CRYPTO_RNG2=y
-CONFIG_CRYPTO_RNG_DEFAULT=y
-CONFIG_CRYPTO_SHA256=y
-CONFIG_CRYPTO_SHA3=y
-CONFIG_CRYPTO_SHA512=y
-CONFIG_CRYPTO_ZSTD=y
-CONFIG_DCACHE_WORD_ACCESS=y
-CONFIG_DEBUG_MISC=y
-CONFIG_DMADEVICES=y
-CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC=y
-CONFIG_DMA_DIRECT_REMAP=y
-CONFIG_DMA_ENGINE=y
-CONFIG_DMA_NEED_SYNC=y
-CONFIG_DMA_OF=y
-CONFIG_DMA_OPS_HELPERS=y
-CONFIG_DTC=y
-CONFIG_EDAC_SUPPORT=y
-CONFIG_EXT4_FS=y
-CONFIG_FIXED_PHY=y
-CONFIG_FIX_EARLYCON_MEM=y
-CONFIG_FRAME_POINTER=y
-CONFIG_FS_IOMAP=y
-CONFIG_FS_MBCACHE=y
-CONFIG_FUNCTION_ALIGNMENT=4
-CONFIG_FUNCTION_ALIGNMENT_4B=y
-CONFIG_FWNODE_MDIO=y
-CONFIG_FW_CACHE=y
-# CONFIG_FW_LOADER_USER_HELPER is not set
-CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y
-CONFIG_GENERIC_ALLOCATOR=y
-CONFIG_GENERIC_ARCH_TOPOLOGY=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
-CONFIG_GENERIC_CPU_AUTOPROBE=y
-CONFIG_GENERIC_CPU_DEVICES=y
-CONFIG_GENERIC_CPU_VULNERABILITIES=y
-CONFIG_GENERIC_CSUM=y
-CONFIG_GENERIC_EARLY_IOREMAP=y
-CONFIG_GENERIC_GETTIMEOFDAY=y
-CONFIG_GENERIC_IDLE_POLL_SETUP=y
-CONFIG_GENERIC_IOREMAP=y
-CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
-CONFIG_GENERIC_IRQ_SHOW=y
-CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
-CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y
-CONFIG_GENERIC_MSI_IRQ=y
-CONFIG_GENERIC_PCI_IOMAP=y
-CONFIG_GENERIC_PHY=y
-CONFIG_GENERIC_PINCONF=y
-CONFIG_GENERIC_PINCTRL_GROUPS=y
-CONFIG_GENERIC_PINMUX_FUNCTIONS=y
-CONFIG_GENERIC_SCHED_CLOCK=y
-CONFIG_GENERIC_SMP_IDLE_THREAD=y
-CONFIG_GENERIC_STRNCPY_FROM_USER=y
-CONFIG_GENERIC_STRNLEN_USER=y
-CONFIG_GENERIC_TIME_VSYSCALL=y
-CONFIG_GLOB=y
-CONFIG_GPIOLIB_IRQCHIP=y
-CONFIG_GPIO_CDEV=y
-CONFIG_GPIO_EN7523=y
-CONFIG_GPIO_GENERIC=y
-CONFIG_GRO_CELLS=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_IOPORT_MAP=y
-CONFIG_HOTPLUG_CORE_SYNC=y
-CONFIG_HOTPLUG_CORE_SYNC_DEAD=y
-CONFIG_HOTPLUG_CPU=y
-CONFIG_HW_RANDOM=y
-CONFIG_HW_RANDOM_AIROHA=y
-# CONFIG_HISILICON_ERRATUM_162100801 is not set
-# CONFIG_IDPF is not set
-CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
-CONFIG_INET_AH=y
-CONFIG_INET_ESP=y
-# CONFIG_INET_ESP_OFFLOAD is not set
-CONFIG_INET_IPCOMP=y
-CONFIG_INET_TUNNEL=y
-CONFIG_INET_XFRM_TUNNEL=y
-CONFIG_IO_URING=y
-CONFIG_IPC_NS=y
-CONFIG_IPV6=y
-CONFIG_IPV6_MULTIPLE_TABLES=y
-# CONFIG_IPV6_SUBTREES is not set
-CONFIG_IP_MROUTE=y
-CONFIG_IP_MROUTE_COMMON=y
-# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_IP_ROUTE_MULTIPATH is not set
-# CONFIG_IP_ROUTE_VERBOSE is not set
-CONFIG_IRQCHIP=y
-CONFIG_IRQ_DOMAIN=y
-CONFIG_IRQ_DOMAIN_HIERARCHY=y
-CONFIG_IRQ_FORCED_THREADING=y
-CONFIG_IRQ_MSI_LIB=y
-CONFIG_IRQ_WORK=y
-CONFIG_JBD2=y
-CONFIG_LIBFDT=y
-CONFIG_LOCK_DEBUGGING_SUPPORT=y
-CONFIG_LOCK_SPIN_ON_OWNER=y
-CONFIG_LRU_GEN_WALKS_MMU=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_MDIO_BUS=y
-CONFIG_MDIO_DEVICE=y
-CONFIG_MDIO_AIROHA=y
-CONFIG_MDIO_DEVRES=y
-# CONFIG_MEDIATEK_GE_SOC_PHY is not set
-# CONFIG_MEMCG is not set
-CONFIG_MFD_SYSCON=y
-CONFIG_MIGRATION=y
-CONFIG_MMC=y
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_CQHCI=y
-CONFIG_MMC_MTK=y
-CONFIG_MMU_LAZY_TLB_REFCOUNT=y
-CONFIG_MODULES_TREE_LOOKUP=y
-CONFIG_MODULES_USE_ELF_RELA=y
-CONFIG_MTD_NAND_CORE=y
-CONFIG_MTD_NAND_ECC=y
-CONFIG_MTD_NAND_MTK_BMT=y
-CONFIG_MTD_RAW_NAND=y
-CONFIG_MTD_SPI_NAND=y
-CONFIG_MTD_SPLIT_FIRMWARE=y
-CONFIG_MTD_SPLIT_FIT_FW=y
-CONFIG_MTD_UBI=y
-CONFIG_MTD_UBI_BEB_LIMIT=20
-CONFIG_MTD_UBI_BLOCK=y
-CONFIG_MTD_UBI_WL_THRESHOLD=4096
-CONFIG_MUTEX_SPIN_ON_OWNER=y
-CONFIG_NEED_DMA_MAP_STATE=y
-CONFIG_NEED_SG_DMA_LENGTH=y
-CONFIG_NET_AIROHA=y
-CONFIG_NET_AIROHA_FLOW_STATS=y
-CONFIG_NET_AIROHA_NPU=y
-CONFIG_NET_DEVLINK=y
-CONFIG_NET_DSA=y
-CONFIG_NET_DSA_MT7530=y
-CONFIG_NET_DSA_MT7530_MDIO=y
-CONFIG_NET_DSA_MT7530_MMIO=y
-CONFIG_NET_DSA_TAG_MTK=y
-CONFIG_NET_FLOW_LIMIT=y
-# CONFIG_NET_MEDIATEK_SOC is not set
-CONFIG_NET_SELFTESTS=y
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_NET_VENDOR_AIROHA=y
-# CONFIG_NET_VENDOR_MEDIATEK is not set
-CONFIG_NLS=y
-CONFIG_NO_HZ_COMMON=y
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NR_CPUS=4
-CONFIG_NVMEM=y
-CONFIG_NVMEM_BLOCK=y
-CONFIG_NVMEM_LAYOUTS=y
-CONFIG_NVMEM_LAYOUT_ASCII_ENV=y
-CONFIG_NVMEM_SYSFS=y
-CONFIG_OF=y
-CONFIG_OF_ADDRESS=y
-CONFIG_OF_EARLY_FLATTREE=y
-CONFIG_OF_FLATTREE=y
-CONFIG_OF_GPIO=y
-CONFIG_OF_IRQ=y
-CONFIG_OF_KOBJ=y
-CONFIG_OF_MDIO=y
-CONFIG_PAGE_POOL=y
-CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
-CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
-CONFIG_PARTITION_PERCPU=y
-CONFIG_PCI=y
-CONFIG_PCIEAER=y
-CONFIG_PCIEASPM=y
-# CONFIG_PCIEASPM_DEFAULT is not set
-CONFIG_PCIEASPM_PERFORMANCE=y
-# CONFIG_PCIEASPM_POWERSAVE is not set
-# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
-CONFIG_PCIEPORTBUS=y
-CONFIG_PCIE_MEDIATEK=y
-CONFIG_PCIE_MEDIATEK_GEN3=y
-CONFIG_PCIE_PME=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PCI_DOMAINS_GENERIC=y
-CONFIG_PCI_MSI=y
-# CONFIG_PCS_AIROHA_AN7581 is not set
-CONFIG_PCS_AIROHA_AN7583=y
-CONFIG_PERF_EVENTS=y
-CONFIG_PER_VMA_LOCK=y
-CONFIG_PGTABLE_LEVELS=3
-CONFIG_PHYLIB=y
-CONFIG_PHYLIB_LEDS=y
-CONFIG_PHYLINK=y
-CONFIG_PHYS_ADDR_T_64BIT=y
-CONFIG_PHY_AIROHA_PCIE=y
-# CONFIG_PHY_AIROHA_USB is not set
-CONFIG_PINCTRL=y
-CONFIG_PINCTRL_AIROHA=y
-# CONFIG_PINCTRL_MT2712 is not set
-# CONFIG_PINCTRL_MT6765 is not set
-# CONFIG_PINCTRL_MT6795 is not set
-# CONFIG_PINCTRL_MT6797 is not set
-# CONFIG_PINCTRL_MT7622 is not set
-# CONFIG_PINCTRL_MT7981 is not set
-# CONFIG_PINCTRL_MT7986 is not set
-# CONFIG_PINCTRL_MT8173 is not set
-# CONFIG_PINCTRL_MT8183 is not set
-# CONFIG_PINCTRL_MT8186 is not set
-# CONFIG_PINCTRL_MT8188 is not set
-# CONFIG_PINCTRL_MT8516 is not set
-CONFIG_PM=y
-CONFIG_PM_CLK=y
-CONFIG_PM_OPP=y
-CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
-CONFIG_POWER_RESET=y
-CONFIG_POWER_RESET_SYSCON=y
-CONFIG_POWER_SUPPLY=y
-CONFIG_PTP_1588_CLOCK_OPTIONAL=y
-CONFIG_QUEUED_RWLOCKS=y
-CONFIG_QUEUED_SPINLOCKS=y
-CONFIG_RANDSTRUCT_NONE=y
-CONFIG_RAS=y
-CONFIG_RATIONAL=y
-CONFIG_REGMAP=y
-CONFIG_REGMAP_MMIO=y
-CONFIG_REGULATOR=y
-CONFIG_REGULATOR_FIXED_VOLTAGE=y
-CONFIG_RELOCATABLE=y
-CONFIG_RESET_CONTROLLER=y
-CONFIG_RFS_ACCEL=y
-CONFIG_RODATA_FULL_DEFAULT_ENABLED=y
-CONFIG_RPS=y
-CONFIG_RWSEM_SPIN_ON_OWNER=y
-CONFIG_SERIAL_8250_AIROHA=y
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_FSL=y
-CONFIG_SERIAL_8250_NR_UARTS=5
-CONFIG_SERIAL_8250_RUNTIME_UARTS=5
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_MCTRL_GPIO=y
-CONFIG_SERIAL_OF_PLATFORM=y
-CONFIG_SGL_ALLOC=y
-CONFIG_SKB_EXTENSIONS=y
-CONFIG_SMP=y
-CONFIG_SOCK_RX_QUEUE_MAPPING=y
-CONFIG_SOC_BUS=y
-CONFIG_SOFTIRQ_ON_OWN_STACK=y
-CONFIG_SPARSEMEM=y
-CONFIG_SPARSEMEM_EXTREME=y
-CONFIG_SPARSEMEM_VMEMMAP=y
-CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
-CONFIG_SPARSE_IRQ=y
-CONFIG_SPI=y
-# CONFIG_SPI_AIROHA_EN7523 is not set
-CONFIG_SPI_AIROHA_SNFI=y
-CONFIG_SPI_MASTER=y
-CONFIG_SPI_MEM=y
-CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
-CONFIG_SWIOTLB=y
-CONFIG_SWPHY=y
-CONFIG_SYSCTL_EXCEPTION_TRACE=y
-# CONFIG_TEST_FPU is not set
-CONFIG_THERMAL=y
-CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
-CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
-CONFIG_THERMAL_GOV_STEP_WISE=y
-CONFIG_THERMAL_OF=y
-CONFIG_THREAD_INFO_IN_TASK=y
-CONFIG_TICK_CPU_ACCOUNTING=y
-CONFIG_TIMER_OF=y
-CONFIG_TIMER_PROBE=y
-CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
-CONFIG_TREE_RCU=y
-CONFIG_TREE_SRCU=y
-CONFIG_UBIFS_FS=y
-# CONFIG_UNMAP_KERNEL_AT_EL0 is not set
-CONFIG_USER_STACKTRACE_SUPPORT=y
-CONFIG_VDSO_GETRANDOM=y
-CONFIG_VMAP_STACK=y
-CONFIG_WATCHDOG_CORE=y
-# CONFIG_WLAN is not set
-# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
-CONFIG_XFRM_AH=y
-CONFIG_XFRM_ALGO=y
-CONFIG_XFRM_ESP=y
-CONFIG_XFRM_IPCOMP=y
-CONFIG_XFRM_MIGRATE=y
-CONFIG_XPS=y
-CONFIG_XXHASH=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZONE_DMA32=y
-CONFIG_ZSTD_COMMON=y
-CONFIG_ZSTD_COMPRESS=y
-CONFIG_ZSTD_DECOMPRESS=y
diff --git a/lede/target/linux/airoha/an7583/config-6.6 b/lede/target/linux/airoha/an7583/config-6.6
deleted file mode 100644
index f3d4effeda..0000000000
--- a/lede/target/linux/airoha/an7583/config-6.6
+++ /dev/null
@@ -1,402 +0,0 @@
-CONFIG_64BIT=y
-CONFIG_AIROHA_CPU_PM_DOMAIN=y
-CONFIG_AIROHA_SCU_SSR=y
-CONFIG_AIROHA_THERMAL=y
-CONFIG_AIROHA_WATCHDOG=y
-CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
-CONFIG_ARCH_AIROHA=y
-CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS=y
-CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y
-CONFIG_ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG=y
-CONFIG_ARCH_DMA_ADDR_T_64BIT=y
-CONFIG_ARCH_FORCE_MAX_ORDER=10
-CONFIG_ARCH_KEEP_MEMBLOCK=y
-CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
-CONFIG_ARCH_MMAP_RND_BITS=18
-CONFIG_ARCH_MMAP_RND_BITS_MAX=24
-CONFIG_ARCH_MMAP_RND_BITS_MIN=18
-CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
-CONFIG_ARCH_PROC_KCORE_TEXT=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_STACKWALK=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ARCH_WANTS_NO_INSTR=y
-CONFIG_ARCH_WANTS_THP_SWAP=y
-CONFIG_ARM64=y
-CONFIG_ARM64_4K_PAGES=y
-CONFIG_ARM64_ERRATUM_843419=y
-CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y
-CONFIG_ARM64_PA_BITS=48
-CONFIG_ARM64_PA_BITS_48=y
-CONFIG_ARM64_PLATFORM_DEVICES=y
-CONFIG_ARM64_TAGGED_ADDR_ABI=y
-CONFIG_ARM64_VA_BITS=39
-CONFIG_ARM64_VA_BITS_39=y
-# CONFIG_ARM64_VA_BITS_48 is not set
-# CONFIG_ARM64_VA_BITS_52 is not set
-CONFIG_ARM_AIROHA_SOC_CPUFREQ=y
-CONFIG_ARM_AMBA=y
-CONFIG_ARM_ARCH_TIMER=y
-CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
-# CONFIG_ARM_DEBUG_WX is not set
-CONFIG_ARM_GIC=y
-CONFIG_ARM_GIC_V2M=y
-CONFIG_ARM_GIC_V3=y
-CONFIG_ARM_GIC_V3_ITS=y
-CONFIG_ARM_PMU=y
-CONFIG_ARM_PMUV3=y
-CONFIG_ARM_PSCI_FW=y
-CONFIG_ARM_SMCCC_SOC_ID=y
-# CONFIG_ARM_SMMU is not set
-# CONFIG_ARM_SMMU_V3 is not set
-CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
-CONFIG_BLK_MQ_PCI=y
-CONFIG_BLK_PM=y
-CONFIG_BUFFER_HEAD=y
-CONFIG_BUILTIN_RETURN_ADDRESS_STRIPS_PAC=y
-CONFIG_CC_HAVE_SHADOW_CALL_STACK=y
-CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
-CONFIG_CLONE_BACKWARDS=y
-CONFIG_COMMON_CLK=y
-CONFIG_COMMON_CLK_EN7523=y
-CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
-# CONFIG_COMPAT_32BIT_TIME is not set
-# CONFIG_COMPRESSED_INSTALL is not set
-CONFIG_CONTEXT_TRACKING=y
-CONFIG_CONTEXT_TRACKING_IDLE=y
-CONFIG_CPUFREQ_DT=y
-CONFIG_CPUFREQ_DT_PLATDEV=y
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-CONFIG_CPU_FREQ_GOV_ATTR_SET=y
-CONFIG_CPU_FREQ_GOV_COMMON=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_LITTLE_ENDIAN=y
-CONFIG_CPU_RMAP=y
-CONFIG_CRC16=y
-CONFIG_CRC_CCITT=y
-CONFIG_CRYPTO_CRC32C=y
-CONFIG_CRYPTO_DEFLATE=y
-CONFIG_CRYPTO_DEV_EIP93=y
-CONFIG_CRYPTO_DRBG=y
-CONFIG_CRYPTO_DRBG_HMAC=y
-CONFIG_CRYPTO_DRBG_MENU=y
-CONFIG_CRYPTO_ECB=y
-CONFIG_CRYPTO_HASH_INFO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_JITTERENTROPY=y
-CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=64
-CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=32
-CONFIG_CRYPTO_JITTERENTROPY_OSR=1
-CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
-CONFIG_CRYPTO_LIB_GF128MUL=y
-CONFIG_CRYPTO_LIB_SHA1=y
-CONFIG_CRYPTO_LIB_SHA256=y
-CONFIG_CRYPTO_LIB_UTILS=y
-CONFIG_CRYPTO_LZO=y
-CONFIG_CRYPTO_RNG=y
-CONFIG_CRYPTO_RNG2=y
-CONFIG_CRYPTO_RNG_DEFAULT=y
-CONFIG_CRYPTO_SHA256=y
-CONFIG_CRYPTO_SHA3=y
-CONFIG_CRYPTO_SHA512=y
-CONFIG_CRYPTO_ZSTD=y
-CONFIG_DCACHE_WORD_ACCESS=y
-CONFIG_DEBUG_MISC=y
-CONFIG_DMADEVICES=y
-CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC=y
-CONFIG_DMA_DIRECT_REMAP=y
-CONFIG_DMA_ENGINE=y
-CONFIG_DMA_NEED_SYNC=y
-CONFIG_DMA_OF=y
-CONFIG_DMA_OPS_HELPERS=y
-CONFIG_DTC=y
-CONFIG_EDAC_SUPPORT=y
-CONFIG_EXT4_FS=y
-CONFIG_FIXED_PHY=y
-CONFIG_FIX_EARLYCON_MEM=y
-CONFIG_FRAME_POINTER=y
-CONFIG_FS_IOMAP=y
-CONFIG_FS_MBCACHE=y
-CONFIG_FUNCTION_ALIGNMENT=4
-CONFIG_FUNCTION_ALIGNMENT_4B=y
-CONFIG_FWNODE_MDIO=y
-CONFIG_FW_CACHE=y
-# CONFIG_FW_LOADER_USER_HELPER is not set
-CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y
-CONFIG_GENERIC_ALLOCATOR=y
-CONFIG_GENERIC_ARCH_TOPOLOGY=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
-CONFIG_GENERIC_CPU_AUTOPROBE=y
-CONFIG_GENERIC_CPU_DEVICES=y
-CONFIG_GENERIC_CPU_VULNERABILITIES=y
-CONFIG_GENERIC_CSUM=y
-CONFIG_GENERIC_EARLY_IOREMAP=y
-CONFIG_GENERIC_GETTIMEOFDAY=y
-CONFIG_GENERIC_IDLE_POLL_SETUP=y
-CONFIG_GENERIC_IOREMAP=y
-CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
-CONFIG_GENERIC_IRQ_SHOW=y
-CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
-CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y
-CONFIG_GENERIC_MSI_IRQ=y
-CONFIG_GENERIC_PCI_IOMAP=y
-CONFIG_GENERIC_PHY=y
-CONFIG_GENERIC_PINCONF=y
-CONFIG_GENERIC_PINCTRL_GROUPS=y
-CONFIG_GENERIC_PINMUX_FUNCTIONS=y
-CONFIG_GENERIC_SCHED_CLOCK=y
-CONFIG_GENERIC_SMP_IDLE_THREAD=y
-CONFIG_GENERIC_STRNCPY_FROM_USER=y
-CONFIG_GENERIC_STRNLEN_USER=y
-CONFIG_GENERIC_TIME_VSYSCALL=y
-CONFIG_GLOB=y
-CONFIG_GPIOLIB_IRQCHIP=y
-CONFIG_GPIO_CDEV=y
-CONFIG_GPIO_EN7523=y
-CONFIG_GPIO_GENERIC=y
-CONFIG_GRO_CELLS=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_IOPORT_MAP=y
-CONFIG_HOTPLUG_CORE_SYNC=y
-CONFIG_HOTPLUG_CORE_SYNC_DEAD=y
-CONFIG_HOTPLUG_CPU=y
-CONFIG_HW_RANDOM=y
-CONFIG_HW_RANDOM_AIROHA=y
-# CONFIG_HISILICON_ERRATUM_162100801 is not set
-# CONFIG_IDPF is not set
-CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
-CONFIG_INET_AH=y
-CONFIG_INET_ESP=y
-# CONFIG_INET_ESP_OFFLOAD is not set
-CONFIG_INET_IPCOMP=y
-CONFIG_INET_TUNNEL=y
-CONFIG_INET_XFRM_TUNNEL=y
-CONFIG_IO_URING=y
-CONFIG_IPC_NS=y
-CONFIG_IPV6=y
-CONFIG_IPV6_MULTIPLE_TABLES=y
-# CONFIG_IPV6_SUBTREES is not set
-CONFIG_IP_MROUTE=y
-CONFIG_IP_MROUTE_COMMON=y
-# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_IP_ROUTE_MULTIPATH is not set
-# CONFIG_IP_ROUTE_VERBOSE is not set
-CONFIG_IRQCHIP=y
-CONFIG_IRQ_DOMAIN=y
-CONFIG_IRQ_DOMAIN_HIERARCHY=y
-CONFIG_IRQ_FORCED_THREADING=y
-CONFIG_IRQ_MSI_LIB=y
-CONFIG_IRQ_WORK=y
-CONFIG_JBD2=y
-CONFIG_LIBFDT=y
-CONFIG_LOCK_DEBUGGING_SUPPORT=y
-CONFIG_LOCK_SPIN_ON_OWNER=y
-CONFIG_LRU_GEN_WALKS_MMU=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_MDIO_BUS=y
-CONFIG_MDIO_DEVICE=y
-CONFIG_MDIO_AIROHA=y
-CONFIG_MDIO_DEVRES=y
-# CONFIG_MEDIATEK_GE_SOC_PHY is not set
-# CONFIG_MEMCG is not set
-CONFIG_MFD_SYSCON=y
-CONFIG_MIGRATION=y
-CONFIG_MMC=y
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_CQHCI=y
-CONFIG_MMC_MTK=y
-CONFIG_MMU_LAZY_TLB_REFCOUNT=y
-CONFIG_MODULES_TREE_LOOKUP=y
-CONFIG_MODULES_USE_ELF_RELA=y
-CONFIG_MTD_NAND_CORE=y
-CONFIG_MTD_NAND_ECC=y
-CONFIG_MTD_NAND_MTK_BMT=y
-CONFIG_MTD_RAW_NAND=y
-CONFIG_MTD_SPI_NAND=y
-CONFIG_MTD_SPLIT_FIRMWARE=y
-CONFIG_MTD_SPLIT_FIT_FW=y
-CONFIG_MTD_UBI=y
-CONFIG_MTD_UBI_BEB_LIMIT=20
-CONFIG_MTD_UBI_BLOCK=y
-CONFIG_MTD_UBI_WL_THRESHOLD=4096
-CONFIG_MUTEX_SPIN_ON_OWNER=y
-CONFIG_NEED_DMA_MAP_STATE=y
-CONFIG_NEED_SG_DMA_LENGTH=y
-CONFIG_NET_AIROHA=y
-CONFIG_NET_AIROHA_FLOW_STATS=y
-CONFIG_NET_AIROHA_NPU=y
-CONFIG_NET_DEVLINK=y
-CONFIG_NET_DSA=y
-CONFIG_NET_DSA_MT7530=y
-CONFIG_NET_DSA_MT7530_MDIO=y
-CONFIG_NET_DSA_MT7530_MMIO=y
-CONFIG_NET_DSA_TAG_MTK=y
-CONFIG_NET_FLOW_LIMIT=y
-# CONFIG_NET_MEDIATEK_SOC is not set
-CONFIG_NET_SELFTESTS=y
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_NET_VENDOR_AIROHA=y
-# CONFIG_NET_VENDOR_MEDIATEK is not set
-CONFIG_NLS=y
-CONFIG_NO_HZ_COMMON=y
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NR_CPUS=4
-CONFIG_NVMEM=y
-CONFIG_NVMEM_BLOCK=y
-CONFIG_NVMEM_LAYOUTS=y
-CONFIG_NVMEM_LAYOUT_ASCII_ENV=y
-CONFIG_NVMEM_SYSFS=y
-CONFIG_OF=y
-CONFIG_OF_ADDRESS=y
-CONFIG_OF_EARLY_FLATTREE=y
-CONFIG_OF_FLATTREE=y
-CONFIG_OF_GPIO=y
-CONFIG_OF_IRQ=y
-CONFIG_OF_KOBJ=y
-CONFIG_OF_MDIO=y
-CONFIG_PAGE_POOL=y
-CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
-CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
-CONFIG_PARTITION_PERCPU=y
-CONFIG_PCI=y
-CONFIG_PCIEAER=y
-CONFIG_PCIEASPM=y
-# CONFIG_PCIEASPM_DEFAULT is not set
-CONFIG_PCIEASPM_PERFORMANCE=y
-# CONFIG_PCIEASPM_POWERSAVE is not set
-# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
-CONFIG_PCIEPORTBUS=y
-CONFIG_PCIE_MEDIATEK=y
-CONFIG_PCIE_MEDIATEK_GEN3=y
-CONFIG_PCIE_PME=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PCI_DOMAINS_GENERIC=y
-CONFIG_PCI_MSI=y
-# CONFIG_PCS_AIROHA_AN7581 is not set
-CONFIG_PCS_AIROHA_AN7583=y
-CONFIG_PERF_EVENTS=y
-CONFIG_PER_VMA_LOCK=y
-CONFIG_PGTABLE_LEVELS=3
-CONFIG_PHYLIB=y
-CONFIG_PHYLIB_LEDS=y
-CONFIG_PHYLINK=y
-CONFIG_PHYS_ADDR_T_64BIT=y
-CONFIG_PHY_AIROHA_PCIE=y
-# CONFIG_PHY_AIROHA_USB is not set
-CONFIG_PINCTRL=y
-CONFIG_PINCTRL_AIROHA=y
-# CONFIG_PINCTRL_MT2712 is not set
-# CONFIG_PINCTRL_MT6765 is not set
-# CONFIG_PINCTRL_MT6795 is not set
-# CONFIG_PINCTRL_MT6797 is not set
-# CONFIG_PINCTRL_MT7622 is not set
-# CONFIG_PINCTRL_MT7981 is not set
-# CONFIG_PINCTRL_MT7986 is not set
-# CONFIG_PINCTRL_MT8173 is not set
-# CONFIG_PINCTRL_MT8183 is not set
-# CONFIG_PINCTRL_MT8186 is not set
-# CONFIG_PINCTRL_MT8188 is not set
-# CONFIG_PINCTRL_MT8516 is not set
-CONFIG_PM=y
-CONFIG_PM_CLK=y
-CONFIG_PM_OPP=y
-CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
-CONFIG_POWER_RESET=y
-CONFIG_POWER_RESET_SYSCON=y
-CONFIG_POWER_SUPPLY=y
-CONFIG_PTP_1588_CLOCK_OPTIONAL=y
-CONFIG_QUEUED_RWLOCKS=y
-CONFIG_QUEUED_SPINLOCKS=y
-CONFIG_RANDSTRUCT_NONE=y
-CONFIG_RAS=y
-CONFIG_RATIONAL=y
-CONFIG_REGMAP=y
-CONFIG_REGMAP_MMIO=y
-CONFIG_REGULATOR=y
-CONFIG_REGULATOR_FIXED_VOLTAGE=y
-CONFIG_RELOCATABLE=y
-CONFIG_RESET_CONTROLLER=y
-CONFIG_RFS_ACCEL=y
-CONFIG_RODATA_FULL_DEFAULT_ENABLED=y
-CONFIG_RPS=y
-CONFIG_RWSEM_SPIN_ON_OWNER=y
-CONFIG_SERIAL_8250_AIROHA=y
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_FSL=y
-CONFIG_SERIAL_8250_NR_UARTS=5
-CONFIG_SERIAL_8250_RUNTIME_UARTS=5
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_MCTRL_GPIO=y
-CONFIG_SERIAL_OF_PLATFORM=y
-CONFIG_SGL_ALLOC=y
-CONFIG_SKB_EXTENSIONS=y
-CONFIG_SMP=y
-CONFIG_SOCK_RX_QUEUE_MAPPING=y
-CONFIG_SOC_BUS=y
-CONFIG_SOFTIRQ_ON_OWN_STACK=y
-CONFIG_SPARSEMEM=y
-CONFIG_SPARSEMEM_EXTREME=y
-CONFIG_SPARSEMEM_VMEMMAP=y
-CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
-CONFIG_SPARSE_IRQ=y
-CONFIG_SPI=y
-# CONFIG_SPI_AIROHA_EN7523 is not set
-CONFIG_SPI_AIROHA_SNFI=y
-CONFIG_SPI_MASTER=y
-CONFIG_SPI_MEM=y
-CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
-CONFIG_SWIOTLB=y
-CONFIG_SWPHY=y
-CONFIG_SYSCTL_EXCEPTION_TRACE=y
-# CONFIG_TEST_FPU is not set
-CONFIG_THERMAL=y
-CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
-CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
-CONFIG_THERMAL_GOV_STEP_WISE=y
-CONFIG_THERMAL_OF=y
-CONFIG_THREAD_INFO_IN_TASK=y
-CONFIG_TICK_CPU_ACCOUNTING=y
-CONFIG_TIMER_OF=y
-CONFIG_TIMER_PROBE=y
-CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
-CONFIG_TREE_RCU=y
-CONFIG_TREE_SRCU=y
-CONFIG_UBIFS_FS=y
-# CONFIG_UNMAP_KERNEL_AT_EL0 is not set
-CONFIG_USER_STACKTRACE_SUPPORT=y
-CONFIG_VDSO_GETRANDOM=y
-CONFIG_VMAP_STACK=y
-CONFIG_WATCHDOG_CORE=y
-# CONFIG_WLAN is not set
-# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
-CONFIG_XFRM_AH=y
-CONFIG_XFRM_ALGO=y
-CONFIG_XFRM_ESP=y
-CONFIG_XFRM_IPCOMP=y
-CONFIG_XFRM_MIGRATE=y
-CONFIG_XPS=y
-CONFIG_XXHASH=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZONE_DMA32=y
-CONFIG_ZSTD_COMMON=y
-CONFIG_ZSTD_COMPRESS=y
-CONFIG_ZSTD_DECOMPRESS=y
diff --git a/lede/target/linux/airoha/an7583/target.mk b/lede/target/linux/airoha/an7583/target.mk
deleted file mode 100644
index dacbe0928e..0000000000
--- a/lede/target/linux/airoha/an7583/target.mk
+++ /dev/null
@@ -1,11 +0,0 @@
-ARCH:=aarch64
-SUBTARGET:=an7583
-BOARDNAME:=AN7583
-CPU_TYPE:=cortex-a53
-KERNELNAME:=Image dtbs
-FEATURES+=pwm source-only
-
-define Target/Description
- Build firmware images for Airoha an7583 ARM based boards.
-endef
-
diff --git a/lede/target/linux/airoha/dts/an7581-evb-emmc.dts b/lede/target/linux/airoha/dts/an7581-evb-emmc.dts
index 25d9b87af0..26d446e2a1 100644
--- a/lede/target/linux/airoha/dts/an7581-evb-emmc.dts
+++ b/lede/target/linux/airoha/dts/an7581-evb-emmc.dts
@@ -57,13 +57,6 @@
};
};
- pcie2_rst_pins: pcie2-rst-pins {
- conf {
- pins = "pcie_reset2";
- drive-open-drain = <1>;
- };
- };
-
gswp1_led0_pins: gswp1-led0-pins {
mux {
function = "phy1_led0";
@@ -106,17 +99,6 @@
};
};
-&usb0 {
- status = "okay";
-};
-
-&usb1 {
- status = "okay";
-
- mediatek,u3p-dis-msk = <0x1>;
- phys = <&usb1_phy PHY_TYPE_USB2>;
-};
-
&mmc0 {
pinctrl-names = "default", "state_uhs";
pinctrl-0 = <&mmc_pins>;
@@ -174,46 +156,6 @@
status = "okay";
};
-&pcie2 {
- pinctrl-names = "default";
- pinctrl-0 = <&pcie2_rst_pins>;
- status = "okay";
-};
-
-&mdio {
- as21xx_1: ethernet-phy@1d {
- compatible = "ethernet-phy-ieee802.3-c45";
- reg = <0x1d>;
-
- firmware-name = "as21x1x_fw.bin";
-
- reset-deassert-us = <1000000>;
- reset-assert-us = <1000000>;
- reset-gpios = <&en7581_pinctrl 31 GPIO_ACTIVE_LOW>;
-
- leds {
- #address-cells = <1>;
- #size-cells = <0>;
-
- led@0 {
- reg = <0>;
- color = ;
- function = LED_FUNCTION_LAN;
- function-enumerator = <0>;
- default-state = "keep";
- };
-
- led@1 {
- reg = <1>;
- color = ;
- function = LED_FUNCTION_LAN;
- function-enumerator = <1>;
- default-state = "keep";
- };
- };
- };
-};
-
ð {
status = "okay";
};
@@ -222,13 +164,6 @@
status = "okay";
};
-&gdm4 {
- status = "okay";
-
- phy-handle = <&as21xx_1>;
- phy-mode = "usxgmii";
-};
-
&switch {
pinctrl-names = "default";
pinctrl-0 = <&mdio_pins>;
diff --git a/lede/target/linux/airoha/dts/an7581-xg-040g-md.dts b/lede/target/linux/airoha/dts/an7581-xg-040g-md.dts
deleted file mode 100644
index 11fe8b9973..0000000000
--- a/lede/target/linux/airoha/dts/an7581-xg-040g-md.dts
+++ /dev/null
@@ -1,265 +0,0 @@
-// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
-/dts-v1/;
-
-#include
-#include
-#include
-#include "an7581.dtsi"
-
-/ {
- model = "Nokia Bell XG-040G-MD";
- compatible = "bell,xg-040g-md", "airoha,an7581";
-
- efuse-banks {
- compatible = "airoha,an7581-efuses";
- #address-cells = <0x01>;
- #size-cells = <0x00>;
-
- bank@0 {
- reg = <0x00>;
- };
-
- bank@1 {
- reg = <0x01>;
- };
- };
-
- aliases {
- serial0 = &uart1;
- };
-
- chosen {
- bootargs = "console=ttyS0,115200n8 loglevel=7 earlycon";
- stdout-path = "serial0:115200n8";
- bootargs-append = " ubi.mtd=rootfs,2048 rootfstype=squashfs loglevel=8 ubi.block=0,rootfs ro init=/etc/preinit";
- };
-
- memory@80000000 {
- device_type = "memory";
- reg = <0x0 0x80000000 0x2 0x00000000>;
- };
-
- leds {
- compatible = "gpio-leds";
-
- led-0 {
- label = "pwr";
- color = <0x01>;
- function = "power";
- gpios = <0x24 0x11 0x01>;
- default-state = "on";
- };
-
- led-2 {
- label = "pon";
- color = <0x02>;
- function = "status";
- gpios = <0x24 0x13 0x01>;
- default-state = "off";
- };
-
- led-3 {
- label = "internet";
- color = <0x02>;
- function = "status";
- gpios = <0x24 0x14 0x01>;
- default-state = "on";
- };
- };
-};
-
-&en7581_pinctrl {
- gpio-ranges = <&en7581_pinctrl 0 13 47>;
-
- mdio_pins: mdio-pins {
- mux {
- function = "mdio";
- groups = "mdio";
- };
-
- conf {
- pins = "gpio2";
- output-high;
- };
- };
-
- pcie0_rst_pins: pcie0-rst-pins {
- conf {
- pins = "pcie_reset0";
- drive-open-drain = <1>;
- };
- };
-
- pcie1_rst_pins: pcie1-rst-pins {
- conf {
- pins = "pcie_reset1";
- drive-open-drain = <1>;
- };
- };
-
- gswp1_led0_pins: gswp1-led0-pins {
- mux {
- function = "phy1_led0";
- pins = "gpio33";
- };
- };
-
- gswp2_led0_pins: gswp2-led0-pins {
- mux {
- function = "phy2_led0";
- pins = "gpio34";
- };
- };
-
- gswp3_led0_pins: gswp3-led0-pins {
- mux {
- function = "phy3_led0";
- pins = "gpio35";
- };
- };
-
- gswp4_led0_pins: gswp4-led0-pins {
- mux {
- function = "phy4_led0";
- pins = "gpio42";
- };
- };
-
- pwm_gpio18_idx10_pins: pwm-gpio18-idx10-pins {
- function = "pwm";
- pins = "gpio18";
- output-enable;
- };
-};
-
-&snfi {
- status = "okay";
-};
-
-
-&spi_nand {
- #address-cells = <1>;
- #size-cells = <1>;
- partitions {
- compatible = "fixed-partitions";
- #address-cells = <1>;
- #size-cells = <1>;
-
- partition@0 {
- label = "bootloader";
- reg = <0x0 0x00080000>;
- read-only;
- };
-
- partition@80000 {
- label = "env";
- reg = <0x00080000 0x00080000>;
- };
-
- partition@100000 {
- label = "ubi";
- reg = <0x00100000 0x00>;
- };
- };
-};
-
-&i2c0 {
- status = "okay";
-};
-
-&npu {
- status = "okay";
-};
-
-ð {
- status = "okay";
-};
-
-&gdm1 {
- status = "okay";
-};
-
-&gdm4 {
- status = "okay";
- phy-handle = <&phy15>;
- phy-mode = "2500base-x";
- label = "lan1";
-};
-
-&switch {
- status = "okay";
- pinctrl-names = "default";
- pinctrl-0 = <&mdio_pins>;
-
- ports {
- port@2 {
- status = "okay";
- label = "lan2";
- };
-
- port@3 {
- status = "okay";
- label = "lan3";
- };
-
- port@4 {
- status = "okay";
- label = "lan4";
- };
- };
-
- mdio {
- ethernet-phy@1 {
- status = "okay";
- pinctrl-names = "gbe-led";
- pinctrl-0 = <&gswp2_led0_pins>;
-
- leds {
- gsw-phy1-led0@0 {
- reg = <0x00>;
- function = LED_FUNCTION_LAN;
- status = "okay";
- active-low;
- };
- };
- };
-
- ethernet-phy@2 {
- status = "okay";
- pinctrl-names = "gbe-led";
- pinctrl-0 = <&gswp3_led0_pins>;
-
- leds {
- gsw-phy2-led0@0 {
- reg = <0x00>;
- function = LED_FUNCTION_LAN;
- status = "okay";
- active-low;
- };
- };
- };
-
- ethernet-phy@3 {
- status = "okay";
- pinctrl-names = "gbe-led";
- pinctrl-0 = <&gswp4_led0_pins>;
-
- leds {
- gsw-phy3-led0@0 {
- reg = <0x00>;
- function = LED_FUNCTION_LAN;
- status = "okay";
- active-low;
- };
- };
- };
-
- phy15: ethernet-phy@f {
- /* Airoha EN8811H */
- compatible = "ethernet-phy-id03a2.a411", "ethernet-phy-ieee802.3-c45";
- reg = <15>;
- phy-mode = "2500base-x";
- phandle = <0x38>;
- };
- };
-};
diff --git a/lede/target/linux/airoha/dts/an7581.dtsi b/lede/target/linux/airoha/dts/an7581.dtsi
index 32bc6b5df7..2637b24142 100644
--- a/lede/target/linux/airoha/dts/an7581.dtsi
+++ b/lede/target/linux/airoha/dts/an7581.dtsi
@@ -3,9 +3,6 @@
#include
#include
#include
-#include
-#include
-#include
#include
#include
#include
@@ -441,48 +438,6 @@
status = "disabled";
};
- pon_pcs: pcs@1fa08000 {
- compatible = "airoha,an7581-pcs-pon";
- reg = <0x0 0x1fa08000 0x0 0x1000>,
- <0x0 0x1fa80000 0x0 0x60>,
- <0x0 0x1fa80a00 0x0 0x164>,
- <0x0 0x1fa84000 0x0 0x450>,
- <0x0 0x1fa85900 0x0 0x338>,
- <0x0 0x1fa86000 0x0 0x300>,
- <0x0 0x1fa8a000 0x0 0x1000>,
- <0x0 0x1fa8b000 0x0 0x1000>;
- reg-names = "xfi_mac", "hsgmii_an", "hsgmii_pcs",
- "multi_sgmii", "usxgmii",
- "hsgmii_rate_adp", "xfi_ana", "xfi_pma";
-
- resets = <&scuclk EN7581_XPON_MAC_RST>,
- <&scuclk EN7581_XPON_PHY_RST>;
- reset-names = "mac", "phy";
-
- airoha,scu = <&scuclk>;
- };
-
- eth_pcs: pcs@1fa09000 {
- compatible = "airoha,an7581-pcs-eth";
- reg = <0x0 0x1fa09000 0x0 0x1000>,
- <0x0 0x1fa70000 0x0 0x60>,
- <0x0 0x1fa70a00 0x0 0x164>,
- <0x0 0x1fa74000 0x0 0x450>,
- <0x0 0x1fa75900 0x0 0x338>,
- <0x0 0x1fa76000 0x0 0x300>,
- <0x0 0x1fa7a000 0x0 0x1000>,
- <0x0 0x1fa7b000 0x0 0x1000>;
- reg-names = "xfi_mac", "hsgmii_an", "hsgmii_pcs",
- "multi_sgmii", "usxgmii",
- "hsgmii_rate_adp", "xfi_ana", "xfi_pma";
-
- resets = <&scuclk EN7581_XSI_MAC_RST>,
- <&scuclk EN7581_XSI_PHY_RST>;
- reset-names = "mac", "phy";
-
- airoha,scu = <&scuclk>;
- };
-
chip_scu: syscon@1fa20000 {
compatible = "airoha,en7581-chip-scu", "syscon";
reg = <0x0 0x1fa20000 0x0 0x388>;
@@ -493,8 +448,8 @@
reg = <0x0 0x1fbe3400 0x0 0xff>;
};
- scuclk: clock-controller@1fb00000 {
- compatible = "airoha,en7581-scu", "syscon";
+ scuclk: clock-controller@1fa20000 {
+ compatible = "airoha,en7581-scu";
reg = <0x0 0x1fb00000 0x0 0x970>;
#clock-cells = <1>;
#reset-cells = <1>;
@@ -506,52 +461,6 @@
interrupts = ;
};
- usb0: usb@1fab0000 {
- compatible = "mediatek,mtk-xhci";
- reg = <0x0 0x1fab0000 0x0 0x3e00>,
- <0x0 0x1fab3e00 0x0 0x100>;
- reg-names = "mac", "ippc";
- interrupts = ;
-
- phys = <&usb0_phy PHY_TYPE_USB2>, <&usb0_phy PHY_TYPE_USB3>;
-
- status = "disabled";
- };
-
- usb0_phy: phy@1fac0000 {
- compatible = "airoha,an7581-usb-phy";
- reg = <0x0 0x1fac0000 0x0 0x10000>;
-
- airoha,scu = <&scuclk>;
- airoha,usb2-monitor-clk-sel = ;
- airoha,serdes-port = ;
-
- #phy-cells = <1>;
- };
-
- usb1: usb@1fad0000 {
- compatible = "mediatek,mtk-xhci";
- reg = <0x0 0x1fad0000 0x0 0x3e00>,
- <0x0 0x1fad3e00 0x0 0x100>;
- reg-names = "mac", "ippc";
- interrupts = ;
-
- phys = <&usb1_phy PHY_TYPE_USB2>, <&usb1_phy PHY_TYPE_USB3>;
-
- status = "disabled";
- };
-
- usb1_phy: phy@1fae0000 {
- compatible = "airoha,an7581-usb-phy";
- reg = <0x0 0x1fae0000 0x0 0x10000>;
-
- airoha,scu = <&scuclk>;
- airoha,usb2-monitor-clk-sel = ;
- airoha,serdes-port = ;
-
- #phy-cells = <1>;
- };
-
crypto@1e004000 {
compatible = "inside-secure,safexcel-eip93ies";
reg = <0x0 0x1fb70000 0x0 0x1000>;
@@ -767,49 +676,6 @@
};
};
- pcie2: pcie@1fc40000 {
- compatible = "airoha,en7581-pcie";
- device_type = "pci";
- linux,pci-domain = <2>;
- #address-cells = <3>;
- #size-cells = <2>;
-
- reg = <0x0 0x1fc40000 0x0 0x1670>;
- reg-names = "pcie-mac";
-
- clocks = <&scuclk EN7523_CLK_PCIE>;
- clock-names = "sys-ck";
-
- phys = <&usb1_phy PHY_TYPE_USB3>;
- phy-names = "pcie-phy";
-
- ranges = <0x02000000 0 0x28000000 0x0 0x28000000 0 0x4000000>;
-
- resets = <&scuclk EN7581_PCIE0_RST>,
- <&scuclk EN7581_PCIE1_RST>,
- <&scuclk EN7581_PCIE2_RST>;
- reset-names = "phy-lane0", "phy-lane1", "phy-lane2";
-
- mediatek,pbus-csr = <&pbus_csr 0x10 0x14>;
-
- interrupts = ;
- bus-range = <0x00 0xff>;
- #interrupt-cells = <1>;
- interrupt-map-mask = <0 0 0 7>;
- interrupt-map = <0 0 0 1 &pcie_intc2 0>,
- <0 0 0 2 &pcie_intc2 1>,
- <0 0 0 3 &pcie_intc2 2>,
- <0 0 0 4 &pcie_intc2 3>;
-
- status = "disabled";
-
- pcie_intc2: interrupt-controller {
- interrupt-controller;
- #address-cells = <0>;
- #interrupt-cells = <1>;
- };
- };
-
npu: npu@1e900000 {
compatible = "airoha,en7581-npu";
reg = <0x0 0x1e900000 0x0 0x313000>;
@@ -887,22 +753,6 @@
pause;
};
};
-
- gdm2: ethernet@2 {
- compatible = "airoha,eth-mac";
- reg = <2>;
- pcs = <&pon_pcs>;
-
- status = "disabled";
- };
-
- gdm4: ethernet@4 {
- compatible = "airoha,eth-mac";
- reg = <4>;
- pcs = <ð_pcs>;
-
- status = "disabled";
- };
};
switch: switch@1fb58000 {
@@ -966,7 +816,7 @@
};
};
- mdio: mdio {
+ mdio {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/lede/target/linux/airoha/dts/an7583-evb-emmc.dts b/lede/target/linux/airoha/dts/an7583-evb-emmc.dts
deleted file mode 100644
index 6477832a20..0000000000
--- a/lede/target/linux/airoha/dts/an7583-evb-emmc.dts
+++ /dev/null
@@ -1,297 +0,0 @@
-// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
-/dts-v1/;
-
-#include
-#include
-#include
-#include "an7583.dtsi"
-
-/ {
- model = "Airoha AN7583 Evaluation Board";
- compatible = "airoha,an7583-evb", "airoha,an7583", "airoha,en7583";
-
- aliases {
- serial0 = &uart1;
- };
-
- chosen {
- bootargs = "console=ttyS0,115200 earlycon";
- stdout-path = "serial0:115200n8";
- };
-
- memory@80000000 {
- device_type = "memory";
- reg = <0x0 0x80000000 0x2 0x00000000>;
- };
-
- gpio-keys-polled {
- compatible = "gpio-keys-polled";
- poll-interval = <100>;
-
- btn-reset {
- label = "reset";
- linux,code = ;
- gpios = <&an7583_pinctrl 0 GPIO_ACTIVE_LOW>;
- };
- };
-
- leds {
- compatible = "gpio-leds";
-
- led-1 {
- label = "pon";
- color = ;
- function = LED_FUNCTION_STATUS;
- gpios = <&an7583_pinctrl 12 GPIO_ACTIVE_LOW>;
- };
-
- led-2 {
- label = "internet";
- color = ;
- function = LED_FUNCTION_STATUS;
- gpios = <&an7583_pinctrl 26 GPIO_ACTIVE_LOW>;
- };
-
- led-3 {
- label = "wps";
- color = ;
- function = LED_FUNCTION_STATUS;
- gpios = <&an7583_pinctrl 31 GPIO_ACTIVE_LOW>;
- };
-
- led-4 {
- label = "los";
- color = ;
- function = LED_FUNCTION_STATUS;
- gpios = <&an7583_pinctrl 27 GPIO_ACTIVE_LOW>;
- };
-
- led-5 {
- label = "voip_hook";
- color = ;
- function = LED_FUNCTION_STATUS;
- gpios = <&an7583_pinctrl 29 GPIO_ACTIVE_LOW>;
- };
- };
-};
-
-&an7583_pinctrl {
- gpio-ranges = <&an7583_pinctrl 0 2 53>;
-
- mdio0_pins: mdio0-pins {
- conf {
- pins = "mdio_0";
- output-high;
- };
- };
-
- pcie0_rst_pins: pcie0-rst-pins {
- conf {
- pins = "pcie_reset0";
- drive-open-drain = <1>;
- };
- };
-
- pcie1_rst_pins: pcie1-rst-pins {
- conf {
- pins = "pcie_reset1";
- drive-open-drain = <1>;
- };
- };
-
- gswp1_led0_pins: gswp1-led0-pins {
- mux {
- function = "phy1_led0";
- pins = "gpio1";
- };
- };
-
- gswp2_led0_pins: gswp2-led0-pins {
- mux {
- function = "phy2_led0";
- pins = "gpio2";
- };
- };
-
- gswp3_led0_pins: gswp3-led0-pins {
- mux {
- function = "phy3_led0";
- pins = "gpio3";
- };
- };
-
- gswp4_led0_pins: gswp4-led0-pins {
- mux {
- function = "phy4_led0";
- pins = "gpio4";
- };
- };
-
- mmc_pins: mmc-pins {
- mux {
- function = "emmc";
- groups = "emmc";
- };
- };
-};
-
-&mmc0 {
- pinctrl-names = "default", "state_uhs";
- pinctrl-0 = <&mmc_pins>;
- pinctrl-1 = <&mmc_pins>;
- status = "okay";
-
- #address-cells = <1>;
- #size-cells = <0>;
-
- card@0 {
- compatible = "mmc-card";
- reg = <0>;
-
- block {
- compatible = "block-device";
- partitions {
- block-partition-factory {
- partname = "art";
-
- nvmem-layout {
- compatible = "fixed-layout";
- #address-cells = <1>;
- #size-cells = <1>;
-
- eeprom_factory_0: eeprom@0 {
- reg = <0x40000 0x1e00>;
- };
-
- mac_factory_2c0000: mac@2c0000 {
- reg = <0x2c0000 0x6>;
- };
-
- pon_mac_factory_2c0006: pon_mac@2c0006 {
- reg = <0x2c0006 0x6>;
- };
-
- onu_type_factory_2e0000: onu_type@2e0000 {
- reg = <0x2e0000 0x10>;
- };
-
- board_config_factory_2e0010: board_config@2e0010 {
- reg = <0x2e0010 0x8>;
- };
- };
- };
- };
- };
- };
-};
-
-&i2c0 {
- status = "okay";
-};
-
-&i2c1 {
- status = "okay";
-};
-
-&mdio_0 {
- pinctrl-names = "default";
- pinctrl-0 = <&mdio0_pins>;
-
- en8811: ethernet-phy@f {
- reg = <0xf>;
-
- reset-gpios = <&an7583_pinctrl 28 GPIO_ACTIVE_LOW>;
- reset-assert-us = <10000>;
- reset-deassert-us = <20000>;
-
- leds {
- #address-cells = <1>;
- #size-cells = <0>;
-
- led@0 {
- reg = <0>;
- function = LED_FUNCTION_LAN;
- color = ;
- function-enumerator = <0>;
- default-state = "keep";
- };
-
- led@1 {
- reg = <1>;
- function = LED_FUNCTION_LAN;
- color = ;
- function-enumerator = <1>;
- default-state = "keep";
- };
- };
- };
-};
-
-&npu {
- status = "okay";
-};
-
-ð {
- status = "okay";
- nvmem-cells = <&mac_factory_2c0000>;
- nvmem-cell-names = "mac";
-};
-
-&gdm1 {
- status = "okay";
-};
-
-&gdm3 {
- status = "okay";
-
- phy-handle = <&en8811>;
- phy-mode = "2500base-x";
-};
-
-&switch {
- status = "okay";
-};
-
-&gsw_phy1 {
- pinctrl-names = "gbe-led";
- pinctrl-0 = <&gswp1_led0_pins>;
- status = "okay";
-};
-
-&gsw_phy1_led0 {
- status = "okay";
- active-low;
-};
-
-&gsw_phy2 {
- pinctrl-names = "gbe-led";
- pinctrl-0 = <&gswp2_led0_pins>;
- status = "okay";
-};
-
-&gsw_phy2_led0 {
- status = "okay";
- active-low;
-};
-
-&gsw_phy3 {
- pinctrl-names = "gbe-led";
- pinctrl-0 = <&gswp3_led0_pins>;
- status = "okay";
-};
-
-&gsw_phy3_led0 {
- status = "okay";
- active-low;
-};
-
-&gsw_phy4 {
- pinctrl-names = "gbe-led";
- pinctrl-0 = <&gswp4_led0_pins>;
- status = "okay";
-};
-
-&gsw_phy4_led0 {
- status = "okay";
- active-low;
-};
diff --git a/lede/target/linux/airoha/dts/an7583-evb.dts b/lede/target/linux/airoha/dts/an7583-evb.dts
deleted file mode 100644
index 95ac20e727..0000000000
--- a/lede/target/linux/airoha/dts/an7583-evb.dts
+++ /dev/null
@@ -1,226 +0,0 @@
-// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
-/dts-v1/;
-
-#include
-#include
-#include
-#include "an7583.dtsi"
-
-/ {
- model = "Airoha AN7583 Evaluation Board";
- compatible = "airoha,an7583-evb", "airoha,an7583", "airoha,en7583";
-
- aliases {
- serial0 = &uart1;
- };
-
- chosen {
- bootargs = "console=ttyS0,115200 earlycon";
- stdout-path = "serial0:115200n8";
- };
-
- memory@80000000 {
- device_type = "memory";
- reg = <0x0 0x80000000 0x2 0x00000000>;
- };
-};
-
-&an7583_pinctrl {
- gpio-ranges = <&an7583_pinctrl 0 2 53>;
-
- mdio0_pins: mdio0-pins {
- conf {
- pins = "mdio_0";
- output-high;
- };
- };
-
- pcie0_rst_pins: pcie0-rst-pins {
- conf {
- pins = "pcie_reset0";
- drive-open-drain = <1>;
- };
- };
-
- pcie1_rst_pins: pcie1-rst-pins {
- conf {
- pins = "pcie_reset1";
- drive-open-drain = <1>;
- };
- };
-
- gswp1_led0_pins: gswp1-led0-pins {
- mux {
- function = "phy1_led0";
- pins = "gpio1";
- };
- };
-};
-
-&snfi {
- status = "okay";
-};
-
-
-&spi_nand {
- partitions {
- compatible = "fixed-partitions";
- #address-cells = <1>;
- #size-cells = <1>;
-
- bl2@0 {
- label = "bl2";
- reg = <0x0 0x20000>;
- };
-
- ubi@20000 {
- label = "ubi";
- reg = <0x20000 0x0>;
- };
- };
-};
-
-&i2c0 {
- status = "okay";
-};
-
-&npu {
- status = "okay";
-};
-
-ð {
- status = "okay";
-};
-
-&gdm1 {
- status = "okay";
-};
-
-&switch {
- status = "okay";
-};
-
-&gsw_phy1 {
- pinctrl-names = "gbe-led";
- pinctrl-0 = <&gswp1_led0_pins>;
- status = "okay";
-};
-
-&gsw_phy1_led0 {
- status = "okay";
- active-low;
-};
-
-&gsw_port2 {
- status = "disabled";
-};
-
-&gsw_port3 {
- status = "disabled";
-};
-
-&gsw_port4 {
- status = "disabled";
-};
-
-&gsw_phy2 {
- status = "disabled";
-};
-
-&gsw_phy3 {
- status = "disabled";
-};
-
-&gsw_phy4 {
- status = "disabled";
-};
-
-&mdio_0 {
- pinctrl-names = "default";
- pinctrl-0 = <&mdio0_pins>;
-
- /* Present but not HW connected to GDM port */
- /*
- * as21xx_0: ethernet-phy@1d {
- * reg = <0x1d>;
- * compatible = "ethernet-phy-ieee802.3-c45";
- * status = "disabled";
- *
- * firmware-name = "as21x1x_fw.bin";
- *
- * reset-deassert-us = <350000>;
- * reset-assert-us = <200000>;
- * reset-gpios = <&an7583_pinctrl 34 GPIO_ACTIVE_LOW>;
- *
- * leds {
- * #address-cells = <1>;
- * #size-cells = <0>;
- *
- * led@0 {
- * reg = <0>;
- * color = ;
- * function = LED_FUNCTION_LAN;
- * function-enumerator = <0>;
- * default-state = "keep";
- * };
- *
- * led@1 {
- * reg = <1>;
- * color = ;
- * function = LED_FUNCTION_LAN;
- * function-enumerator = <1>;
- * default-state = "keep";
- * };
- * };
- * };
- */
-
- as21xx_1: ethernet-phy@1f {
- reg = <0x1f>;
- compatible = "ethernet-phy-ieee802.3-c45";
-
- firmware-name = "as21x1x_fw.bin";
-
- reset-deassert-us = <350000>;
- reset-assert-us = <200000>;
- reset-gpios = <&an7583_pinctrl 35 GPIO_ACTIVE_LOW>;
-
- leds {
- #address-cells = <1>;
- #size-cells = <0>;
-
- led@0 {
- reg = <0>;
- color = ;
- function = LED_FUNCTION_LAN;
- function-enumerator = <0>;
- default-state = "keep";
- };
-
- led@1 {
- reg = <1>;
- color = ;
- function = LED_FUNCTION_LAN;
- function-enumerator = <1>;
- default-state = "keep";
- };
- };
- };
-};
-
-/* GDM2 seems to be connected to PON */
-/*
- *&gdm2 {
- * status = "disabled";
- *
- * phy-handle = <&as21xx_0>;
- * phy-mode = "usxgmii";
- *};
- */
-
-&gdm3 {
- status = "okay";
-
- phy-handle = <&as21xx_1>;
- phy-mode = "usxgmii";
-};
diff --git a/lede/target/linux/airoha/dts/an7583.dtsi b/lede/target/linux/airoha/dts/an7583.dtsi
deleted file mode 100644
index 49a0616a39..0000000000
--- a/lede/target/linux/airoha/dts/an7583.dtsi
+++ /dev/null
@@ -1,844 +0,0 @@
-// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-/ {
- interrupt-parent = <&gic>;
- #address-cells = <2>;
- #size-cells = <2>;
-
- reserved-memory {
- #address-cells = <2>;
- #size-cells = <2>;
- ranges;
-
- atf@80000000 {
- no-map;
- reg = <0x0 0x80000000 0x0 0x200000>;
- };
-
- npu_binary: npu-binary@84000000 {
- no-map;
- reg = <0x0 0x84000000 0x0 0xa00000>;
- };
-
- qdma0_buf: qdma0-buf@87000000 {
- no-map;
- reg = <0x0 0x87000000 0x0 0x2000000>;
- };
-
- qdma1_buf: qdma1-buf@89000000 {
- no-map;
- reg = <0x0 0x89000000 0x0 0x1000000>;
- };
- };
-
- psci {
- compatible = "arm,psci-1.0";
- method = "smc";
- };
-
- cpus {
- #address-cells = <1>;
- #size-cells = <0>;
-
- cpu-map {
- cluster0 {
- core0 {
- cpu = <&cpu0>;
- };
-
- core1 {
- cpu = <&cpu1>;
- };
- };
- };
-
- cpu0: cpu@0 {
- device_type = "cpu";
- compatible = "arm,cortex-a53";
- reg = <0x0>;
- operating-points-v2 = <&cpu_opp_table>;
- enable-method = "psci";
- clocks = <&cpufreq>;
- clock-names = "cpu";
- power-domains = <&cpufreq>;
- power-domain-names = "perf";
- next-level-cache = <&l2>;
- #cooling-cells = <2>;
- };
-
- cpu1: cpu@1 {
- device_type = "cpu";
- compatible = "arm,cortex-a53";
- reg = <0x1>;
- operating-points-v2 = <&cpu_opp_table>;
- enable-method = "psci";
- clocks = <&cpufreq>;
- clock-names = "cpu";
- power-domains = <&cpufreq>;
- power-domain-names = "perf";
- next-level-cache = <&l2>;
- #cooling-cells = <2>;
- };
-
- l2: l2-cache {
- compatible = "cache";
- cache-size = <0x80000>;
- cache-line-size = <64>;
- cache-level = <2>;
- cache-unified;
- };
- };
-
- cpufreq: cpufreq {
- compatible = "airoha,en7581-cpufreq";
-
- operating-points-v2 = <&cpu_smcc_opp_table>;
-
- #power-domain-cells = <0>;
- #clock-cells = <0>;
- };
-
- cpu_opp_table: opp-table {
- compatible = "operating-points-v2";
- opp-shared;
-
- opp-500000000 {
- opp-hz = /bits/ 64 <500000000>;
- required-opps = <&smcc_opp0>;
- };
-
- opp-550000000 {
- opp-hz = /bits/ 64 <550000000>;
- required-opps = <&smcc_opp1>;
- };
-
- opp-600000000 {
- opp-hz = /bits/ 64 <600000000>;
- required-opps = <&smcc_opp2>;
- };
-
- opp-650000000 {
- opp-hz = /bits/ 64 <650000000>;
- required-opps = <&smcc_opp3>;
- };
-
- opp-7000000000 {
- opp-hz = /bits/ 64 <700000000>;
- required-opps = <&smcc_opp4>;
- };
-
- opp-7500000000 {
- opp-hz = /bits/ 64 <750000000>;
- required-opps = <&smcc_opp5>;
- };
-
- opp-8000000000 {
- opp-hz = /bits/ 64 <800000000>;
- required-opps = <&smcc_opp6>;
- };
-
- opp-8500000000 {
- opp-hz = /bits/ 64 <850000000>;
- required-opps = <&smcc_opp7>;
- };
-
- opp-9000000000 {
- opp-hz = /bits/ 64 <900000000>;
- required-opps = <&smcc_opp8>;
- };
-
- opp-9500000000 {
- opp-hz = /bits/ 64 <950000000>;
- required-opps = <&smcc_opp9>;
- };
-
- opp-10000000000 {
- opp-hz = /bits/ 64 <1000000000>;
- required-opps = <&smcc_opp10>;
- };
-
- opp-10500000000 {
- opp-hz = /bits/ 64 <1050000000>;
- required-opps = <&smcc_opp11>;
- };
-
- opp-11000000000 {
- opp-hz = /bits/ 64 <1100000000>;
- required-opps = <&smcc_opp12>;
- };
-
- opp-11500000000 {
- opp-hz = /bits/ 64 <1150000000>;
- required-opps = <&smcc_opp13>;
- };
-
- opp-12000000000 {
- opp-hz = /bits/ 64 <1200000000>;
- required-opps = <&smcc_opp14>;
- };
- };
-
- cpu_smcc_opp_table: opp-table-cpu-smcc {
- compatible = "operating-points-v2";
-
- smcc_opp0: opp0 {
- opp-level = <0>;
- };
-
- smcc_opp1: opp1 {
- opp-level = <1>;
- };
-
- smcc_opp2: opp2 {
- opp-level = <2>;
- };
-
- smcc_opp3: opp3 {
- opp-level = <3>;
- };
-
- smcc_opp4: opp4 {
- opp-level = <4>;
- };
-
- smcc_opp5: opp5 {
- opp-level = <5>;
- };
-
- smcc_opp6: opp6 {
- opp-level = <6>;
- };
-
- smcc_opp7: opp7 {
- opp-level = <7>;
- };
-
- smcc_opp8: opp8 {
- opp-level = <8>;
- };
-
- smcc_opp9: opp9 {
- opp-level = <9>;
- };
-
- smcc_opp10: opp10 {
- opp-level = <10>;
- };
-
- smcc_opp11: opp11 {
- opp-level = <11>;
- };
-
- smcc_opp12: opp12 {
- opp-level = <12>;
- };
-
- smcc_opp13: opp13 {
- opp-level = <13>;
- };
-
- smcc_opp14: opp14 {
- opp-level = <14>;
- };
- };
-
- timer {
- compatible = "arm,armv8-timer";
- interrupt-parent = <&gic>;
- interrupts = ,
- ,
- ,
- ;
- };
-
- thermal-zones {
- cpu_thermal: cpu-thermal {
- polling-delay-passive = <10000>;
- polling-delay = <5000>;
-
- thermal-sensors = <&thermal 0>;
-
- trips {
- cpu_hot: cpu-hot {
- temperature = <95000>;
- hysteresis = <1000>;
- type = "hot";
- };
-
- cpu-critical {
- temperature = <110000>;
- hysteresis = <1000>;
- type = "critical";
- };
- };
-
- cooling-maps {
- map0 {
- trip = <&cpu_hot>;
- cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
- <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
- };
- };
- };
- };
-
- clk25m: oscillator {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-frequency = <25000000>;
- clock-output-names = "clkxtal";
- };
-
- sys_hclk: clk-oscillator-100mhz {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-frequency = <100000000>;
- clock-output-names = "sys_hclk";
- };
-
- vmmc_3v3: regulator-vmmc-3v3 {
- compatible = "regulator-fixed";
- regulator-name = "vmmc";
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- regulator-always-on;
- };
-
- sfp1: sfp1 {
- compatible = "sff,sfp";
- };
-
- sfp2: sfp2 {
- compatible = "sff,sfp";
- };
-
- soc {
- compatible = "simple-bus";
- #address-cells = <2>;
- #size-cells = <2>;
- ranges;
-
- gic: interrupt-controller@9000000 {
- compatible = "arm,gic-v3";
- interrupt-controller;
- #interrupt-cells = <3>;
- #address-cells = <1>;
- #size-cells = <1>;
- reg = <0x0 0x09000000 0x0 0x20000>,
- <0x0 0x09080000 0x0 0x80000>,
- <0x0 0x09400000 0x0 0x2000>,
- <0x0 0x09500000 0x0 0x2000>,
- <0x0 0x09600000 0x0 0x20000>;
- interrupts = ;
- };
-
- chip_scu: syscon@1fa20000 {
- compatible = "airoha,en7581-chip-scu", "syscon", "simple-mfd";
- reg = <0x0 0x1fa20000 0x0 0x388>;
-
- thermal: thermal {
- compatible = "airoha,an7583-thermal";
-
- #thermal-sensor-cells = <0>;
- };
- };
-
- pbus_csr: syscon@1fbe3400 {
- compatible = "airoha,en7581-pbus-csr", "syscon";
- reg = <0x0 0x1fbe3400 0x0 0xff>;
- };
-
- scuclk: system-controller@1fa20000 {
- compatible = "airoha,an7583-scu", "syscon";
- reg = <0x0 0x1fb00000 0x0 0x970>;
-
- #address-cells = <1>;
- #size-cells = <0>;
-
- #clock-cells = <1>;
- #reset-cells = <1>;
-
- airoha,chip-scu = <&chip_scu>;
-
- mdio_0: mdio-bus@c8 {
- compatible = "airoha,an7583-mdio";
- reg = <0xc8>;
-
- clocks = <&scuclk AN7583_CLK_MDIO0>;
- resets = <&scuclk AN7583_MDIO0>;
- };
-
- mdio_1: mdio-bus@cc {
- compatible = "airoha,an7583-mdio";
- reg = <0xcc>;
-
- clocks = <&scuclk AN7583_CLK_MDIO1>;
- resets = <&scuclk AN7583_MDIO1>;
- };
- };
-
- system-controller@1fbf0200 {
- compatible = "syscon", "simple-mfd";
- reg = <0x0 0x1fbf0200 0x0 0xc0>;
-
- an7583_pinctrl: pinctrl {
- compatible = "airoha,an7583-pinctrl";
-
- interrupt-parent = <&gic>;
- interrupts = ;
-
- gpio-controller;
- #gpio-cells = <2>;
-
- interrupt-controller;
- #interrupt-cells = <2>;
- };
- };
-
- i2cclock: i2cclock@0 {
- #clock-cells = <0>;
- compatible = "fixed-clock";
-
- /* 20 MHz */
- clock-frequency = <20000000>;
- };
-
- i2c0: i2c0@1fbf8000 {
- compatible = "airoha,an7581-i2c";
- reg = <0x0 0x1fbf8000 0x0 0x100>;
-
- clocks = <&i2cclock>;
-
- /* 100 kHz */
- clock-frequency = <100000>;
- #address-cells = <1>;
- #size-cells = <0>;
-
- status = "disable";
- };
-
- i2c1: i2c1@1fbf8100 {
- compatible = "airoha,an7581-i2c";
- reg = <0x0 0x1fbf8100 0x0 0x100>;
-
- clocks = <&i2cclock>;
-
- /* 100 kHz */
- clock-frequency = <100000>;
- #address-cells = <1>;
- #size-cells = <0>;
-
- status = "disable";
- };
-
- mmc0: mmc@1fa0e000 {
- compatible = "mediatek,mt7622-mmc";
- reg = <0x0 0x1fa0e000 0x0 0x1000>,
- <0x0 0x1fa0c000 0x0 0x60>;
- interrupts = ;
- clocks = <&scuclk EN7581_CLK_EMMC>, <&clk25m>;
- clock-names = "source", "hclk";
- bus-width = <4>;
- max-frequency = <52000000>;
- vmmc-supply = <&vmmc_3v3>;
- disable-wp;
- cap-mmc-highspeed;
- non-removable;
-
- status = "disabled";
- };
-
- snfi: spi@1fa10000 {
- compatible = "airoha,en7581-snand";
- reg = <0x0 0x1fa10000 0x0 0x140>,
- <0x0 0x1fa11000 0x0 0x160>;
-
- clocks = <&scuclk EN7523_CLK_SPI>;
- clock-names = "spi";
-
- #address-cells = <1>;
- #size-cells = <0>;
-
- status = "disabled";
-
- spi_nand: nand@0 {
- compatible = "spi-nand";
- reg = <0>;
- spi-max-frequency = <50000000>;
- spi-tx-bus-width = <1>;
- spi-rx-bus-width = <2>;
- };
- };
-
- uart1: serial@1fbf0000 {
- compatible = "ns16550";
- reg = <0x0 0x1fbf0000 0x0 0x30>;
- reg-io-width = <4>;
- reg-shift = <2>;
- interrupts = ;
- clock-frequency = <1843200>;
- };
-
- watchdog@1fbf0100 {
- compatible = "airoha,en7581-wdt";
- reg = <0x0 0x1fbf0100 0x0 0x38>;
-
- clocks = <&sys_hclk>;
- clock-names = "bus";
- };
-
- uart2: serial@1fbf0300 {
- compatible = "airoha,en7523-uart";
- reg = <0x0 0x1fbf0300 0x0 0x30>;
- reg-io-width = <4>;
- reg-shift = <2>;
- interrupts = ;
- clock-frequency = <7372800>;
-
- status = "disabled";
- };
-
- hsuart3: serial@1fbe1000 {
- compatible = "airoha,en7523-uart";
- reg = <0x0 0x1fbe1000 0x0 0x40>;
- reg-io-width = <4>;
- reg-shift = <2>;
- interrupts = ;
- clock-frequency = <7372800>;
-
- status = "disabled";
- };
-
- uart4: serial@1fbf0600 {
- compatible = "airoha,en7523-uart";
- reg = <0x0 0x1fbf0600 0x0 0x30>;
- reg-io-width = <4>;
- reg-shift = <2>;
- interrupts = ;
- clock-frequency = <7372800>;
-
- status = "disabled";
- };
-
- uart5: serial@1fbf0700 {
- compatible = "airoha,en7523-uart";
- reg = <0x0 0x1fbf0700 0x0 0x30>;
- reg-io-width = <4>;
- reg-shift = <2>;
- interrupts = ;
- clock-frequency = <7372800>;
-
- status = "disabled";
- };
-
- crypto@1e004000 {
- compatible = "inside-secure,safexcel-eip93ies";
- reg = <0x0 0x1fb70000 0x0 0x1000>;
-
- interrupts = ;
- };
-
- npu: npu@1e900000 {
- compatible = "airoha,an7583-npu";
- reg = <0x0 0x1e900000 0x0 0x313000>;
- interrupts = ,
- ,
- ,
- ,
- ,
- ,
- ,
- ,
- ,
- ,
- ,
- ,
- ,
- ,
- ;
- memory-region = <&npu_binary>;
- memory-region-names = "binary";
-
- status = "disabled";
- };
-
- pon_pcs: pcs@1fa08000 {
- compatible = "airoha,an7583-pcs-pon";
- reg = <0x0 0x1fa08000 0x0 0x1000>,
- <0x0 0x1fa80000 0x0 0x60>,
- <0x0 0x1fa80a00 0x0 0x164>,
- <0x0 0x1fa84000 0x0 0x450>,
- <0x0 0x1fa85900 0x0 0x338>,
- <0x0 0x1fa86000 0x0 0x300>,
- <0x0 0x1fa8f000 0x0 0x1000>,
- <0x0 0x1fa8e000 0x0 0x1000>;
- reg-names = "xfi_mac", "hsgmii_an", "hsgmii_pcs",
- "multi_sgmii", "usxgmii",
- "hsgmii_rate_adp", "xfi_ana", "xfi_pma";
-
- resets = <&scuclk AN7583_XPON_MAC_RST>,
- <&scuclk AN7583_XPON_PHY_RST>,
- <&scuclk AN7583_XPON_XFI_RST>;
- reset-names = "mac", "phy", "xfi";
-
- airoha,scu = <&scuclk>;
- };
-
- eth_pcs: pcs@1fa09000 {
- compatible = "airoha,an7583-pcs-eth";
- reg = <0x0 0x1fa09000 0x0 0x1000>,
- <0x0 0x1fa70000 0x0 0x60>,
- <0x0 0x1fa70a00 0x0 0x164>,
- <0x0 0x1fa74000 0x0 0x450>,
- <0x0 0x1fa75900 0x0 0x338>,
- <0x0 0x1fa76000 0x0 0x300>,
- <0x0 0x1fa7f000 0x0 0x1000>,
- <0x0 0x1fa7e000 0x0 0x1000>;
- reg-names = "xfi_mac", "hsgmii_an", "hsgmii_pcs",
- "multi_sgmii", "usxgmii",
- "hsgmii_rate_adp", "xfi_ana", "xfi_pma";
-
- resets = <&scuclk AN7583_XSI_MAC_RST>,
- <&scuclk AN7583_XSI_PHY_RST>;
- reset-names = "mac", "phy";
-
- airoha,scu = <&scuclk>;
- };
-
- eth: ethernet@1fb50000 {
- compatible = "airoha,an7583-eth";
- reg = <0 0x1fb50000 0 0x2600>,
- <0 0x1fb54000 0 0x2000>,
- <0 0x1fb56000 0 0x2000>;
- reg-names = "fe", "qdma0", "qdma1";
-
- resets = <&scuclk AN7583_FE_RST>,
- <&scuclk AN7583_FE_PDMA_RST>,
- <&scuclk AN7583_FE_QDMA_RST>,
- <&scuclk AN7583_DUAL_HSI0_MAC_RST>,
- <&scuclk AN7583_DUAL_HSI1_MAC_RST>,
- <&scuclk AN7583_XFP_MAC_RST>;
- reset-names = "fe", "pdma", "qdma",
- "hsi0-mac", "hsi1-mac",
- "xfp-mac";
-
- interrupts = ,
- ,
- ,
- ,
- ,
- ,
- ,
- ,
- ,
- ;
-
- memory-region = <&qdma0_buf>, <&qdma1_buf>;
- memory-region-names = "qdma0-buf", "qdma1-buf";
-
- airoha,npu = <&npu>;
-
- status = "disabled";
-
- #address-cells = <1>;
- #size-cells = <0>;
-
- gdm1: ethernet@1 {
- compatible = "airoha,eth-mac";
- reg = <1>;
- phy-mode = "internal";
- status = "disabled";
-
- fixed-link {
- speed = <10000>;
- full-duplex;
- pause;
- };
- };
-
- gdm2: ethernet@2 {
- compatible = "airoha,eth-mac";
- reg = <2>;
- pcs = <&pon_pcs>;
-
- status = "disabled";
- };
-
- gdm3: ethernet@3 {
- compatible = "airoha,eth-mac";
- reg = <3>;
- pcs = <ð_pcs>;
- airoha,gdm-srcport = <0x16>;
-
- status = "disabled";
- };
- };
-
- switch: switch@1fb58000 {
- compatible = "airoha,an7583-switch";
- reg = <0 0x1fb58000 0 0x8000>;
- resets = <&scuclk AN7583_GSW_RST>;
-
- interrupt-controller;
- #interrupt-cells = <1>;
- interrupt-parent = <&gic>;
- interrupts = ;
-
- status = "disabled";
-
- #address-cells = <1>;
- #size-cells = <1>;
-
- ports {
- #address-cells = <1>;
- #size-cells = <0>;
-
- gsw_port1: port@1 {
- reg = <1>;
- label = "lan1";
- phy-mode = "internal";
- phy-handle = <&gsw_phy1>;
- };
-
- gsw_port2: port@2 {
- reg = <2>;
- label = "lan2";
- phy-mode = "internal";
- phy-handle = <&gsw_phy2>;
- };
-
- gsw_port3: port@3 {
- reg = <3>;
- label = "lan3";
- phy-mode = "internal";
- phy-handle = <&gsw_phy3>;
- };
-
- gsw_port4: port@4 {
- reg = <4>;
- label = "lan4";
- phy-mode = "internal";
- phy-handle = <&gsw_phy4>;
- };
-
- port@6 {
- reg = <6>;
- label = "cpu";
- ethernet = <&gdm1>;
- phy-mode = "internal";
-
- fixed-link {
- speed = <10000>;
- full-duplex;
- pause;
- };
- };
- };
-
- mdio: mdio {
- #address-cells = <1>;
- #size-cells = <0>;
-
- gsw_phy1: ethernet-phy@1 {
- compatible = "ethernet-phy-ieee802.3-c22";
- reg = <9>;
- phy-mode = "internal";
-
- leds {
- #address-cells = <1>;
- #size-cells = <0>;
-
- gsw_phy1_led0: gsw-phy1-led0@0 {
- reg = <0>;
- function = "phy1_led0";
- status = "disabled";
- };
-
- gsw_phy1_led1: gsw-phy1-led1@1 {
- reg = <1>;
- function = "phy1_led1";
- status = "disabled";
- };
- };
- };
-
- gsw_phy2: ethernet-phy@2 {
- compatible = "ethernet-phy-ieee802.3-c22";
- reg = <10>;
- phy-mode = "internal";
-
- leds {
- #address-cells = <1>;
- #size-cells = <0>;
-
- gsw_phy2_led0: gsw-phy2-led0@0 {
- reg = <0>;
- function = "phy2_led0";
- status = "disabled";
- };
-
- gsw_phy2_led1: gsw-phy2-led1@1 {
- reg = <1>;
- function = "phy1_led1";
- status = "disabled";
- };
- };
- };
-
- gsw_phy3: ethernet-phy@3 {
- compatible = "ethernet-phy-ieee802.3-c22";
- reg = <11>;
- phy-mode = "internal";
-
- leds {
- #address-cells = <1>;
- #size-cells = <0>;
-
- gsw_phy3_led0: gsw-phy3-led0@0 {
- reg = <0>;
- function = LED_FUNCTION_LAN;
- status = "disabled";
- };
-
- gsw_phy3_led1: gsw-phy3-led1@1 {
- reg = <1>;
- function = LED_FUNCTION_LAN;
- status = "disabled";
- };
- };
- };
-
- gsw_phy4: ethernet-phy@4 {
- compatible = "ethernet-phy-ieee802.3-c22";
- reg = <12>;
- phy-mode = "internal";
-
- leds {
- #address-cells = <1>;
- #size-cells = <0>;
-
- gsw_phy4_led0: gsw-phy4-led0@0 {
- reg = <0>;
- function = LED_FUNCTION_LAN;
- status = "disabled";
- };
-
- gsw_phy4_led1: gsw-phy4-led1@1 {
- reg = <1>;
- function = LED_FUNCTION_LAN;
- status = "disabled";
- };
- };
- };
- };
- };
- };
-};
diff --git a/lede/target/linux/airoha/dts/en7523.dtsi b/lede/target/linux/airoha/dts/en7523.dtsi
index c58cc7f467..024a89752a 100644
--- a/lede/target/linux/airoha/dts/en7523.dtsi
+++ b/lede/target/linux/airoha/dts/en7523.dtsi
@@ -4,7 +4,6 @@
#include
#include
#include
-#include
/ {
interrupt-parent = <&gic>;
@@ -90,7 +89,6 @@
reg = <0x1fa20000 0x400>,
<0x1fb00000 0x1000>;
#clock-cells = <1>;
- #reset-cells = <1>;
};
gic: interrupt-controller@9000000 {
@@ -205,22 +203,17 @@
};
spi_ctrl: spi_controller@1fa10000 {
- compatible = "airoha,en7523-snand";
- reg = <0x1fa10000 0x140>,
- <0x1fa11000 0x160>;
-
- clocks = <&scu EN7523_CLK_SPI>;
- clock-names = "spi";
-
+ compatible = "airoha,en7523-spi";
+ reg = <0x1fa10000 0x140>;
#address-cells = <1>;
#size-cells = <0>;
+ spi-rx-bus-width = <2>;
+ spi-tx-bus-width = <2>;
nand: nand@0 {
compatible = "spi-nand";
reg = <0>;
- spi-max-frequency = <50000000>;
- spi-tx-bus-width = <1>;
- spi-rx-bus-width = <2>;
+ nand-ecc-engine = <&nand>;
};
};
};
diff --git a/lede/target/linux/airoha/en7523/config-6.12 b/lede/target/linux/airoha/en7523/config-6.12
deleted file mode 100644
index f3d4effeda..0000000000
--- a/lede/target/linux/airoha/en7523/config-6.12
+++ /dev/null
@@ -1,402 +0,0 @@
-CONFIG_64BIT=y
-CONFIG_AIROHA_CPU_PM_DOMAIN=y
-CONFIG_AIROHA_SCU_SSR=y
-CONFIG_AIROHA_THERMAL=y
-CONFIG_AIROHA_WATCHDOG=y
-CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
-CONFIG_ARCH_AIROHA=y
-CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS=y
-CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y
-CONFIG_ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG=y
-CONFIG_ARCH_DMA_ADDR_T_64BIT=y
-CONFIG_ARCH_FORCE_MAX_ORDER=10
-CONFIG_ARCH_KEEP_MEMBLOCK=y
-CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
-CONFIG_ARCH_MMAP_RND_BITS=18
-CONFIG_ARCH_MMAP_RND_BITS_MAX=24
-CONFIG_ARCH_MMAP_RND_BITS_MIN=18
-CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
-CONFIG_ARCH_PROC_KCORE_TEXT=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_STACKWALK=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ARCH_WANTS_NO_INSTR=y
-CONFIG_ARCH_WANTS_THP_SWAP=y
-CONFIG_ARM64=y
-CONFIG_ARM64_4K_PAGES=y
-CONFIG_ARM64_ERRATUM_843419=y
-CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y
-CONFIG_ARM64_PA_BITS=48
-CONFIG_ARM64_PA_BITS_48=y
-CONFIG_ARM64_PLATFORM_DEVICES=y
-CONFIG_ARM64_TAGGED_ADDR_ABI=y
-CONFIG_ARM64_VA_BITS=39
-CONFIG_ARM64_VA_BITS_39=y
-# CONFIG_ARM64_VA_BITS_48 is not set
-# CONFIG_ARM64_VA_BITS_52 is not set
-CONFIG_ARM_AIROHA_SOC_CPUFREQ=y
-CONFIG_ARM_AMBA=y
-CONFIG_ARM_ARCH_TIMER=y
-CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
-# CONFIG_ARM_DEBUG_WX is not set
-CONFIG_ARM_GIC=y
-CONFIG_ARM_GIC_V2M=y
-CONFIG_ARM_GIC_V3=y
-CONFIG_ARM_GIC_V3_ITS=y
-CONFIG_ARM_PMU=y
-CONFIG_ARM_PMUV3=y
-CONFIG_ARM_PSCI_FW=y
-CONFIG_ARM_SMCCC_SOC_ID=y
-# CONFIG_ARM_SMMU is not set
-# CONFIG_ARM_SMMU_V3 is not set
-CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
-CONFIG_BLK_MQ_PCI=y
-CONFIG_BLK_PM=y
-CONFIG_BUFFER_HEAD=y
-CONFIG_BUILTIN_RETURN_ADDRESS_STRIPS_PAC=y
-CONFIG_CC_HAVE_SHADOW_CALL_STACK=y
-CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
-CONFIG_CLONE_BACKWARDS=y
-CONFIG_COMMON_CLK=y
-CONFIG_COMMON_CLK_EN7523=y
-CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
-# CONFIG_COMPAT_32BIT_TIME is not set
-# CONFIG_COMPRESSED_INSTALL is not set
-CONFIG_CONTEXT_TRACKING=y
-CONFIG_CONTEXT_TRACKING_IDLE=y
-CONFIG_CPUFREQ_DT=y
-CONFIG_CPUFREQ_DT_PLATDEV=y
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-CONFIG_CPU_FREQ_GOV_ATTR_SET=y
-CONFIG_CPU_FREQ_GOV_COMMON=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_LITTLE_ENDIAN=y
-CONFIG_CPU_RMAP=y
-CONFIG_CRC16=y
-CONFIG_CRC_CCITT=y
-CONFIG_CRYPTO_CRC32C=y
-CONFIG_CRYPTO_DEFLATE=y
-CONFIG_CRYPTO_DEV_EIP93=y
-CONFIG_CRYPTO_DRBG=y
-CONFIG_CRYPTO_DRBG_HMAC=y
-CONFIG_CRYPTO_DRBG_MENU=y
-CONFIG_CRYPTO_ECB=y
-CONFIG_CRYPTO_HASH_INFO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_JITTERENTROPY=y
-CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=64
-CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=32
-CONFIG_CRYPTO_JITTERENTROPY_OSR=1
-CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
-CONFIG_CRYPTO_LIB_GF128MUL=y
-CONFIG_CRYPTO_LIB_SHA1=y
-CONFIG_CRYPTO_LIB_SHA256=y
-CONFIG_CRYPTO_LIB_UTILS=y
-CONFIG_CRYPTO_LZO=y
-CONFIG_CRYPTO_RNG=y
-CONFIG_CRYPTO_RNG2=y
-CONFIG_CRYPTO_RNG_DEFAULT=y
-CONFIG_CRYPTO_SHA256=y
-CONFIG_CRYPTO_SHA3=y
-CONFIG_CRYPTO_SHA512=y
-CONFIG_CRYPTO_ZSTD=y
-CONFIG_DCACHE_WORD_ACCESS=y
-CONFIG_DEBUG_MISC=y
-CONFIG_DMADEVICES=y
-CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC=y
-CONFIG_DMA_DIRECT_REMAP=y
-CONFIG_DMA_ENGINE=y
-CONFIG_DMA_NEED_SYNC=y
-CONFIG_DMA_OF=y
-CONFIG_DMA_OPS_HELPERS=y
-CONFIG_DTC=y
-CONFIG_EDAC_SUPPORT=y
-CONFIG_EXT4_FS=y
-CONFIG_FIXED_PHY=y
-CONFIG_FIX_EARLYCON_MEM=y
-CONFIG_FRAME_POINTER=y
-CONFIG_FS_IOMAP=y
-CONFIG_FS_MBCACHE=y
-CONFIG_FUNCTION_ALIGNMENT=4
-CONFIG_FUNCTION_ALIGNMENT_4B=y
-CONFIG_FWNODE_MDIO=y
-CONFIG_FW_CACHE=y
-# CONFIG_FW_LOADER_USER_HELPER is not set
-CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y
-CONFIG_GENERIC_ALLOCATOR=y
-CONFIG_GENERIC_ARCH_TOPOLOGY=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
-CONFIG_GENERIC_CPU_AUTOPROBE=y
-CONFIG_GENERIC_CPU_DEVICES=y
-CONFIG_GENERIC_CPU_VULNERABILITIES=y
-CONFIG_GENERIC_CSUM=y
-CONFIG_GENERIC_EARLY_IOREMAP=y
-CONFIG_GENERIC_GETTIMEOFDAY=y
-CONFIG_GENERIC_IDLE_POLL_SETUP=y
-CONFIG_GENERIC_IOREMAP=y
-CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
-CONFIG_GENERIC_IRQ_SHOW=y
-CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
-CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y
-CONFIG_GENERIC_MSI_IRQ=y
-CONFIG_GENERIC_PCI_IOMAP=y
-CONFIG_GENERIC_PHY=y
-CONFIG_GENERIC_PINCONF=y
-CONFIG_GENERIC_PINCTRL_GROUPS=y
-CONFIG_GENERIC_PINMUX_FUNCTIONS=y
-CONFIG_GENERIC_SCHED_CLOCK=y
-CONFIG_GENERIC_SMP_IDLE_THREAD=y
-CONFIG_GENERIC_STRNCPY_FROM_USER=y
-CONFIG_GENERIC_STRNLEN_USER=y
-CONFIG_GENERIC_TIME_VSYSCALL=y
-CONFIG_GLOB=y
-CONFIG_GPIOLIB_IRQCHIP=y
-CONFIG_GPIO_CDEV=y
-CONFIG_GPIO_EN7523=y
-CONFIG_GPIO_GENERIC=y
-CONFIG_GRO_CELLS=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_IOPORT_MAP=y
-CONFIG_HOTPLUG_CORE_SYNC=y
-CONFIG_HOTPLUG_CORE_SYNC_DEAD=y
-CONFIG_HOTPLUG_CPU=y
-CONFIG_HW_RANDOM=y
-CONFIG_HW_RANDOM_AIROHA=y
-# CONFIG_HISILICON_ERRATUM_162100801 is not set
-# CONFIG_IDPF is not set
-CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
-CONFIG_INET_AH=y
-CONFIG_INET_ESP=y
-# CONFIG_INET_ESP_OFFLOAD is not set
-CONFIG_INET_IPCOMP=y
-CONFIG_INET_TUNNEL=y
-CONFIG_INET_XFRM_TUNNEL=y
-CONFIG_IO_URING=y
-CONFIG_IPC_NS=y
-CONFIG_IPV6=y
-CONFIG_IPV6_MULTIPLE_TABLES=y
-# CONFIG_IPV6_SUBTREES is not set
-CONFIG_IP_MROUTE=y
-CONFIG_IP_MROUTE_COMMON=y
-# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_IP_ROUTE_MULTIPATH is not set
-# CONFIG_IP_ROUTE_VERBOSE is not set
-CONFIG_IRQCHIP=y
-CONFIG_IRQ_DOMAIN=y
-CONFIG_IRQ_DOMAIN_HIERARCHY=y
-CONFIG_IRQ_FORCED_THREADING=y
-CONFIG_IRQ_MSI_LIB=y
-CONFIG_IRQ_WORK=y
-CONFIG_JBD2=y
-CONFIG_LIBFDT=y
-CONFIG_LOCK_DEBUGGING_SUPPORT=y
-CONFIG_LOCK_SPIN_ON_OWNER=y
-CONFIG_LRU_GEN_WALKS_MMU=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_MDIO_BUS=y
-CONFIG_MDIO_DEVICE=y
-CONFIG_MDIO_AIROHA=y
-CONFIG_MDIO_DEVRES=y
-# CONFIG_MEDIATEK_GE_SOC_PHY is not set
-# CONFIG_MEMCG is not set
-CONFIG_MFD_SYSCON=y
-CONFIG_MIGRATION=y
-CONFIG_MMC=y
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_CQHCI=y
-CONFIG_MMC_MTK=y
-CONFIG_MMU_LAZY_TLB_REFCOUNT=y
-CONFIG_MODULES_TREE_LOOKUP=y
-CONFIG_MODULES_USE_ELF_RELA=y
-CONFIG_MTD_NAND_CORE=y
-CONFIG_MTD_NAND_ECC=y
-CONFIG_MTD_NAND_MTK_BMT=y
-CONFIG_MTD_RAW_NAND=y
-CONFIG_MTD_SPI_NAND=y
-CONFIG_MTD_SPLIT_FIRMWARE=y
-CONFIG_MTD_SPLIT_FIT_FW=y
-CONFIG_MTD_UBI=y
-CONFIG_MTD_UBI_BEB_LIMIT=20
-CONFIG_MTD_UBI_BLOCK=y
-CONFIG_MTD_UBI_WL_THRESHOLD=4096
-CONFIG_MUTEX_SPIN_ON_OWNER=y
-CONFIG_NEED_DMA_MAP_STATE=y
-CONFIG_NEED_SG_DMA_LENGTH=y
-CONFIG_NET_AIROHA=y
-CONFIG_NET_AIROHA_FLOW_STATS=y
-CONFIG_NET_AIROHA_NPU=y
-CONFIG_NET_DEVLINK=y
-CONFIG_NET_DSA=y
-CONFIG_NET_DSA_MT7530=y
-CONFIG_NET_DSA_MT7530_MDIO=y
-CONFIG_NET_DSA_MT7530_MMIO=y
-CONFIG_NET_DSA_TAG_MTK=y
-CONFIG_NET_FLOW_LIMIT=y
-# CONFIG_NET_MEDIATEK_SOC is not set
-CONFIG_NET_SELFTESTS=y
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_NET_VENDOR_AIROHA=y
-# CONFIG_NET_VENDOR_MEDIATEK is not set
-CONFIG_NLS=y
-CONFIG_NO_HZ_COMMON=y
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NR_CPUS=4
-CONFIG_NVMEM=y
-CONFIG_NVMEM_BLOCK=y
-CONFIG_NVMEM_LAYOUTS=y
-CONFIG_NVMEM_LAYOUT_ASCII_ENV=y
-CONFIG_NVMEM_SYSFS=y
-CONFIG_OF=y
-CONFIG_OF_ADDRESS=y
-CONFIG_OF_EARLY_FLATTREE=y
-CONFIG_OF_FLATTREE=y
-CONFIG_OF_GPIO=y
-CONFIG_OF_IRQ=y
-CONFIG_OF_KOBJ=y
-CONFIG_OF_MDIO=y
-CONFIG_PAGE_POOL=y
-CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
-CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
-CONFIG_PARTITION_PERCPU=y
-CONFIG_PCI=y
-CONFIG_PCIEAER=y
-CONFIG_PCIEASPM=y
-# CONFIG_PCIEASPM_DEFAULT is not set
-CONFIG_PCIEASPM_PERFORMANCE=y
-# CONFIG_PCIEASPM_POWERSAVE is not set
-# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
-CONFIG_PCIEPORTBUS=y
-CONFIG_PCIE_MEDIATEK=y
-CONFIG_PCIE_MEDIATEK_GEN3=y
-CONFIG_PCIE_PME=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PCI_DOMAINS_GENERIC=y
-CONFIG_PCI_MSI=y
-# CONFIG_PCS_AIROHA_AN7581 is not set
-CONFIG_PCS_AIROHA_AN7583=y
-CONFIG_PERF_EVENTS=y
-CONFIG_PER_VMA_LOCK=y
-CONFIG_PGTABLE_LEVELS=3
-CONFIG_PHYLIB=y
-CONFIG_PHYLIB_LEDS=y
-CONFIG_PHYLINK=y
-CONFIG_PHYS_ADDR_T_64BIT=y
-CONFIG_PHY_AIROHA_PCIE=y
-# CONFIG_PHY_AIROHA_USB is not set
-CONFIG_PINCTRL=y
-CONFIG_PINCTRL_AIROHA=y
-# CONFIG_PINCTRL_MT2712 is not set
-# CONFIG_PINCTRL_MT6765 is not set
-# CONFIG_PINCTRL_MT6795 is not set
-# CONFIG_PINCTRL_MT6797 is not set
-# CONFIG_PINCTRL_MT7622 is not set
-# CONFIG_PINCTRL_MT7981 is not set
-# CONFIG_PINCTRL_MT7986 is not set
-# CONFIG_PINCTRL_MT8173 is not set
-# CONFIG_PINCTRL_MT8183 is not set
-# CONFIG_PINCTRL_MT8186 is not set
-# CONFIG_PINCTRL_MT8188 is not set
-# CONFIG_PINCTRL_MT8516 is not set
-CONFIG_PM=y
-CONFIG_PM_CLK=y
-CONFIG_PM_OPP=y
-CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
-CONFIG_POWER_RESET=y
-CONFIG_POWER_RESET_SYSCON=y
-CONFIG_POWER_SUPPLY=y
-CONFIG_PTP_1588_CLOCK_OPTIONAL=y
-CONFIG_QUEUED_RWLOCKS=y
-CONFIG_QUEUED_SPINLOCKS=y
-CONFIG_RANDSTRUCT_NONE=y
-CONFIG_RAS=y
-CONFIG_RATIONAL=y
-CONFIG_REGMAP=y
-CONFIG_REGMAP_MMIO=y
-CONFIG_REGULATOR=y
-CONFIG_REGULATOR_FIXED_VOLTAGE=y
-CONFIG_RELOCATABLE=y
-CONFIG_RESET_CONTROLLER=y
-CONFIG_RFS_ACCEL=y
-CONFIG_RODATA_FULL_DEFAULT_ENABLED=y
-CONFIG_RPS=y
-CONFIG_RWSEM_SPIN_ON_OWNER=y
-CONFIG_SERIAL_8250_AIROHA=y
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_FSL=y
-CONFIG_SERIAL_8250_NR_UARTS=5
-CONFIG_SERIAL_8250_RUNTIME_UARTS=5
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_MCTRL_GPIO=y
-CONFIG_SERIAL_OF_PLATFORM=y
-CONFIG_SGL_ALLOC=y
-CONFIG_SKB_EXTENSIONS=y
-CONFIG_SMP=y
-CONFIG_SOCK_RX_QUEUE_MAPPING=y
-CONFIG_SOC_BUS=y
-CONFIG_SOFTIRQ_ON_OWN_STACK=y
-CONFIG_SPARSEMEM=y
-CONFIG_SPARSEMEM_EXTREME=y
-CONFIG_SPARSEMEM_VMEMMAP=y
-CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
-CONFIG_SPARSE_IRQ=y
-CONFIG_SPI=y
-# CONFIG_SPI_AIROHA_EN7523 is not set
-CONFIG_SPI_AIROHA_SNFI=y
-CONFIG_SPI_MASTER=y
-CONFIG_SPI_MEM=y
-CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
-CONFIG_SWIOTLB=y
-CONFIG_SWPHY=y
-CONFIG_SYSCTL_EXCEPTION_TRACE=y
-# CONFIG_TEST_FPU is not set
-CONFIG_THERMAL=y
-CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
-CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
-CONFIG_THERMAL_GOV_STEP_WISE=y
-CONFIG_THERMAL_OF=y
-CONFIG_THREAD_INFO_IN_TASK=y
-CONFIG_TICK_CPU_ACCOUNTING=y
-CONFIG_TIMER_OF=y
-CONFIG_TIMER_PROBE=y
-CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
-CONFIG_TREE_RCU=y
-CONFIG_TREE_SRCU=y
-CONFIG_UBIFS_FS=y
-# CONFIG_UNMAP_KERNEL_AT_EL0 is not set
-CONFIG_USER_STACKTRACE_SUPPORT=y
-CONFIG_VDSO_GETRANDOM=y
-CONFIG_VMAP_STACK=y
-CONFIG_WATCHDOG_CORE=y
-# CONFIG_WLAN is not set
-# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
-CONFIG_XFRM_AH=y
-CONFIG_XFRM_ALGO=y
-CONFIG_XFRM_ESP=y
-CONFIG_XFRM_IPCOMP=y
-CONFIG_XFRM_MIGRATE=y
-CONFIG_XPS=y
-CONFIG_XXHASH=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZONE_DMA32=y
-CONFIG_ZSTD_COMMON=y
-CONFIG_ZSTD_COMPRESS=y
-CONFIG_ZSTD_DECOMPRESS=y
diff --git a/lede/target/linux/airoha/image/Makefile b/lede/target/linux/airoha/image/Makefile
index 52fcaaad54..dd5878bfe1 100644
--- a/lede/target/linux/airoha/image/Makefile
+++ b/lede/target/linux/airoha/image/Makefile
@@ -1,10 +1,6 @@
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk
-loadaddr-$(CONFIG_TARGET_airoha_an7581) := 0x80200000
-loadaddr-$(CONFIG_TARGET_airoha_an7583) := 0x80200000
-loadaddr-$(CONFIG_TARGET_airoha_en7523) := 0x80200000
-
# default all platform image(fit) build
define Device/Default
PROFILES = Default $$(DEVICE_NAME)
@@ -12,11 +8,9 @@ define Device/Default
KERNEL = kernel-bin | lzma | \
fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
KERNEL_INITRAMFS = kernel-bin | lzma | \
- fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
- KERNEL_LOADADDR = $(loadaddr-y)
+ fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd
FILESYSTEMS := squashfs
- DEVICE_DTS = $$(SOC)-$(lastword $(subst _, ,$(1)))
- DEVICE_DTS_DIR := ../dts
+ DEVICE_DTS_DIR := $(DTS_DIR)
IMAGES := sysupgrade.bin
IMAGE/sysupgrade.bin := append-kernel | pad-to 128k | append-rootfs | \
pad-rootfs | append-metadata
diff --git a/lede/target/linux/airoha/image/an7581.mk b/lede/target/linux/airoha/image/an7581.mk
index 3742ce659e..78918879f7 100644
--- a/lede/target/linux/airoha/image/an7581.mk
+++ b/lede/target/linux/airoha/image/an7581.mk
@@ -1,17 +1,3 @@
-define Build/an7581-emmc-bl2-bl31-uboot
- head -c $$((0x800)) /dev/zero > $@
- cat $(STAGING_DIR_IMAGE)/an7581_$1-bl2.fip >> $@
- dd if=$(STAGING_DIR_IMAGE)/an7581_$1-bl31-u-boot.fip of=$@ bs=1 seek=$$((0x20000)) conv=notrunc
-endef
-
-define Build/an7581-preloader
- cat $(STAGING_DIR_IMAGE)/an7581_$1-bl2.fip >> $@
-endef
-
-define Build/an7581-bl31-uboot
- cat $(STAGING_DIR_IMAGE)/an7581_$1-bl31-u-boot.fip >> $@
-endef
-
define Device/FitImageLzma
KERNEL_SUFFIX := -uImage.itb
KERNEL = kernel-bin | lzma | fit lzma $$(KDIR)/image-$$(DEVICE_DTS).dtb
@@ -24,11 +10,10 @@ define Device/airoha_an7581-evb
DEVICE_MODEL := AN7581 Evaluation Board (SNAND)
DEVICE_PACKAGES := kmod-leds-pwm kmod-i2c-an7581 kmod-pwm-airoha kmod-input-gpio-keys-polled
DEVICE_DTS := an7581-evb
+ DEVICE_DTS_DIR := ../dts
DEVICE_DTS_CONFIG := config@1
+ KERNEL_LOADADDR := 0x80088000
IMAGE/sysupgrade.bin := append-kernel | pad-to 128k | append-rootfs | pad-rootfs | append-metadata
- ARTIFACT/preloader.bin := an7581-preloader rfb
- ARTIFACT/bl31-uboot.fip := an7581-bl31-uboot rfb
- ARTIFACTS := preloader.bin bl31-uboot.fip
endef
TARGET_DEVICES += airoha_an7581-evb
@@ -36,31 +21,7 @@ define Device/airoha_an7581-evb-emmc
DEVICE_VENDOR := Airoha
DEVICE_MODEL := AN7581 Evaluation Board (EMMC)
DEVICE_DTS := an7581-evb-emmc
+ DEVICE_DTS_DIR := ../dts
DEVICE_PACKAGES := kmod-i2c-an7581
- ARTIFACT/preloader.bin := an7581-preloader rfb
- ARTIFACT/bl31-uboot.fip := an7581-bl31-uboot rfb
- ARTIFACTS := preloader.bin bl31-uboot.fip
endef
TARGET_DEVICES += airoha_an7581-evb-emmc
-
-define Device/bell_xg-040g-md
- $(call Device/FitImageLzma)
- DEVICE_VENDOR := Nokia Bell
- DEVICE_MODEL := Nokia Bell XG-040G-MD
- DEVICE_DTS_CONFIG := config@1
- KERNEL_LOADADDR := 0x80088000
- UBINIZE_OPTS := -E 5
- BLOCKSIZE := 128k
- PAGESIZE := 2048
- KERNEL_SIZE := 10240k
- IMAGE_SIZE := 261120k
- KERNEL_IN_UBI := 1
- UBINIZE_OPTS := -m 2048 -p 128KiB -s 2048
- DEVICE_PACKAGES := airoha-en7581-npu-firmware kmod-phy-airoha-en8811h kmod-i2c-an7581 kmod-input-gpio-keys-polled
- IMAGES += factory.bin sysupgrade.bin
- IMAGE/factory.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi
- IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
- SOC := an7581
-endef
-TARGET_DEVICES += bell_xg-040g-md
-
diff --git a/lede/target/linux/airoha/image/an7583.mk b/lede/target/linux/airoha/image/an7583.mk
deleted file mode 100644
index bbc78c65ae..0000000000
--- a/lede/target/linux/airoha/image/an7583.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-define Device/FitImageLzma
- KERNEL_SUFFIX := -uImage.itb
- KERNEL = kernel-bin | lzma | fit lzma $$(KDIR)/image-$$(DEVICE_DTS).dtb
- KERNEL_NAME := Image
-endef
-
-define Device/airoha_an7583-evb
- $(call Device/FitImageLzma)
- DEVICE_VENDOR := Airoha
- DEVICE_MODEL := AN7583 Evaluation Board (SNAND)
- DEVICE_PACKAGES := kmod-phy-aeonsemi-as21xxx kmod-leds-pwm kmod-pwm-airoha kmod-input-gpio-keys-polled
- DEVICE_DTS := an7583-evb
- DEVICE_DTS_CONFIG := config@1
- KERNEL_LOADADDR := 0x80088000
- IMAGE/sysupgrade.bin := append-kernel | pad-to 128k | append-rootfs | pad-rootfs | append-metadata
-endef
-TARGET_DEVICES += airoha_an7583-evb
-
-define Device/airoha_an7583-evb-emmc
- DEVICE_VENDOR := Airoha
- DEVICE_MODEL := AN7583 Evaluation Board (EMMC)
- DEVICE_DTS := an7583-evb-emmc
- DEVICE_PACKAGES := kmod-phy-airoha-en8811h kmod-i2c-an7581
-endef
-TARGET_DEVICES += airoha_an7583-evb-emmc
diff --git a/lede/target/linux/airoha/image/en7523.mk b/lede/target/linux/airoha/image/en7523.mk
index 9cbe7594df..aca37a9923 100644
--- a/lede/target/linux/airoha/image/en7523.mk
+++ b/lede/target/linux/airoha/image/en7523.mk
@@ -1,3 +1,5 @@
+KERNEL_LOADADDR := 0x80208000
+
define Target/Description
Build firmware images for Airoha EN7523 ARM based boards.
endef
@@ -6,5 +8,6 @@ define Device/airoha_en7523-evb
DEVICE_VENDOR := Airoha
DEVICE_MODEL := EN7523 Evaluation Board
DEVICE_DTS := en7523-evb
+ DEVICE_DTS_DIR := ../dts
endef
-TARGET_DEVICES += airoha_en7523-evb
+TARGET_DEVICES += airoha_en7523-evb
\ No newline at end of file
diff --git a/lede/target/linux/airoha/patches-6.12/014-01-v6.13-net-airoha-fix-PSE-memory-configuration-in-airoha_fe.patch b/lede/target/linux/airoha/patches-6.12/014-01-v6.13-net-airoha-fix-PSE-memory-configuration-in-airoha_fe.patch
deleted file mode 100644
index fb86423733..0000000000
--- a/lede/target/linux/airoha/patches-6.12/014-01-v6.13-net-airoha-fix-PSE-memory-configuration-in-airoha_fe.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 8e38e08f2c560328a873c35aff1a0dbea6a7d084 Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Tue, 1 Oct 2024 12:10:25 +0200
-Subject: [PATCH 2/2] net: airoha: fix PSE memory configuration in
- airoha_fe_pse_ports_init()
-
-Align PSE memory configuration to vendor SDK. In particular, increase
-initial value of PSE reserved memory in airoha_fe_pse_ports_init()
-routine by the value used for the second Packet Processor Engine (PPE2)
-and do not overwrite the default value.
-
-Introduced by commit 23020f049327 ("net: airoha: Introduce ethernet support
-for EN7581 SoC")
-
-Signed-off-by: Lorenzo Bianconi
-Reviewed-by: Simon Horman
-Link: https://patch.msgid.link/20241001-airoha-eth-pse-fix-v2-2-9a56cdffd074@kernel.org
-Signed-off-by: Jakub Kicinski
----
- drivers/net/ethernet/mediatek/airoha_eth.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
---- a/drivers/net/ethernet/mediatek/airoha_eth.c
-+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
-@@ -1166,11 +1166,13 @@ static void airoha_fe_pse_ports_init(str
- [FE_PSE_PORT_GDM4] = 2,
- [FE_PSE_PORT_CDM5] = 2,
- };
-+ u32 all_rsv;
- int q;
-
-+ all_rsv = airoha_fe_get_pse_all_rsv(eth);
- /* hw misses PPE2 oq rsv */
-- airoha_fe_set(eth, REG_FE_PSE_BUF_SET,
-- PSE_RSV_PAGES * pse_port_num_queues[FE_PSE_PORT_PPE2]);
-+ all_rsv += PSE_RSV_PAGES * pse_port_num_queues[FE_PSE_PORT_PPE2];
-+ airoha_fe_set(eth, REG_FE_PSE_BUF_SET, all_rsv);
-
- /* CMD1 */
- for (q = 0; q < pse_port_num_queues[FE_PSE_PORT_CDM1]; q++)
diff --git a/lede/target/linux/airoha/patches-6.12/014-02-v6.13-net-airoha-read-default-PSE-reserved-pages-value-bef.patch b/lede/target/linux/airoha/patches-6.12/014-02-v6.13-net-airoha-read-default-PSE-reserved-pages-value-bef.patch
deleted file mode 100644
index a2e5c4fdd9..0000000000
--- a/lede/target/linux/airoha/patches-6.12/014-02-v6.13-net-airoha-read-default-PSE-reserved-pages-value-bef.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 1f3e7ff4f296af1f4350f457d5bd82bc825e645a Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Tue, 1 Oct 2024 12:10:24 +0200
-Subject: [PATCH 1/2] net: airoha: read default PSE reserved pages value before
- updating
-
-Store the default value for the number of PSE reserved pages in orig_val
-at the beginning of airoha_fe_set_pse_oq_rsv routine, before updating it
-with airoha_fe_set_pse_queue_rsv_pages().
-Introduce airoha_fe_get_pse_all_rsv utility routine.
-
-Introduced by commit 23020f049327 ("net: airoha: Introduce ethernet support
-for EN7581 SoC")
-
-Signed-off-by: Lorenzo Bianconi
-Reviewed-by: Simon Horman
-Link: https://patch.msgid.link/20241001-airoha-eth-pse-fix-v2-1-9a56cdffd074@kernel.org
-Signed-off-by: Jakub Kicinski
----
- drivers/net/ethernet/mediatek/airoha_eth.c | 14 ++++++++++----
- 1 file changed, 10 insertions(+), 4 deletions(-)
-
---- a/drivers/net/ethernet/mediatek/airoha_eth.c
-+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
-@@ -1116,17 +1116,23 @@ static void airoha_fe_set_pse_queue_rsv_
- PSE_CFG_WR_EN_MASK | PSE_CFG_OQRSV_SEL_MASK);
- }
-
-+static u32 airoha_fe_get_pse_all_rsv(struct airoha_eth *eth)
-+{
-+ u32 val = airoha_fe_rr(eth, REG_FE_PSE_BUF_SET);
-+
-+ return FIELD_GET(PSE_ALLRSV_MASK, val);
-+}
-+
- static int airoha_fe_set_pse_oq_rsv(struct airoha_eth *eth,
- u32 port, u32 queue, u32 val)
- {
-- u32 orig_val, tmp, all_rsv, fq_limit;
-+ u32 orig_val = airoha_fe_get_pse_queue_rsv_pages(eth, port, queue);
-+ u32 tmp, all_rsv, fq_limit;
-
- airoha_fe_set_pse_queue_rsv_pages(eth, port, queue, val);
-
- /* modify all rsv */
-- orig_val = airoha_fe_get_pse_queue_rsv_pages(eth, port, queue);
-- tmp = airoha_fe_rr(eth, REG_FE_PSE_BUF_SET);
-- all_rsv = FIELD_GET(PSE_ALLRSV_MASK, tmp);
-+ all_rsv = airoha_fe_get_pse_all_rsv(eth);
- all_rsv += (val - orig_val);
- airoha_fe_rmw(eth, REG_FE_PSE_BUF_SET, PSE_ALLRSV_MASK,
- FIELD_PREP(PSE_ALLRSV_MASK, all_rsv));
diff --git a/lede/target/linux/airoha/patches-6.12/016-v6.13-net-airoha-Fix-EGRESS_RATE_METER_EN_MASK-definition.patch b/lede/target/linux/airoha/patches-6.12/016-v6.13-net-airoha-Fix-EGRESS_RATE_METER_EN_MASK-definition.patch
deleted file mode 100644
index d70cadf9d9..0000000000
--- a/lede/target/linux/airoha/patches-6.12/016-v6.13-net-airoha-Fix-EGRESS_RATE_METER_EN_MASK-definition.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 2518b119639162251b6cc7195aec394930c1d867 Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Wed, 9 Oct 2024 00:21:47 +0200
-Subject: [PATCH] net: airoha: Fix EGRESS_RATE_METER_EN_MASK definition
-
-Fix typo in EGRESS_RATE_METER_EN_MASK mask definition. This bus in not
-introducing any user visible problem since, even if we are setting
-EGRESS_RATE_METER_EN_MASK bit in REG_EGRESS_RATE_METER_CFG register,
-egress QoS metering is not supported yet since we are missing some other
-hw configurations (e.g token bucket rate, token bucket size).
-
-Introduced by commit 23020f049327 ("net: airoha: Introduce ethernet support
-for EN7581 SoC")
-
-Signed-off-by: Lorenzo Bianconi
-Reviewed-by: Simon Horman
-Link: https://patch.msgid.link/20241009-airoha-fixes-v2-1-18af63ec19bf@kernel.org
-Signed-off-by: Jakub Kicinski
----
- drivers/net/ethernet/mediatek/airoha_eth.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/mediatek/airoha_eth.c
-+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
-@@ -554,7 +554,7 @@
- #define FWD_DSCP_LOW_THR_MASK GENMASK(17, 0)
-
- #define REG_EGRESS_RATE_METER_CFG 0x100c
--#define EGRESS_RATE_METER_EN_MASK BIT(29)
-+#define EGRESS_RATE_METER_EN_MASK BIT(31)
- #define EGRESS_RATE_METER_EQ_RATE_EN_MASK BIT(17)
- #define EGRESS_RATE_METER_WINDOW_SZ_MASK GENMASK(16, 12)
- #define EGRESS_RATE_METER_TIMESLICE_MASK GENMASK(10, 0)
diff --git a/lede/target/linux/airoha/patches-6.12/017-v6.13-net-airoha-Implement-BQL-support.patch b/lede/target/linux/airoha/patches-6.12/017-v6.13-net-airoha-Implement-BQL-support.patch
deleted file mode 100644
index 7787207f43..0000000000
--- a/lede/target/linux/airoha/patches-6.12/017-v6.13-net-airoha-Implement-BQL-support.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 1d304174106c93ce05f6088813ad7203b3eb381a Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Sat, 12 Oct 2024 11:01:11 +0200
-Subject: [PATCH] net: airoha: Implement BQL support
-
-Introduce BQL support in the airoha_eth driver reporting to the kernel
-info about tx hw DMA queues in order to avoid bufferbloat and keep the
-latency small.
-
-Signed-off-by: Lorenzo Bianconi
-Link: https://patch.msgid.link/20241012-en7581-bql-v2-1-4deb4efdb60b@kernel.org
-Signed-off-by: Jakub Kicinski
----
- drivers/net/ethernet/mediatek/airoha_eth.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
---- a/drivers/net/ethernet/mediatek/airoha_eth.c
-+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
-@@ -1709,9 +1709,11 @@ static int airoha_qdma_tx_napi_poll(stru
- WRITE_ONCE(desc->msg1, 0);
-
- if (skb) {
-+ u16 queue = skb_get_queue_mapping(skb);
- struct netdev_queue *txq;
-
-- txq = netdev_get_tx_queue(skb->dev, qid);
-+ txq = netdev_get_tx_queue(skb->dev, queue);
-+ netdev_tx_completed_queue(txq, 1, skb->len);
- if (netif_tx_queue_stopped(txq) &&
- q->ndesc - q->queued >= q->free_thr)
- netif_tx_wake_queue(txq);
-@@ -2499,7 +2501,9 @@ static netdev_tx_t airoha_dev_xmit(struc
- q->queued += i;
-
- skb_tx_timestamp(skb);
-- if (!netdev_xmit_more())
-+ netdev_tx_sent_queue(txq, skb->len);
-+
-+ if (netif_xmit_stopped(txq) || !netdev_xmit_more())
- airoha_qdma_rmw(qdma, REG_TX_CPU_IDX(qid),
- TX_RING_CPU_IDX_MASK,
- FIELD_PREP(TX_RING_CPU_IDX_MASK, q->head));
diff --git a/lede/target/linux/airoha/patches-6.12/029-02-spi-airoha-remove-unnecessary-restriction-length.patch b/lede/target/linux/airoha/patches-6.12/029-02-spi-airoha-remove-unnecessary-restriction-length.patch
deleted file mode 100644
index e3b9f0ccbe..0000000000
--- a/lede/target/linux/airoha/patches-6.12/029-02-spi-airoha-remove-unnecessary-restriction-length.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 4658f57ba7f60c3bd8e14c1ca7acf2090aee8436 Mon Sep 17 00:00:00 2001
-From: Mikhail Kshevetskiy
-Date: Tue, 12 Aug 2025 06:21:35 +0300
-Subject: [PATCH v6 02/13] spi: airoha: remove unnecessary restriction length
-
-The "length < 160" restriction is not needed because airoha_snand_write_data()
-and airoha_snand_read_data() will properly handle data transfers above
-SPI_MAX_TRANSFER_SIZE.
-
-Signed-off-by: Mikhail Kshevetskiy
-Reviewed-by: AngeloGioacchino Del Regno
----
- drivers/spi/spi-airoha-snfi.c | 7 -------
- 1 file changed, 7 deletions(-)
-
---- a/drivers/spi/spi-airoha-snfi.c
-+++ b/drivers/spi/spi-airoha-snfi.c
-@@ -619,13 +619,6 @@ static int airoha_snand_adjust_op_size(s
-
- if (op->data.nbytes > max_len)
- op->data.nbytes = max_len;
-- } else {
-- max_len = 1 + op->addr.nbytes + op->dummy.nbytes;
-- if (max_len >= 160)
-- return -EOPNOTSUPP;
--
-- if (op->data.nbytes > 160 - max_len)
-- op->data.nbytes = 160 - max_len;
- }
-
- return 0;
diff --git a/lede/target/linux/airoha/patches-6.12/029-04-spi-airoha-remove-unnecessary-switch-to-non-dma-m.patch b/lede/target/linux/airoha/patches-6.12/029-04-spi-airoha-remove-unnecessary-switch-to-non-dma-m.patch
deleted file mode 100644
index 626e5c0ad9..0000000000
--- a/lede/target/linux/airoha/patches-6.12/029-04-spi-airoha-remove-unnecessary-switch-to-non-dma-m.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From fb41a3e3bc357592b28a8abb504df99dad642588 Mon Sep 17 00:00:00 2001
-From: Mikhail Kshevetskiy
-Date: Mon, 11 Aug 2025 13:09:51 +0300
-Subject: [PATCH v6 04/13] spi: airoha: remove unnecessary switch to non-dma
- mode
-
-The code switches to dma at the start of dirmap operation and returns
-to non-dma at the end of dirmap operation, so an additional switch to
-non-dma at the start of dirmap write is not required.
-
-Signed-off-by: Mikhail Kshevetskiy
-Acked-by: Lorenzo Bianconi
-Reviewed-by: AngeloGioacchino Del Regno
----
- drivers/spi/spi-airoha-snfi.c | 3 ---
- 1 file changed, 3 deletions(-)
-
---- a/drivers/spi/spi-airoha-snfi.c
-+++ b/drivers/spi/spi-airoha-snfi.c
-@@ -815,9 +815,6 @@ static ssize_t airoha_snand_dirmap_write
- int err;
-
- as_ctrl = spi_controller_get_devdata(spi->controller);
-- err = airoha_snand_set_mode(as_ctrl, SPI_MODE_MANUAL);
-- if (err < 0)
-- return err;
-
- memcpy(txrx_buf + offs, buf, len);
- dma_addr = dma_map_single(as_ctrl->dev, txrx_buf, SPI_NAND_CACHE_SIZE,
diff --git a/lede/target/linux/airoha/patches-6.12/029-07-spi-airoha-unify-dirmap-read-write-code.patch b/lede/target/linux/airoha/patches-6.12/029-07-spi-airoha-unify-dirmap-read-write-code.patch
deleted file mode 100644
index 4be20c5b55..0000000000
--- a/lede/target/linux/airoha/patches-6.12/029-07-spi-airoha-unify-dirmap-read-write-code.patch
+++ /dev/null
@@ -1,135 +0,0 @@
-From 995b1a65206ee28d5403db0518cb230f2ce429ef Mon Sep 17 00:00:00 2001
-From: Mikhail Kshevetskiy
-Date: Mon, 11 Aug 2025 19:57:43 +0300
-Subject: [PATCH v6 07/13] spi: airoha: unify dirmap read/write code
-
-Makes dirmap writing looks similar to dirmap reading. Just a minor
-refactoring, no behavior change is expected.
-
-Signed-off-by: Mikhail Kshevetskiy
----
- drivers/spi/spi-airoha-snfi.c | 50 ++++++++++++++++++++++-------------
- 1 file changed, 32 insertions(+), 18 deletions(-)
-
---- a/drivers/spi/spi-airoha-snfi.c
-+++ b/drivers/spi/spi-airoha-snfi.c
-@@ -672,6 +672,8 @@ static ssize_t airoha_snand_dirmap_read(
- u32 val, rd_mode;
- int err;
-
-+ as_ctrl = spi_controller_get_devdata(spi->controller);
-+
- switch (op->cmd.opcode) {
- case SPI_NAND_OP_READ_FROM_CACHE_DUAL:
- rd_mode = 1;
-@@ -684,7 +686,6 @@ static ssize_t airoha_snand_dirmap_read(
- break;
- }
-
-- as_ctrl = spi_controller_get_devdata(spi->controller);
- err = airoha_snand_set_mode(as_ctrl, SPI_MODE_DMA);
- if (err < 0)
- return err;
-@@ -748,7 +749,7 @@ static ssize_t airoha_snand_dirmap_read(
- if (err)
- goto error_dma_unmap;
-
-- /* trigger dma start read */
-+ /* trigger dma reading */
- err = regmap_clear_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CON,
- SPI_NFI_RD_TRIG);
- if (err)
-@@ -806,37 +807,47 @@ error_dma_mode_off:
- static ssize_t airoha_snand_dirmap_write(struct spi_mem_dirmap_desc *desc,
- u64 offs, size_t len, const void *buf)
- {
-- struct spi_mem_op *op = &desc->info.op_tmpl;
- struct spi_device *spi = desc->mem->spi;
- u8 *txrx_buf = spi_get_ctldata(spi);
- struct airoha_snand_ctrl *as_ctrl;
- dma_addr_t dma_addr;
-- u32 wr_mode, val;
-+ u32 wr_mode, val, opcode;
- int err;
-
- as_ctrl = spi_controller_get_devdata(spi->controller);
-
-+ opcode = desc->info.op_tmpl.cmd.opcode;
-+ switch (opcode) {
-+ case SPI_NAND_OP_PROGRAM_LOAD_SINGLE:
-+ case SPI_NAND_OP_PROGRAM_LOAD_RAMDOM_SINGLE:
-+ wr_mode = 0;
-+ break;
-+ case SPI_NAND_OP_PROGRAM_LOAD_QUAD:
-+ case SPI_NAND_OP_PROGRAM_LOAD_RAMDON_QUAD:
-+ wr_mode = 2;
-+ break;
-+ default:
-+ /* unknown opcode */
-+ return -EOPNOTSUPP;
-+ }
-+
- memcpy(txrx_buf + offs, buf, len);
-- dma_addr = dma_map_single(as_ctrl->dev, txrx_buf, SPI_NAND_CACHE_SIZE,
-- DMA_TO_DEVICE);
-- err = dma_mapping_error(as_ctrl->dev, dma_addr);
-- if (err)
-- return err;
-
- err = airoha_snand_set_mode(as_ctrl, SPI_MODE_DMA);
- if (err < 0)
-- goto error_dma_unmap;
-+ return err;
-
- err = airoha_snand_nfi_config(as_ctrl);
- if (err)
-- goto error_dma_unmap;
-+ goto error_dma_mode_off;
-
-- if (op->cmd.opcode == SPI_NAND_OP_PROGRAM_LOAD_QUAD ||
-- op->cmd.opcode == SPI_NAND_OP_PROGRAM_LOAD_RAMDON_QUAD)
-- wr_mode = BIT(1);
-- else
-- wr_mode = 0;
-+ dma_addr = dma_map_single(as_ctrl->dev, txrx_buf, SPI_NAND_CACHE_SIZE,
-+ DMA_TO_DEVICE);
-+ err = dma_mapping_error(as_ctrl->dev, dma_addr);
-+ if (err)
-+ goto error_dma_mode_off;
-
-+ /* set dma addr */
- err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_STRADDR,
- dma_addr);
- if (err)
-@@ -850,12 +861,13 @@ static ssize_t airoha_snand_dirmap_write
- if (err)
- goto error_dma_unmap;
-
-+ /* set write command */
- err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_PG_CTL1,
-- FIELD_PREP(SPI_NFI_PG_LOAD_CMD,
-- op->cmd.opcode));
-+ FIELD_PREP(SPI_NFI_PG_LOAD_CMD, opcode));
- if (err)
- goto error_dma_unmap;
-
-+ /* set write mode */
- err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_SNF_MISC_CTL,
- FIELD_PREP(SPI_NFI_DATA_READ_WR_MODE, wr_mode));
- if (err)
-@@ -887,6 +899,7 @@ static ssize_t airoha_snand_dirmap_write
- if (err)
- goto error_dma_unmap;
-
-+ /* trigger dma writing */
- err = regmap_clear_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CON,
- SPI_NFI_WR_TRIG);
- if (err)
-@@ -931,6 +944,7 @@ static ssize_t airoha_snand_dirmap_write
- error_dma_unmap:
- dma_unmap_single(as_ctrl->dev, dma_addr, SPI_NAND_CACHE_SIZE,
- DMA_TO_DEVICE);
-+error_dma_mode_off:
- airoha_snand_set_mode(as_ctrl, SPI_MODE_MANUAL);
- return err;
- }
diff --git a/lede/target/linux/airoha/patches-6.12/029-08-spi-airoha-support-of-dualio-quadio-flash-reading.patch b/lede/target/linux/airoha/patches-6.12/029-08-spi-airoha-support-of-dualio-quadio-flash-reading.patch
deleted file mode 100644
index 4e00e7c178..0000000000
--- a/lede/target/linux/airoha/patches-6.12/029-08-spi-airoha-support-of-dualio-quadio-flash-reading.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-From baaba9b8d3d907575323cbb7fabeae23db2a542b Mon Sep 17 00:00:00 2001
-From: Mikhail Kshevetskiy
-Date: Mon, 11 Aug 2025 20:52:34 +0300
-Subject: [PATCH v6 08/13] spi: airoha: support of dualio/quadio flash reading
- commands
-
-Airoha snfi spi controller supports acceleration of DUAL/QUAD
-operations, but does not supports DUAL_IO/QUAD_IO operations.
-Luckily DUAL/QUAD operations do the same as DUAL_IO/QUAD_IO ones,
-so we can issue corresponding DUAL/QUAD operation instead of
-DUAL_IO/QUAD_IO one.
-
-Signed-off-by: Mikhail Kshevetskiy
-Reviewed-by: AngeloGioacchino Del Regno
----
- drivers/spi/spi-airoha-snfi.c | 28 ++++++++++++++++++++++------
- 1 file changed, 22 insertions(+), 6 deletions(-)
-
---- a/drivers/spi/spi-airoha-snfi.c
-+++ b/drivers/spi/spi-airoha-snfi.c
-@@ -147,6 +147,8 @@
- #define SPI_NFI_CUS_SEC_SIZE_EN BIT(16)
-
- #define REG_SPI_NFI_RD_CTL2 0x0510
-+#define SPI_NFI_DATA_READ_CMD GENMASK(7, 0)
-+
- #define REG_SPI_NFI_RD_CTL3 0x0514
-
- #define REG_SPI_NFI_PG_CTL1 0x0524
-@@ -179,7 +181,9 @@
- #define SPI_NAND_OP_READ_FROM_CACHE_SINGLE 0x03
- #define SPI_NAND_OP_READ_FROM_CACHE_SINGLE_FAST 0x0b
- #define SPI_NAND_OP_READ_FROM_CACHE_DUAL 0x3b
-+#define SPI_NAND_OP_READ_FROM_CACHE_DUALIO 0xbb
- #define SPI_NAND_OP_READ_FROM_CACHE_QUAD 0x6b
-+#define SPI_NAND_OP_READ_FROM_CACHE_QUADIO 0xeb
- #define SPI_NAND_OP_WRITE_ENABLE 0x06
- #define SPI_NAND_OP_WRITE_DISABLE 0x04
- #define SPI_NAND_OP_PROGRAM_LOAD_SINGLE 0x02
-@@ -664,26 +668,38 @@ static int airoha_snand_dirmap_create(st
- static ssize_t airoha_snand_dirmap_read(struct spi_mem_dirmap_desc *desc,
- u64 offs, size_t len, void *buf)
- {
-- struct spi_mem_op *op = &desc->info.op_tmpl;
- struct spi_device *spi = desc->mem->spi;
- struct airoha_snand_ctrl *as_ctrl;
- u8 *txrx_buf = spi_get_ctldata(spi);
- dma_addr_t dma_addr;
-- u32 val, rd_mode;
-+ u32 val, rd_mode, opcode;
- int err;
-
- as_ctrl = spi_controller_get_devdata(spi->controller);
-
-- switch (op->cmd.opcode) {
-+ /*
-+ * DUALIO and QUADIO opcodes are not supported by the spi controller,
-+ * replace them with supported opcodes.
-+ */
-+ opcode = desc->info.op_tmpl.cmd.opcode;
-+ switch (opcode) {
-+ case SPI_NAND_OP_READ_FROM_CACHE_SINGLE:
-+ case SPI_NAND_OP_READ_FROM_CACHE_SINGLE_FAST:
-+ rd_mode = 0;
-+ break;
- case SPI_NAND_OP_READ_FROM_CACHE_DUAL:
-+ case SPI_NAND_OP_READ_FROM_CACHE_DUALIO:
-+ opcode = SPI_NAND_OP_READ_FROM_CACHE_DUAL;
- rd_mode = 1;
- break;
- case SPI_NAND_OP_READ_FROM_CACHE_QUAD:
-+ case SPI_NAND_OP_READ_FROM_CACHE_QUADIO:
-+ opcode = SPI_NAND_OP_READ_FROM_CACHE_QUAD;
- rd_mode = 2;
- break;
- default:
-- rd_mode = 0;
-- break;
-+ /* unknown opcode */
-+ return -EOPNOTSUPP;
- }
-
- err = airoha_snand_set_mode(as_ctrl, SPI_MODE_DMA);
-@@ -717,7 +733,7 @@ static ssize_t airoha_snand_dirmap_read(
-
- /* set read command */
- err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_RD_CTL2,
-- op->cmd.opcode);
-+ FIELD_PREP(SPI_NFI_DATA_READ_CMD, opcode));
- if (err)
- goto error_dma_unmap;
-
diff --git a/lede/target/linux/airoha/patches-6.12/029-09-spi-airoha-buffer-must-be-0xff-ed-before-writing.patch b/lede/target/linux/airoha/patches-6.12/029-09-spi-airoha-buffer-must-be-0xff-ed-before-writing.patch
deleted file mode 100644
index 7eef83d562..0000000000
--- a/lede/target/linux/airoha/patches-6.12/029-09-spi-airoha-buffer-must-be-0xff-ed-before-writing.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 6ca9cd453cb5d8a6411791295771b4dbd1c623de Mon Sep 17 00:00:00 2001
-From: Mikhail Kshevetskiy
-Date: Mon, 11 Aug 2025 21:18:04 +0300
-Subject: [PATCH v6 09/13] spi: airoha: buffer must be 0xff-ed before writing
-
-During writing, the entire flash page (including OOB) will be updated
-with the values from the temporary buffer, so we need to fill the
-untouched areas of the buffer with 0xff value to prevent accidental
-data overwriting.
-
-Signed-off-by: Mikhail Kshevetskiy
----
- drivers/spi/spi-airoha-snfi.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
---- a/drivers/spi/spi-airoha-snfi.c
-+++ b/drivers/spi/spi-airoha-snfi.c
-@@ -847,7 +847,11 @@ static ssize_t airoha_snand_dirmap_write
- return -EOPNOTSUPP;
- }
-
-+ if (offs > 0)
-+ memset(txrx_buf, 0xff, offs);
- memcpy(txrx_buf + offs, buf, len);
-+ if (bytes > offs + len)
-+ memset(txrx_buf + offs + len, 0xff, bytes - offs - len);
-
- err = airoha_snand_set_mode(as_ctrl, SPI_MODE_DMA);
- if (err < 0)
diff --git a/lede/target/linux/airoha/patches-6.12/029-10-spi-airoha-avoid-setting-of-page-oob-sizes-in-REG.patch b/lede/target/linux/airoha/patches-6.12/029-10-spi-airoha-avoid-setting-of-page-oob-sizes-in-REG.patch
deleted file mode 100644
index 0a3ddc8be3..0000000000
--- a/lede/target/linux/airoha/patches-6.12/029-10-spi-airoha-avoid-setting-of-page-oob-sizes-in-REG.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 4abbbc74306598159fe1dc545f929ae594bf4dd1 Mon Sep 17 00:00:00 2001
-From: Mikhail Kshevetskiy
-Date: Thu, 14 Aug 2025 18:00:32 +0300
-Subject: [PATCH v6 10/13] spi: airoha: avoid setting of page/oob sizes in
- REG_SPI_NFI_PAGEFMT
-
-spi-airoha-snfi uses custom sector size in REG_SPI_NFI_SECCUS_SIZE
-register, so setting of page/oob sizes in REG_SPI_NFI_PAGEFMT is not
-required.
-
-Signed-off-by: Mikhail Kshevetskiy
----
- drivers/spi/spi-airoha-snfi.c | 38 -----------------------------------
- 1 file changed, 38 deletions(-)
-
---- a/drivers/spi/spi-airoha-snfi.c
-+++ b/drivers/spi/spi-airoha-snfi.c
-@@ -518,44 +518,6 @@ static int airoha_snand_nfi_config(struc
- if (err)
- return err;
-
-- /* page format */
-- switch (as_ctrl->nfi_cfg.spare_size) {
-- case 26:
-- val = FIELD_PREP(SPI_NFI_SPARE_SIZE, 0x1);
-- break;
-- case 27:
-- val = FIELD_PREP(SPI_NFI_SPARE_SIZE, 0x2);
-- break;
-- case 28:
-- val = FIELD_PREP(SPI_NFI_SPARE_SIZE, 0x3);
-- break;
-- default:
-- val = FIELD_PREP(SPI_NFI_SPARE_SIZE, 0x0);
-- break;
-- }
--
-- err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_PAGEFMT,
-- SPI_NFI_SPARE_SIZE, val);
-- if (err)
-- return err;
--
-- switch (as_ctrl->nfi_cfg.page_size) {
-- case 2048:
-- val = FIELD_PREP(SPI_NFI_PAGE_SIZE, 0x1);
-- break;
-- case 4096:
-- val = FIELD_PREP(SPI_NFI_PAGE_SIZE, 0x2);
-- break;
-- default:
-- val = FIELD_PREP(SPI_NFI_PAGE_SIZE, 0x0);
-- break;
-- }
--
-- err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_PAGEFMT,
-- SPI_NFI_PAGE_SIZE, val);
-- if (err)
-- return err;
--
- /* sec num */
- val = FIELD_PREP(SPI_NFI_SEC_NUM, as_ctrl->nfi_cfg.sec_num);
- err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CON,
diff --git a/lede/target/linux/airoha/patches-6.12/029-11-spi-airoha-reduce-the-number-of-modification-of-R.patch b/lede/target/linux/airoha/patches-6.12/029-11-spi-airoha-reduce-the-number-of-modification-of-R.patch
deleted file mode 100644
index 2193994ed9..0000000000
--- a/lede/target/linux/airoha/patches-6.12/029-11-spi-airoha-reduce-the-number-of-modification-of-R.patch
+++ /dev/null
@@ -1,197 +0,0 @@
-From 0d8f58869192df0acdba286d233b57a4feeaf94b Mon Sep 17 00:00:00 2001
-From: Mikhail Kshevetskiy
-Date: Thu, 14 Aug 2025 18:49:34 +0300
-Subject: [PATCH v6 11/13] spi: airoha: reduce the number of modification of
- REG_SPI_NFI_CNFG and REG_SPI_NFI_SECCUS_SIZE registers
-
-This just reduce the number of modification of REG_SPI_NFI_CNFG and
-REG_SPI_NFI_SECCUS_SIZE registers during dirmap operation.
-
-This patch is a necessary step to avoid reading flash page settings
-from SNFI registers during driver startup.
-
-Signed-off-by: Mikhail Kshevetskiy
-Reviewed-by: AngeloGioacchino Del Regno
----
- drivers/spi/spi-airoha-snfi.c | 135 +++++++++++++++++++++++++---------
- 1 file changed, 102 insertions(+), 33 deletions(-)
-
---- a/drivers/spi/spi-airoha-snfi.c
-+++ b/drivers/spi/spi-airoha-snfi.c
-@@ -668,7 +668,48 @@ static ssize_t airoha_snand_dirmap_read(
- if (err < 0)
- return err;
-
-- err = airoha_snand_nfi_config(as_ctrl);
-+ /* NFI reset */
-+ err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_CON,
-+ SPI_NFI_FIFO_FLUSH | SPI_NFI_RST);
-+ if (err)
-+ goto error_dma_mode_off;
-+
-+ /* NFI configure:
-+ * - No AutoFDM (custom sector size (SECCUS) register will be used)
-+ * - No SoC's hardware ECC (flash internal ECC will be used)
-+ * - Use burst mode (faster, but requires 16 byte alignment for addresses)
-+ * - Setup for reading (SPI_NFI_READ_MODE)
-+ * - Setup reading command: FIELD_PREP(SPI_NFI_OPMODE, 6)
-+ * - Use DMA instead of PIO for data reading
-+ */
-+ err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CNFG,
-+ SPI_NFI_DMA_MODE |
-+ SPI_NFI_READ_MODE |
-+ SPI_NFI_DMA_BURST_EN |
-+ SPI_NFI_HW_ECC_EN |
-+ SPI_NFI_AUTO_FDM_EN |
-+ SPI_NFI_OPMODE,
-+ SPI_NFI_DMA_MODE |
-+ SPI_NFI_READ_MODE |
-+ SPI_NFI_DMA_BURST_EN |
-+ FIELD_PREP(SPI_NFI_OPMODE, 6));
-+ if (err)
-+ goto error_dma_mode_off;
-+
-+ /* Set number of sector will be read */
-+ val = FIELD_PREP(SPI_NFI_SEC_NUM, as_ctrl->nfi_cfg.sec_num);
-+ err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CON,
-+ SPI_NFI_SEC_NUM, val);
-+ if (err)
-+ goto error_dma_mode_off;
-+
-+ /* Set custom sector size */
-+ val = as_ctrl->nfi_cfg.sec_size;
-+ err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_SECCUS_SIZE,
-+ SPI_NFI_CUS_SEC_SIZE |
-+ SPI_NFI_CUS_SEC_SIZE_EN,
-+ FIELD_PREP(SPI_NFI_CUS_SEC_SIZE, val) |
-+ SPI_NFI_CUS_SEC_SIZE_EN);
- if (err)
- goto error_dma_mode_off;
-
-@@ -684,7 +725,14 @@ static ssize_t airoha_snand_dirmap_read(
- if (err)
- goto error_dma_unmap;
-
-- /* set cust sec size */
-+ /*
-+ * Setup transfer length
-+ * ---------------------
-+ * The following rule MUST be met:
-+ * transfer_length =
-+ * = NFI_SNF_MISC_CTL2.read_data_byte_number =
-+ * = NFI_CON.sector_number * NFI_SECCUS.custom_sector_size
-+ */
- val = as_ctrl->nfi_cfg.sec_size * as_ctrl->nfi_cfg.sec_num;
- val = FIELD_PREP(SPI_NFI_READ_DATA_BYTE_NUM, val);
- err = regmap_update_bits(as_ctrl->regmap_nfi,
-@@ -711,18 +759,6 @@ static ssize_t airoha_snand_dirmap_read(
- if (err)
- goto error_dma_unmap;
-
-- /* set nfi read */
-- err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CNFG,
-- SPI_NFI_OPMODE,
-- FIELD_PREP(SPI_NFI_OPMODE, 6));
-- if (err)
-- goto error_dma_unmap;
--
-- err = regmap_set_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CNFG,
-- SPI_NFI_READ_MODE | SPI_NFI_DMA_MODE);
-- if (err)
-- goto error_dma_unmap;
--
- err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_CMD, 0x0);
- if (err)
- goto error_dma_unmap;
-@@ -819,7 +855,48 @@ static ssize_t airoha_snand_dirmap_write
- if (err < 0)
- return err;
-
-- err = airoha_snand_nfi_config(as_ctrl);
-+ /* NFI reset */
-+ err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_CON,
-+ SPI_NFI_FIFO_FLUSH | SPI_NFI_RST);
-+ if (err)
-+ goto error_dma_mode_off;
-+
-+ /*
-+ * NFI configure:
-+ * - No AutoFDM (custom sector size (SECCUS) register will be used)
-+ * - No SoC's hardware ECC (flash internal ECC will be used)
-+ * - Use burst mode (faster, but requires 16 byte alignment for addresses)
-+ * - Setup for writing (SPI_NFI_READ_MODE bit is cleared)
-+ * - Setup writing command: FIELD_PREP(SPI_NFI_OPMODE, 3)
-+ * - Use DMA instead of PIO for data writing
-+ */
-+ err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CNFG,
-+ SPI_NFI_DMA_MODE |
-+ SPI_NFI_READ_MODE |
-+ SPI_NFI_DMA_BURST_EN |
-+ SPI_NFI_HW_ECC_EN |
-+ SPI_NFI_AUTO_FDM_EN |
-+ SPI_NFI_OPMODE,
-+ SPI_NFI_DMA_MODE |
-+ SPI_NFI_DMA_BURST_EN |
-+ FIELD_PREP(SPI_NFI_OPMODE, 3));
-+ if (err)
-+ goto error_dma_mode_off;
-+
-+ /* Set number of sector will be written */
-+ val = FIELD_PREP(SPI_NFI_SEC_NUM, as_ctrl->nfi_cfg.sec_num);
-+ err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CON,
-+ SPI_NFI_SEC_NUM, val);
-+ if (err)
-+ goto error_dma_mode_off;
-+
-+ /* Set custom sector size */
-+ val = as_ctrl->nfi_cfg.sec_size;
-+ err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_SECCUS_SIZE,
-+ SPI_NFI_CUS_SEC_SIZE |
-+ SPI_NFI_CUS_SEC_SIZE_EN,
-+ FIELD_PREP(SPI_NFI_CUS_SEC_SIZE, val) |
-+ SPI_NFI_CUS_SEC_SIZE_EN);
- if (err)
- goto error_dma_mode_off;
-
-@@ -835,8 +912,16 @@ static ssize_t airoha_snand_dirmap_write
- if (err)
- goto error_dma_unmap;
-
-- val = FIELD_PREP(SPI_NFI_PROG_LOAD_BYTE_NUM,
-- as_ctrl->nfi_cfg.sec_size * as_ctrl->nfi_cfg.sec_num);
-+ /*
-+ * Setup transfer length
-+ * ---------------------
-+ * The following rule MUST be met:
-+ * transfer_length =
-+ * = NFI_SNF_MISC_CTL2.write_data_byte_number =
-+ * = NFI_CON.sector_number * NFI_SECCUS.custom_sector_size
-+ */
-+ val = as_ctrl->nfi_cfg.sec_size * as_ctrl->nfi_cfg.sec_num;
-+ val = FIELD_PREP(SPI_NFI_PROG_LOAD_BYTE_NUM, val);
- err = regmap_update_bits(as_ctrl->regmap_nfi,
- REG_SPI_NFI_SNF_MISC_CTL2,
- SPI_NFI_PROG_LOAD_BYTE_NUM, val);
-@@ -861,22 +946,6 @@ static ssize_t airoha_snand_dirmap_write
- if (err)
- goto error_dma_unmap;
-
-- err = regmap_clear_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CNFG,
-- SPI_NFI_READ_MODE);
-- if (err)
-- goto error_dma_unmap;
--
-- err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CNFG,
-- SPI_NFI_OPMODE,
-- FIELD_PREP(SPI_NFI_OPMODE, 3));
-- if (err)
-- goto error_dma_unmap;
--
-- err = regmap_set_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CNFG,
-- SPI_NFI_DMA_MODE);
-- if (err)
-- goto error_dma_unmap;
--
- err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_CMD, 0x80);
- if (err)
- goto error_dma_unmap;
diff --git a/lede/target/linux/airoha/patches-6.12/029-12-spi-airoha-set-custom-sector-size-equal-to-flash-.patch b/lede/target/linux/airoha/patches-6.12/029-12-spi-airoha-set-custom-sector-size-equal-to-flash-.patch
deleted file mode 100644
index d9f35366b4..0000000000
--- a/lede/target/linux/airoha/patches-6.12/029-12-spi-airoha-set-custom-sector-size-equal-to-flash-.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-From 893ee23d650ca9ee36541b9a5ae0bc18be01a11f Mon Sep 17 00:00:00 2001
-From: Mikhail Kshevetskiy
-Date: Thu, 14 Aug 2025 22:47:17 +0300
-Subject: [PATCH v6 12/13] spi: airoha: set custom sector size equal to flash
- page size
-
-Set custom sector size equal to flash page size including oob. Thus we
-will always read a single sector. The maximum custom sector size is
-8187, so all possible flash sector sizes are supported.
-
-This patch is a necessary step to avoid reading flash page settings
-from SNFI registers during driver startup.
-
-Signed-off-by: Mikhail Kshevetskiy
-Reviewed-by: AngeloGioacchino Del Regno
----
- drivers/spi/spi-airoha-snfi.c | 35 +++++++++++++++++++----------------
- 1 file changed, 19 insertions(+), 16 deletions(-)
-
---- a/drivers/spi/spi-airoha-snfi.c
-+++ b/drivers/spi/spi-airoha-snfi.c
-@@ -519,7 +519,7 @@ static int airoha_snand_nfi_config(struc
- return err;
-
- /* sec num */
-- val = FIELD_PREP(SPI_NFI_SEC_NUM, as_ctrl->nfi_cfg.sec_num);
-+ val = FIELD_PREP(SPI_NFI_SEC_NUM, 1);
- err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CON,
- SPI_NFI_SEC_NUM, val);
- if (err)
-@@ -532,7 +532,8 @@ static int airoha_snand_nfi_config(struc
- return err;
-
- /* set cust sec size */
-- val = FIELD_PREP(SPI_NFI_CUS_SEC_SIZE, as_ctrl->nfi_cfg.sec_size);
-+ val = FIELD_PREP(SPI_NFI_CUS_SEC_SIZE,
-+ as_ctrl->nfi_cfg.sec_size * as_ctrl->nfi_cfg.sec_num);
- return regmap_update_bits(as_ctrl->regmap_nfi,
- REG_SPI_NFI_SECCUS_SIZE,
- SPI_NFI_CUS_SEC_SIZE, val);
-@@ -635,10 +636,13 @@ static ssize_t airoha_snand_dirmap_read(
- u8 *txrx_buf = spi_get_ctldata(spi);
- dma_addr_t dma_addr;
- u32 val, rd_mode, opcode;
-+ size_t bytes;
- int err;
-
- as_ctrl = spi_controller_get_devdata(spi->controller);
-
-+ bytes = as_ctrl->nfi_cfg.sec_num * as_ctrl->nfi_cfg.sec_size;
-+
- /*
- * DUALIO and QUADIO opcodes are not supported by the spi controller,
- * replace them with supported opcodes.
-@@ -697,18 +701,17 @@ static ssize_t airoha_snand_dirmap_read(
- goto error_dma_mode_off;
-
- /* Set number of sector will be read */
-- val = FIELD_PREP(SPI_NFI_SEC_NUM, as_ctrl->nfi_cfg.sec_num);
- err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CON,
-- SPI_NFI_SEC_NUM, val);
-+ SPI_NFI_SEC_NUM,
-+ FIELD_PREP(SPI_NFI_SEC_NUM, 1));
- if (err)
- goto error_dma_mode_off;
-
- /* Set custom sector size */
-- val = as_ctrl->nfi_cfg.sec_size;
- err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_SECCUS_SIZE,
- SPI_NFI_CUS_SEC_SIZE |
- SPI_NFI_CUS_SEC_SIZE_EN,
-- FIELD_PREP(SPI_NFI_CUS_SEC_SIZE, val) |
-+ FIELD_PREP(SPI_NFI_CUS_SEC_SIZE, bytes) |
- SPI_NFI_CUS_SEC_SIZE_EN);
- if (err)
- goto error_dma_mode_off;
-@@ -733,11 +736,10 @@ static ssize_t airoha_snand_dirmap_read(
- * = NFI_SNF_MISC_CTL2.read_data_byte_number =
- * = NFI_CON.sector_number * NFI_SECCUS.custom_sector_size
- */
-- val = as_ctrl->nfi_cfg.sec_size * as_ctrl->nfi_cfg.sec_num;
-- val = FIELD_PREP(SPI_NFI_READ_DATA_BYTE_NUM, val);
- err = regmap_update_bits(as_ctrl->regmap_nfi,
- REG_SPI_NFI_SNF_MISC_CTL2,
-- SPI_NFI_READ_DATA_BYTE_NUM, val);
-+ SPI_NFI_READ_DATA_BYTE_NUM,
-+ FIELD_PREP(SPI_NFI_READ_DATA_BYTE_NUM, bytes));
- if (err)
- goto error_dma_unmap;
-
-@@ -826,10 +828,13 @@ static ssize_t airoha_snand_dirmap_write
- struct airoha_snand_ctrl *as_ctrl;
- dma_addr_t dma_addr;
- u32 wr_mode, val, opcode;
-+ size_t bytes;
- int err;
-
- as_ctrl = spi_controller_get_devdata(spi->controller);
-
-+ bytes = as_ctrl->nfi_cfg.sec_num * as_ctrl->nfi_cfg.sec_size;
-+
- opcode = desc->info.op_tmpl.cmd.opcode;
- switch (opcode) {
- case SPI_NAND_OP_PROGRAM_LOAD_SINGLE:
-@@ -884,18 +889,17 @@ static ssize_t airoha_snand_dirmap_write
- goto error_dma_mode_off;
-
- /* Set number of sector will be written */
-- val = FIELD_PREP(SPI_NFI_SEC_NUM, as_ctrl->nfi_cfg.sec_num);
- err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CON,
-- SPI_NFI_SEC_NUM, val);
-+ SPI_NFI_SEC_NUM,
-+ FIELD_PREP(SPI_NFI_SEC_NUM, 1));
- if (err)
- goto error_dma_mode_off;
-
- /* Set custom sector size */
-- val = as_ctrl->nfi_cfg.sec_size;
- err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_SECCUS_SIZE,
- SPI_NFI_CUS_SEC_SIZE |
- SPI_NFI_CUS_SEC_SIZE_EN,
-- FIELD_PREP(SPI_NFI_CUS_SEC_SIZE, val) |
-+ FIELD_PREP(SPI_NFI_CUS_SEC_SIZE, bytes) |
- SPI_NFI_CUS_SEC_SIZE_EN);
- if (err)
- goto error_dma_mode_off;
-@@ -920,11 +924,10 @@ static ssize_t airoha_snand_dirmap_write
- * = NFI_SNF_MISC_CTL2.write_data_byte_number =
- * = NFI_CON.sector_number * NFI_SECCUS.custom_sector_size
- */
-- val = as_ctrl->nfi_cfg.sec_size * as_ctrl->nfi_cfg.sec_num;
-- val = FIELD_PREP(SPI_NFI_PROG_LOAD_BYTE_NUM, val);
- err = regmap_update_bits(as_ctrl->regmap_nfi,
- REG_SPI_NFI_SNF_MISC_CTL2,
-- SPI_NFI_PROG_LOAD_BYTE_NUM, val);
-+ SPI_NFI_PROG_LOAD_BYTE_NUM,
-+ FIELD_PREP(SPI_NFI_PROG_LOAD_BYTE_NUM, bytes));
- if (err)
- goto error_dma_unmap;
-
diff --git a/lede/target/linux/airoha/patches-6.12/029-13-spi-airoha-avoid-reading-flash-page-settings-from.patch b/lede/target/linux/airoha/patches-6.12/029-13-spi-airoha-avoid-reading-flash-page-settings-from.patch
deleted file mode 100644
index 2efc56f356..0000000000
--- a/lede/target/linux/airoha/patches-6.12/029-13-spi-airoha-avoid-reading-flash-page-settings-from.patch
+++ /dev/null
@@ -1,204 +0,0 @@
-From 64a4d6e84145227211485067022cd4e5cf052e04 Mon Sep 17 00:00:00 2001
-From: Mikhail Kshevetskiy
-Date: Thu, 14 Aug 2025 23:56:24 +0300
-Subject: [PATCH v6 13/13] spi: airoha: avoid reading flash page settings from
- SNFI registers during driver startup
-
-The spinand driver do 3 type of dirmap requests:
- * read/write whole flash page without oob
- (offs = 0, len = page_size)
- * read/write whole flash page including oob
- (offs = 0, len = page_size + oob_size)
- * read/write oob area only
- (offs = page_size, len = oob_size)
-
-The trick is:
- * read/write a single "sector"
- * set a custom sector size equal to offs + len. It's a bit safer to
- rounded up "sector size" value 64.
- * set the transfer length equal to custom sector size
-
-And it works!
-
-Thus we can remove a dirty hack that reads flash page settings from
-SNFI registers during driver startup. Also airoha_snand_adjust_op_size()
-function becomes unnecessary.
-
-Signed-off-by: Mikhail Kshevetskiy
----
- drivers/spi/spi-airoha-snfi.c | 115 ++--------------------------------
- 1 file changed, 5 insertions(+), 110 deletions(-)
-
---- a/drivers/spi/spi-airoha-snfi.c
-+++ b/drivers/spi/spi-airoha-snfi.c
-@@ -223,13 +223,6 @@ struct airoha_snand_ctrl {
- struct regmap *regmap_ctrl;
- struct regmap *regmap_nfi;
- struct clk *spi_clk;
--
-- struct {
-- size_t page_size;
-- size_t sec_size;
-- u8 sec_num;
-- u8 spare_size;
-- } nfi_cfg;
- };
-
- static int airoha_snand_set_fifo_op(struct airoha_snand_ctrl *as_ctrl,
-@@ -490,55 +483,6 @@ static int airoha_snand_nfi_init(struct
- SPI_NFI_ALL_IRQ_EN, SPI_NFI_AHB_DONE_EN);
- }
-
--static int airoha_snand_nfi_config(struct airoha_snand_ctrl *as_ctrl)
--{
-- int err;
-- u32 val;
--
-- err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_CON,
-- SPI_NFI_FIFO_FLUSH | SPI_NFI_RST);
-- if (err)
-- return err;
--
-- /* auto FDM */
-- err = regmap_clear_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CNFG,
-- SPI_NFI_AUTO_FDM_EN);
-- if (err)
-- return err;
--
-- /* HW ECC */
-- err = regmap_clear_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CNFG,
-- SPI_NFI_HW_ECC_EN);
-- if (err)
-- return err;
--
-- /* DMA Burst */
-- err = regmap_set_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CNFG,
-- SPI_NFI_DMA_BURST_EN);
-- if (err)
-- return err;
--
-- /* sec num */
-- val = FIELD_PREP(SPI_NFI_SEC_NUM, 1);
-- err = regmap_update_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_CON,
-- SPI_NFI_SEC_NUM, val);
-- if (err)
-- return err;
--
-- /* enable cust sec size */
-- err = regmap_set_bits(as_ctrl->regmap_nfi, REG_SPI_NFI_SECCUS_SIZE,
-- SPI_NFI_CUS_SEC_SIZE_EN);
-- if (err)
-- return err;
--
-- /* set cust sec size */
-- val = FIELD_PREP(SPI_NFI_CUS_SEC_SIZE,
-- as_ctrl->nfi_cfg.sec_size * as_ctrl->nfi_cfg.sec_num);
-- return regmap_update_bits(as_ctrl->regmap_nfi,
-- REG_SPI_NFI_SECCUS_SIZE,
-- SPI_NFI_CUS_SEC_SIZE, val);
--}
--
- static bool airoha_snand_is_page_ops(const struct spi_mem_op *op)
- {
- if (op->addr.nbytes != 2)
-@@ -571,26 +515,6 @@ static bool airoha_snand_is_page_ops(con
- }
- }
-
--static int airoha_snand_adjust_op_size(struct spi_mem *mem,
-- struct spi_mem_op *op)
--{
-- size_t max_len;
--
-- if (airoha_snand_is_page_ops(op)) {
-- struct airoha_snand_ctrl *as_ctrl;
--
-- as_ctrl = spi_controller_get_devdata(mem->spi->controller);
-- max_len = as_ctrl->nfi_cfg.sec_size;
-- max_len += as_ctrl->nfi_cfg.spare_size;
-- max_len *= as_ctrl->nfi_cfg.sec_num;
--
-- if (op->data.nbytes > max_len)
-- op->data.nbytes = max_len;
-- }
--
-- return 0;
--}
--
- static bool airoha_snand_supports_op(struct spi_mem *mem,
- const struct spi_mem_op *op)
- {
-@@ -641,7 +565,8 @@ static ssize_t airoha_snand_dirmap_read(
-
- as_ctrl = spi_controller_get_devdata(spi->controller);
-
-- bytes = as_ctrl->nfi_cfg.sec_num * as_ctrl->nfi_cfg.sec_size;
-+ /* minimum oob size is 64 */
-+ bytes = round_up(offs + len, 64);
-
- /*
- * DUALIO and QUADIO opcodes are not supported by the spi controller,
-@@ -833,7 +758,8 @@ static ssize_t airoha_snand_dirmap_write
-
- as_ctrl = spi_controller_get_devdata(spi->controller);
-
-- bytes = as_ctrl->nfi_cfg.sec_num * as_ctrl->nfi_cfg.sec_size;
-+ /* minimum oob size is 64 */
-+ bytes = round_up(offs + len, 64);
-
- opcode = desc->info.op_tmpl.cmd.opcode;
- switch (opcode) {
-@@ -1080,7 +1006,6 @@ static int airoha_snand_exec_op(struct s
- }
-
- static const struct spi_controller_mem_ops airoha_snand_mem_ops = {
-- .adjust_op_size = airoha_snand_adjust_op_size,
- .supports_op = airoha_snand_supports_op,
- .exec_op = airoha_snand_exec_op,
- .dirmap_create = airoha_snand_dirmap_create,
-@@ -1105,36 +1030,6 @@ static int airoha_snand_setup(struct spi
- return 0;
- }
-
--static int airoha_snand_nfi_setup(struct airoha_snand_ctrl *as_ctrl)
--{
-- u32 val, sec_size, sec_num;
-- int err;
--
-- err = regmap_read(as_ctrl->regmap_nfi, REG_SPI_NFI_CON, &val);
-- if (err)
-- return err;
--
-- sec_num = FIELD_GET(SPI_NFI_SEC_NUM, val);
--
-- err = regmap_read(as_ctrl->regmap_nfi, REG_SPI_NFI_SECCUS_SIZE, &val);
-- if (err)
-- return err;
--
-- sec_size = FIELD_GET(SPI_NFI_CUS_SEC_SIZE, val);
--
-- /* init default value */
-- as_ctrl->nfi_cfg.sec_size = sec_size;
-- as_ctrl->nfi_cfg.sec_num = sec_num;
-- as_ctrl->nfi_cfg.page_size = round_down(sec_size * sec_num, 1024);
-- as_ctrl->nfi_cfg.spare_size = 16;
--
-- err = airoha_snand_nfi_init(as_ctrl);
-- if (err)
-- return err;
--
-- return airoha_snand_nfi_config(as_ctrl);
--}
--
- static const struct regmap_config spi_ctrl_regmap_config = {
- .name = "ctrl",
- .reg_bits = 32,
-@@ -1208,7 +1103,7 @@ static int airoha_snand_probe(struct pla
- ctrl->setup = airoha_snand_setup;
- device_set_node(&ctrl->dev, dev_fwnode(dev));
-
-- err = airoha_snand_nfi_setup(as_ctrl);
-+ err = airoha_snand_nfi_init(as_ctrl);
- if (err)
- return err;
-
diff --git a/lede/target/linux/airoha/patches-6.12/029-14-spi-airoha-snfi-make-compatible-with-EN7523-SoC.patch b/lede/target/linux/airoha/patches-6.12/029-14-spi-airoha-snfi-make-compatible-with-EN7523-SoC.patch
deleted file mode 100644
index 5e0c59ef67..0000000000
--- a/lede/target/linux/airoha/patches-6.12/029-14-spi-airoha-snfi-make-compatible-with-EN7523-SoC.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 12664d09a94bd0f50f31a3811447f70275ea9bb8 Mon Sep 17 00:00:00 2001
-From: Mikhail Kshevetskiy
-Date: Thu, 9 Oct 2025 19:49:18 +0300
-Subject: [PATCH 1/2] spi: airoha-snfi: make compatible with EN7523 SoC
-
-The driver is fully compatible with EN7523 based SoCs, so add
-corresponding compatible string.
-
-This driver is better than en7523-spi because it supports DMA.
-Measurements shows that DMA based flash reading is 4 times faster
-than non-dma one.
-
-Signed-off-by: Mikhail Kshevetskiy
----
- drivers/spi/spi-airoha-snfi.c | 1 +
- 1 file changed, 1 insertion(+)
-
---- a/drivers/spi/spi-airoha-snfi.c
-+++ b/drivers/spi/spi-airoha-snfi.c
-@@ -1047,6 +1047,7 @@ static const struct regmap_config spi_nf
- };
-
- static const struct of_device_id airoha_snand_ids[] = {
-+ { .compatible = "airoha,en7523-snand" },
- { .compatible = "airoha,en7581-snand" },
- { /* sentinel */ }
- };
diff --git a/lede/target/linux/airoha/patches-6.12/029-15-spi-airoha-snfi-en7523-workaround-flash-damaging-if-.patch b/lede/target/linux/airoha/patches-6.12/029-15-spi-airoha-snfi-en7523-workaround-flash-damaging-if-.patch
deleted file mode 100644
index 0b8fc4c0b0..0000000000
--- a/lede/target/linux/airoha/patches-6.12/029-15-spi-airoha-snfi-en7523-workaround-flash-damaging-if-.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-From 0299de52cbb2274345e12518298a8014adb56411 Mon Sep 17 00:00:00 2001
-From: Mikhail Kshevetskiy
-Date: Thu, 9 Oct 2025 19:33:23 +0300
-Subject: [PATCH 2/2] spi: airoha-snfi: en7523: workaround flash damaging if
- UART_TXD was short to GND
-
-We found that some serial console may pull TX line to GROUND during board
-boot time. Airoha uses TX line as one of it's BOOT pins. This will lead
-to booting in RESERVED boot mode.
-
-It was found that some flashes operates incorrectly in RESERVED mode.
-Micron and Skyhigh flashes are definitely affected by the issue,
-Winbond flashes are NOT affected.
-
-Details:
---------
-DMA reading of odd pages on affected flashes operates incorrectly. Page
-reading offset (start of the page) on hardware level is replaced by 0x10.
-Thus results in incorrect data reading. Usage of UBI make things even
-worse. Any attempt to access UBI leads to ubi damaging. As result OS loading
-becomes impossible.
-
-Non-DMA reading is OK.
-
-This patch detects booting in reserved mode, turn off DMA and print big
-fat warning.
-
-Signed-off-by: Mikhail Kshevetskiy
----
- drivers/spi/spi-airoha-snfi.c | 38 ++++++++++++++++++++++++++++++++---
- 1 file changed, 35 insertions(+), 3 deletions(-)
-
---- a/drivers/spi/spi-airoha-snfi.c
-+++ b/drivers/spi/spi-airoha-snfi.c
-@@ -1013,6 +1013,11 @@ static const struct spi_controller_mem_o
- .dirmap_write = airoha_snand_dirmap_write,
- };
-
-+static const struct spi_controller_mem_ops airoha_snand_nodma_mem_ops = {
-+ .supports_op = airoha_snand_supports_op,
-+ .exec_op = airoha_snand_exec_op,
-+};
-+
- static int airoha_snand_setup(struct spi_device *spi)
- {
- struct airoha_snand_ctrl *as_ctrl;
-@@ -1059,7 +1064,10 @@ static int airoha_snand_probe(struct pla
- struct device *dev = &pdev->dev;
- struct spi_controller *ctrl;
- void __iomem *base;
-- int err;
-+ int err, dma_enabled;
-+#if defined(CONFIG_ARM)
-+ u32 sfc_strap;
-+#endif
-
- ctrl = devm_spi_alloc_host(dev, sizeof(*as_ctrl));
- if (!ctrl)
-@@ -1093,12 +1101,36 @@ static int airoha_snand_probe(struct pla
- return dev_err_probe(dev, PTR_ERR(as_ctrl->spi_clk),
- "unable to get spi clk\n");
-
-- err = dma_set_mask(as_ctrl->dev, DMA_BIT_MASK(32));
-+ dma_enabled = 1;
-+#if defined(CONFIG_ARM)
-+ err = regmap_read(as_ctrl->regmap_ctrl,
-+ REG_SPI_CTRL_SFC_STRAP, &sfc_strap);
- if (err)
- return err;
-
-+ if (!(sfc_strap & 0x04)) {
-+ dma_enabled = 0;
-+ printk(KERN_WARNING "\n"
-+ "=== WARNING ======================================================\n"
-+ "Detected booting in RESERVED mode (UART_TXD was short to GND).\n"
-+ "This mode is known for incorrect DMA reading of some flashes.\n"
-+ "Usage of DMA for flash operations will be disabled to prevent data\n"
-+ "damage. Unplug your serial console and power cycle the board\n"
-+ "to boot with full performance.\n"
-+ "==================================================================\n\n");
-+ }
-+#endif
-+
-+ if (dma_enabled) {
-+ err = dma_set_mask(as_ctrl->dev, DMA_BIT_MASK(32));
-+ if (err)
-+ return err;
-+ }
-+
- ctrl->num_chipselect = 2;
-- ctrl->mem_ops = &airoha_snand_mem_ops;
-+ ctrl->mem_ops = dma_enabled ?
-+ &airoha_snand_mem_ops :
-+ &airoha_snand_nodma_mem_ops;
- ctrl->bits_per_word_mask = SPI_BPW_MASK(8);
- ctrl->mode_bits = SPI_RX_DUAL;
- ctrl->setup = airoha_snand_setup;
diff --git a/lede/target/linux/airoha/patches-6.12/030-v6.13-hwrng-airoha-add-support-for-Airoha-EN7581-TRNG.patch b/lede/target/linux/airoha/patches-6.12/030-v6.13-hwrng-airoha-add-support-for-Airoha-EN7581-TRNG.patch
deleted file mode 100644
index e21fb5649e..0000000000
--- a/lede/target/linux/airoha/patches-6.12/030-v6.13-hwrng-airoha-add-support-for-Airoha-EN7581-TRNG.patch
+++ /dev/null
@@ -1,306 +0,0 @@
-From 5c5db81bff81a0fcd9ad998543d4241cbfe4742f Mon Sep 17 00:00:00 2001
-From: Christian Marangi
-Date: Thu, 17 Oct 2024 14:44:38 +0200
-Subject: [PATCH 2/2] hwrng: airoha - add support for Airoha EN7581 TRNG
-
-Add support for Airoha TRNG. The Airoha SoC provide a True RNG module
-that can output 4 bytes of raw data at times.
-
-The module makes use of various noise source to provide True Random
-Number Generation.
-
-On probe the module is reset to operate Health Test and verify correct
-execution of it.
-
-The module can also provide DRBG function but the execution mode is
-mutually exclusive, running as TRNG doesn't permit to also run it as
-DRBG.
-
-Signed-off-by: Christian Marangi
-Reviewed-by: Martin Kaiser
-Signed-off-by: Herbert Xu
----
- drivers/char/hw_random/Kconfig | 13 ++
- drivers/char/hw_random/Makefile | 1 +
- drivers/char/hw_random/airoha-trng.c | 243 +++++++++++++++++++++++++++
- 3 files changed, 257 insertions(+)
- create mode 100644 drivers/char/hw_random/airoha-trng.c
-
---- a/drivers/char/hw_random/Kconfig
-+++ b/drivers/char/hw_random/Kconfig
-@@ -62,6 +62,19 @@ config HW_RANDOM_AMD
-
- If unsure, say Y.
-
-+config HW_RANDOM_AIROHA
-+ tristate "Airoha True HW Random Number Generator support"
-+ depends on ARCH_AIROHA || COMPILE_TEST
-+ default HW_RANDOM
-+ help
-+ This driver provides kernel-side support for the True Random Number
-+ Generator hardware found on Airoha SoC.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called airoha-rng.
-+
-+ If unsure, say Y.
-+
- config HW_RANDOM_ATMEL
- tristate "Atmel Random Number Generator support"
- depends on (ARCH_AT91 || COMPILE_TEST)
---- a/drivers/char/hw_random/Makefile
-+++ b/drivers/char/hw_random/Makefile
-@@ -8,6 +8,7 @@ rng-core-y := core.o
- obj-$(CONFIG_HW_RANDOM_TIMERIOMEM) += timeriomem-rng.o
- obj-$(CONFIG_HW_RANDOM_INTEL) += intel-rng.o
- obj-$(CONFIG_HW_RANDOM_AMD) += amd-rng.o
-+obj-$(CONFIG_HW_RANDOM_AIROHA) += airoha-trng.o
- obj-$(CONFIG_HW_RANDOM_ATMEL) += atmel-rng.o
- obj-$(CONFIG_HW_RANDOM_BA431) += ba431-rng.o
- obj-$(CONFIG_HW_RANDOM_GEODE) += geode-rng.o
---- /dev/null
-+++ b/drivers/char/hw_random/airoha-trng.c
-@@ -0,0 +1,243 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/* Copyright (C) 2024 Christian Marangi */
-+
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+
-+#define TRNG_IP_RDY 0x800
-+#define CNT_TRANS GENMASK(15, 8)
-+#define SAMPLE_RDY BIT(0)
-+#define TRNG_NS_SEK_AND_DAT_EN 0x804
-+#define RNG_EN BIT(31) /* referenced as ring_en */
-+#define RAW_DATA_EN BIT(16)
-+#define TRNG_HEALTH_TEST_SW_RST 0x808
-+#define SW_RST BIT(0) /* Active High */
-+#define TRNG_INTR_EN 0x818
-+#define INTR_MASK BIT(16)
-+#define CONTINUOUS_HEALTH_INITR_EN BIT(2)
-+#define SW_STARTUP_INITR_EN BIT(1)
-+#define RST_STARTUP_INITR_EN BIT(0)
-+/* Notice that Health Test are done only out of Reset and with RNG_EN */
-+#define TRNG_HEALTH_TEST_STATUS 0x824
-+#define CONTINUOUS_HEALTH_AP_TEST_FAIL BIT(23)
-+#define CONTINUOUS_HEALTH_RC_TEST_FAIL BIT(22)
-+#define SW_STARTUP_TEST_DONE BIT(21)
-+#define SW_STARTUP_AP_TEST_FAIL BIT(20)
-+#define SW_STARTUP_RC_TEST_FAIL BIT(19)
-+#define RST_STARTUP_TEST_DONE BIT(18)
-+#define RST_STARTUP_AP_TEST_FAIL BIT(17)
-+#define RST_STARTUP_RC_TEST_FAIL BIT(16)
-+#define RAW_DATA_VALID BIT(7)
-+
-+#define TRNG_RAW_DATA_OUT 0x828
-+
-+#define TRNG_CNT_TRANS_VALID 0x80
-+#define BUSY_LOOP_SLEEP 10
-+#define BUSY_LOOP_TIMEOUT (BUSY_LOOP_SLEEP * 10000)
-+
-+struct airoha_trng {
-+ void __iomem *base;
-+ struct hwrng rng;
-+ struct device *dev;
-+
-+ struct completion rng_op_done;
-+};
-+
-+static int airoha_trng_irq_mask(struct airoha_trng *trng)
-+{
-+ u32 val;
-+
-+ val = readl(trng->base + TRNG_INTR_EN);
-+ val |= INTR_MASK;
-+ writel(val, trng->base + TRNG_INTR_EN);
-+
-+ return 0;
-+}
-+
-+static int airoha_trng_irq_unmask(struct airoha_trng *trng)
-+{
-+ u32 val;
-+
-+ val = readl(trng->base + TRNG_INTR_EN);
-+ val &= ~INTR_MASK;
-+ writel(val, trng->base + TRNG_INTR_EN);
-+
-+ return 0;
-+}
-+
-+static int airoha_trng_init(struct hwrng *rng)
-+{
-+ struct airoha_trng *trng = container_of(rng, struct airoha_trng, rng);
-+ int ret;
-+ u32 val;
-+
-+ val = readl(trng->base + TRNG_NS_SEK_AND_DAT_EN);
-+ val |= RNG_EN;
-+ writel(val, trng->base + TRNG_NS_SEK_AND_DAT_EN);
-+
-+ /* Set out of SW Reset */
-+ airoha_trng_irq_unmask(trng);
-+ writel(0, trng->base + TRNG_HEALTH_TEST_SW_RST);
-+
-+ ret = wait_for_completion_timeout(&trng->rng_op_done, BUSY_LOOP_TIMEOUT);
-+ if (ret <= 0) {
-+ dev_err(trng->dev, "Timeout waiting for Health Check\n");
-+ airoha_trng_irq_mask(trng);
-+ return -ENODEV;
-+ }
-+
-+ /* Check if Health Test Failed */
-+ val = readl(trng->base + TRNG_HEALTH_TEST_STATUS);
-+ if (val & (RST_STARTUP_AP_TEST_FAIL | RST_STARTUP_RC_TEST_FAIL)) {
-+ dev_err(trng->dev, "Health Check fail: %s test fail\n",
-+ val & RST_STARTUP_AP_TEST_FAIL ? "AP" : "RC");
-+ return -ENODEV;
-+ }
-+
-+ /* Check if IP is ready */
-+ ret = readl_poll_timeout(trng->base + TRNG_IP_RDY, val,
-+ val & SAMPLE_RDY, 10, 1000);
-+ if (ret < 0) {
-+ dev_err(trng->dev, "Timeout waiting for IP ready");
-+ return -ENODEV;
-+ }
-+
-+ /* CNT_TRANS must be 0x80 for IP to be considered ready */
-+ ret = readl_poll_timeout(trng->base + TRNG_IP_RDY, val,
-+ FIELD_GET(CNT_TRANS, val) == TRNG_CNT_TRANS_VALID,
-+ 10, 1000);
-+ if (ret < 0) {
-+ dev_err(trng->dev, "Timeout waiting for IP ready");
-+ return -ENODEV;
-+ }
-+
-+ return 0;
-+}
-+
-+static void airoha_trng_cleanup(struct hwrng *rng)
-+{
-+ struct airoha_trng *trng = container_of(rng, struct airoha_trng, rng);
-+ u32 val;
-+
-+ val = readl(trng->base + TRNG_NS_SEK_AND_DAT_EN);
-+ val &= ~RNG_EN;
-+ writel(val, trng->base + TRNG_NS_SEK_AND_DAT_EN);
-+
-+ /* Put it in SW Reset */
-+ writel(SW_RST, trng->base + TRNG_HEALTH_TEST_SW_RST);
-+}
-+
-+static int airoha_trng_read(struct hwrng *rng, void *buf, size_t max, bool wait)
-+{
-+ struct airoha_trng *trng = container_of(rng, struct airoha_trng, rng);
-+ u32 *data = buf;
-+ u32 status;
-+ int ret;
-+
-+ ret = readl_poll_timeout(trng->base + TRNG_HEALTH_TEST_STATUS, status,
-+ status & RAW_DATA_VALID, 10, 1000);
-+ if (ret < 0) {
-+ dev_err(trng->dev, "Timeout waiting for TRNG RAW Data valid\n");
-+ return ret;
-+ }
-+
-+ *data = readl(trng->base + TRNG_RAW_DATA_OUT);
-+
-+ return 4;
-+}
-+
-+static irqreturn_t airoha_trng_irq(int irq, void *priv)
-+{
-+ struct airoha_trng *trng = (struct airoha_trng *)priv;
-+
-+ airoha_trng_irq_mask(trng);
-+ /* Just complete the task, we will read the value later */
-+ complete(&trng->rng_op_done);
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static int airoha_trng_probe(struct platform_device *pdev)
-+{
-+ struct device *dev = &pdev->dev;
-+ struct airoha_trng *trng;
-+ int irq, ret;
-+ u32 val;
-+
-+ trng = devm_kzalloc(dev, sizeof(*trng), GFP_KERNEL);
-+ if (!trng)
-+ return -ENOMEM;
-+
-+ trng->base = devm_platform_ioremap_resource(pdev, 0);
-+ if (IS_ERR(trng->base))
-+ return PTR_ERR(trng->base);
-+
-+ irq = platform_get_irq(pdev, 0);
-+ if (irq < 0)
-+ return irq;
-+
-+ airoha_trng_irq_mask(trng);
-+ ret = devm_request_irq(&pdev->dev, irq, airoha_trng_irq, 0,
-+ pdev->name, (void *)trng);
-+ if (ret) {
-+ dev_err(dev, "Can't get interrupt working.\n");
-+ return ret;
-+ }
-+
-+ init_completion(&trng->rng_op_done);
-+
-+ /* Enable interrupt for SW reset Health Check */
-+ val = readl(trng->base + TRNG_INTR_EN);
-+ val |= RST_STARTUP_INITR_EN;
-+ writel(val, trng->base + TRNG_INTR_EN);
-+
-+ /* Set output to raw data */
-+ val = readl(trng->base + TRNG_NS_SEK_AND_DAT_EN);
-+ val |= RAW_DATA_EN;
-+ writel(val, trng->base + TRNG_NS_SEK_AND_DAT_EN);
-+
-+ /* Put it in SW Reset */
-+ writel(SW_RST, trng->base + TRNG_HEALTH_TEST_SW_RST);
-+
-+ trng->dev = dev;
-+ trng->rng.name = pdev->name;
-+ trng->rng.init = airoha_trng_init;
-+ trng->rng.cleanup = airoha_trng_cleanup;
-+ trng->rng.read = airoha_trng_read;
-+
-+ ret = devm_hwrng_register(dev, &trng->rng);
-+ if (ret) {
-+ dev_err(dev, "failed to register rng device: %d\n", ret);
-+ return ret;
-+ }
-+
-+ return 0;
-+}
-+
-+static const struct of_device_id airoha_trng_of_match[] = {
-+ { .compatible = "airoha,en7581-trng", },
-+ {},
-+};
-+MODULE_DEVICE_TABLE(of, airoha_trng_of_match);
-+
-+static struct platform_driver airoha_trng_driver = {
-+ .driver = {
-+ .name = "airoha-trng",
-+ .of_match_table = airoha_trng_of_match,
-+ },
-+ .probe = airoha_trng_probe,
-+};
-+
-+module_platform_driver(airoha_trng_driver);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Christian Marangi ");
-+MODULE_DESCRIPTION("Airoha True Random Number Generator driver");
diff --git a/lede/target/linux/airoha/patches-6.12/031-01-v6.13-net-airoha-Read-completion-queue-data-in-airoha_qdma.patch b/lede/target/linux/airoha/patches-6.12/031-01-v6.13-net-airoha-Read-completion-queue-data-in-airoha_qdma.patch
deleted file mode 100644
index 390d21b290..0000000000
--- a/lede/target/linux/airoha/patches-6.12/031-01-v6.13-net-airoha-Read-completion-queue-data-in-airoha_qdma.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-From 3affa310de523d63e52ea8e2efb3c476df29e414 Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Tue, 29 Oct 2024 13:17:09 +0100
-Subject: [PATCH 1/2] net: airoha: Read completion queue data in
- airoha_qdma_tx_napi_poll()
-
-In order to avoid any possible race, read completion queue head and
-pending entry in airoha_qdma_tx_napi_poll routine instead of doing it in
-airoha_irq_handler. Remove unused airoha_tx_irq_queue unused fields.
-This is a preliminary patch to add Qdisc offload for airoha_eth driver.
-
-Signed-off-by: Lorenzo Bianconi
-Link: https://patch.msgid.link/20241029-airoha-en7581-tx-napi-work-v1-1-96ad1686b946@kernel.org
-Signed-off-by: Jakub Kicinski
----
- drivers/net/ethernet/mediatek/airoha_eth.c | 31 +++++++++-------------
- 1 file changed, 13 insertions(+), 18 deletions(-)
-
---- a/drivers/net/ethernet/mediatek/airoha_eth.c
-+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
-@@ -752,11 +752,9 @@ struct airoha_tx_irq_queue {
- struct airoha_qdma *qdma;
-
- struct napi_struct napi;
-- u32 *q;
-
- int size;
-- int queued;
-- u16 head;
-+ u32 *q;
- };
-
- struct airoha_hw_stats {
-@@ -1655,25 +1653,31 @@ static int airoha_qdma_init_rx(struct ai
- static int airoha_qdma_tx_napi_poll(struct napi_struct *napi, int budget)
- {
- struct airoha_tx_irq_queue *irq_q;
-+ int id, done = 0, irq_queued;
- struct airoha_qdma *qdma;
- struct airoha_eth *eth;
-- int id, done = 0;
-+ u32 status, head;
-
- irq_q = container_of(napi, struct airoha_tx_irq_queue, napi);
- qdma = irq_q->qdma;
- id = irq_q - &qdma->q_tx_irq[0];
- eth = qdma->eth;
-
-- while (irq_q->queued > 0 && done < budget) {
-- u32 qid, last, val = irq_q->q[irq_q->head];
-+ status = airoha_qdma_rr(qdma, REG_IRQ_STATUS(id));
-+ head = FIELD_GET(IRQ_HEAD_IDX_MASK, status);
-+ head = head % irq_q->size;
-+ irq_queued = FIELD_GET(IRQ_ENTRY_LEN_MASK, status);
-+
-+ while (irq_queued > 0 && done < budget) {
-+ u32 qid, last, val = irq_q->q[head];
- struct airoha_queue *q;
-
- if (val == 0xff)
- break;
-
-- irq_q->q[irq_q->head] = 0xff; /* mark as done */
-- irq_q->head = (irq_q->head + 1) % irq_q->size;
-- irq_q->queued--;
-+ irq_q->q[head] = 0xff; /* mark as done */
-+ head = (head + 1) % irq_q->size;
-+ irq_queued--;
- done++;
-
- last = FIELD_GET(IRQ_DESC_IDX_MASK, val);
-@@ -2025,20 +2029,11 @@ static irqreturn_t airoha_irq_handler(in
-
- if (intr[0] & INT_TX_MASK) {
- for (i = 0; i < ARRAY_SIZE(qdma->q_tx_irq); i++) {
-- struct airoha_tx_irq_queue *irq_q = &qdma->q_tx_irq[i];
-- u32 status, head;
--
- if (!(intr[0] & TX_DONE_INT_MASK(i)))
- continue;
-
- airoha_qdma_irq_disable(qdma, QDMA_INT_REG_IDX0,
- TX_DONE_INT_MASK(i));
--
-- status = airoha_qdma_rr(qdma, REG_IRQ_STATUS(i));
-- head = FIELD_GET(IRQ_HEAD_IDX_MASK, status);
-- irq_q->head = head % irq_q->size;
-- irq_q->queued = FIELD_GET(IRQ_ENTRY_LEN_MASK, status);
--
- napi_schedule(&qdma->q_tx_irq[i].napi);
- }
- }
diff --git a/lede/target/linux/airoha/patches-6.12/031-02-v6.13-net-airoha-Simplify-Tx-napi-logic.patch b/lede/target/linux/airoha/patches-6.12/031-02-v6.13-net-airoha-Simplify-Tx-napi-logic.patch
deleted file mode 100644
index 04b10f39cb..0000000000
--- a/lede/target/linux/airoha/patches-6.12/031-02-v6.13-net-airoha-Simplify-Tx-napi-logic.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-From 0c729f53b8c33b9e5eadc2d5e673759e3510501e Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Tue, 29 Oct 2024 13:17:10 +0100
-Subject: [PATCH 2/2] net: airoha: Simplify Tx napi logic
-
-Simplify Tx napi logic relying just on the packet index provided by
-completion queue indicating the completed packet that can be removed
-from the Tx DMA ring.
-This is a preliminary patch to add Qdisc offload for airoha_eth driver.
-
-Signed-off-by: Lorenzo Bianconi
-Link: https://patch.msgid.link/20241029-airoha-en7581-tx-napi-work-v1-2-96ad1686b946@kernel.org
-Signed-off-by: Jakub Kicinski
----
- drivers/net/ethernet/mediatek/airoha_eth.c | 73 ++++++++++++----------
- 1 file changed, 41 insertions(+), 32 deletions(-)
-
---- a/drivers/net/ethernet/mediatek/airoha_eth.c
-+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
-@@ -1669,8 +1669,12 @@ static int airoha_qdma_tx_napi_poll(stru
- irq_queued = FIELD_GET(IRQ_ENTRY_LEN_MASK, status);
-
- while (irq_queued > 0 && done < budget) {
-- u32 qid, last, val = irq_q->q[head];
-+ u32 qid, val = irq_q->q[head];
-+ struct airoha_qdma_desc *desc;
-+ struct airoha_queue_entry *e;
- struct airoha_queue *q;
-+ u32 index, desc_ctrl;
-+ struct sk_buff *skb;
-
- if (val == 0xff)
- break;
-@@ -1680,9 +1684,7 @@ static int airoha_qdma_tx_napi_poll(stru
- irq_queued--;
- done++;
-
-- last = FIELD_GET(IRQ_DESC_IDX_MASK, val);
- qid = FIELD_GET(IRQ_RING_IDX_MASK, val);
--
- if (qid >= ARRAY_SIZE(qdma->q_tx))
- continue;
-
-@@ -1690,46 +1692,53 @@ static int airoha_qdma_tx_napi_poll(stru
- if (!q->ndesc)
- continue;
-
-+ index = FIELD_GET(IRQ_DESC_IDX_MASK, val);
-+ if (index >= q->ndesc)
-+ continue;
-+
- spin_lock_bh(&q->lock);
-
-- while (q->queued > 0) {
-- struct airoha_qdma_desc *desc = &q->desc[q->tail];
-- struct airoha_queue_entry *e = &q->entry[q->tail];
-- u32 desc_ctrl = le32_to_cpu(desc->ctrl);
-- struct sk_buff *skb = e->skb;
-- u16 index = q->tail;
--
-- if (!(desc_ctrl & QDMA_DESC_DONE_MASK) &&
-- !(desc_ctrl & QDMA_DESC_DROP_MASK))
-- break;
-+ if (!q->queued)
-+ goto unlock;
-
-- q->tail = (q->tail + 1) % q->ndesc;
-- q->queued--;
-+ desc = &q->desc[index];
-+ desc_ctrl = le32_to_cpu(desc->ctrl);
-
-- dma_unmap_single(eth->dev, e->dma_addr, e->dma_len,
-- DMA_TO_DEVICE);
--
-- WRITE_ONCE(desc->msg0, 0);
-- WRITE_ONCE(desc->msg1, 0);
-+ if (!(desc_ctrl & QDMA_DESC_DONE_MASK) &&
-+ !(desc_ctrl & QDMA_DESC_DROP_MASK))
-+ goto unlock;
-+
-+ e = &q->entry[index];
-+ skb = e->skb;
-+
-+ dma_unmap_single(eth->dev, e->dma_addr, e->dma_len,
-+ DMA_TO_DEVICE);
-+ memset(e, 0, sizeof(*e));
-+ WRITE_ONCE(desc->msg0, 0);
-+ WRITE_ONCE(desc->msg1, 0);
-+ q->queued--;
-+
-+ /* completion ring can report out-of-order indexes if hw QoS
-+ * is enabled and packets with different priority are queued
-+ * to same DMA ring. Take into account possible out-of-order
-+ * reports incrementing DMA ring tail pointer
-+ */
-+ while (q->tail != q->head && !q->entry[q->tail].dma_addr)
-+ q->tail = (q->tail + 1) % q->ndesc;
-
-- if (skb) {
-- u16 queue = skb_get_queue_mapping(skb);
-- struct netdev_queue *txq;
--
-- txq = netdev_get_tx_queue(skb->dev, queue);
-- netdev_tx_completed_queue(txq, 1, skb->len);
-- if (netif_tx_queue_stopped(txq) &&
-- q->ndesc - q->queued >= q->free_thr)
-- netif_tx_wake_queue(txq);
--
-- dev_kfree_skb_any(skb);
-- e->skb = NULL;
-- }
-+ if (skb) {
-+ u16 queue = skb_get_queue_mapping(skb);
-+ struct netdev_queue *txq;
-+
-+ txq = netdev_get_tx_queue(skb->dev, queue);
-+ netdev_tx_completed_queue(txq, 1, skb->len);
-+ if (netif_tx_queue_stopped(txq) &&
-+ q->ndesc - q->queued >= q->free_thr)
-+ netif_tx_wake_queue(txq);
-
-- if (index == last)
-- break;
-+ dev_kfree_skb_any(skb);
- }
--
-+unlock:
- spin_unlock_bh(&q->lock);
- }
-
diff --git a/lede/target/linux/airoha/patches-6.12/032-v6.13-watchdog-Add-support-for-Airoha-EN7851-watchdog.patch b/lede/target/linux/airoha/patches-6.12/032-v6.13-watchdog-Add-support-for-Airoha-EN7851-watchdog.patch
deleted file mode 100644
index ac65bec2a1..0000000000
--- a/lede/target/linux/airoha/patches-6.12/032-v6.13-watchdog-Add-support-for-Airoha-EN7851-watchdog.patch
+++ /dev/null
@@ -1,267 +0,0 @@
-From 3cf67f3769b8227ca75ca7102180a2e270ee01aa Mon Sep 17 00:00:00 2001
-From: Christian Marangi
-Date: Fri, 11 Oct 2024 12:43:53 +0200
-Subject: [PATCH] watchdog: Add support for Airoha EN7851 watchdog
-
-Add support for Airoha EN7851 watchdog. This is a very basic watchdog
-with no pretimeout support, max timeout is 28 seconds and it ticks based
-on half the SoC BUS clock.
-
-Signed-off-by: Christian Marangi
-Reviewed-by: Guenter Roeck
-Link: https://lore.kernel.org/r/20241011104411.28659-2-ansuelsmth@gmail.com
-Signed-off-by: Guenter Roeck
-Signed-off-by: Wim Van Sebroeck
----
- drivers/watchdog/Kconfig | 8 ++
- drivers/watchdog/Makefile | 1 +
- drivers/watchdog/airoha_wdt.c | 216 ++++++++++++++++++++++++++++++++++
- 3 files changed, 225 insertions(+)
- create mode 100644 drivers/watchdog/airoha_wdt.c
-
---- a/drivers/watchdog/Kconfig
-+++ b/drivers/watchdog/Kconfig
-@@ -408,6 +408,14 @@ config SL28CPLD_WATCHDOG
-
- # ARM Architecture
-
-+config AIROHA_WATCHDOG
-+ tristate "Airoha EN7581 Watchdog"
-+ depends on ARCH_AIROHA || COMPILE_TEST
-+ select WATCHDOG_CORE
-+ help
-+ Watchdog timer embedded into Airoha SoC. This will reboot your
-+ system when the timeout is reached.
-+
- config ARM_SP805_WATCHDOG
- tristate "ARM SP805 Watchdog"
- depends on (ARM || ARM64 || COMPILE_TEST) && ARM_AMBA
---- a/drivers/watchdog/Makefile
-+++ b/drivers/watchdog/Makefile
-@@ -40,6 +40,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.
- obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
- obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
- obj-$(CONFIG_ARMADA_37XX_WATCHDOG) += armada_37xx_wdt.o
-+obj-$(CONFIG_AIROHA_WATCHDOG) += airoha_wdt.o
- obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
- obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
- obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
---- /dev/null
-+++ b/drivers/watchdog/airoha_wdt.c
-@@ -0,0 +1,216 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Airoha Watchdog Driver
-+ *
-+ * Copyright (c) 2024, AIROHA All rights reserved.
-+ *
-+ * Mayur Kumar
-+ * Christian Marangi
-+ *
-+ */
-+
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+
-+/* Base address of timer and watchdog registers */
-+#define TIMER_CTRL 0x0
-+#define WDT_ENABLE BIT(25)
-+#define WDT_TIMER_INTERRUPT BIT(21)
-+/* Timer3 is used as Watchdog Timer */
-+#define WDT_TIMER_ENABLE BIT(5)
-+#define WDT_TIMER_LOAD_VALUE 0x2c
-+#define WDT_TIMER_CUR_VALUE 0x30
-+#define WDT_TIMER_VAL GENMASK(31, 0)
-+#define WDT_RELOAD 0x38
-+#define WDT_RLD BIT(0)
-+
-+/* Airoha watchdog structure description */
-+struct airoha_wdt_desc {
-+ struct watchdog_device wdog_dev;
-+ unsigned int wdt_freq;
-+ void __iomem *base;
-+};
-+
-+#define WDT_HEARTBEAT 24
-+static int heartbeat = WDT_HEARTBEAT;
-+module_param(heartbeat, int, 0);
-+MODULE_PARM_DESC(heartbeat, "Watchdog heartbeats in seconds. (default="
-+ __MODULE_STRING(WDT_HEARTBEAT) ")");
-+
-+static bool nowayout = WATCHDOG_NOWAYOUT;
-+module_param(nowayout, bool, 0);
-+MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
-+ __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
-+
-+static int airoha_wdt_start(struct watchdog_device *wdog_dev)
-+{
-+ struct airoha_wdt_desc *airoha_wdt = watchdog_get_drvdata(wdog_dev);
-+ u32 val;
-+
-+ val = readl(airoha_wdt->base + TIMER_CTRL);
-+ val |= (WDT_TIMER_ENABLE | WDT_ENABLE | WDT_TIMER_INTERRUPT);
-+ writel(val, airoha_wdt->base + TIMER_CTRL);
-+ val = wdog_dev->timeout * airoha_wdt->wdt_freq;
-+ writel(val, airoha_wdt->base + WDT_TIMER_LOAD_VALUE);
-+
-+ return 0;
-+}
-+
-+static int airoha_wdt_stop(struct watchdog_device *wdog_dev)
-+{
-+ struct airoha_wdt_desc *airoha_wdt = watchdog_get_drvdata(wdog_dev);
-+ u32 val;
-+
-+ val = readl(airoha_wdt->base + TIMER_CTRL);
-+ val &= (~WDT_ENABLE & ~WDT_TIMER_ENABLE);
-+ writel(val, airoha_wdt->base + TIMER_CTRL);
-+
-+ return 0;
-+}
-+
-+static int airoha_wdt_ping(struct watchdog_device *wdog_dev)
-+{
-+ struct airoha_wdt_desc *airoha_wdt = watchdog_get_drvdata(wdog_dev);
-+ u32 val;
-+
-+ val = readl(airoha_wdt->base + WDT_RELOAD);
-+ val |= WDT_RLD;
-+ writel(val, airoha_wdt->base + WDT_RELOAD);
-+
-+ return 0;
-+}
-+
-+static int airoha_wdt_set_timeout(struct watchdog_device *wdog_dev, unsigned int timeout)
-+{
-+ wdog_dev->timeout = timeout;
-+
-+ if (watchdog_active(wdog_dev)) {
-+ airoha_wdt_stop(wdog_dev);
-+ return airoha_wdt_start(wdog_dev);
-+ }
-+
-+ return 0;
-+}
-+
-+static unsigned int airoha_wdt_get_timeleft(struct watchdog_device *wdog_dev)
-+{
-+ struct airoha_wdt_desc *airoha_wdt = watchdog_get_drvdata(wdog_dev);
-+ u32 val;
-+
-+ val = readl(airoha_wdt->base + WDT_TIMER_CUR_VALUE);
-+ return DIV_ROUND_UP(val, airoha_wdt->wdt_freq);
-+}
-+
-+static const struct watchdog_info airoha_wdt_info = {
-+ .options = WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE | WDIOF_KEEPALIVEPING,
-+ .identity = "Airoha Watchdog",
-+};
-+
-+static const struct watchdog_ops airoha_wdt_ops = {
-+ .owner = THIS_MODULE,
-+ .start = airoha_wdt_start,
-+ .stop = airoha_wdt_stop,
-+ .ping = airoha_wdt_ping,
-+ .set_timeout = airoha_wdt_set_timeout,
-+ .get_timeleft = airoha_wdt_get_timeleft,
-+};
-+
-+static int airoha_wdt_probe(struct platform_device *pdev)
-+{
-+ struct airoha_wdt_desc *airoha_wdt;
-+ struct watchdog_device *wdog_dev;
-+ struct device *dev = &pdev->dev;
-+ struct clk *bus_clk;
-+ int ret;
-+
-+ airoha_wdt = devm_kzalloc(dev, sizeof(*airoha_wdt), GFP_KERNEL);
-+ if (!airoha_wdt)
-+ return -ENOMEM;
-+
-+ airoha_wdt->base = devm_platform_ioremap_resource(pdev, 0);
-+ if (IS_ERR(airoha_wdt->base))
-+ return PTR_ERR(airoha_wdt->base);
-+
-+ bus_clk = devm_clk_get_enabled(dev, "bus");
-+ if (IS_ERR(bus_clk))
-+ return dev_err_probe(dev, PTR_ERR(bus_clk),
-+ "failed to enable bus clock\n");
-+
-+ /* Watchdog ticks at half the bus rate */
-+ airoha_wdt->wdt_freq = clk_get_rate(bus_clk) / 2;
-+
-+ /* Initialize struct watchdog device */
-+ wdog_dev = &airoha_wdt->wdog_dev;
-+ wdog_dev->timeout = heartbeat;
-+ wdog_dev->info = &airoha_wdt_info;
-+ wdog_dev->ops = &airoha_wdt_ops;
-+ /* Bus 300MHz, watchdog 150MHz, 28 seconds */
-+ wdog_dev->max_timeout = FIELD_MAX(WDT_TIMER_VAL) / airoha_wdt->wdt_freq;
-+ wdog_dev->parent = dev;
-+
-+ watchdog_set_drvdata(wdog_dev, airoha_wdt);
-+ watchdog_set_nowayout(wdog_dev, nowayout);
-+ watchdog_stop_on_unregister(wdog_dev);
-+
-+ ret = devm_watchdog_register_device(dev, wdog_dev);
-+ if (ret)
-+ return ret;
-+
-+ platform_set_drvdata(pdev, airoha_wdt);
-+ return 0;
-+}
-+
-+static int airoha_wdt_suspend(struct device *dev)
-+{
-+ struct airoha_wdt_desc *airoha_wdt = dev_get_drvdata(dev);
-+
-+ if (watchdog_active(&airoha_wdt->wdog_dev))
-+ airoha_wdt_stop(&airoha_wdt->wdog_dev);
-+
-+ return 0;
-+}
-+
-+static int airoha_wdt_resume(struct device *dev)
-+{
-+ struct airoha_wdt_desc *airoha_wdt = dev_get_drvdata(dev);
-+
-+ if (watchdog_active(&airoha_wdt->wdog_dev)) {
-+ airoha_wdt_start(&airoha_wdt->wdog_dev);
-+ airoha_wdt_ping(&airoha_wdt->wdog_dev);
-+ }
-+ return 0;
-+}
-+
-+static const struct of_device_id airoha_wdt_of_match[] = {
-+ { .compatible = "airoha,en7581-wdt", },
-+ { },
-+};
-+
-+MODULE_DEVICE_TABLE(of, airoha_wdt_of_match);
-+
-+static DEFINE_SIMPLE_DEV_PM_OPS(airoha_wdt_pm_ops, airoha_wdt_suspend, airoha_wdt_resume);
-+
-+static struct platform_driver airoha_wdt_driver = {
-+ .probe = airoha_wdt_probe,
-+ .driver = {
-+ .name = "airoha-wdt",
-+ .pm = pm_sleep_ptr(&airoha_wdt_pm_ops),
-+ .of_match_table = airoha_wdt_of_match,
-+ },
-+};
-+
-+module_platform_driver(airoha_wdt_driver);
-+
-+MODULE_AUTHOR("Mayur Kumar ");
-+MODULE_AUTHOR("Christian Marangi ");
-+MODULE_DESCRIPTION("Airoha EN7581 Watchdog Driver");
-+MODULE_LICENSE("GPL");
diff --git a/lede/target/linux/airoha/patches-6.12/033-05-v6.13-clk-en7523-move-en7581_reset_register-in-en7581_clk_.patch b/lede/target/linux/airoha/patches-6.12/033-05-v6.13-clk-en7523-move-en7581_reset_register-in-en7581_clk_.patch
deleted file mode 100644
index 6d6868f75a..0000000000
--- a/lede/target/linux/airoha/patches-6.12/033-05-v6.13-clk-en7523-move-en7581_reset_register-in-en7581_clk_.patch
+++ /dev/null
@@ -1,174 +0,0 @@
-From 82e6bf912d5846646892becea659b39d178d79e3 Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Tue, 12 Nov 2024 01:08:53 +0100
-Subject: [PATCH 5/6] clk: en7523: move en7581_reset_register() in
- en7581_clk_hw_init()
-
-Move en7581_reset_register routine in en7581_clk_hw_init() since reset
-feature is supported just by EN7581 SoC.
-Get rid of reset struct in en_clk_soc_data data struct.
-
-Signed-off-by: Lorenzo Bianconi
-Link: https://lore.kernel.org/r/20241112-clk-en7581-syscon-v2-6-8ada5e394ae4@kernel.org
-Signed-off-by: Stephen Boyd
----
- drivers/clk/clk-en7523.c | 93 ++++++++++++++--------------------------
- 1 file changed, 33 insertions(+), 60 deletions(-)
-
---- a/drivers/clk/clk-en7523.c
-+++ b/drivers/clk/clk-en7523.c
-@@ -76,11 +76,6 @@ struct en_rst_data {
-
- struct en_clk_soc_data {
- const struct clk_ops pcie_ops;
-- struct {
-- const u16 *bank_ofs;
-- const u16 *idx_map;
-- u16 idx_map_nr;
-- } reset;
- int (*hw_init)(struct platform_device *pdev,
- struct clk_hw_onecell_data *clk_data);
- };
-@@ -596,32 +591,6 @@ static void en7581_register_clocks(struc
- clk_data->num = EN7523_NUM_CLOCKS;
- }
-
--static int en7581_clk_hw_init(struct platform_device *pdev,
-- struct clk_hw_onecell_data *clk_data)
--{
-- void __iomem *np_base;
-- struct regmap *map;
-- u32 val;
--
-- map = syscon_regmap_lookup_by_compatible("airoha,en7581-chip-scu");
-- if (IS_ERR(map))
-- return PTR_ERR(map);
--
-- np_base = devm_platform_ioremap_resource(pdev, 0);
-- if (IS_ERR(np_base))
-- return PTR_ERR(np_base);
--
-- en7581_register_clocks(&pdev->dev, clk_data, map, np_base);
--
-- val = readl(np_base + REG_NP_SCU_SSTR);
-- val &= ~(REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK);
-- writel(val, np_base + REG_NP_SCU_SSTR);
-- val = readl(np_base + REG_NP_SCU_PCIC);
-- writel(val | 3, np_base + REG_NP_SCU_PCIC);
--
-- return 0;
--}
--
- static int en7523_reset_update(struct reset_controller_dev *rcdev,
- unsigned long id, bool assert)
- {
-@@ -671,23 +640,18 @@ static int en7523_reset_xlate(struct res
- return rst_data->idx_map[reset_spec->args[0]];
- }
-
--static const struct reset_control_ops en7523_reset_ops = {
-+static const struct reset_control_ops en7581_reset_ops = {
- .assert = en7523_reset_assert,
- .deassert = en7523_reset_deassert,
- .status = en7523_reset_status,
- };
-
--static int en7523_reset_register(struct platform_device *pdev,
-- const struct en_clk_soc_data *soc_data)
-+static int en7581_reset_register(struct platform_device *pdev)
- {
- struct device *dev = &pdev->dev;
- struct en_rst_data *rst_data;
- void __iomem *base;
-
-- /* no reset lines available */
-- if (!soc_data->reset.idx_map_nr)
-- return 0;
--
- base = devm_platform_ioremap_resource(pdev, 1);
- if (IS_ERR(base))
- return PTR_ERR(base);
-@@ -696,13 +660,13 @@ static int en7523_reset_register(struct
- if (!rst_data)
- return -ENOMEM;
-
-- rst_data->bank_ofs = soc_data->reset.bank_ofs;
-- rst_data->idx_map = soc_data->reset.idx_map;
-+ rst_data->bank_ofs = en7581_rst_ofs;
-+ rst_data->idx_map = en7581_rst_map;
- rst_data->base = base;
-
-- rst_data->rcdev.nr_resets = soc_data->reset.idx_map_nr;
-+ rst_data->rcdev.nr_resets = ARRAY_SIZE(en7581_rst_map);
- rst_data->rcdev.of_xlate = en7523_reset_xlate;
-- rst_data->rcdev.ops = &en7523_reset_ops;
-+ rst_data->rcdev.ops = &en7581_reset_ops;
- rst_data->rcdev.of_node = dev->of_node;
- rst_data->rcdev.of_reset_n_cells = 1;
- rst_data->rcdev.owner = THIS_MODULE;
-@@ -711,6 +675,32 @@ static int en7523_reset_register(struct
- return devm_reset_controller_register(dev, &rst_data->rcdev);
- }
-
-+static int en7581_clk_hw_init(struct platform_device *pdev,
-+ struct clk_hw_onecell_data *clk_data)
-+{
-+ void __iomem *np_base;
-+ struct regmap *map;
-+ u32 val;
-+
-+ map = syscon_regmap_lookup_by_compatible("airoha,en7581-chip-scu");
-+ if (IS_ERR(map))
-+ return PTR_ERR(map);
-+
-+ np_base = devm_platform_ioremap_resource(pdev, 0);
-+ if (IS_ERR(np_base))
-+ return PTR_ERR(np_base);
-+
-+ en7581_register_clocks(&pdev->dev, clk_data, map, np_base);
-+
-+ val = readl(np_base + REG_NP_SCU_SSTR);
-+ val &= ~(REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK);
-+ writel(val, np_base + REG_NP_SCU_SSTR);
-+ val = readl(np_base + REG_NP_SCU_PCIC);
-+ writel(val | 3, np_base + REG_NP_SCU_PCIC);
-+
-+ return en7581_reset_register(pdev);
-+}
-+
- static int en7523_clk_probe(struct platform_device *pdev)
- {
- struct device_node *node = pdev->dev.of_node;
-@@ -729,19 +719,7 @@ static int en7523_clk_probe(struct platf
- if (r)
- return r;
-
-- r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
-- if (r)
-- return dev_err_probe(&pdev->dev, r, "Could not register clock provider: %s\n",
-- pdev->name);
--
-- r = en7523_reset_register(pdev, soc_data);
-- if (r) {
-- of_clk_del_provider(node);
-- return dev_err_probe(&pdev->dev, r, "Could not register reset controller: %s\n",
-- pdev->name);
-- }
--
-- return 0;
-+ return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
- }
-
- static const struct en_clk_soc_data en7523_data = {
-@@ -759,11 +737,6 @@ static const struct en_clk_soc_data en75
- .enable = en7581_pci_enable,
- .disable = en7581_pci_disable,
- },
-- .reset = {
-- .bank_ofs = en7581_rst_ofs,
-- .idx_map = en7581_rst_map,
-- .idx_map_nr = ARRAY_SIZE(en7581_rst_map),
-- },
- .hw_init = en7581_clk_hw_init,
- };
-
diff --git a/lede/target/linux/airoha/patches-6.12/033-06-v6.13-clk-en7523-map-io-region-in-a-single-block.patch b/lede/target/linux/airoha/patches-6.12/033-06-v6.13-clk-en7523-map-io-region-in-a-single-block.patch
deleted file mode 100644
index 51945a9492..0000000000
--- a/lede/target/linux/airoha/patches-6.12/033-06-v6.13-clk-en7523-map-io-region-in-a-single-block.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From a9eaf305017a5ebe73ab34e85bd5414055a88f29 Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Tue, 12 Nov 2024 01:08:54 +0100
-Subject: [PATCH 6/6] clk: en7523: map io region in a single block
-
-Map all clock-controller memory region in a single block.
-This patch does not introduce any backward incompatibility since the dts
-for EN7581 SoC is not upstream yet.
-
-Signed-off-by: Lorenzo Bianconi
-Link: https://lore.kernel.org/r/20241112-clk-en7581-syscon-v2-7-8ada5e394ae4@kernel.org
-Signed-off-by: Stephen Boyd
----
- drivers/clk/clk-en7523.c | 32 +++++++++++++-------------------
- 1 file changed, 13 insertions(+), 19 deletions(-)
-
---- a/drivers/clk/clk-en7523.c
-+++ b/drivers/clk/clk-en7523.c
-@@ -39,8 +39,8 @@
- #define REG_PCIE_XSI1_SEL_MASK GENMASK(12, 11)
- #define REG_CRYPTO_CLKSRC2 0x20c
-
--#define REG_RST_CTRL2 0x00
--#define REG_RST_CTRL1 0x04
-+#define REG_RST_CTRL2 0x830
-+#define REG_RST_CTRL1 0x834
-
- struct en_clk_desc {
- int id;
-@@ -646,15 +646,9 @@ static const struct reset_control_ops en
- .status = en7523_reset_status,
- };
-
--static int en7581_reset_register(struct platform_device *pdev)
-+static int en7581_reset_register(struct device *dev, void __iomem *base)
- {
-- struct device *dev = &pdev->dev;
- struct en_rst_data *rst_data;
-- void __iomem *base;
--
-- base = devm_platform_ioremap_resource(pdev, 1);
-- if (IS_ERR(base))
-- return PTR_ERR(base);
-
- rst_data = devm_kzalloc(dev, sizeof(*rst_data), GFP_KERNEL);
- if (!rst_data)
-@@ -678,27 +672,27 @@ static int en7581_reset_register(struct
- static int en7581_clk_hw_init(struct platform_device *pdev,
- struct clk_hw_onecell_data *clk_data)
- {
-- void __iomem *np_base;
- struct regmap *map;
-+ void __iomem *base;
- u32 val;
-
- map = syscon_regmap_lookup_by_compatible("airoha,en7581-chip-scu");
- if (IS_ERR(map))
- return PTR_ERR(map);
-
-- np_base = devm_platform_ioremap_resource(pdev, 0);
-- if (IS_ERR(np_base))
-- return PTR_ERR(np_base);
-+ base = devm_platform_ioremap_resource(pdev, 0);
-+ if (IS_ERR(base))
-+ return PTR_ERR(base);
-
-- en7581_register_clocks(&pdev->dev, clk_data, map, np_base);
-+ en7581_register_clocks(&pdev->dev, clk_data, map, base);
-
-- val = readl(np_base + REG_NP_SCU_SSTR);
-+ val = readl(base + REG_NP_SCU_SSTR);
- val &= ~(REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK);
-- writel(val, np_base + REG_NP_SCU_SSTR);
-- val = readl(np_base + REG_NP_SCU_PCIC);
-- writel(val | 3, np_base + REG_NP_SCU_PCIC);
-+ writel(val, base + REG_NP_SCU_SSTR);
-+ val = readl(base + REG_NP_SCU_PCIC);
-+ writel(val | 3, base + REG_NP_SCU_PCIC);
-
-- return en7581_reset_register(pdev);
-+ return en7581_reset_register(&pdev->dev, base);
- }
-
- static int en7523_clk_probe(struct platform_device *pdev)
diff --git a/lede/target/linux/airoha/patches-6.12/034-01-v6.13-pinctrl-airoha-Add-support-for-EN7581-SoC.patch b/lede/target/linux/airoha/patches-6.12/034-01-v6.13-pinctrl-airoha-Add-support-for-EN7581-SoC.patch
deleted file mode 100644
index 0f0fdeec1e..0000000000
--- a/lede/target/linux/airoha/patches-6.12/034-01-v6.13-pinctrl-airoha-Add-support-for-EN7581-SoC.patch
+++ /dev/null
@@ -1,3060 +0,0 @@
-From 1c8ace2d0725c1c8d5012f8a56c5fb31805aad27 Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Wed, 23 Oct 2024 01:20:05 +0200
-Subject: [PATCH] pinctrl: airoha: Add support for EN7581 SoC
-
-Introduce pinctrl driver for EN7581 SoC. Current EN7581 pinctrl driver
-supports the following functionalities:
-- pin multiplexing
-- pin pull-up, pull-down, open-drain, current strength,
- {input,output}_enable, output_{low,high}
-- gpio controller
-- irq controller
-
-Tested-by: Benjamin Larsson
-Co-developed-by: Benjamin Larsson
-Signed-off-by: Benjamin Larsson
-Reviewed-by: Linus Walleij
-Reviewed-by: AngeloGioacchino Del Regno
-Signed-off-by: Lorenzo Bianconi
-Link: https://lore.kernel.org/20241023-en7581-pinctrl-v9-5-afb0cbcab0ec@kernel.org
-Signed-off-by: Linus Walleij
----
- MAINTAINERS | 7 +
- drivers/pinctrl/mediatek/Kconfig | 17 +-
- drivers/pinctrl/mediatek/Makefile | 1 +
- drivers/pinctrl/mediatek/pinctrl-airoha.c | 2970 +++++++++++++++++++++
- 4 files changed, 2994 insertions(+), 1 deletion(-)
- create mode 100644 drivers/pinctrl/mediatek/pinctrl-airoha.c
-
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -18191,6 +18191,13 @@ F: drivers/pinctrl/
- F: include/dt-bindings/pinctrl/
- F: include/linux/pinctrl/
-
-+PIN CONTROLLER - AIROHA
-+M: Lorenzo Bianconi
-+L: linux-mediatek@lists.infradead.org (moderated for non-subscribers)
-+S: Maintained
-+F: Documentation/devicetree/bindings/pinctrl/airoha,en7581-pinctrl.yaml
-+F: drivers/pinctrl/mediatek/pinctrl-airoha.c
-+
- PIN CONTROLLER - AMD
- M: Basavaraj Natikar
- M: Shyam Sundar S K
---- a/drivers/pinctrl/mediatek/Kconfig
-+++ b/drivers/pinctrl/mediatek/Kconfig
-@@ -1,6 +1,6 @@
- # SPDX-License-Identifier: GPL-2.0-only
- menu "MediaTek pinctrl drivers"
-- depends on ARCH_MEDIATEK || RALINK || COMPILE_TEST
-+ depends on ARCH_MEDIATEK || ARCH_AIROHA || RALINK || COMPILE_TEST
-
- config EINT_MTK
- tristate "MediaTek External Interrupt Support"
-@@ -126,6 +126,21 @@ config PINCTRL_MT8127
- select PINCTRL_MTK
-
- # For ARMv8 SoCs
-+config PINCTRL_AIROHA
-+ tristate "Airoha EN7581 pin control"
-+ depends on OF
-+ depends on ARM64 || COMPILE_TEST
-+ select PINMUX
-+ select GENERIC_PINCONF
-+ select GENERIC_PINCTRL_GROUPS
-+ select GENERIC_PINMUX_FUNCTIONS
-+ select GPIOLIB
-+ select GPIOLIB_IRQCHIP
-+ select REGMAP_MMIO
-+ help
-+ Say yes here to support pin controller and gpio driver
-+ on Airoha EN7581 SoC.
-+
- config PINCTRL_MT2712
- bool "MediaTek MT2712 pin control"
- depends on OF
---- a/drivers/pinctrl/mediatek/Makefile
-+++ b/drivers/pinctrl/mediatek/Makefile
-@@ -8,6 +8,7 @@ obj-$(CONFIG_PINCTRL_MTK_MOORE) += pinc
- obj-$(CONFIG_PINCTRL_MTK_PARIS) += pinctrl-paris.o
-
- # SoC Drivers
-+obj-$(CONFIG_PINCTRL_AIROHA) += pinctrl-airoha.o
- obj-$(CONFIG_PINCTRL_MT7620) += pinctrl-mt7620.o
- obj-$(CONFIG_PINCTRL_MT7621) += pinctrl-mt7621.o
- obj-$(CONFIG_PINCTRL_MT76X8) += pinctrl-mt76x8.o
---- /dev/null
-+++ b/drivers/pinctrl/mediatek/pinctrl-airoha.c
-@@ -0,0 +1,2970 @@
-+// SPDX-License-Identifier: GPL-2.0-only
-+/*
-+ * Author: Lorenzo Bianconi
-+ * Author: Benjamin Larsson
-+ * Author: Markus Gothe
-+ */
-+
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+
-+#include "../core.h"
-+#include "../pinconf.h"
-+#include "../pinmux.h"
-+
-+#define PINCTRL_PIN_GROUP(id) \
-+ PINCTRL_PINGROUP(#id, id##_pins, ARRAY_SIZE(id##_pins))
-+
-+#define PINCTRL_FUNC_DESC(id) \
-+ { \
-+ .desc = { \
-+ .func = { \
-+ .name = #id, \
-+ .groups = id##_groups, \
-+ .ngroups = ARRAY_SIZE(id##_groups), \
-+ } \
-+ }, \
-+ .groups = id##_func_group, \
-+ .group_size = ARRAY_SIZE(id##_func_group), \
-+ }
-+
-+#define PINCTRL_CONF_DESC(p, offset, mask) \
-+ { \
-+ .pin = p, \
-+ .reg = { offset, mask }, \
-+ }
-+
-+/* MUX */
-+#define REG_GPIO_2ND_I2C_MODE 0x0214
-+#define GPIO_MDC_IO_MASTER_MODE_MODE BIT(14)
-+#define GPIO_I2C_MASTER_MODE_MODE BIT(13)
-+#define GPIO_I2S_MODE_MASK BIT(12)
-+#define GPIO_I2C_SLAVE_MODE_MODE BIT(11)
-+#define GPIO_LAN3_LED1_MODE_MASK BIT(10)
-+#define GPIO_LAN3_LED0_MODE_MASK BIT(9)
-+#define GPIO_LAN2_LED1_MODE_MASK BIT(8)
-+#define GPIO_LAN2_LED0_MODE_MASK BIT(7)
-+#define GPIO_LAN1_LED1_MODE_MASK BIT(6)
-+#define GPIO_LAN1_LED0_MODE_MASK BIT(5)
-+#define GPIO_LAN0_LED1_MODE_MASK BIT(4)
-+#define GPIO_LAN0_LED0_MODE_MASK BIT(3)
-+#define PON_TOD_1PPS_MODE_MASK BIT(2)
-+#define GSW_TOD_1PPS_MODE_MASK BIT(1)
-+#define GPIO_2ND_I2C_MODE_MASK BIT(0)
-+
-+#define REG_GPIO_SPI_CS1_MODE 0x0218
-+#define GPIO_PCM_SPI_CS4_MODE_MASK BIT(21)
-+#define GPIO_PCM_SPI_CS3_MODE_MASK BIT(20)
-+#define GPIO_PCM_SPI_CS2_MODE_P156_MASK BIT(19)
-+#define GPIO_PCM_SPI_CS2_MODE_P128_MASK BIT(18)
-+#define GPIO_PCM_SPI_CS1_MODE_MASK BIT(17)
-+#define GPIO_PCM_SPI_MODE_MASK BIT(16)
-+#define GPIO_PCM2_MODE_MASK BIT(13)
-+#define GPIO_PCM1_MODE_MASK BIT(12)
-+#define GPIO_PCM_INT_MODE_MASK BIT(9)
-+#define GPIO_PCM_RESET_MODE_MASK BIT(8)
-+#define GPIO_SPI_QUAD_MODE_MASK BIT(4)
-+#define GPIO_SPI_CS4_MODE_MASK BIT(3)
-+#define GPIO_SPI_CS3_MODE_MASK BIT(2)
-+#define GPIO_SPI_CS2_MODE_MASK BIT(1)
-+#define GPIO_SPI_CS1_MODE_MASK BIT(0)
-+
-+#define REG_GPIO_PON_MODE 0x021c
-+#define GPIO_PARALLEL_NAND_MODE_MASK BIT(14)
-+#define GPIO_SGMII_MDIO_MODE_MASK BIT(13)
-+#define GPIO_PCIE_RESET2_MASK BIT(12)
-+#define SIPO_RCLK_MODE_MASK BIT(11)
-+#define GPIO_PCIE_RESET1_MASK BIT(10)
-+#define GPIO_PCIE_RESET0_MASK BIT(9)
-+#define GPIO_UART5_MODE_MASK BIT(8)
-+#define GPIO_UART4_MODE_MASK BIT(7)
-+#define GPIO_HSUART_CTS_RTS_MODE_MASK BIT(6)
-+#define GPIO_HSUART_MODE_MASK BIT(5)
-+#define GPIO_UART2_CTS_RTS_MODE_MASK BIT(4)
-+#define GPIO_UART2_MODE_MASK BIT(3)
-+#define GPIO_SIPO_MODE_MASK BIT(2)
-+#define GPIO_EMMC_MODE_MASK BIT(1)
-+#define GPIO_PON_MODE_MASK BIT(0)
-+
-+#define REG_NPU_UART_EN 0x0224
-+#define JTAG_UDI_EN_MASK BIT(4)
-+#define JTAG_DFD_EN_MASK BIT(3)
-+
-+/* LED MAP */
-+#define REG_LAN_LED0_MAPPING 0x027c
-+#define REG_LAN_LED1_MAPPING 0x0280
-+
-+#define LAN4_LED_MAPPING_MASK GENMASK(18, 16)
-+#define LAN4_PHY4_LED_MAP BIT(18)
-+#define LAN4_PHY2_LED_MAP BIT(17)
-+#define LAN4_PHY1_LED_MAP BIT(16)
-+#define LAN4_PHY0_LED_MAP 0
-+#define LAN4_PHY3_LED_MAP GENMASK(17, 16)
-+
-+#define LAN3_LED_MAPPING_MASK GENMASK(14, 12)
-+#define LAN3_PHY4_LED_MAP BIT(14)
-+#define LAN3_PHY2_LED_MAP BIT(13)
-+#define LAN3_PHY1_LED_MAP BIT(12)
-+#define LAN3_PHY0_LED_MAP 0
-+#define LAN3_PHY3_LED_MAP GENMASK(13, 12)
-+
-+#define LAN2_LED_MAPPING_MASK GENMASK(10, 8)
-+#define LAN2_PHY4_LED_MAP BIT(12)
-+#define LAN2_PHY2_LED_MAP BIT(11)
-+#define LAN2_PHY1_LED_MAP BIT(10)
-+#define LAN2_PHY0_LED_MAP 0
-+#define LAN2_PHY3_LED_MAP GENMASK(11, 10)
-+
-+#define LAN1_LED_MAPPING_MASK GENMASK(6, 4)
-+#define LAN1_PHY4_LED_MAP BIT(6)
-+#define LAN1_PHY2_LED_MAP BIT(5)
-+#define LAN1_PHY1_LED_MAP BIT(4)
-+#define LAN1_PHY0_LED_MAP 0
-+#define LAN1_PHY3_LED_MAP GENMASK(5, 4)
-+
-+#define LAN0_LED_MAPPING_MASK GENMASK(2, 0)
-+#define LAN0_PHY4_LED_MAP BIT(3)
-+#define LAN0_PHY2_LED_MAP BIT(2)
-+#define LAN0_PHY1_LED_MAP BIT(1)
-+#define LAN0_PHY0_LED_MAP 0
-+#define LAN0_PHY3_LED_MAP GENMASK(2, 1)
-+
-+/* CONF */
-+#define REG_I2C_SDA_E2 0x001c
-+#define SPI_MISO_E2_MASK BIT(14)
-+#define SPI_MOSI_E2_MASK BIT(13)
-+#define SPI_CLK_E2_MASK BIT(12)
-+#define SPI_CS0_E2_MASK BIT(11)
-+#define PCIE2_RESET_E2_MASK BIT(10)
-+#define PCIE1_RESET_E2_MASK BIT(9)
-+#define PCIE0_RESET_E2_MASK BIT(8)
-+#define UART1_RXD_E2_MASK BIT(3)
-+#define UART1_TXD_E2_MASK BIT(2)
-+#define I2C_SCL_E2_MASK BIT(1)
-+#define I2C_SDA_E2_MASK BIT(0)
-+
-+#define REG_I2C_SDA_E4 0x0020
-+#define SPI_MISO_E4_MASK BIT(14)
-+#define SPI_MOSI_E4_MASK BIT(13)
-+#define SPI_CLK_E4_MASK BIT(12)
-+#define SPI_CS0_E4_MASK BIT(11)
-+#define PCIE2_RESET_E4_MASK BIT(10)
-+#define PCIE1_RESET_E4_MASK BIT(9)
-+#define PCIE0_RESET_E4_MASK BIT(8)
-+#define UART1_RXD_E4_MASK BIT(3)
-+#define UART1_TXD_E4_MASK BIT(2)
-+#define I2C_SCL_E4_MASK BIT(1)
-+#define I2C_SDA_E4_MASK BIT(0)
-+
-+#define REG_GPIO_L_E2 0x0024
-+#define REG_GPIO_L_E4 0x0028
-+#define REG_GPIO_H_E2 0x002c
-+#define REG_GPIO_H_E4 0x0030
-+
-+#define REG_I2C_SDA_PU 0x0044
-+#define SPI_MISO_PU_MASK BIT(14)
-+#define SPI_MOSI_PU_MASK BIT(13)
-+#define SPI_CLK_PU_MASK BIT(12)
-+#define SPI_CS0_PU_MASK BIT(11)
-+#define PCIE2_RESET_PU_MASK BIT(10)
-+#define PCIE1_RESET_PU_MASK BIT(9)
-+#define PCIE0_RESET_PU_MASK BIT(8)
-+#define UART1_RXD_PU_MASK BIT(3)
-+#define UART1_TXD_PU_MASK BIT(2)
-+#define I2C_SCL_PU_MASK BIT(1)
-+#define I2C_SDA_PU_MASK BIT(0)
-+
-+#define REG_I2C_SDA_PD 0x0048
-+#define SPI_MISO_PD_MASK BIT(14)
-+#define SPI_MOSI_PD_MASK BIT(13)
-+#define SPI_CLK_PD_MASK BIT(12)
-+#define SPI_CS0_PD_MASK BIT(11)
-+#define PCIE2_RESET_PD_MASK BIT(10)
-+#define PCIE1_RESET_PD_MASK BIT(9)
-+#define PCIE0_RESET_PD_MASK BIT(8)
-+#define UART1_RXD_PD_MASK BIT(3)
-+#define UART1_TXD_PD_MASK BIT(2)
-+#define I2C_SCL_PD_MASK BIT(1)
-+#define I2C_SDA_PD_MASK BIT(0)
-+
-+#define REG_GPIO_L_PU 0x004c
-+#define REG_GPIO_L_PD 0x0050
-+#define REG_GPIO_H_PU 0x0054
-+#define REG_GPIO_H_PD 0x0058
-+
-+#define REG_PCIE_RESET_OD 0x018c
-+#define PCIE2_RESET_OD_MASK BIT(2)
-+#define PCIE1_RESET_OD_MASK BIT(1)
-+#define PCIE0_RESET_OD_MASK BIT(0)
-+
-+/* GPIOs */
-+#define REG_GPIO_CTRL 0x0000
-+#define REG_GPIO_DATA 0x0004
-+#define REG_GPIO_INT 0x0008
-+#define REG_GPIO_INT_EDGE 0x000c
-+#define REG_GPIO_INT_LEVEL 0x0010
-+#define REG_GPIO_OE 0x0014
-+#define REG_GPIO_CTRL1 0x0020
-+
-+/* PWM MODE CONF */
-+#define REG_GPIO_FLASH_MODE_CFG 0x0034
-+#define GPIO15_FLASH_MODE_CFG BIT(15)
-+#define GPIO14_FLASH_MODE_CFG BIT(14)
-+#define GPIO13_FLASH_MODE_CFG BIT(13)
-+#define GPIO12_FLASH_MODE_CFG BIT(12)
-+#define GPIO11_FLASH_MODE_CFG BIT(11)
-+#define GPIO10_FLASH_MODE_CFG BIT(10)
-+#define GPIO9_FLASH_MODE_CFG BIT(9)
-+#define GPIO8_FLASH_MODE_CFG BIT(8)
-+#define GPIO7_FLASH_MODE_CFG BIT(7)
-+#define GPIO6_FLASH_MODE_CFG BIT(6)
-+#define GPIO5_FLASH_MODE_CFG BIT(5)
-+#define GPIO4_FLASH_MODE_CFG BIT(4)
-+#define GPIO3_FLASH_MODE_CFG BIT(3)
-+#define GPIO2_FLASH_MODE_CFG BIT(2)
-+#define GPIO1_FLASH_MODE_CFG BIT(1)
-+#define GPIO0_FLASH_MODE_CFG BIT(0)
-+
-+#define REG_GPIO_CTRL2 0x0060
-+#define REG_GPIO_CTRL3 0x0064
-+
-+/* PWM MODE CONF EXT */
-+#define REG_GPIO_FLASH_MODE_CFG_EXT 0x0068
-+#define GPIO51_FLASH_MODE_CFG BIT(31)
-+#define GPIO50_FLASH_MODE_CFG BIT(30)
-+#define GPIO49_FLASH_MODE_CFG BIT(29)
-+#define GPIO48_FLASH_MODE_CFG BIT(28)
-+#define GPIO47_FLASH_MODE_CFG BIT(27)
-+#define GPIO46_FLASH_MODE_CFG BIT(26)
-+#define GPIO45_FLASH_MODE_CFG BIT(25)
-+#define GPIO44_FLASH_MODE_CFG BIT(24)
-+#define GPIO43_FLASH_MODE_CFG BIT(23)
-+#define GPIO42_FLASH_MODE_CFG BIT(22)
-+#define GPIO41_FLASH_MODE_CFG BIT(21)
-+#define GPIO40_FLASH_MODE_CFG BIT(20)
-+#define GPIO39_FLASH_MODE_CFG BIT(19)
-+#define GPIO38_FLASH_MODE_CFG BIT(18)
-+#define GPIO37_FLASH_MODE_CFG BIT(17)
-+#define GPIO36_FLASH_MODE_CFG BIT(16)
-+#define GPIO31_FLASH_MODE_CFG BIT(15)
-+#define GPIO30_FLASH_MODE_CFG BIT(14)
-+#define GPIO29_FLASH_MODE_CFG BIT(13)
-+#define GPIO28_FLASH_MODE_CFG BIT(12)
-+#define GPIO27_FLASH_MODE_CFG BIT(11)
-+#define GPIO26_FLASH_MODE_CFG BIT(10)
-+#define GPIO25_FLASH_MODE_CFG BIT(9)
-+#define GPIO24_FLASH_MODE_CFG BIT(8)
-+#define GPIO23_FLASH_MODE_CFG BIT(7)
-+#define GPIO22_FLASH_MODE_CFG BIT(6)
-+#define GPIO21_FLASH_MODE_CFG BIT(5)
-+#define GPIO20_FLASH_MODE_CFG BIT(4)
-+#define GPIO19_FLASH_MODE_CFG BIT(3)
-+#define GPIO18_FLASH_MODE_CFG BIT(2)
-+#define GPIO17_FLASH_MODE_CFG BIT(1)
-+#define GPIO16_FLASH_MODE_CFG BIT(0)
-+
-+#define REG_GPIO_DATA1 0x0070
-+#define REG_GPIO_OE1 0x0078
-+#define REG_GPIO_INT1 0x007c
-+#define REG_GPIO_INT_EDGE1 0x0080
-+#define REG_GPIO_INT_EDGE2 0x0084
-+#define REG_GPIO_INT_EDGE3 0x0088
-+#define REG_GPIO_INT_LEVEL1 0x008c
-+#define REG_GPIO_INT_LEVEL2 0x0090
-+#define REG_GPIO_INT_LEVEL3 0x0094
-+
-+#define AIROHA_NUM_PINS 64
-+#define AIROHA_PIN_BANK_SIZE (AIROHA_NUM_PINS / 2)
-+#define AIROHA_REG_GPIOCTRL_NUM_PIN (AIROHA_NUM_PINS / 4)
-+
-+static const u32 gpio_data_regs[] = {
-+ REG_GPIO_DATA,
-+ REG_GPIO_DATA1
-+};
-+
-+static const u32 gpio_out_regs[] = {
-+ REG_GPIO_OE,
-+ REG_GPIO_OE1
-+};
-+
-+static const u32 gpio_dir_regs[] = {
-+ REG_GPIO_CTRL,
-+ REG_GPIO_CTRL1,
-+ REG_GPIO_CTRL2,
-+ REG_GPIO_CTRL3
-+};
-+
-+static const u32 irq_status_regs[] = {
-+ REG_GPIO_INT,
-+ REG_GPIO_INT1
-+};
-+
-+static const u32 irq_level_regs[] = {
-+ REG_GPIO_INT_LEVEL,
-+ REG_GPIO_INT_LEVEL1,
-+ REG_GPIO_INT_LEVEL2,
-+ REG_GPIO_INT_LEVEL3
-+};
-+
-+static const u32 irq_edge_regs[] = {
-+ REG_GPIO_INT_EDGE,
-+ REG_GPIO_INT_EDGE1,
-+ REG_GPIO_INT_EDGE2,
-+ REG_GPIO_INT_EDGE3
-+};
-+
-+struct airoha_pinctrl_reg {
-+ u32 offset;
-+ u32 mask;
-+};
-+
-+enum airoha_pinctrl_mux_func {
-+ AIROHA_FUNC_MUX,
-+ AIROHA_FUNC_PWM_MUX,
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+};
-+
-+struct airoha_pinctrl_func_group {
-+ const char *name;
-+ struct {
-+ enum airoha_pinctrl_mux_func mux;
-+ u32 offset;
-+ u32 mask;
-+ u32 val;
-+ } regmap[2];
-+ int regmap_size;
-+};
-+
-+struct airoha_pinctrl_func {
-+ const struct function_desc desc;
-+ const struct airoha_pinctrl_func_group *groups;
-+ u8 group_size;
-+};
-+
-+struct airoha_pinctrl_conf {
-+ u32 pin;
-+ struct airoha_pinctrl_reg reg;
-+};
-+
-+struct airoha_pinctrl_gpiochip {
-+ struct gpio_chip chip;
-+
-+ /* gpio */
-+ const u32 *data;
-+ const u32 *dir;
-+ const u32 *out;
-+ /* irq */
-+ const u32 *status;
-+ const u32 *level;
-+ const u32 *edge;
-+
-+ u32 irq_type[AIROHA_NUM_PINS];
-+};
-+
-+struct airoha_pinctrl {
-+ struct pinctrl_dev *ctrl;
-+
-+ struct regmap *chip_scu;
-+ struct regmap *regmap;
-+
-+ struct airoha_pinctrl_gpiochip gpiochip;
-+};
-+
-+static struct pinctrl_pin_desc airoha_pinctrl_pins[] = {
-+ PINCTRL_PIN(0, "uart1_txd"),
-+ PINCTRL_PIN(1, "uart1_rxd"),
-+ PINCTRL_PIN(2, "i2c_scl"),
-+ PINCTRL_PIN(3, "i2c_sda"),
-+ PINCTRL_PIN(4, "spi_cs0"),
-+ PINCTRL_PIN(5, "spi_clk"),
-+ PINCTRL_PIN(6, "spi_mosi"),
-+ PINCTRL_PIN(7, "spi_miso"),
-+ PINCTRL_PIN(13, "gpio0"),
-+ PINCTRL_PIN(14, "gpio1"),
-+ PINCTRL_PIN(15, "gpio2"),
-+ PINCTRL_PIN(16, "gpio3"),
-+ PINCTRL_PIN(17, "gpio4"),
-+ PINCTRL_PIN(18, "gpio5"),
-+ PINCTRL_PIN(19, "gpio6"),
-+ PINCTRL_PIN(20, "gpio7"),
-+ PINCTRL_PIN(21, "gpio8"),
-+ PINCTRL_PIN(22, "gpio9"),
-+ PINCTRL_PIN(23, "gpio10"),
-+ PINCTRL_PIN(24, "gpio11"),
-+ PINCTRL_PIN(25, "gpio12"),
-+ PINCTRL_PIN(26, "gpio13"),
-+ PINCTRL_PIN(27, "gpio14"),
-+ PINCTRL_PIN(28, "gpio15"),
-+ PINCTRL_PIN(29, "gpio16"),
-+ PINCTRL_PIN(30, "gpio17"),
-+ PINCTRL_PIN(31, "gpio18"),
-+ PINCTRL_PIN(32, "gpio19"),
-+ PINCTRL_PIN(33, "gpio20"),
-+ PINCTRL_PIN(34, "gpio21"),
-+ PINCTRL_PIN(35, "gpio22"),
-+ PINCTRL_PIN(36, "gpio23"),
-+ PINCTRL_PIN(37, "gpio24"),
-+ PINCTRL_PIN(38, "gpio25"),
-+ PINCTRL_PIN(39, "gpio26"),
-+ PINCTRL_PIN(40, "gpio27"),
-+ PINCTRL_PIN(41, "gpio28"),
-+ PINCTRL_PIN(42, "gpio29"),
-+ PINCTRL_PIN(43, "gpio30"),
-+ PINCTRL_PIN(44, "gpio31"),
-+ PINCTRL_PIN(45, "gpio32"),
-+ PINCTRL_PIN(46, "gpio33"),
-+ PINCTRL_PIN(47, "gpio34"),
-+ PINCTRL_PIN(48, "gpio35"),
-+ PINCTRL_PIN(49, "gpio36"),
-+ PINCTRL_PIN(50, "gpio37"),
-+ PINCTRL_PIN(51, "gpio38"),
-+ PINCTRL_PIN(52, "gpio39"),
-+ PINCTRL_PIN(53, "gpio40"),
-+ PINCTRL_PIN(54, "gpio41"),
-+ PINCTRL_PIN(55, "gpio42"),
-+ PINCTRL_PIN(56, "gpio43"),
-+ PINCTRL_PIN(57, "gpio44"),
-+ PINCTRL_PIN(58, "gpio45"),
-+ PINCTRL_PIN(59, "gpio46"),
-+ PINCTRL_PIN(61, "pcie_reset0"),
-+ PINCTRL_PIN(62, "pcie_reset1"),
-+ PINCTRL_PIN(63, "pcie_reset2"),
-+};
-+
-+static const int pon_pins[] = { 49, 50, 51, 52, 53, 54 };
-+static const int pon_tod_1pps_pins[] = { 46 };
-+static const int gsw_tod_1pps_pins[] = { 46 };
-+static const int sipo_pins[] = { 16, 17 };
-+static const int sipo_rclk_pins[] = { 16, 17, 43 };
-+static const int mdio_pins[] = { 14, 15 };
-+static const int uart2_pins[] = { 48, 55 };
-+static const int uart2_cts_rts_pins[] = { 46, 47 };
-+static const int hsuart_pins[] = { 28, 29 };
-+static const int hsuart_cts_rts_pins[] = { 26, 27 };
-+static const int uart4_pins[] = { 38, 39 };
-+static const int uart5_pins[] = { 18, 19 };
-+static const int i2c0_pins[] = { 2, 3 };
-+static const int i2c1_pins[] = { 14, 15 };
-+static const int jtag_udi_pins[] = { 16, 17, 18, 19, 20 };
-+static const int jtag_dfd_pins[] = { 16, 17, 18, 19, 20 };
-+static const int i2s_pins[] = { 26, 27, 28, 29 };
-+static const int pcm1_pins[] = { 22, 23, 24, 25 };
-+static const int pcm2_pins[] = { 18, 19, 20, 21 };
-+static const int spi_quad_pins[] = { 32, 33 };
-+static const int spi_pins[] = { 4, 5, 6, 7 };
-+static const int spi_cs1_pins[] = { 34 };
-+static const int pcm_spi_pins[] = { 18, 19, 20, 21, 22, 23, 24, 25 };
-+static const int pcm_spi_int_pins[] = { 14 };
-+static const int pcm_spi_rst_pins[] = { 15 };
-+static const int pcm_spi_cs1_pins[] = { 43 };
-+static const int pcm_spi_cs2_pins[] = { 40 };
-+static const int pcm_spi_cs2_p128_pins[] = { 40 };
-+static const int pcm_spi_cs2_p156_pins[] = { 40 };
-+static const int pcm_spi_cs3_pins[] = { 41 };
-+static const int pcm_spi_cs4_pins[] = { 42 };
-+static const int emmc_pins[] = { 4, 5, 6, 30, 31, 32, 33, 34, 35, 36, 37 };
-+static const int pnand_pins[] = { 4, 5, 6, 7, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42 };
-+static const int gpio0_pins[] = { 13 };
-+static const int gpio1_pins[] = { 14 };
-+static const int gpio2_pins[] = { 15 };
-+static const int gpio3_pins[] = { 16 };
-+static const int gpio4_pins[] = { 17 };
-+static const int gpio5_pins[] = { 18 };
-+static const int gpio6_pins[] = { 19 };
-+static const int gpio7_pins[] = { 20 };
-+static const int gpio8_pins[] = { 21 };
-+static const int gpio9_pins[] = { 22 };
-+static const int gpio10_pins[] = { 23 };
-+static const int gpio11_pins[] = { 24 };
-+static const int gpio12_pins[] = { 25 };
-+static const int gpio13_pins[] = { 26 };
-+static const int gpio14_pins[] = { 27 };
-+static const int gpio15_pins[] = { 28 };
-+static const int gpio16_pins[] = { 29 };
-+static const int gpio17_pins[] = { 30 };
-+static const int gpio18_pins[] = { 31 };
-+static const int gpio19_pins[] = { 32 };
-+static const int gpio20_pins[] = { 33 };
-+static const int gpio21_pins[] = { 34 };
-+static const int gpio22_pins[] = { 35 };
-+static const int gpio23_pins[] = { 36 };
-+static const int gpio24_pins[] = { 37 };
-+static const int gpio25_pins[] = { 38 };
-+static const int gpio26_pins[] = { 39 };
-+static const int gpio27_pins[] = { 40 };
-+static const int gpio28_pins[] = { 41 };
-+static const int gpio29_pins[] = { 42 };
-+static const int gpio30_pins[] = { 43 };
-+static const int gpio31_pins[] = { 44 };
-+static const int gpio33_pins[] = { 46 };
-+static const int gpio34_pins[] = { 47 };
-+static const int gpio35_pins[] = { 48 };
-+static const int gpio36_pins[] = { 49 };
-+static const int gpio37_pins[] = { 50 };
-+static const int gpio38_pins[] = { 51 };
-+static const int gpio39_pins[] = { 52 };
-+static const int gpio40_pins[] = { 53 };
-+static const int gpio41_pins[] = { 54 };
-+static const int gpio42_pins[] = { 55 };
-+static const int gpio43_pins[] = { 56 };
-+static const int gpio44_pins[] = { 57 };
-+static const int gpio45_pins[] = { 58 };
-+static const int gpio46_pins[] = { 59 };
-+static const int pcie_reset0_pins[] = { 61 };
-+static const int pcie_reset1_pins[] = { 62 };
-+static const int pcie_reset2_pins[] = { 63 };
-+
-+static const struct pingroup airoha_pinctrl_groups[] = {
-+ PINCTRL_PIN_GROUP(pon),
-+ PINCTRL_PIN_GROUP(pon_tod_1pps),
-+ PINCTRL_PIN_GROUP(gsw_tod_1pps),
-+ PINCTRL_PIN_GROUP(sipo),
-+ PINCTRL_PIN_GROUP(sipo_rclk),
-+ PINCTRL_PIN_GROUP(mdio),
-+ PINCTRL_PIN_GROUP(uart2),
-+ PINCTRL_PIN_GROUP(uart2_cts_rts),
-+ PINCTRL_PIN_GROUP(hsuart),
-+ PINCTRL_PIN_GROUP(hsuart_cts_rts),
-+ PINCTRL_PIN_GROUP(uart4),
-+ PINCTRL_PIN_GROUP(uart5),
-+ PINCTRL_PIN_GROUP(i2c0),
-+ PINCTRL_PIN_GROUP(i2c1),
-+ PINCTRL_PIN_GROUP(jtag_udi),
-+ PINCTRL_PIN_GROUP(jtag_dfd),
-+ PINCTRL_PIN_GROUP(i2s),
-+ PINCTRL_PIN_GROUP(pcm1),
-+ PINCTRL_PIN_GROUP(pcm2),
-+ PINCTRL_PIN_GROUP(spi),
-+ PINCTRL_PIN_GROUP(spi_quad),
-+ PINCTRL_PIN_GROUP(spi_cs1),
-+ PINCTRL_PIN_GROUP(pcm_spi),
-+ PINCTRL_PIN_GROUP(pcm_spi_int),
-+ PINCTRL_PIN_GROUP(pcm_spi_rst),
-+ PINCTRL_PIN_GROUP(pcm_spi_cs1),
-+ PINCTRL_PIN_GROUP(pcm_spi_cs2_p128),
-+ PINCTRL_PIN_GROUP(pcm_spi_cs2_p156),
-+ PINCTRL_PIN_GROUP(pcm_spi_cs2),
-+ PINCTRL_PIN_GROUP(pcm_spi_cs3),
-+ PINCTRL_PIN_GROUP(pcm_spi_cs4),
-+ PINCTRL_PIN_GROUP(emmc),
-+ PINCTRL_PIN_GROUP(pnand),
-+ PINCTRL_PIN_GROUP(gpio0),
-+ PINCTRL_PIN_GROUP(gpio1),
-+ PINCTRL_PIN_GROUP(gpio2),
-+ PINCTRL_PIN_GROUP(gpio3),
-+ PINCTRL_PIN_GROUP(gpio4),
-+ PINCTRL_PIN_GROUP(gpio5),
-+ PINCTRL_PIN_GROUP(gpio6),
-+ PINCTRL_PIN_GROUP(gpio7),
-+ PINCTRL_PIN_GROUP(gpio8),
-+ PINCTRL_PIN_GROUP(gpio9),
-+ PINCTRL_PIN_GROUP(gpio10),
-+ PINCTRL_PIN_GROUP(gpio11),
-+ PINCTRL_PIN_GROUP(gpio12),
-+ PINCTRL_PIN_GROUP(gpio13),
-+ PINCTRL_PIN_GROUP(gpio14),
-+ PINCTRL_PIN_GROUP(gpio15),
-+ PINCTRL_PIN_GROUP(gpio16),
-+ PINCTRL_PIN_GROUP(gpio17),
-+ PINCTRL_PIN_GROUP(gpio18),
-+ PINCTRL_PIN_GROUP(gpio19),
-+ PINCTRL_PIN_GROUP(gpio20),
-+ PINCTRL_PIN_GROUP(gpio21),
-+ PINCTRL_PIN_GROUP(gpio22),
-+ PINCTRL_PIN_GROUP(gpio23),
-+ PINCTRL_PIN_GROUP(gpio24),
-+ PINCTRL_PIN_GROUP(gpio25),
-+ PINCTRL_PIN_GROUP(gpio26),
-+ PINCTRL_PIN_GROUP(gpio27),
-+ PINCTRL_PIN_GROUP(gpio28),
-+ PINCTRL_PIN_GROUP(gpio29),
-+ PINCTRL_PIN_GROUP(gpio30),
-+ PINCTRL_PIN_GROUP(gpio31),
-+ PINCTRL_PIN_GROUP(gpio33),
-+ PINCTRL_PIN_GROUP(gpio34),
-+ PINCTRL_PIN_GROUP(gpio35),
-+ PINCTRL_PIN_GROUP(gpio36),
-+ PINCTRL_PIN_GROUP(gpio37),
-+ PINCTRL_PIN_GROUP(gpio38),
-+ PINCTRL_PIN_GROUP(gpio39),
-+ PINCTRL_PIN_GROUP(gpio40),
-+ PINCTRL_PIN_GROUP(gpio41),
-+ PINCTRL_PIN_GROUP(gpio42),
-+ PINCTRL_PIN_GROUP(gpio43),
-+ PINCTRL_PIN_GROUP(gpio44),
-+ PINCTRL_PIN_GROUP(gpio45),
-+ PINCTRL_PIN_GROUP(gpio46),
-+ PINCTRL_PIN_GROUP(pcie_reset0),
-+ PINCTRL_PIN_GROUP(pcie_reset1),
-+ PINCTRL_PIN_GROUP(pcie_reset2),
-+};
-+
-+static const char *const pon_groups[] = { "pon" };
-+static const char *const tod_1pps_groups[] = { "pon_tod_1pps", "gsw_tod_1pps" };
-+static const char *const sipo_groups[] = { "sipo", "sipo_rclk" };
-+static const char *const mdio_groups[] = { "mdio" };
-+static const char *const uart_groups[] = { "uart2", "uart2_cts_rts", "hsuart",
-+ "hsuart_cts_rts", "uart4",
-+ "uart5" };
-+static const char *const i2c_groups[] = { "i2c1" };
-+static const char *const jtag_groups[] = { "jtag_udi", "jtag_dfd" };
-+static const char *const pcm_groups[] = { "pcm1", "pcm2" };
-+static const char *const spi_groups[] = { "spi_quad", "spi_cs1" };
-+static const char *const pcm_spi_groups[] = { "pcm_spi", "pcm_spi_int",
-+ "pcm_spi_rst", "pcm_spi_cs1",
-+ "pcm_spi_cs2_p156",
-+ "pcm_spi_cs2_p128",
-+ "pcm_spi_cs3", "pcm_spi_cs4" };
-+static const char *const i2s_groups[] = { "i2s" };
-+static const char *const emmc_groups[] = { "emmc" };
-+static const char *const pnand_groups[] = { "pnand" };
-+static const char *const pcie_reset_groups[] = { "pcie_reset0", "pcie_reset1",
-+ "pcie_reset2" };
-+static const char *const pwm_groups[] = { "gpio0", "gpio1",
-+ "gpio2", "gpio3",
-+ "gpio4", "gpio5",
-+ "gpio6", "gpio7",
-+ "gpio8", "gpio9",
-+ "gpio10", "gpio11",
-+ "gpio12", "gpio13",
-+ "gpio14", "gpio15",
-+ "gpio16", "gpio17",
-+ "gpio18", "gpio19",
-+ "gpio20", "gpio21",
-+ "gpio22", "gpio23",
-+ "gpio24", "gpio25",
-+ "gpio26", "gpio27",
-+ "gpio28", "gpio29",
-+ "gpio30", "gpio31",
-+ "gpio36", "gpio37",
-+ "gpio38", "gpio39",
-+ "gpio40", "gpio41",
-+ "gpio42", "gpio43",
-+ "gpio44", "gpio45",
-+ "gpio46", "gpio47" };
-+static const char *const phy1_led0_groups[] = { "gpio33", "gpio34",
-+ "gpio35", "gpio42" };
-+static const char *const phy2_led0_groups[] = { "gpio33", "gpio34",
-+ "gpio35", "gpio42" };
-+static const char *const phy3_led0_groups[] = { "gpio33", "gpio34",
-+ "gpio35", "gpio42" };
-+static const char *const phy4_led0_groups[] = { "gpio33", "gpio34",
-+ "gpio35", "gpio42" };
-+static const char *const phy1_led1_groups[] = { "gpio43", "gpio44",
-+ "gpio45", "gpio46" };
-+static const char *const phy2_led1_groups[] = { "gpio43", "gpio44",
-+ "gpio45", "gpio46" };
-+static const char *const phy3_led1_groups[] = { "gpio43", "gpio44",
-+ "gpio45", "gpio46" };
-+static const char *const phy4_led1_groups[] = { "gpio43", "gpio44",
-+ "gpio45", "gpio46" };
-+
-+static const struct airoha_pinctrl_func_group pon_func_group[] = {
-+ {
-+ .name = "pon",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_PON_MODE_MASK,
-+ GPIO_PON_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group tod_1pps_func_group[] = {
-+ {
-+ .name = "pon_tod_1pps",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ PON_TOD_1PPS_MODE_MASK,
-+ PON_TOD_1PPS_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gsw_tod_1pps",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GSW_TOD_1PPS_MODE_MASK,
-+ GSW_TOD_1PPS_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group sipo_func_group[] = {
-+ {
-+ .name = "sipo",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK,
-+ GPIO_SIPO_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "sipo_rclk",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK,
-+ GPIO_SIPO_MODE_MASK | SIPO_RCLK_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group mdio_func_group[] = {
-+ {
-+ .name = "mdio",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_SGMII_MDIO_MODE_MASK,
-+ GPIO_SGMII_MDIO_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_MDC_IO_MASTER_MODE_MODE,
-+ GPIO_MDC_IO_MASTER_MODE_MODE
-+ },
-+ .regmap_size = 2,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group uart_func_group[] = {
-+ {
-+ .name = "uart2",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_UART2_MODE_MASK,
-+ GPIO_UART2_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "uart2_cts_rts",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_UART2_MODE_MASK | GPIO_UART2_CTS_RTS_MODE_MASK,
-+ GPIO_UART2_MODE_MASK | GPIO_UART2_CTS_RTS_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "hsuart",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK,
-+ GPIO_HSUART_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+ {
-+ .name = "hsuart_cts_rts",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK,
-+ GPIO_HSUART_MODE_MASK | GPIO_HSUART_CTS_RTS_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "uart4",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_UART4_MODE_MASK,
-+ GPIO_UART4_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "uart5",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_UART5_MODE_MASK,
-+ GPIO_UART5_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group i2c_func_group[] = {
-+ {
-+ .name = "i2c1",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_2ND_I2C_MODE_MASK,
-+ GPIO_2ND_I2C_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group jtag_func_group[] = {
-+ {
-+ .name = "jtag_udi",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_NPU_UART_EN,
-+ JTAG_UDI_EN_MASK,
-+ JTAG_UDI_EN_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "jtag_dfd",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_NPU_UART_EN,
-+ JTAG_DFD_EN_MASK,
-+ JTAG_DFD_EN_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group pcm_func_group[] = {
-+ {
-+ .name = "pcm1",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_PCM1_MODE_MASK,
-+ GPIO_PCM1_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "pcm2",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_PCM2_MODE_MASK,
-+ GPIO_PCM2_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group spi_func_group[] = {
-+ {
-+ .name = "spi_quad",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_SPI_QUAD_MODE_MASK,
-+ GPIO_SPI_QUAD_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "spi_cs1",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_SPI_CS1_MODE_MASK,
-+ GPIO_SPI_CS1_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "spi_cs2",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_SPI_CS2_MODE_MASK,
-+ GPIO_SPI_CS2_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "spi_cs3",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_SPI_CS3_MODE_MASK,
-+ GPIO_SPI_CS3_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "spi_cs4",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_SPI_CS4_MODE_MASK,
-+ GPIO_SPI_CS4_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group pcm_spi_func_group[] = {
-+ {
-+ .name = "pcm_spi",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_PCM_SPI_MODE_MASK,
-+ GPIO_PCM_SPI_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "pcm_spi_int",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_PCM_INT_MODE_MASK,
-+ GPIO_PCM_INT_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "pcm_spi_rst",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_PCM_RESET_MODE_MASK,
-+ GPIO_PCM_RESET_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "pcm_spi_cs1",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_PCM_SPI_CS1_MODE_MASK,
-+ GPIO_PCM_SPI_CS1_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "pcm_spi_cs2_p128",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_PCM_SPI_CS2_MODE_P128_MASK,
-+ GPIO_PCM_SPI_CS2_MODE_P128_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "pcm_spi_cs2_p156",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_PCM_SPI_CS2_MODE_P156_MASK,
-+ GPIO_PCM_SPI_CS2_MODE_P156_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "pcm_spi_cs3",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_PCM_SPI_CS3_MODE_MASK,
-+ GPIO_PCM_SPI_CS3_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "pcm_spi_cs4",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_SPI_CS1_MODE,
-+ GPIO_PCM_SPI_CS4_MODE_MASK,
-+ GPIO_PCM_SPI_CS4_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group i2s_func_group[] = {
-+ {
-+ .name = "i2s",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_I2S_MODE_MASK,
-+ GPIO_I2S_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group emmc_func_group[] = {
-+ {
-+ .name = "emmc",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_EMMC_MODE_MASK,
-+ GPIO_EMMC_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group pnand_func_group[] = {
-+ {
-+ .name = "pnand",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_PARALLEL_NAND_MODE_MASK,
-+ GPIO_PARALLEL_NAND_MODE_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group pcie_reset_func_group[] = {
-+ {
-+ .name = "pcie_reset0",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_PCIE_RESET0_MASK,
-+ GPIO_PCIE_RESET0_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "pcie_reset1",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_PCIE_RESET1_MASK,
-+ GPIO_PCIE_RESET1_MASK
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "pcie_reset2",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_PON_MODE,
-+ GPIO_PCIE_RESET2_MASK,
-+ GPIO_PCIE_RESET2_MASK
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+/* PWM */
-+static const struct airoha_pinctrl_func_group pwm_func_group[] = {
-+ {
-+ .name = "gpio0",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO0_FLASH_MODE_CFG,
-+ GPIO0_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio1",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO1_FLASH_MODE_CFG,
-+ GPIO1_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio2",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO2_FLASH_MODE_CFG,
-+ GPIO2_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio3",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO3_FLASH_MODE_CFG,
-+ GPIO3_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio4",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO4_FLASH_MODE_CFG,
-+ GPIO4_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio5",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO5_FLASH_MODE_CFG,
-+ GPIO5_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio6",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO6_FLASH_MODE_CFG,
-+ GPIO6_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio7",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO7_FLASH_MODE_CFG,
-+ GPIO7_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio8",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO8_FLASH_MODE_CFG,
-+ GPIO8_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio9",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO9_FLASH_MODE_CFG,
-+ GPIO9_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio10",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO10_FLASH_MODE_CFG,
-+ GPIO10_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio11",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO11_FLASH_MODE_CFG,
-+ GPIO11_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio12",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO12_FLASH_MODE_CFG,
-+ GPIO12_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio13",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO13_FLASH_MODE_CFG,
-+ GPIO13_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio14",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO14_FLASH_MODE_CFG,
-+ GPIO14_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio15",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_MUX,
-+ REG_GPIO_FLASH_MODE_CFG,
-+ GPIO15_FLASH_MODE_CFG,
-+ GPIO15_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio16",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO16_FLASH_MODE_CFG,
-+ GPIO16_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio17",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO17_FLASH_MODE_CFG,
-+ GPIO17_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio18",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO18_FLASH_MODE_CFG,
-+ GPIO18_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio19",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO19_FLASH_MODE_CFG,
-+ GPIO19_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio20",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO20_FLASH_MODE_CFG,
-+ GPIO20_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio21",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO21_FLASH_MODE_CFG,
-+ GPIO21_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio22",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO22_FLASH_MODE_CFG,
-+ GPIO22_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio23",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO23_FLASH_MODE_CFG,
-+ GPIO23_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio24",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO24_FLASH_MODE_CFG,
-+ GPIO24_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio25",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO25_FLASH_MODE_CFG,
-+ GPIO25_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio26",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO26_FLASH_MODE_CFG,
-+ GPIO26_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio27",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO27_FLASH_MODE_CFG,
-+ GPIO27_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio28",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO28_FLASH_MODE_CFG,
-+ GPIO28_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio29",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO29_FLASH_MODE_CFG,
-+ GPIO29_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio30",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO30_FLASH_MODE_CFG,
-+ GPIO30_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio31",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO31_FLASH_MODE_CFG,
-+ GPIO31_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio36",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO36_FLASH_MODE_CFG,
-+ GPIO36_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio37",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO37_FLASH_MODE_CFG,
-+ GPIO37_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio38",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO38_FLASH_MODE_CFG,
-+ GPIO38_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio39",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO39_FLASH_MODE_CFG,
-+ GPIO39_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio40",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO40_FLASH_MODE_CFG,
-+ GPIO40_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio41",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO41_FLASH_MODE_CFG,
-+ GPIO41_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio42",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO42_FLASH_MODE_CFG,
-+ GPIO42_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio43",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO43_FLASH_MODE_CFG,
-+ GPIO43_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio44",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO44_FLASH_MODE_CFG,
-+ GPIO44_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio45",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO45_FLASH_MODE_CFG,
-+ GPIO45_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio46",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO46_FLASH_MODE_CFG,
-+ GPIO46_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ }, {
-+ .name = "gpio47",
-+ .regmap[0] = {
-+ AIROHA_FUNC_PWM_EXT_MUX,
-+ REG_GPIO_FLASH_MODE_CFG_EXT,
-+ GPIO47_FLASH_MODE_CFG,
-+ GPIO47_FLASH_MODE_CFG
-+ },
-+ .regmap_size = 1,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group phy1_led0_func_group[] = {
-+ {
-+ .name = "gpio33",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN0_LED0_MODE_MASK,
-+ GPIO_LAN0_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN1_LED_MAPPING_MASK,
-+ LAN1_PHY1_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio34",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN1_LED0_MODE_MASK,
-+ GPIO_LAN1_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN2_LED_MAPPING_MASK,
-+ LAN2_PHY1_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio35",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN2_LED0_MODE_MASK,
-+ GPIO_LAN2_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN3_LED_MAPPING_MASK,
-+ LAN3_PHY1_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio42",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN3_LED0_MODE_MASK,
-+ GPIO_LAN3_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN4_LED_MAPPING_MASK,
-+ LAN4_PHY1_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group phy2_led0_func_group[] = {
-+ {
-+ .name = "gpio33",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN0_LED0_MODE_MASK,
-+ GPIO_LAN0_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN1_LED_MAPPING_MASK,
-+ LAN1_PHY2_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio34",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN1_LED0_MODE_MASK,
-+ GPIO_LAN1_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN2_LED_MAPPING_MASK,
-+ LAN2_PHY2_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio35",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN2_LED0_MODE_MASK,
-+ GPIO_LAN2_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN3_LED_MAPPING_MASK,
-+ LAN3_PHY2_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio42",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN3_LED0_MODE_MASK,
-+ GPIO_LAN3_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN4_LED_MAPPING_MASK,
-+ LAN4_PHY2_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group phy3_led0_func_group[] = {
-+ {
-+ .name = "gpio33",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN0_LED0_MODE_MASK,
-+ GPIO_LAN0_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN1_LED_MAPPING_MASK,
-+ LAN1_PHY3_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio34",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN1_LED0_MODE_MASK,
-+ GPIO_LAN1_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN2_LED_MAPPING_MASK,
-+ LAN2_PHY3_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio35",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN2_LED0_MODE_MASK,
-+ GPIO_LAN2_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN3_LED_MAPPING_MASK,
-+ LAN3_PHY3_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio42",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN3_LED0_MODE_MASK,
-+ GPIO_LAN3_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN4_LED_MAPPING_MASK,
-+ LAN4_PHY3_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group phy4_led0_func_group[] = {
-+ {
-+ .name = "gpio33",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN0_LED0_MODE_MASK,
-+ GPIO_LAN0_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN1_LED_MAPPING_MASK,
-+ LAN1_PHY4_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio34",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN1_LED0_MODE_MASK,
-+ GPIO_LAN1_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN2_LED_MAPPING_MASK,
-+ LAN2_PHY4_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio35",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN2_LED0_MODE_MASK,
-+ GPIO_LAN2_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN3_LED_MAPPING_MASK,
-+ LAN3_PHY4_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio42",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN3_LED0_MODE_MASK,
-+ GPIO_LAN3_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED0_MAPPING,
-+ LAN4_LED_MAPPING_MASK,
-+ LAN4_PHY4_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group phy1_led1_func_group[] = {
-+ {
-+ .name = "gpio43",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN0_LED1_MODE_MASK,
-+ GPIO_LAN0_LED1_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN1_LED_MAPPING_MASK,
-+ LAN1_PHY1_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio44",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN1_LED1_MODE_MASK,
-+ GPIO_LAN1_LED1_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN2_LED_MAPPING_MASK,
-+ LAN2_PHY1_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio45",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN2_LED1_MODE_MASK,
-+ GPIO_LAN2_LED1_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN3_LED_MAPPING_MASK,
-+ LAN3_PHY1_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio46",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN3_LED0_MODE_MASK,
-+ GPIO_LAN3_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN4_LED_MAPPING_MASK,
-+ LAN4_PHY1_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group phy2_led1_func_group[] = {
-+ {
-+ .name = "gpio43",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN0_LED1_MODE_MASK,
-+ GPIO_LAN0_LED1_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN1_LED_MAPPING_MASK,
-+ LAN1_PHY2_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio44",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN1_LED1_MODE_MASK,
-+ GPIO_LAN1_LED1_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN2_LED_MAPPING_MASK,
-+ LAN2_PHY2_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio45",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN2_LED1_MODE_MASK,
-+ GPIO_LAN2_LED1_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN3_LED_MAPPING_MASK,
-+ LAN3_PHY2_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio46",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN3_LED0_MODE_MASK,
-+ GPIO_LAN3_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN4_LED_MAPPING_MASK,
-+ LAN4_PHY2_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group phy3_led1_func_group[] = {
-+ {
-+ .name = "gpio43",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN0_LED1_MODE_MASK,
-+ GPIO_LAN0_LED1_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN1_LED_MAPPING_MASK,
-+ LAN1_PHY3_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio44",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN1_LED1_MODE_MASK,
-+ GPIO_LAN1_LED1_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN2_LED_MAPPING_MASK,
-+ LAN2_PHY3_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio45",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN2_LED1_MODE_MASK,
-+ GPIO_LAN2_LED1_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN3_LED_MAPPING_MASK,
-+ LAN3_PHY3_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio46",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN3_LED0_MODE_MASK,
-+ GPIO_LAN3_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN4_LED_MAPPING_MASK,
-+ LAN4_PHY3_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func_group phy4_led1_func_group[] = {
-+ {
-+ .name = "gpio43",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN0_LED1_MODE_MASK,
-+ GPIO_LAN0_LED1_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN1_LED_MAPPING_MASK,
-+ LAN1_PHY4_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio44",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN1_LED1_MODE_MASK,
-+ GPIO_LAN1_LED1_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN2_LED_MAPPING_MASK,
-+ LAN2_PHY4_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio45",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN2_LED1_MODE_MASK,
-+ GPIO_LAN2_LED1_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN3_LED_MAPPING_MASK,
-+ LAN3_PHY4_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ }, {
-+ .name = "gpio46",
-+ .regmap[0] = {
-+ AIROHA_FUNC_MUX,
-+ REG_GPIO_2ND_I2C_MODE,
-+ GPIO_LAN3_LED0_MODE_MASK,
-+ GPIO_LAN3_LED0_MODE_MASK
-+ },
-+ .regmap[1] = {
-+ AIROHA_FUNC_MUX,
-+ REG_LAN_LED1_MAPPING,
-+ LAN4_LED_MAPPING_MASK,
-+ LAN4_PHY4_LED_MAP
-+ },
-+ .regmap_size = 2,
-+ },
-+};
-+
-+static const struct airoha_pinctrl_func airoha_pinctrl_funcs[] = {
-+ PINCTRL_FUNC_DESC(pon),
-+ PINCTRL_FUNC_DESC(tod_1pps),
-+ PINCTRL_FUNC_DESC(sipo),
-+ PINCTRL_FUNC_DESC(mdio),
-+ PINCTRL_FUNC_DESC(uart),
-+ PINCTRL_FUNC_DESC(i2c),
-+ PINCTRL_FUNC_DESC(jtag),
-+ PINCTRL_FUNC_DESC(pcm),
-+ PINCTRL_FUNC_DESC(spi),
-+ PINCTRL_FUNC_DESC(pcm_spi),
-+ PINCTRL_FUNC_DESC(i2s),
-+ PINCTRL_FUNC_DESC(emmc),
-+ PINCTRL_FUNC_DESC(pnand),
-+ PINCTRL_FUNC_DESC(pcie_reset),
-+ PINCTRL_FUNC_DESC(pwm),
-+ PINCTRL_FUNC_DESC(phy1_led0),
-+ PINCTRL_FUNC_DESC(phy2_led0),
-+ PINCTRL_FUNC_DESC(phy3_led0),
-+ PINCTRL_FUNC_DESC(phy4_led0),
-+ PINCTRL_FUNC_DESC(phy1_led1),
-+ PINCTRL_FUNC_DESC(phy2_led1),
-+ PINCTRL_FUNC_DESC(phy3_led1),
-+ PINCTRL_FUNC_DESC(phy4_led1),
-+};
-+
-+static const struct airoha_pinctrl_conf airoha_pinctrl_pullup_conf[] = {
-+ PINCTRL_CONF_DESC(0, REG_I2C_SDA_PU, UART1_TXD_PU_MASK),
-+ PINCTRL_CONF_DESC(1, REG_I2C_SDA_PU, UART1_RXD_PU_MASK),
-+ PINCTRL_CONF_DESC(2, REG_I2C_SDA_PU, I2C_SDA_PU_MASK),
-+ PINCTRL_CONF_DESC(3, REG_I2C_SDA_PU, I2C_SCL_PU_MASK),
-+ PINCTRL_CONF_DESC(4, REG_I2C_SDA_PU, SPI_CS0_PU_MASK),
-+ PINCTRL_CONF_DESC(5, REG_I2C_SDA_PU, SPI_CLK_PU_MASK),
-+ PINCTRL_CONF_DESC(6, REG_I2C_SDA_PU, SPI_MOSI_PU_MASK),
-+ PINCTRL_CONF_DESC(7, REG_I2C_SDA_PU, SPI_MISO_PU_MASK),
-+ PINCTRL_CONF_DESC(13, REG_GPIO_L_PU, BIT(0)),
-+ PINCTRL_CONF_DESC(14, REG_GPIO_L_PU, BIT(1)),
-+ PINCTRL_CONF_DESC(15, REG_GPIO_L_PU, BIT(2)),
-+ PINCTRL_CONF_DESC(16, REG_GPIO_L_PU, BIT(3)),
-+ PINCTRL_CONF_DESC(17, REG_GPIO_L_PU, BIT(4)),
-+ PINCTRL_CONF_DESC(18, REG_GPIO_L_PU, BIT(5)),
-+ PINCTRL_CONF_DESC(19, REG_GPIO_L_PU, BIT(6)),
-+ PINCTRL_CONF_DESC(20, REG_GPIO_L_PU, BIT(7)),
-+ PINCTRL_CONF_DESC(21, REG_GPIO_L_PU, BIT(8)),
-+ PINCTRL_CONF_DESC(22, REG_GPIO_L_PU, BIT(9)),
-+ PINCTRL_CONF_DESC(23, REG_GPIO_L_PU, BIT(10)),
-+ PINCTRL_CONF_DESC(24, REG_GPIO_L_PU, BIT(11)),
-+ PINCTRL_CONF_DESC(25, REG_GPIO_L_PU, BIT(12)),
-+ PINCTRL_CONF_DESC(26, REG_GPIO_L_PU, BIT(13)),
-+ PINCTRL_CONF_DESC(27, REG_GPIO_L_PU, BIT(14)),
-+ PINCTRL_CONF_DESC(28, REG_GPIO_L_PU, BIT(15)),
-+ PINCTRL_CONF_DESC(29, REG_GPIO_L_PU, BIT(16)),
-+ PINCTRL_CONF_DESC(30, REG_GPIO_L_PU, BIT(17)),
-+ PINCTRL_CONF_DESC(31, REG_GPIO_L_PU, BIT(18)),
-+ PINCTRL_CONF_DESC(32, REG_GPIO_L_PU, BIT(18)),
-+ PINCTRL_CONF_DESC(33, REG_GPIO_L_PU, BIT(20)),
-+ PINCTRL_CONF_DESC(34, REG_GPIO_L_PU, BIT(21)),
-+ PINCTRL_CONF_DESC(35, REG_GPIO_L_PU, BIT(22)),
-+ PINCTRL_CONF_DESC(36, REG_GPIO_L_PU, BIT(23)),
-+ PINCTRL_CONF_DESC(37, REG_GPIO_L_PU, BIT(24)),
-+ PINCTRL_CONF_DESC(38, REG_GPIO_L_PU, BIT(25)),
-+ PINCTRL_CONF_DESC(39, REG_GPIO_L_PU, BIT(26)),
-+ PINCTRL_CONF_DESC(40, REG_GPIO_L_PU, BIT(27)),
-+ PINCTRL_CONF_DESC(41, REG_GPIO_L_PU, BIT(28)),
-+ PINCTRL_CONF_DESC(42, REG_GPIO_L_PU, BIT(29)),
-+ PINCTRL_CONF_DESC(43, REG_GPIO_L_PU, BIT(30)),
-+ PINCTRL_CONF_DESC(44, REG_GPIO_L_PU, BIT(31)),
-+ PINCTRL_CONF_DESC(45, REG_GPIO_H_PU, BIT(0)),
-+ PINCTRL_CONF_DESC(46, REG_GPIO_H_PU, BIT(1)),
-+ PINCTRL_CONF_DESC(47, REG_GPIO_H_PU, BIT(2)),
-+ PINCTRL_CONF_DESC(48, REG_GPIO_H_PU, BIT(3)),
-+ PINCTRL_CONF_DESC(49, REG_GPIO_H_PU, BIT(4)),
-+ PINCTRL_CONF_DESC(50, REG_GPIO_H_PU, BIT(5)),
-+ PINCTRL_CONF_DESC(51, REG_GPIO_H_PU, BIT(6)),
-+ PINCTRL_CONF_DESC(52, REG_GPIO_H_PU, BIT(7)),
-+ PINCTRL_CONF_DESC(53, REG_GPIO_H_PU, BIT(8)),
-+ PINCTRL_CONF_DESC(54, REG_GPIO_H_PU, BIT(9)),
-+ PINCTRL_CONF_DESC(55, REG_GPIO_H_PU, BIT(10)),
-+ PINCTRL_CONF_DESC(56, REG_GPIO_H_PU, BIT(11)),
-+ PINCTRL_CONF_DESC(57, REG_GPIO_H_PU, BIT(12)),
-+ PINCTRL_CONF_DESC(58, REG_GPIO_H_PU, BIT(13)),
-+ PINCTRL_CONF_DESC(59, REG_GPIO_H_PU, BIT(14)),
-+ PINCTRL_CONF_DESC(61, REG_I2C_SDA_PU, PCIE0_RESET_PU_MASK),
-+ PINCTRL_CONF_DESC(62, REG_I2C_SDA_PU, PCIE1_RESET_PU_MASK),
-+ PINCTRL_CONF_DESC(63, REG_I2C_SDA_PU, PCIE2_RESET_PU_MASK),
-+};
-+
-+static const struct airoha_pinctrl_conf airoha_pinctrl_pulldown_conf[] = {
-+ PINCTRL_CONF_DESC(0, REG_I2C_SDA_PD, UART1_TXD_PD_MASK),
-+ PINCTRL_CONF_DESC(1, REG_I2C_SDA_PD, UART1_RXD_PD_MASK),
-+ PINCTRL_CONF_DESC(2, REG_I2C_SDA_PD, I2C_SDA_PD_MASK),
-+ PINCTRL_CONF_DESC(3, REG_I2C_SDA_PD, I2C_SCL_PD_MASK),
-+ PINCTRL_CONF_DESC(4, REG_I2C_SDA_PD, SPI_CS0_PD_MASK),
-+ PINCTRL_CONF_DESC(5, REG_I2C_SDA_PD, SPI_CLK_PD_MASK),
-+ PINCTRL_CONF_DESC(6, REG_I2C_SDA_PD, SPI_MOSI_PD_MASK),
-+ PINCTRL_CONF_DESC(7, REG_I2C_SDA_PD, SPI_MISO_PD_MASK),
-+ PINCTRL_CONF_DESC(13, REG_GPIO_L_PD, BIT(0)),
-+ PINCTRL_CONF_DESC(14, REG_GPIO_L_PD, BIT(1)),
-+ PINCTRL_CONF_DESC(15, REG_GPIO_L_PD, BIT(2)),
-+ PINCTRL_CONF_DESC(16, REG_GPIO_L_PD, BIT(3)),
-+ PINCTRL_CONF_DESC(17, REG_GPIO_L_PD, BIT(4)),
-+ PINCTRL_CONF_DESC(18, REG_GPIO_L_PD, BIT(5)),
-+ PINCTRL_CONF_DESC(19, REG_GPIO_L_PD, BIT(6)),
-+ PINCTRL_CONF_DESC(20, REG_GPIO_L_PD, BIT(7)),
-+ PINCTRL_CONF_DESC(21, REG_GPIO_L_PD, BIT(8)),
-+ PINCTRL_CONF_DESC(22, REG_GPIO_L_PD, BIT(9)),
-+ PINCTRL_CONF_DESC(23, REG_GPIO_L_PD, BIT(10)),
-+ PINCTRL_CONF_DESC(24, REG_GPIO_L_PD, BIT(11)),
-+ PINCTRL_CONF_DESC(25, REG_GPIO_L_PD, BIT(12)),
-+ PINCTRL_CONF_DESC(26, REG_GPIO_L_PD, BIT(13)),
-+ PINCTRL_CONF_DESC(27, REG_GPIO_L_PD, BIT(14)),
-+ PINCTRL_CONF_DESC(28, REG_GPIO_L_PD, BIT(15)),
-+ PINCTRL_CONF_DESC(29, REG_GPIO_L_PD, BIT(16)),
-+ PINCTRL_CONF_DESC(30, REG_GPIO_L_PD, BIT(17)),
-+ PINCTRL_CONF_DESC(31, REG_GPIO_L_PD, BIT(18)),
-+ PINCTRL_CONF_DESC(32, REG_GPIO_L_PD, BIT(18)),
-+ PINCTRL_CONF_DESC(33, REG_GPIO_L_PD, BIT(20)),
-+ PINCTRL_CONF_DESC(34, REG_GPIO_L_PD, BIT(21)),
-+ PINCTRL_CONF_DESC(35, REG_GPIO_L_PD, BIT(22)),
-+ PINCTRL_CONF_DESC(36, REG_GPIO_L_PD, BIT(23)),
-+ PINCTRL_CONF_DESC(37, REG_GPIO_L_PD, BIT(24)),
-+ PINCTRL_CONF_DESC(38, REG_GPIO_L_PD, BIT(25)),
-+ PINCTRL_CONF_DESC(39, REG_GPIO_L_PD, BIT(26)),
-+ PINCTRL_CONF_DESC(40, REG_GPIO_L_PD, BIT(27)),
-+ PINCTRL_CONF_DESC(41, REG_GPIO_L_PD, BIT(28)),
-+ PINCTRL_CONF_DESC(42, REG_GPIO_L_PD, BIT(29)),
-+ PINCTRL_CONF_DESC(43, REG_GPIO_L_PD, BIT(30)),
-+ PINCTRL_CONF_DESC(44, REG_GPIO_L_PD, BIT(31)),
-+ PINCTRL_CONF_DESC(45, REG_GPIO_H_PD, BIT(0)),
-+ PINCTRL_CONF_DESC(46, REG_GPIO_H_PD, BIT(1)),
-+ PINCTRL_CONF_DESC(47, REG_GPIO_H_PD, BIT(2)),
-+ PINCTRL_CONF_DESC(48, REG_GPIO_H_PD, BIT(3)),
-+ PINCTRL_CONF_DESC(49, REG_GPIO_H_PD, BIT(4)),
-+ PINCTRL_CONF_DESC(50, REG_GPIO_H_PD, BIT(5)),
-+ PINCTRL_CONF_DESC(51, REG_GPIO_H_PD, BIT(6)),
-+ PINCTRL_CONF_DESC(52, REG_GPIO_H_PD, BIT(7)),
-+ PINCTRL_CONF_DESC(53, REG_GPIO_H_PD, BIT(8)),
-+ PINCTRL_CONF_DESC(54, REG_GPIO_H_PD, BIT(9)),
-+ PINCTRL_CONF_DESC(55, REG_GPIO_H_PD, BIT(10)),
-+ PINCTRL_CONF_DESC(56, REG_GPIO_H_PD, BIT(11)),
-+ PINCTRL_CONF_DESC(57, REG_GPIO_H_PD, BIT(12)),
-+ PINCTRL_CONF_DESC(58, REG_GPIO_H_PD, BIT(13)),
-+ PINCTRL_CONF_DESC(59, REG_GPIO_H_PD, BIT(14)),
-+ PINCTRL_CONF_DESC(61, REG_I2C_SDA_PD, PCIE0_RESET_PD_MASK),
-+ PINCTRL_CONF_DESC(62, REG_I2C_SDA_PD, PCIE1_RESET_PD_MASK),
-+ PINCTRL_CONF_DESC(63, REG_I2C_SDA_PD, PCIE2_RESET_PD_MASK),
-+};
-+
-+static const struct airoha_pinctrl_conf airoha_pinctrl_drive_e2_conf[] = {
-+ PINCTRL_CONF_DESC(0, REG_I2C_SDA_E2, UART1_TXD_E2_MASK),
-+ PINCTRL_CONF_DESC(1, REG_I2C_SDA_E2, UART1_RXD_E2_MASK),
-+ PINCTRL_CONF_DESC(2, REG_I2C_SDA_E2, I2C_SDA_E2_MASK),
-+ PINCTRL_CONF_DESC(3, REG_I2C_SDA_E2, I2C_SCL_E2_MASK),
-+ PINCTRL_CONF_DESC(4, REG_I2C_SDA_E2, SPI_CS0_E2_MASK),
-+ PINCTRL_CONF_DESC(5, REG_I2C_SDA_E2, SPI_CLK_E2_MASK),
-+ PINCTRL_CONF_DESC(6, REG_I2C_SDA_E2, SPI_MOSI_E2_MASK),
-+ PINCTRL_CONF_DESC(7, REG_I2C_SDA_E2, SPI_MISO_E2_MASK),
-+ PINCTRL_CONF_DESC(13, REG_GPIO_L_E2, BIT(0)),
-+ PINCTRL_CONF_DESC(14, REG_GPIO_L_E2, BIT(1)),
-+ PINCTRL_CONF_DESC(15, REG_GPIO_L_E2, BIT(2)),
-+ PINCTRL_CONF_DESC(16, REG_GPIO_L_E2, BIT(3)),
-+ PINCTRL_CONF_DESC(17, REG_GPIO_L_E2, BIT(4)),
-+ PINCTRL_CONF_DESC(18, REG_GPIO_L_E2, BIT(5)),
-+ PINCTRL_CONF_DESC(19, REG_GPIO_L_E2, BIT(6)),
-+ PINCTRL_CONF_DESC(20, REG_GPIO_L_E2, BIT(7)),
-+ PINCTRL_CONF_DESC(21, REG_GPIO_L_E2, BIT(8)),
-+ PINCTRL_CONF_DESC(22, REG_GPIO_L_E2, BIT(9)),
-+ PINCTRL_CONF_DESC(23, REG_GPIO_L_E2, BIT(10)),
-+ PINCTRL_CONF_DESC(24, REG_GPIO_L_E2, BIT(11)),
-+ PINCTRL_CONF_DESC(25, REG_GPIO_L_E2, BIT(12)),
-+ PINCTRL_CONF_DESC(26, REG_GPIO_L_E2, BIT(13)),
-+ PINCTRL_CONF_DESC(27, REG_GPIO_L_E2, BIT(14)),
-+ PINCTRL_CONF_DESC(28, REG_GPIO_L_E2, BIT(15)),
-+ PINCTRL_CONF_DESC(29, REG_GPIO_L_E2, BIT(16)),
-+ PINCTRL_CONF_DESC(30, REG_GPIO_L_E2, BIT(17)),
-+ PINCTRL_CONF_DESC(31, REG_GPIO_L_E2, BIT(18)),
-+ PINCTRL_CONF_DESC(32, REG_GPIO_L_E2, BIT(18)),
-+ PINCTRL_CONF_DESC(33, REG_GPIO_L_E2, BIT(20)),
-+ PINCTRL_CONF_DESC(34, REG_GPIO_L_E2, BIT(21)),
-+ PINCTRL_CONF_DESC(35, REG_GPIO_L_E2, BIT(22)),
-+ PINCTRL_CONF_DESC(36, REG_GPIO_L_E2, BIT(23)),
-+ PINCTRL_CONF_DESC(37, REG_GPIO_L_E2, BIT(24)),
-+ PINCTRL_CONF_DESC(38, REG_GPIO_L_E2, BIT(25)),
-+ PINCTRL_CONF_DESC(39, REG_GPIO_L_E2, BIT(26)),
-+ PINCTRL_CONF_DESC(40, REG_GPIO_L_E2, BIT(27)),
-+ PINCTRL_CONF_DESC(41, REG_GPIO_L_E2, BIT(28)),
-+ PINCTRL_CONF_DESC(42, REG_GPIO_L_E2, BIT(29)),
-+ PINCTRL_CONF_DESC(43, REG_GPIO_L_E2, BIT(30)),
-+ PINCTRL_CONF_DESC(44, REG_GPIO_L_E2, BIT(31)),
-+ PINCTRL_CONF_DESC(45, REG_GPIO_H_E2, BIT(0)),
-+ PINCTRL_CONF_DESC(46, REG_GPIO_H_E2, BIT(1)),
-+ PINCTRL_CONF_DESC(47, REG_GPIO_H_E2, BIT(2)),
-+ PINCTRL_CONF_DESC(48, REG_GPIO_H_E2, BIT(3)),
-+ PINCTRL_CONF_DESC(49, REG_GPIO_H_E2, BIT(4)),
-+ PINCTRL_CONF_DESC(50, REG_GPIO_H_E2, BIT(5)),
-+ PINCTRL_CONF_DESC(51, REG_GPIO_H_E2, BIT(6)),
-+ PINCTRL_CONF_DESC(52, REG_GPIO_H_E2, BIT(7)),
-+ PINCTRL_CONF_DESC(53, REG_GPIO_H_E2, BIT(8)),
-+ PINCTRL_CONF_DESC(54, REG_GPIO_H_E2, BIT(9)),
-+ PINCTRL_CONF_DESC(55, REG_GPIO_H_E2, BIT(10)),
-+ PINCTRL_CONF_DESC(56, REG_GPIO_H_E2, BIT(11)),
-+ PINCTRL_CONF_DESC(57, REG_GPIO_H_E2, BIT(12)),
-+ PINCTRL_CONF_DESC(58, REG_GPIO_H_E2, BIT(13)),
-+ PINCTRL_CONF_DESC(59, REG_GPIO_H_E2, BIT(14)),
-+ PINCTRL_CONF_DESC(61, REG_I2C_SDA_E2, PCIE0_RESET_E2_MASK),
-+ PINCTRL_CONF_DESC(62, REG_I2C_SDA_E2, PCIE1_RESET_E2_MASK),
-+ PINCTRL_CONF_DESC(63, REG_I2C_SDA_E2, PCIE2_RESET_E2_MASK),
-+};
-+
-+static const struct airoha_pinctrl_conf airoha_pinctrl_drive_e4_conf[] = {
-+ PINCTRL_CONF_DESC(0, REG_I2C_SDA_E4, UART1_TXD_E4_MASK),
-+ PINCTRL_CONF_DESC(1, REG_I2C_SDA_E4, UART1_RXD_E4_MASK),
-+ PINCTRL_CONF_DESC(2, REG_I2C_SDA_E4, I2C_SDA_E4_MASK),
-+ PINCTRL_CONF_DESC(3, REG_I2C_SDA_E4, I2C_SCL_E4_MASK),
-+ PINCTRL_CONF_DESC(4, REG_I2C_SDA_E4, SPI_CS0_E4_MASK),
-+ PINCTRL_CONF_DESC(5, REG_I2C_SDA_E4, SPI_CLK_E4_MASK),
-+ PINCTRL_CONF_DESC(6, REG_I2C_SDA_E4, SPI_MOSI_E4_MASK),
-+ PINCTRL_CONF_DESC(7, REG_I2C_SDA_E4, SPI_MISO_E4_MASK),
-+ PINCTRL_CONF_DESC(13, REG_GPIO_L_E4, BIT(0)),
-+ PINCTRL_CONF_DESC(14, REG_GPIO_L_E4, BIT(1)),
-+ PINCTRL_CONF_DESC(15, REG_GPIO_L_E4, BIT(2)),
-+ PINCTRL_CONF_DESC(16, REG_GPIO_L_E4, BIT(3)),
-+ PINCTRL_CONF_DESC(17, REG_GPIO_L_E4, BIT(4)),
-+ PINCTRL_CONF_DESC(18, REG_GPIO_L_E4, BIT(5)),
-+ PINCTRL_CONF_DESC(19, REG_GPIO_L_E4, BIT(6)),
-+ PINCTRL_CONF_DESC(20, REG_GPIO_L_E4, BIT(7)),
-+ PINCTRL_CONF_DESC(21, REG_GPIO_L_E4, BIT(8)),
-+ PINCTRL_CONF_DESC(22, REG_GPIO_L_E4, BIT(9)),
-+ PINCTRL_CONF_DESC(23, REG_GPIO_L_E4, BIT(10)),
-+ PINCTRL_CONF_DESC(24, REG_GPIO_L_E4, BIT(11)),
-+ PINCTRL_CONF_DESC(25, REG_GPIO_L_E4, BIT(12)),
-+ PINCTRL_CONF_DESC(26, REG_GPIO_L_E4, BIT(13)),
-+ PINCTRL_CONF_DESC(27, REG_GPIO_L_E4, BIT(14)),
-+ PINCTRL_CONF_DESC(28, REG_GPIO_L_E4, BIT(15)),
-+ PINCTRL_CONF_DESC(29, REG_GPIO_L_E4, BIT(16)),
-+ PINCTRL_CONF_DESC(30, REG_GPIO_L_E4, BIT(17)),
-+ PINCTRL_CONF_DESC(31, REG_GPIO_L_E4, BIT(18)),
-+ PINCTRL_CONF_DESC(32, REG_GPIO_L_E4, BIT(18)),
-+ PINCTRL_CONF_DESC(33, REG_GPIO_L_E4, BIT(20)),
-+ PINCTRL_CONF_DESC(34, REG_GPIO_L_E4, BIT(21)),
-+ PINCTRL_CONF_DESC(35, REG_GPIO_L_E4, BIT(22)),
-+ PINCTRL_CONF_DESC(36, REG_GPIO_L_E4, BIT(23)),
-+ PINCTRL_CONF_DESC(37, REG_GPIO_L_E4, BIT(24)),
-+ PINCTRL_CONF_DESC(38, REG_GPIO_L_E4, BIT(25)),
-+ PINCTRL_CONF_DESC(39, REG_GPIO_L_E4, BIT(26)),
-+ PINCTRL_CONF_DESC(40, REG_GPIO_L_E4, BIT(27)),
-+ PINCTRL_CONF_DESC(41, REG_GPIO_L_E4, BIT(28)),
-+ PINCTRL_CONF_DESC(42, REG_GPIO_L_E4, BIT(29)),
-+ PINCTRL_CONF_DESC(43, REG_GPIO_L_E4, BIT(30)),
-+ PINCTRL_CONF_DESC(44, REG_GPIO_L_E4, BIT(31)),
-+ PINCTRL_CONF_DESC(45, REG_GPIO_H_E4, BIT(0)),
-+ PINCTRL_CONF_DESC(46, REG_GPIO_H_E4, BIT(1)),
-+ PINCTRL_CONF_DESC(47, REG_GPIO_H_E4, BIT(2)),
-+ PINCTRL_CONF_DESC(48, REG_GPIO_H_E4, BIT(3)),
-+ PINCTRL_CONF_DESC(49, REG_GPIO_H_E4, BIT(4)),
-+ PINCTRL_CONF_DESC(50, REG_GPIO_H_E4, BIT(5)),
-+ PINCTRL_CONF_DESC(51, REG_GPIO_H_E4, BIT(6)),
-+ PINCTRL_CONF_DESC(52, REG_GPIO_H_E4, BIT(7)),
-+ PINCTRL_CONF_DESC(53, REG_GPIO_H_E4, BIT(8)),
-+ PINCTRL_CONF_DESC(54, REG_GPIO_H_E4, BIT(9)),
-+ PINCTRL_CONF_DESC(55, REG_GPIO_H_E4, BIT(10)),
-+ PINCTRL_CONF_DESC(56, REG_GPIO_H_E4, BIT(11)),
-+ PINCTRL_CONF_DESC(57, REG_GPIO_H_E4, BIT(12)),
-+ PINCTRL_CONF_DESC(58, REG_GPIO_H_E4, BIT(13)),
-+ PINCTRL_CONF_DESC(59, REG_GPIO_H_E4, BIT(14)),
-+ PINCTRL_CONF_DESC(61, REG_I2C_SDA_E4, PCIE0_RESET_E4_MASK),
-+ PINCTRL_CONF_DESC(62, REG_I2C_SDA_E4, PCIE1_RESET_E4_MASK),
-+ PINCTRL_CONF_DESC(63, REG_I2C_SDA_E4, PCIE2_RESET_E4_MASK),
-+};
-+
-+static const struct airoha_pinctrl_conf airoha_pinctrl_pcie_rst_od_conf[] = {
-+ PINCTRL_CONF_DESC(61, REG_PCIE_RESET_OD, PCIE0_RESET_OD_MASK),
-+ PINCTRL_CONF_DESC(62, REG_PCIE_RESET_OD, PCIE1_RESET_OD_MASK),
-+ PINCTRL_CONF_DESC(63, REG_PCIE_RESET_OD, PCIE2_RESET_OD_MASK),
-+};
-+
-+static int airoha_convert_pin_to_reg_offset(struct pinctrl_dev *pctrl_dev,
-+ struct pinctrl_gpio_range *range,
-+ int pin)
-+{
-+ if (!range)
-+ range = pinctrl_find_gpio_range_from_pin_nolock(pctrl_dev,
-+ pin);
-+ if (!range)
-+ return -EINVAL;
-+
-+ return pin - range->pin_base;
-+}
-+
-+/* gpio callbacks */
-+static void airoha_gpio_set(struct gpio_chip *chip, unsigned int gpio,
-+ int value)
-+{
-+ struct airoha_pinctrl *pinctrl = gpiochip_get_data(chip);
-+ u32 offset = gpio % AIROHA_PIN_BANK_SIZE;
-+ u8 index = gpio / AIROHA_PIN_BANK_SIZE;
-+
-+ regmap_update_bits(pinctrl->regmap, pinctrl->gpiochip.data[index],
-+ BIT(offset), value ? BIT(offset) : 0);
-+}
-+
-+static int airoha_gpio_get(struct gpio_chip *chip, unsigned int gpio)
-+{
-+ struct airoha_pinctrl *pinctrl = gpiochip_get_data(chip);
-+ u32 val, pin = gpio % AIROHA_PIN_BANK_SIZE;
-+ u8 index = gpio / AIROHA_PIN_BANK_SIZE;
-+ int err;
-+
-+ err = regmap_read(pinctrl->regmap,
-+ pinctrl->gpiochip.data[index], &val);
-+
-+ return err ? err : !!(val & BIT(pin));
-+}
-+
-+static int airoha_gpio_direction_output(struct gpio_chip *chip,
-+ unsigned int gpio, int value)
-+{
-+ int err;
-+
-+ err = pinctrl_gpio_direction_output(chip, gpio);
-+ if (err)
-+ return err;
-+
-+ airoha_gpio_set(chip, gpio, value);
-+
-+ return 0;
-+}
-+
-+/* irq callbacks */
-+static void airoha_irq_unmask(struct irq_data *data)
-+{
-+ u8 offset = data->hwirq % AIROHA_REG_GPIOCTRL_NUM_PIN;
-+ u8 index = data->hwirq / AIROHA_REG_GPIOCTRL_NUM_PIN;
-+ u32 mask = GENMASK(2 * offset + 1, 2 * offset);
-+ struct airoha_pinctrl_gpiochip *gpiochip;
-+ struct airoha_pinctrl *pinctrl;
-+ u32 val = BIT(2 * offset);
-+
-+ gpiochip = irq_data_get_irq_chip_data(data);
-+ if (WARN_ON_ONCE(data->hwirq >= ARRAY_SIZE(gpiochip->irq_type)))
-+ return;
-+
-+ pinctrl = container_of(gpiochip, struct airoha_pinctrl, gpiochip);
-+ switch (gpiochip->irq_type[data->hwirq]) {
-+ case IRQ_TYPE_LEVEL_LOW:
-+ val = val << 1;
-+ fallthrough;
-+ case IRQ_TYPE_LEVEL_HIGH:
-+ regmap_update_bits(pinctrl->regmap, gpiochip->level[index],
-+ mask, val);
-+ break;
-+ case IRQ_TYPE_EDGE_FALLING:
-+ val = val << 1;
-+ fallthrough;
-+ case IRQ_TYPE_EDGE_RISING:
-+ regmap_update_bits(pinctrl->regmap, gpiochip->edge[index],
-+ mask, val);
-+ break;
-+ case IRQ_TYPE_EDGE_BOTH:
-+ regmap_set_bits(pinctrl->regmap, gpiochip->edge[index], mask);
-+ break;
-+ default:
-+ break;
-+ }
-+}
-+
-+static void airoha_irq_mask(struct irq_data *data)
-+{
-+ u8 offset = data->hwirq % AIROHA_REG_GPIOCTRL_NUM_PIN;
-+ u8 index = data->hwirq / AIROHA_REG_GPIOCTRL_NUM_PIN;
-+ u32 mask = GENMASK(2 * offset + 1, 2 * offset);
-+ struct airoha_pinctrl_gpiochip *gpiochip;
-+ struct airoha_pinctrl *pinctrl;
-+
-+ gpiochip = irq_data_get_irq_chip_data(data);
-+ pinctrl = container_of(gpiochip, struct airoha_pinctrl, gpiochip);
-+
-+ regmap_clear_bits(pinctrl->regmap, gpiochip->level[index], mask);
-+ regmap_clear_bits(pinctrl->regmap, gpiochip->edge[index], mask);
-+}
-+
-+static int airoha_irq_type(struct irq_data *data, unsigned int type)
-+{
-+ struct airoha_pinctrl_gpiochip *gpiochip;
-+
-+ gpiochip = irq_data_get_irq_chip_data(data);
-+ if (data->hwirq >= ARRAY_SIZE(gpiochip->irq_type))
-+ return -EINVAL;
-+
-+ if (type == IRQ_TYPE_PROBE) {
-+ if (gpiochip->irq_type[data->hwirq])
-+ return 0;
-+
-+ type = IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING;
-+ }
-+ gpiochip->irq_type[data->hwirq] = type & IRQ_TYPE_SENSE_MASK;
-+
-+ return 0;
-+}
-+
-+static irqreturn_t airoha_irq_handler(int irq, void *data)
-+{
-+ struct airoha_pinctrl *pinctrl = data;
-+ bool handled = false;
-+ int i;
-+
-+ for (i = 0; i < ARRAY_SIZE(irq_status_regs); i++) {
-+ struct gpio_irq_chip *girq = &pinctrl->gpiochip.chip.irq;
-+ u32 status;
-+ int irq;
-+
-+ if (regmap_read(pinctrl->regmap, pinctrl->gpiochip.status[i],
-+ &status))
-+ continue;
-+
-+ for_each_set_bit(irq, (unsigned long *)&status,
-+ AIROHA_PIN_BANK_SIZE) {
-+ u32 offset = irq + i * AIROHA_PIN_BANK_SIZE;
-+
-+ generic_handle_irq(irq_find_mapping(girq->domain,
-+ offset));
-+ regmap_write(pinctrl->regmap,
-+ pinctrl->gpiochip.status[i], BIT(irq));
-+ }
-+ handled |= !!status;
-+ }
-+
-+ return handled ? IRQ_HANDLED : IRQ_NONE;
-+}
-+
-+static const struct irq_chip airoha_gpio_irq_chip = {
-+ .name = "airoha-gpio-irq",
-+ .irq_unmask = airoha_irq_unmask,
-+ .irq_mask = airoha_irq_mask,
-+ .irq_mask_ack = airoha_irq_mask,
-+ .irq_set_type = airoha_irq_type,
-+ .flags = IRQCHIP_SET_TYPE_MASKED | IRQCHIP_IMMUTABLE,
-+};
-+
-+static int airoha_pinctrl_add_gpiochip(struct airoha_pinctrl *pinctrl,
-+ struct platform_device *pdev)
-+{
-+ struct airoha_pinctrl_gpiochip *chip = &pinctrl->gpiochip;
-+ struct gpio_chip *gc = &chip->chip;
-+ struct gpio_irq_chip *girq = &gc->irq;
-+ struct device *dev = &pdev->dev;
-+ int irq, err;
-+
-+ chip->data = gpio_data_regs;
-+ chip->dir = gpio_dir_regs;
-+ chip->out = gpio_out_regs;
-+ chip->status = irq_status_regs;
-+ chip->level = irq_level_regs;
-+ chip->edge = irq_edge_regs;
-+
-+ gc->parent = dev;
-+ gc->label = dev_name(dev);
-+ gc->request = gpiochip_generic_request;
-+ gc->free = gpiochip_generic_free;
-+ gc->direction_input = pinctrl_gpio_direction_input;
-+ gc->direction_output = airoha_gpio_direction_output;
-+ gc->set = airoha_gpio_set;
-+ gc->get = airoha_gpio_get;
-+ gc->base = -1;
-+ gc->ngpio = AIROHA_NUM_PINS;
-+
-+ girq->default_type = IRQ_TYPE_NONE;
-+ girq->handler = handle_simple_irq;
-+ gpio_irq_chip_set_chip(girq, &airoha_gpio_irq_chip);
-+
-+ irq = platform_get_irq(pdev, 0);
-+ if (irq < 0)
-+ return irq;
-+
-+ err = devm_request_irq(dev, irq, airoha_irq_handler, IRQF_SHARED,
-+ dev_name(dev), pinctrl);
-+ if (err) {
-+ dev_err(dev, "error requesting irq %d: %d\n", irq, err);
-+ return err;
-+ }
-+
-+ return devm_gpiochip_add_data(dev, gc, pinctrl);
-+}
-+
-+/* pinmux callbacks */
-+static int airoha_pinmux_set_mux(struct pinctrl_dev *pctrl_dev,
-+ unsigned int selector,
-+ unsigned int group)
-+{
-+ struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
-+ const struct airoha_pinctrl_func *func;
-+ struct function_desc *desc;
-+ struct group_desc *grp;
-+ int i;
-+
-+ desc = pinmux_generic_get_function(pctrl_dev, selector);
-+ if (!desc)
-+ return -EINVAL;
-+
-+ grp = pinctrl_generic_get_group(pctrl_dev, group);
-+ if (!grp)
-+ return -EINVAL;
-+
-+ dev_dbg(pctrl_dev->dev, "enable function %s group %s\n",
-+ desc->func.name, grp->grp.name);
-+
-+ func = desc->data;
-+ for (i = 0; i < func->group_size; i++) {
-+ const struct airoha_pinctrl_func_group *group;
-+ int j;
-+
-+ group = &func->groups[i];
-+ if (strcmp(group->name, grp->grp.name))
-+ continue;
-+
-+ for (j = 0; j < group->regmap_size; j++) {
-+ switch (group->regmap[j].mux) {
-+ case AIROHA_FUNC_PWM_EXT_MUX:
-+ case AIROHA_FUNC_PWM_MUX:
-+ regmap_update_bits(pinctrl->regmap,
-+ group->regmap[j].offset,
-+ group->regmap[j].mask,
-+ group->regmap[j].val);
-+ break;
-+ default:
-+ regmap_update_bits(pinctrl->chip_scu,
-+ group->regmap[j].offset,
-+ group->regmap[j].mask,
-+ group->regmap[j].val);
-+ break;
-+ }
-+ }
-+ return 0;
-+ }
-+
-+ return -EINVAL;
-+}
-+
-+static int airoha_pinmux_set_direction(struct pinctrl_dev *pctrl_dev,
-+ struct pinctrl_gpio_range *range,
-+ unsigned int p, bool input)
-+{
-+ struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
-+ u32 mask, index;
-+ int err, pin;
-+
-+ pin = airoha_convert_pin_to_reg_offset(pctrl_dev, range, p);
-+ if (pin < 0)
-+ return pin;
-+
-+ /* set output enable */
-+ mask = BIT(pin % AIROHA_PIN_BANK_SIZE);
-+ index = pin / AIROHA_PIN_BANK_SIZE;
-+ err = regmap_update_bits(pinctrl->regmap, pinctrl->gpiochip.out[index],
-+ mask, !input ? mask : 0);
-+ if (err)
-+ return err;
-+
-+ /* set direction */
-+ mask = BIT(2 * (pin % AIROHA_REG_GPIOCTRL_NUM_PIN));
-+ index = pin / AIROHA_REG_GPIOCTRL_NUM_PIN;
-+ return regmap_update_bits(pinctrl->regmap,
-+ pinctrl->gpiochip.dir[index], mask,
-+ !input ? mask : 0);
-+}
-+
-+static const struct pinmux_ops airoha_pmxops = {
-+ .get_functions_count = pinmux_generic_get_function_count,
-+ .get_function_name = pinmux_generic_get_function_name,
-+ .get_function_groups = pinmux_generic_get_function_groups,
-+ .gpio_set_direction = airoha_pinmux_set_direction,
-+ .set_mux = airoha_pinmux_set_mux,
-+ .strict = true,
-+};
-+
-+/* pinconf callbacks */
-+static const struct airoha_pinctrl_reg *
-+airoha_pinctrl_get_conf_reg(const struct airoha_pinctrl_conf *conf,
-+ int conf_size, int pin)
-+{
-+ int i;
-+
-+ for (i = 0; i < conf_size; i++) {
-+ if (conf[i].pin == pin)
-+ return &conf[i].reg;
-+ }
-+
-+ return NULL;
-+}
-+
-+static int airoha_pinctrl_get_conf(struct airoha_pinctrl *pinctrl,
-+ const struct airoha_pinctrl_conf *conf,
-+ int conf_size, int pin, u32 *val)
-+{
-+ const struct airoha_pinctrl_reg *reg;
-+
-+ reg = airoha_pinctrl_get_conf_reg(conf, conf_size, pin);
-+ if (!reg)
-+ return -EINVAL;
-+
-+ if (regmap_read(pinctrl->chip_scu, reg->offset, val))
-+ return -EINVAL;
-+
-+ *val = (*val & reg->mask) >> __ffs(reg->mask);
-+
-+ return 0;
-+}
-+
-+static int airoha_pinctrl_set_conf(struct airoha_pinctrl *pinctrl,
-+ const struct airoha_pinctrl_conf *conf,
-+ int conf_size, int pin, u32 val)
-+{
-+ const struct airoha_pinctrl_reg *reg = NULL;
-+
-+ reg = airoha_pinctrl_get_conf_reg(conf, conf_size, pin);
-+ if (!reg)
-+ return -EINVAL;
-+
-+
-+ if (regmap_update_bits(pinctrl->chip_scu, reg->offset, reg->mask,
-+ val << __ffs(reg->mask)))
-+ return -EINVAL;
-+
-+ return 0;
-+}
-+
-+#define airoha_pinctrl_get_pullup_conf(pinctrl, pin, val) \
-+ airoha_pinctrl_get_conf((pinctrl), airoha_pinctrl_pullup_conf, \
-+ ARRAY_SIZE(airoha_pinctrl_pullup_conf), \
-+ (pin), (val))
-+#define airoha_pinctrl_get_pulldown_conf(pinctrl, pin, val) \
-+ airoha_pinctrl_get_conf((pinctrl), airoha_pinctrl_pulldown_conf, \
-+ ARRAY_SIZE(airoha_pinctrl_pulldown_conf), \
-+ (pin), (val))
-+#define airoha_pinctrl_get_drive_e2_conf(pinctrl, pin, val) \
-+ airoha_pinctrl_get_conf((pinctrl), airoha_pinctrl_drive_e2_conf, \
-+ ARRAY_SIZE(airoha_pinctrl_drive_e2_conf), \
-+ (pin), (val))
-+#define airoha_pinctrl_get_drive_e4_conf(pinctrl, pin, val) \
-+ airoha_pinctrl_get_conf((pinctrl), airoha_pinctrl_drive_e4_conf, \
-+ ARRAY_SIZE(airoha_pinctrl_drive_e4_conf), \
-+ (pin), (val))
-+#define airoha_pinctrl_get_pcie_rst_od_conf(pinctrl, pin, val) \
-+ airoha_pinctrl_get_conf((pinctrl), airoha_pinctrl_pcie_rst_od_conf, \
-+ ARRAY_SIZE(airoha_pinctrl_pcie_rst_od_conf), \
-+ (pin), (val))
-+#define airoha_pinctrl_set_pullup_conf(pinctrl, pin, val) \
-+ airoha_pinctrl_set_conf((pinctrl), airoha_pinctrl_pullup_conf, \
-+ ARRAY_SIZE(airoha_pinctrl_pullup_conf), \
-+ (pin), (val))
-+#define airoha_pinctrl_set_pulldown_conf(pinctrl, pin, val) \
-+ airoha_pinctrl_set_conf((pinctrl), airoha_pinctrl_pulldown_conf, \
-+ ARRAY_SIZE(airoha_pinctrl_pulldown_conf), \
-+ (pin), (val))
-+#define airoha_pinctrl_set_drive_e2_conf(pinctrl, pin, val) \
-+ airoha_pinctrl_set_conf((pinctrl), airoha_pinctrl_drive_e2_conf, \
-+ ARRAY_SIZE(airoha_pinctrl_drive_e2_conf), \
-+ (pin), (val))
-+#define airoha_pinctrl_set_drive_e4_conf(pinctrl, pin, val) \
-+ airoha_pinctrl_set_conf((pinctrl), airoha_pinctrl_drive_e4_conf, \
-+ ARRAY_SIZE(airoha_pinctrl_drive_e4_conf), \
-+ (pin), (val))
-+#define airoha_pinctrl_set_pcie_rst_od_conf(pinctrl, pin, val) \
-+ airoha_pinctrl_set_conf((pinctrl), airoha_pinctrl_pcie_rst_od_conf, \
-+ ARRAY_SIZE(airoha_pinctrl_pcie_rst_od_conf), \
-+ (pin), (val))
-+
-+static int airoha_pinconf_get_direction(struct pinctrl_dev *pctrl_dev, u32 p)
-+{
-+ struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
-+ u32 val, mask;
-+ int err, pin;
-+ u8 index;
-+
-+ pin = airoha_convert_pin_to_reg_offset(pctrl_dev, NULL, p);
-+ if (pin < 0)
-+ return pin;
-+
-+ index = pin / AIROHA_REG_GPIOCTRL_NUM_PIN;
-+ err = regmap_read(pinctrl->regmap, pinctrl->gpiochip.dir[index], &val);
-+ if (err)
-+ return err;
-+
-+ mask = BIT(2 * (pin % AIROHA_REG_GPIOCTRL_NUM_PIN));
-+ return val & mask ? PIN_CONFIG_OUTPUT_ENABLE : PIN_CONFIG_INPUT_ENABLE;
-+}
-+
-+static int airoha_pinconf_get(struct pinctrl_dev *pctrl_dev,
-+ unsigned int pin, unsigned long *config)
-+{
-+ struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
-+ enum pin_config_param param = pinconf_to_config_param(*config);
-+ u32 arg;
-+
-+ switch (param) {
-+ case PIN_CONFIG_BIAS_PULL_DOWN:
-+ case PIN_CONFIG_BIAS_DISABLE:
-+ case PIN_CONFIG_BIAS_PULL_UP: {
-+ u32 pull_up, pull_down;
-+
-+ if (airoha_pinctrl_get_pullup_conf(pinctrl, pin, &pull_up) ||
-+ airoha_pinctrl_get_pulldown_conf(pinctrl, pin, &pull_down))
-+ return -EINVAL;
-+
-+ if (param == PIN_CONFIG_BIAS_PULL_UP &&
-+ !(pull_up && !pull_down))
-+ return -EINVAL;
-+ else if (param == PIN_CONFIG_BIAS_PULL_DOWN &&
-+ !(pull_down && !pull_up))
-+ return -EINVAL;
-+ else if (pull_up || pull_down)
-+ return -EINVAL;
-+
-+ arg = 1;
-+ break;
-+ }
-+ case PIN_CONFIG_DRIVE_STRENGTH: {
-+ u32 e2, e4;
-+
-+ if (airoha_pinctrl_get_drive_e2_conf(pinctrl, pin, &e2) ||
-+ airoha_pinctrl_get_drive_e4_conf(pinctrl, pin, &e4))
-+ return -EINVAL;
-+
-+ arg = e4 << 1 | e2;
-+ break;
-+ }
-+ case PIN_CONFIG_DRIVE_OPEN_DRAIN:
-+ if (airoha_pinctrl_get_pcie_rst_od_conf(pinctrl, pin, &arg))
-+ return -EINVAL;
-+ break;
-+ case PIN_CONFIG_OUTPUT_ENABLE:
-+ case PIN_CONFIG_INPUT_ENABLE:
-+ arg = airoha_pinconf_get_direction(pctrl_dev, pin);
-+ if (arg != param)
-+ return -EINVAL;
-+
-+ arg = 1;
-+ break;
-+ default:
-+ return -EOPNOTSUPP;
-+ }
-+
-+ *config = pinconf_to_config_packed(param, arg);
-+
-+ return 0;
-+}
-+
-+static int airoha_pinconf_set_pin_value(struct pinctrl_dev *pctrl_dev,
-+ unsigned int p, bool value)
-+{
-+ struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
-+ int pin;
-+
-+ pin = airoha_convert_pin_to_reg_offset(pctrl_dev, NULL, p);
-+ if (pin < 0)
-+ return pin;
-+
-+ airoha_gpio_set(&pinctrl->gpiochip.chip, pin, value);
-+
-+ return 0;
-+}
-+
-+static int airoha_pinconf_set(struct pinctrl_dev *pctrl_dev,
-+ unsigned int pin, unsigned long *configs,
-+ unsigned int num_configs)
-+{
-+ struct airoha_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctrl_dev);
-+ int i;
-+
-+ for (i = 0; i < num_configs; i++) {
-+ u32 param = pinconf_to_config_param(configs[i]);
-+ u32 arg = pinconf_to_config_argument(configs[i]);
-+
-+ switch (param) {
-+ case PIN_CONFIG_BIAS_DISABLE:
-+ airoha_pinctrl_set_pulldown_conf(pinctrl, pin, 0);
-+ airoha_pinctrl_set_pullup_conf(pinctrl, pin, 0);
-+ break;
-+ case PIN_CONFIG_BIAS_PULL_UP:
-+ airoha_pinctrl_set_pulldown_conf(pinctrl, pin, 0);
-+ airoha_pinctrl_set_pullup_conf(pinctrl, pin, 1);
-+ break;
-+ case PIN_CONFIG_BIAS_PULL_DOWN:
-+ airoha_pinctrl_set_pulldown_conf(pinctrl, pin, 1);
-+ airoha_pinctrl_set_pullup_conf(pinctrl, pin, 0);
-+ break;
-+ case PIN_CONFIG_DRIVE_STRENGTH: {
-+ u32 e2 = 0, e4 = 0;
-+
-+ switch (arg) {
-+ case MTK_DRIVE_2mA:
-+ break;
-+ case MTK_DRIVE_4mA:
-+ e2 = 1;
-+ break;
-+ case MTK_DRIVE_6mA:
-+ e4 = 1;
-+ break;
-+ case MTK_DRIVE_8mA:
-+ e2 = 1;
-+ e4 = 1;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ airoha_pinctrl_set_drive_e2_conf(pinctrl, pin, e2);
-+ airoha_pinctrl_set_drive_e4_conf(pinctrl, pin, e4);
-+ break;
-+ }
-+ case PIN_CONFIG_DRIVE_OPEN_DRAIN:
-+ airoha_pinctrl_set_pcie_rst_od_conf(pinctrl, pin, !!arg);
-+ break;
-+ case PIN_CONFIG_OUTPUT_ENABLE:
-+ case PIN_CONFIG_INPUT_ENABLE:
-+ case PIN_CONFIG_OUTPUT: {
-+ bool input = param == PIN_CONFIG_INPUT_ENABLE;
-+ int err;
-+
-+ err = airoha_pinmux_set_direction(pctrl_dev, NULL, pin,
-+ input);
-+ if (err)
-+ return err;
-+
-+ if (param == PIN_CONFIG_OUTPUT) {
-+ err = airoha_pinconf_set_pin_value(pctrl_dev,
-+ pin, !!arg);
-+ if (err)
-+ return err;
-+ }
-+ break;
-+ }
-+ default:
-+ return -EOPNOTSUPP;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static int airoha_pinconf_group_get(struct pinctrl_dev *pctrl_dev,
-+ unsigned int group, unsigned long *config)
-+{
-+ u32 cur_config = 0;
-+ int i;
-+
-+ for (i = 0; i < airoha_pinctrl_groups[group].npins; i++) {
-+ if (airoha_pinconf_get(pctrl_dev,
-+ airoha_pinctrl_groups[group].pins[i],
-+ config))
-+ return -EOPNOTSUPP;
-+
-+ if (i && cur_config != *config)
-+ return -EOPNOTSUPP;
-+
-+ cur_config = *config;
-+ }
-+
-+ return 0;
-+}
-+
-+static int airoha_pinconf_group_set(struct pinctrl_dev *pctrl_dev,
-+ unsigned int group, unsigned long *configs,
-+ unsigned int num_configs)
-+{
-+ int i;
-+
-+ for (i = 0; i < airoha_pinctrl_groups[group].npins; i++) {
-+ int err;
-+
-+ err = airoha_pinconf_set(pctrl_dev,
-+ airoha_pinctrl_groups[group].pins[i],
-+ configs, num_configs);
-+ if (err)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+static const struct pinconf_ops airoha_confops = {
-+ .is_generic = true,
-+ .pin_config_get = airoha_pinconf_get,
-+ .pin_config_set = airoha_pinconf_set,
-+ .pin_config_group_get = airoha_pinconf_group_get,
-+ .pin_config_group_set = airoha_pinconf_group_set,
-+ .pin_config_config_dbg_show = pinconf_generic_dump_config,
-+};
-+
-+static const struct pinctrl_ops airoha_pctlops = {
-+ .get_groups_count = pinctrl_generic_get_group_count,
-+ .get_group_name = pinctrl_generic_get_group_name,
-+ .get_group_pins = pinctrl_generic_get_group_pins,
-+ .dt_node_to_map = pinconf_generic_dt_node_to_map_all,
-+ .dt_free_map = pinconf_generic_dt_free_map,
-+};
-+
-+static struct pinctrl_desc airoha_pinctrl_desc = {
-+ .name = KBUILD_MODNAME,
-+ .owner = THIS_MODULE,
-+ .pctlops = &airoha_pctlops,
-+ .pmxops = &airoha_pmxops,
-+ .confops = &airoha_confops,
-+ .pins = airoha_pinctrl_pins,
-+ .npins = ARRAY_SIZE(airoha_pinctrl_pins),
-+};
-+
-+static int airoha_pinctrl_probe(struct platform_device *pdev)
-+{
-+ struct device *dev = &pdev->dev;
-+ struct airoha_pinctrl *pinctrl;
-+ struct regmap *map;
-+ int err, i;
-+
-+ pinctrl = devm_kzalloc(dev, sizeof(*pinctrl), GFP_KERNEL);
-+ if (!pinctrl)
-+ return -ENOMEM;
-+
-+ pinctrl->regmap = device_node_to_regmap(dev->parent->of_node);
-+ if (IS_ERR(pinctrl->regmap))
-+ return PTR_ERR(pinctrl->regmap);
-+
-+ map = syscon_regmap_lookup_by_compatible("airoha,en7581-chip-scu");
-+ if (IS_ERR(map))
-+ return PTR_ERR(map);
-+
-+ pinctrl->chip_scu = map;
-+
-+ err = devm_pinctrl_register_and_init(dev, &airoha_pinctrl_desc,
-+ pinctrl, &pinctrl->ctrl);
-+ if (err)
-+ return err;
-+
-+ /* build pin groups */
-+ for (i = 0; i < ARRAY_SIZE(airoha_pinctrl_groups); i++) {
-+ const struct pingroup *grp = &airoha_pinctrl_groups[i];
-+
-+ err = pinctrl_generic_add_group(pinctrl->ctrl, grp->name,
-+ grp->pins, grp->npins,
-+ (void *)grp);
-+ if (err < 0) {
-+ dev_err(&pdev->dev, "Failed to register group %s\n",
-+ grp->name);
-+ return err;
-+ }
-+ }
-+
-+ /* build functions */
-+ for (i = 0; i < ARRAY_SIZE(airoha_pinctrl_funcs); i++) {
-+ const struct airoha_pinctrl_func *func;
-+
-+ func = &airoha_pinctrl_funcs[i];
-+ err = pinmux_generic_add_function(pinctrl->ctrl,
-+ func->desc.func.name,
-+ func->desc.func.groups,
-+ func->desc.func.ngroups,
-+ (void *)func);
-+ if (err < 0) {
-+ dev_err(dev, "Failed to register function %s\n",
-+ func->desc.func.name);
-+ return err;
-+ }
-+ }
-+
-+ err = pinctrl_enable(pinctrl->ctrl);
-+ if (err)
-+ return err;
-+
-+ /* build gpio-chip */
-+ return airoha_pinctrl_add_gpiochip(pinctrl, pdev);
-+}
-+
-+static const struct of_device_id airoha_pinctrl_of_match[] = {
-+ { .compatible = "airoha,en7581-pinctrl" },
-+ { /* sentinel */ }
-+};
-+MODULE_DEVICE_TABLE(of, airoha_pinctrl_of_match);
-+
-+static struct platform_driver airoha_pinctrl_driver = {
-+ .probe = airoha_pinctrl_probe,
-+ .driver = {
-+ .name = "pinctrl-airoha",
-+ .of_match_table = airoha_pinctrl_of_match,
-+ },
-+};
-+module_platform_driver(airoha_pinctrl_driver);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Lorenzo Bianconi ");
-+MODULE_AUTHOR("Benjamin Larsson ");
-+MODULE_AUTHOR("Markus Gothe ");
-+MODULE_DESCRIPTION("Pinctrl driver for Airoha SoC");
diff --git a/lede/target/linux/airoha/patches-6.12/034-02-v6.13-pinctrl-airoha-Use-unsigned-long-for-bit-search.patch b/lede/target/linux/airoha/patches-6.12/034-02-v6.13-pinctrl-airoha-Use-unsigned-long-for-bit-search.patch
deleted file mode 100644
index 62fae6aa38..0000000000
--- a/lede/target/linux/airoha/patches-6.12/034-02-v6.13-pinctrl-airoha-Use-unsigned-long-for-bit-search.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From ac6f0825e582f2216a582c9edf0cee7bfe347ba6 Mon Sep 17 00:00:00 2001
-From: Kees Cook
-Date: Sun, 17 Nov 2024 03:45:38 -0800
-Subject: [PATCH] pinctrl: airoha: Use unsigned long for bit search
-
-Instead of risking alignment problems and causing (false positive) array
-bound warnings when casting a u32 to (64-bit) unsigned long, just use a
-native unsigned long for doing bit searches. Avoids warning with GCC 15's
--Warray-bounds -fdiagnostics-details:
-
-In file included from ../include/linux/bitmap.h:11,
- from ../include/linux/cpumask.h:12,
- from ../arch/x86/include/asm/paravirt.h:21,
- from ../arch/x86/include/asm/irqflags.h:80,
- from ../include/linux/irqflags.h:18,
- from ../include/linux/spinlock.h:59,
- from ../include/linux/irq.h:14,
- from ../include/linux/irqchip/chained_irq.h:10,
- from ../include/linux/gpio/driver.h:8,
- from ../drivers/pinctrl/mediatek/pinctrl-airoha.c:11:
-In function 'find_next_bit',
- inlined from 'airoha_irq_handler' at ../drivers/pinctrl/mediatek/pinctrl-airoha.c:2394:3:
-../include/linux/find.h:65:23: error: array subscript 'long unsigned int[0]' is partly outside array bounds of 'u32[1]' {aka 'unsigned int[1]'} [-Werror=array-bounds=]
- 65 | val = *addr & GENMASK(size - 1, offset);
- | ^~~~~
-../drivers/pinctrl/mediatek/pinctrl-airoha.c: In function 'airoha_irq_handler':
-../drivers/pinctrl/mediatek/pinctrl-airoha.c:2387:21: note: object 'status' of size 4
- 2387 | u32 status;
- | ^~~~~~
-
-Signed-off-by: Kees Cook
-Reviewed-by: AngeloGioacchino Del Regno
-Link: https://lore.kernel.org/20241117114534.work.292-kees@kernel.org
-Signed-off-by: Linus Walleij
----
- drivers/pinctrl/mediatek/pinctrl-airoha.c | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
---- a/drivers/pinctrl/mediatek/pinctrl-airoha.c
-+++ b/drivers/pinctrl/mediatek/pinctrl-airoha.c
-@@ -2384,15 +2384,16 @@ static irqreturn_t airoha_irq_handler(in
-
- for (i = 0; i < ARRAY_SIZE(irq_status_regs); i++) {
- struct gpio_irq_chip *girq = &pinctrl->gpiochip.chip.irq;
-- u32 status;
-+ u32 regmap;
-+ unsigned long status;
- int irq;
-
- if (regmap_read(pinctrl->regmap, pinctrl->gpiochip.status[i],
-- &status))
-+ ®map))
- continue;
-
-- for_each_set_bit(irq, (unsigned long *)&status,
-- AIROHA_PIN_BANK_SIZE) {
-+ status = regmap;
-+ for_each_set_bit(irq, &status, AIROHA_PIN_BANK_SIZE) {
- u32 offset = irq + i * AIROHA_PIN_BANK_SIZE;
-
- generic_handle_irq(irq_find_mapping(girq->domain,
diff --git a/lede/target/linux/airoha/patches-6.12/036-v6.13-net-airoha-Fix-typo-in-REG_CDM2_FWD_CFG-configuratio.patch b/lede/target/linux/airoha/patches-6.12/036-v6.13-net-airoha-Fix-typo-in-REG_CDM2_FWD_CFG-configuratio.patch
deleted file mode 100644
index a71197150f..0000000000
--- a/lede/target/linux/airoha/patches-6.12/036-v6.13-net-airoha-Fix-typo-in-REG_CDM2_FWD_CFG-configuratio.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 30d9d8f6a2d7e44a9f91737dd409dbc87ac6f6b7 Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Tue, 15 Oct 2024 09:58:09 +0200
-Subject: [PATCH] net: airoha: Fix typo in REG_CDM2_FWD_CFG configuration
-
-Fix typo in airoha_fe_init routine configuring CDM2_OAM_QSEL_MASK field
-of REG_CDM2_FWD_CFG register.
-This bug is not introducing any user visible problem since Frame Engine
-CDM2 port is used just by the second QDMA block and we currently enable
-just QDMA1 block connected to the MT7530 dsa switch via CDM1 port.
-
-Introduced by commit 23020f049327 ("net: airoha: Introduce ethernet
-support for EN7581 SoC")
-
-Reported-by: ChihWei Cheng
-Signed-off-by: Lorenzo Bianconi
-Reviewed-by: Simon Horman
-Message-ID: <20241015-airoha-eth-cdm2-fixes-v1-1-9dc6993286c3@kernel.org>
-Signed-off-by: Andrew Lunn
----
- drivers/net/ethernet/mediatek/airoha_eth.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/mediatek/airoha_eth.c
-+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
-@@ -1369,7 +1369,8 @@ static int airoha_fe_init(struct airoha_
- airoha_fe_set(eth, REG_GDM_MISC_CFG,
- GDM2_RDM_ACK_WAIT_PREF_MASK |
- GDM2_CHN_VLD_MODE_MASK);
-- airoha_fe_rmw(eth, REG_CDM2_FWD_CFG, CDM2_OAM_QSEL_MASK, 15);
-+ airoha_fe_rmw(eth, REG_CDM2_FWD_CFG, CDM2_OAM_QSEL_MASK,
-+ FIELD_PREP(CDM2_OAM_QSEL_MASK, 15));
-
- /* init fragment and assemble Force Port */
- /* NPU Core-3, NPU Bridge Channel-3 */
diff --git a/lede/target/linux/airoha/patches-6.12/038-01-v6.14-net-airoha-Enable-Tx-drop-capability-for-each-Tx-DMA.patch b/lede/target/linux/airoha/patches-6.12/038-01-v6.14-net-airoha-Enable-Tx-drop-capability-for-each-Tx-DMA.patch
deleted file mode 100644
index b6bbcf3191..0000000000
--- a/lede/target/linux/airoha/patches-6.12/038-01-v6.14-net-airoha-Enable-Tx-drop-capability-for-each-Tx-DMA.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 5f795590380476f1c9b7ed0ac945c9b0269dc23a Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Fri, 3 Jan 2025 13:17:02 +0100
-Subject: [PATCH 1/4] net: airoha: Enable Tx drop capability for each Tx DMA
- ring
-
-This is a preliminary patch in order to enable hw Qdisc offloading.
-
-Signed-off-by: Lorenzo Bianconi
-Signed-off-by: Paolo Abeni
----
- drivers/net/ethernet/mediatek/airoha_eth.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
---- a/drivers/net/ethernet/mediatek/airoha_eth.c
-+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
-@@ -1789,6 +1789,10 @@ static int airoha_qdma_init_tx_queue(str
- WRITE_ONCE(q->desc[i].ctrl, cpu_to_le32(val));
- }
-
-+ /* xmit ring drop default setting */
-+ airoha_qdma_set(qdma, REG_TX_RING_BLOCKING(qid),
-+ TX_RING_IRQ_BLOCKING_TX_DROP_EN_MASK);
-+
- airoha_qdma_wr(qdma, REG_TX_RING_BASE(qid), dma_addr);
- airoha_qdma_rmw(qdma, REG_TX_CPU_IDX(qid), TX_RING_CPU_IDX_MASK,
- FIELD_PREP(TX_RING_CPU_IDX_MASK, q->head));
diff --git a/lede/target/linux/airoha/patches-6.12/038-02-v6.14-net-airoha-Introduce-ndo_select_queue-callback.patch b/lede/target/linux/airoha/patches-6.12/038-02-v6.14-net-airoha-Introduce-ndo_select_queue-callback.patch
deleted file mode 100644
index f150dd929a..0000000000
--- a/lede/target/linux/airoha/patches-6.12/038-02-v6.14-net-airoha-Introduce-ndo_select_queue-callback.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From 2b288b81560b94958cd68bbe54673e55a1730c95 Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Fri, 3 Jan 2025 13:17:03 +0100
-Subject: [PATCH 2/4] net: airoha: Introduce ndo_select_queue callback
-
-Airoha EN7581 SoC supports 32 Tx DMA rings used to feed packets to QoS
-channels. Each channels supports 8 QoS queues where the user can apply
-QoS scheduling policies. In a similar way, the user can configure hw
-rate shaping for each QoS channel.
-Introduce ndo_select_queue callback in order to select the tx queue
-based on QoS channel and QoS queue. In particular, for dsa device select
-QoS channel according to the dsa user port index, rely on port id
-otherwise. Select QoS queue based on the skb priority.
-
-Signed-off-by: Lorenzo Bianconi
-Signed-off-by: Paolo Abeni
----
- drivers/net/ethernet/mediatek/airoha_eth.c | 30 ++++++++++++++++++++--
- 1 file changed, 28 insertions(+), 2 deletions(-)
-
---- a/drivers/net/ethernet/mediatek/airoha_eth.c
-+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
-@@ -23,6 +23,8 @@
- #define AIROHA_MAX_NUM_XSI_RSTS 5
- #define AIROHA_MAX_MTU 2000
- #define AIROHA_MAX_PACKET_SIZE 2048
-+#define AIROHA_NUM_QOS_CHANNELS 4
-+#define AIROHA_NUM_QOS_QUEUES 8
- #define AIROHA_NUM_TX_RING 32
- #define AIROHA_NUM_RX_RING 32
- #define AIROHA_FE_MC_MAX_VLAN_TABLE 64
-@@ -2421,21 +2423,44 @@ static void airoha_dev_get_stats64(struc
- } while (u64_stats_fetch_retry(&port->stats.syncp, start));
- }
-
-+static u16 airoha_dev_select_queue(struct net_device *dev, struct sk_buff *skb,
-+ struct net_device *sb_dev)
-+{
-+ struct airoha_gdm_port *port = netdev_priv(dev);
-+ int queue, channel;
-+
-+ /* For dsa device select QoS channel according to the dsa user port
-+ * index, rely on port id otherwise. Select QoS queue based on the
-+ * skb priority.
-+ */
-+ channel = netdev_uses_dsa(dev) ? skb_get_queue_mapping(skb) : port->id;
-+ channel = channel % AIROHA_NUM_QOS_CHANNELS;
-+ queue = (skb->priority - 1) % AIROHA_NUM_QOS_QUEUES; /* QoS queue */
-+ queue = channel * AIROHA_NUM_QOS_QUEUES + queue;
-+
-+ return queue < dev->num_tx_queues ? queue : 0;
-+}
-+
- static netdev_tx_t airoha_dev_xmit(struct sk_buff *skb,
- struct net_device *dev)
- {
- struct skb_shared_info *sinfo = skb_shinfo(skb);
- struct airoha_gdm_port *port = netdev_priv(dev);
-- u32 msg0 = 0, msg1, len = skb_headlen(skb);
-- int i, qid = skb_get_queue_mapping(skb);
-+ u32 msg0, msg1, len = skb_headlen(skb);
- struct airoha_qdma *qdma = port->qdma;
- u32 nr_frags = 1 + sinfo->nr_frags;
- struct netdev_queue *txq;
- struct airoha_queue *q;
- void *data = skb->data;
-+ int i, qid;
- u16 index;
- u8 fport;
-
-+ qid = skb_get_queue_mapping(skb) % ARRAY_SIZE(qdma->q_tx);
-+ msg0 = FIELD_PREP(QDMA_ETH_TXMSG_CHAN_MASK,
-+ qid / AIROHA_NUM_QOS_QUEUES) |
-+ FIELD_PREP(QDMA_ETH_TXMSG_QUEUE_MASK,
-+ qid % AIROHA_NUM_QOS_QUEUES);
- if (skb->ip_summed == CHECKSUM_PARTIAL)
- msg0 |= FIELD_PREP(QDMA_ETH_TXMSG_TCO_MASK, 1) |
- FIELD_PREP(QDMA_ETH_TXMSG_UCO_MASK, 1) |
-@@ -2609,6 +2634,7 @@ static const struct net_device_ops airoh
- .ndo_init = airoha_dev_init,
- .ndo_open = airoha_dev_open,
- .ndo_stop = airoha_dev_stop,
-+ .ndo_select_queue = airoha_dev_select_queue,
- .ndo_start_xmit = airoha_dev_xmit,
- .ndo_get_stats64 = airoha_dev_get_stats64,
- .ndo_set_mac_address = airoha_dev_set_macaddr,
diff --git a/lede/target/linux/airoha/patches-6.12/038-03-v6.14-net-airoha-Add-sched-ETS-offload-support.patch b/lede/target/linux/airoha/patches-6.12/038-03-v6.14-net-airoha-Add-sched-ETS-offload-support.patch
deleted file mode 100644
index 4ea0742377..0000000000
--- a/lede/target/linux/airoha/patches-6.12/038-03-v6.14-net-airoha-Add-sched-ETS-offload-support.patch
+++ /dev/null
@@ -1,292 +0,0 @@
-From 20bf7d07c956e5c7a22d3076c599cbb7a6054917 Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Fri, 3 Jan 2025 13:17:04 +0100
-Subject: [PATCH 3/4] net: airoha: Add sched ETS offload support
-
-Introduce support for ETS Qdisc offload available on the Airoha EN7581
-ethernet controller. In order to be effective, ETS Qdisc must configured
-as leaf of a HTB Qdisc (HTB Qdisc offload will be added in the following
-patch). ETS Qdisc available on EN7581 ethernet controller supports at
-most 8 concurrent bands (QoS queues). We can enable an ETS Qdisc for
-each available QoS channel.
-
-Signed-off-by: Lorenzo Bianconi
-Signed-off-by: Paolo Abeni
----
- drivers/net/ethernet/mediatek/airoha_eth.c | 196 ++++++++++++++++++++-
- 1 file changed, 195 insertions(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/mediatek/airoha_eth.c
-+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
-@@ -15,6 +15,7 @@
- #include
- #include
- #include
-+#include
- #include
-
- #define AIROHA_MAX_NUM_GDM_PORTS 1
-@@ -543,9 +544,24 @@
- #define INGRESS_SLOW_TICK_RATIO_MASK GENMASK(29, 16)
- #define INGRESS_FAST_TICK_MASK GENMASK(15, 0)
-
-+#define REG_QUEUE_CLOSE_CFG(_n) (0x00a0 + ((_n) & 0xfc))
-+#define TXQ_DISABLE_CHAN_QUEUE_MASK(_n, _m) BIT((_m) + (((_n) & 0x3) << 3))
-+
- #define REG_TXQ_DIS_CFG_BASE(_n) ((_n) ? 0x20a0 : 0x00a0)
- #define REG_TXQ_DIS_CFG(_n, _m) (REG_TXQ_DIS_CFG_BASE((_n)) + (_m) << 2)
-
-+#define REG_CNTR_CFG(_n) (0x0400 + ((_n) << 3))
-+#define CNTR_EN_MASK BIT(31)
-+#define CNTR_ALL_CHAN_EN_MASK BIT(30)
-+#define CNTR_ALL_QUEUE_EN_MASK BIT(29)
-+#define CNTR_ALL_DSCP_RING_EN_MASK BIT(28)
-+#define CNTR_SRC_MASK GENMASK(27, 24)
-+#define CNTR_DSCP_RING_MASK GENMASK(20, 16)
-+#define CNTR_CHAN_MASK GENMASK(7, 3)
-+#define CNTR_QUEUE_MASK GENMASK(2, 0)
-+
-+#define REG_CNTR_VAL(_n) (0x0404 + ((_n) << 3))
-+
- #define REG_LMGR_INIT_CFG 0x1000
- #define LMGR_INIT_START BIT(31)
- #define LMGR_SRAM_MODE_MASK BIT(30)
-@@ -571,9 +587,19 @@
- #define TWRR_WEIGHT_SCALE_MASK BIT(31)
- #define TWRR_WEIGHT_BASE_MASK BIT(3)
-
-+#define REG_TXWRR_WEIGHT_CFG 0x1024
-+#define TWRR_RW_CMD_MASK BIT(31)
-+#define TWRR_RW_CMD_DONE BIT(30)
-+#define TWRR_CHAN_IDX_MASK GENMASK(23, 19)
-+#define TWRR_QUEUE_IDX_MASK GENMASK(18, 16)
-+#define TWRR_VALUE_MASK GENMASK(15, 0)
-+
- #define REG_PSE_BUF_USAGE_CFG 0x1028
- #define PSE_BUF_ESTIMATE_EN_MASK BIT(29)
-
-+#define REG_CHAN_QOS_MODE(_n) (0x1040 + ((_n) << 2))
-+#define CHAN_QOS_MODE_MASK(_n) GENMASK(2 + ((_n) << 2), (_n) << 2)
-+
- #define REG_GLB_TRTCM_CFG 0x1080
- #define GLB_TRTCM_EN_MASK BIT(31)
- #define GLB_TRTCM_MODE_MASK BIT(30)
-@@ -722,6 +748,17 @@ enum {
- FE_PSE_PORT_DROP = 0xf,
- };
-
-+enum tx_sched_mode {
-+ TC_SCH_WRR8,
-+ TC_SCH_SP,
-+ TC_SCH_WRR7,
-+ TC_SCH_WRR6,
-+ TC_SCH_WRR5,
-+ TC_SCH_WRR4,
-+ TC_SCH_WRR3,
-+ TC_SCH_WRR2,
-+};
-+
- struct airoha_queue_entry {
- union {
- void *buf;
-@@ -812,6 +849,10 @@ struct airoha_gdm_port {
- int id;
-
- struct airoha_hw_stats stats;
-+
-+ /* qos stats counters */
-+ u64 cpu_tx_packets;
-+ u64 fwd_tx_packets;
- };
-
- struct airoha_eth {
-@@ -1961,6 +2002,27 @@ static void airoha_qdma_init_qos(struct
- FIELD_PREP(SLA_SLOW_TICK_RATIO_MASK, 40));
- }
-
-+static void airoha_qdma_init_qos_stats(struct airoha_qdma *qdma)
-+{
-+ int i;
-+
-+ for (i = 0; i < AIROHA_NUM_QOS_CHANNELS; i++) {
-+ /* Tx-cpu transferred count */
-+ airoha_qdma_wr(qdma, REG_CNTR_VAL(i << 1), 0);
-+ airoha_qdma_wr(qdma, REG_CNTR_CFG(i << 1),
-+ CNTR_EN_MASK | CNTR_ALL_QUEUE_EN_MASK |
-+ CNTR_ALL_DSCP_RING_EN_MASK |
-+ FIELD_PREP(CNTR_CHAN_MASK, i));
-+ /* Tx-fwd transferred count */
-+ airoha_qdma_wr(qdma, REG_CNTR_VAL((i << 1) + 1), 0);
-+ airoha_qdma_wr(qdma, REG_CNTR_CFG(i << 1),
-+ CNTR_EN_MASK | CNTR_ALL_QUEUE_EN_MASK |
-+ CNTR_ALL_DSCP_RING_EN_MASK |
-+ FIELD_PREP(CNTR_SRC_MASK, 1) |
-+ FIELD_PREP(CNTR_CHAN_MASK, i));
-+ }
-+}
-+
- static int airoha_qdma_hw_init(struct airoha_qdma *qdma)
- {
- int i;
-@@ -2011,6 +2073,7 @@ static int airoha_qdma_hw_init(struct ai
-
- airoha_qdma_set(qdma, REG_TXQ_CNGST_CFG,
- TXQ_CNGST_DROP_EN | TXQ_CNGST_DEI_DROP_EN);
-+ airoha_qdma_init_qos_stats(qdma);
-
- return 0;
- }
-@@ -2630,6 +2693,135 @@ airoha_ethtool_get_rmon_stats(struct net
- } while (u64_stats_fetch_retry(&port->stats.syncp, start));
- }
-
-+static int airoha_qdma_set_chan_tx_sched(struct airoha_gdm_port *port,
-+ int channel, enum tx_sched_mode mode,
-+ const u16 *weights, u8 n_weights)
-+{
-+ int i;
-+
-+ for (i = 0; i < AIROHA_NUM_TX_RING; i++)
-+ airoha_qdma_clear(port->qdma, REG_QUEUE_CLOSE_CFG(channel),
-+ TXQ_DISABLE_CHAN_QUEUE_MASK(channel, i));
-+
-+ for (i = 0; i < n_weights; i++) {
-+ u32 status;
-+ int err;
-+
-+ airoha_qdma_wr(port->qdma, REG_TXWRR_WEIGHT_CFG,
-+ TWRR_RW_CMD_MASK |
-+ FIELD_PREP(TWRR_CHAN_IDX_MASK, channel) |
-+ FIELD_PREP(TWRR_QUEUE_IDX_MASK, i) |
-+ FIELD_PREP(TWRR_VALUE_MASK, weights[i]));
-+ err = read_poll_timeout(airoha_qdma_rr, status,
-+ status & TWRR_RW_CMD_DONE,
-+ USEC_PER_MSEC, 10 * USEC_PER_MSEC,
-+ true, port->qdma,
-+ REG_TXWRR_WEIGHT_CFG);
-+ if (err)
-+ return err;
-+ }
-+
-+ airoha_qdma_rmw(port->qdma, REG_CHAN_QOS_MODE(channel >> 3),
-+ CHAN_QOS_MODE_MASK(channel),
-+ mode << __ffs(CHAN_QOS_MODE_MASK(channel)));
-+
-+ return 0;
-+}
-+
-+static int airoha_qdma_set_tx_prio_sched(struct airoha_gdm_port *port,
-+ int channel)
-+{
-+ static const u16 w[AIROHA_NUM_QOS_QUEUES] = {};
-+
-+ return airoha_qdma_set_chan_tx_sched(port, channel, TC_SCH_SP, w,
-+ ARRAY_SIZE(w));
-+}
-+
-+static int airoha_qdma_set_tx_ets_sched(struct airoha_gdm_port *port,
-+ int channel,
-+ struct tc_ets_qopt_offload *opt)
-+{
-+ struct tc_ets_qopt_offload_replace_params *p = &opt->replace_params;
-+ enum tx_sched_mode mode = TC_SCH_SP;
-+ u16 w[AIROHA_NUM_QOS_QUEUES] = {};
-+ int i, nstrict = 0;
-+
-+ if (p->bands > AIROHA_NUM_QOS_QUEUES)
-+ return -EINVAL;
-+
-+ for (i = 0; i < p->bands; i++) {
-+ if (!p->quanta[i])
-+ nstrict++;
-+ }
-+
-+ /* this configuration is not supported by the hw */
-+ if (nstrict == AIROHA_NUM_QOS_QUEUES - 1)
-+ return -EINVAL;
-+
-+ for (i = 0; i < p->bands - nstrict; i++)
-+ w[i] = p->weights[nstrict + i];
-+
-+ if (!nstrict)
-+ mode = TC_SCH_WRR8;
-+ else if (nstrict < AIROHA_NUM_QOS_QUEUES - 1)
-+ mode = nstrict + 1;
-+
-+ return airoha_qdma_set_chan_tx_sched(port, channel, mode, w,
-+ ARRAY_SIZE(w));
-+}
-+
-+static int airoha_qdma_get_tx_ets_stats(struct airoha_gdm_port *port,
-+ int channel,
-+ struct tc_ets_qopt_offload *opt)
-+{
-+ u64 cpu_tx_packets = airoha_qdma_rr(port->qdma,
-+ REG_CNTR_VAL(channel << 1));
-+ u64 fwd_tx_packets = airoha_qdma_rr(port->qdma,
-+ REG_CNTR_VAL((channel << 1) + 1));
-+ u64 tx_packets = (cpu_tx_packets - port->cpu_tx_packets) +
-+ (fwd_tx_packets - port->fwd_tx_packets);
-+ _bstats_update(opt->stats.bstats, 0, tx_packets);
-+
-+ port->cpu_tx_packets = cpu_tx_packets;
-+ port->fwd_tx_packets = fwd_tx_packets;
-+
-+ return 0;
-+}
-+
-+static int airoha_tc_setup_qdisc_ets(struct airoha_gdm_port *port,
-+ struct tc_ets_qopt_offload *opt)
-+{
-+ int channel = TC_H_MAJ(opt->handle) >> 16;
-+
-+ if (opt->parent == TC_H_ROOT)
-+ return -EINVAL;
-+
-+ switch (opt->command) {
-+ case TC_ETS_REPLACE:
-+ return airoha_qdma_set_tx_ets_sched(port, channel, opt);
-+ case TC_ETS_DESTROY:
-+ /* PRIO is default qdisc scheduler */
-+ return airoha_qdma_set_tx_prio_sched(port, channel);
-+ case TC_ETS_STATS:
-+ return airoha_qdma_get_tx_ets_stats(port, channel, opt);
-+ default:
-+ return -EOPNOTSUPP;
-+ }
-+}
-+
-+static int airoha_dev_tc_setup(struct net_device *dev, enum tc_setup_type type,
-+ void *type_data)
-+{
-+ struct airoha_gdm_port *port = netdev_priv(dev);
-+
-+ switch (type) {
-+ case TC_SETUP_QDISC_ETS:
-+ return airoha_tc_setup_qdisc_ets(port, type_data);
-+ default:
-+ return -EOPNOTSUPP;
-+ }
-+}
-+
- static const struct net_device_ops airoha_netdev_ops = {
- .ndo_init = airoha_dev_init,
- .ndo_open = airoha_dev_open,
-@@ -2638,6 +2830,7 @@ static const struct net_device_ops airoh
- .ndo_start_xmit = airoha_dev_xmit,
- .ndo_get_stats64 = airoha_dev_get_stats64,
- .ndo_set_mac_address = airoha_dev_set_macaddr,
-+ .ndo_setup_tc = airoha_dev_tc_setup,
- };
-
- static const struct ethtool_ops airoha_ethtool_ops = {
-@@ -2687,7 +2880,8 @@ static int airoha_alloc_gdm_port(struct
- dev->watchdog_timeo = 5 * HZ;
- dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
- NETIF_F_TSO6 | NETIF_F_IPV6_CSUM |
-- NETIF_F_SG | NETIF_F_TSO;
-+ NETIF_F_SG | NETIF_F_TSO |
-+ NETIF_F_HW_TC;
- dev->features |= dev->hw_features;
- dev->dev.of_node = np;
- dev->irq = qdma->irq;
diff --git a/lede/target/linux/airoha/patches-6.12/038-04-v6.14-net-airoha-Add-sched-HTB-offload-support.patch b/lede/target/linux/airoha/patches-6.12/038-04-v6.14-net-airoha-Add-sched-HTB-offload-support.patch
deleted file mode 100644
index 4240a89952..0000000000
--- a/lede/target/linux/airoha/patches-6.12/038-04-v6.14-net-airoha-Add-sched-HTB-offload-support.patch
+++ /dev/null
@@ -1,371 +0,0 @@
-From ef1ca9271313b4ea7b03de69576aacef1e78f381 Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Fri, 3 Jan 2025 13:17:05 +0100
-Subject: [PATCH 4/4] net: airoha: Add sched HTB offload support
-
-Introduce support for HTB Qdisc offload available in the Airoha EN7581
-ethernet controller. EN7581 can offload only one level of HTB leafs.
-Each HTB leaf represents a QoS channel supported by EN7581 SoC.
-The typical use-case is creating a HTB leaf for QoS channel to rate
-limit the egress traffic and attach an ETS Qdisc to each HTB leaf in
-order to enforce traffic prioritization.
-
-Signed-off-by: Lorenzo Bianconi
-Signed-off-by: Paolo Abeni
----
- drivers/net/ethernet/mediatek/airoha_eth.c | 288 ++++++++++++++++++++-
- 1 file changed, 287 insertions(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/mediatek/airoha_eth.c
-+++ b/drivers/net/ethernet/mediatek/airoha_eth.c
-@@ -28,6 +28,8 @@
- #define AIROHA_NUM_QOS_QUEUES 8
- #define AIROHA_NUM_TX_RING 32
- #define AIROHA_NUM_RX_RING 32
-+#define AIROHA_NUM_NETDEV_TX_RINGS (AIROHA_NUM_TX_RING + \
-+ AIROHA_NUM_QOS_CHANNELS)
- #define AIROHA_FE_MC_MAX_VLAN_TABLE 64
- #define AIROHA_FE_MC_MAX_VLAN_PORT 16
- #define AIROHA_NUM_TX_IRQ 2
-@@ -43,6 +45,9 @@
- #define PSE_RSV_PAGES 128
- #define PSE_QUEUE_RSV_PAGES 64
-
-+#define QDMA_METER_IDX(_n) ((_n) & 0xff)
-+#define QDMA_METER_GROUP(_n) (((_n) >> 8) & 0x3)
-+
- /* FE */
- #define PSE_BASE 0x0100
- #define CSR_IFC_BASE 0x0200
-@@ -583,6 +588,17 @@
- #define EGRESS_SLOW_TICK_RATIO_MASK GENMASK(29, 16)
- #define EGRESS_FAST_TICK_MASK GENMASK(15, 0)
-
-+#define TRTCM_PARAM_RW_MASK BIT(31)
-+#define TRTCM_PARAM_RW_DONE_MASK BIT(30)
-+#define TRTCM_PARAM_TYPE_MASK GENMASK(29, 28)
-+#define TRTCM_METER_GROUP_MASK GENMASK(27, 26)
-+#define TRTCM_PARAM_INDEX_MASK GENMASK(23, 17)
-+#define TRTCM_PARAM_RATE_TYPE_MASK BIT(16)
-+
-+#define REG_TRTCM_CFG_PARAM(_n) ((_n) + 0x4)
-+#define REG_TRTCM_DATA_LOW(_n) ((_n) + 0x8)
-+#define REG_TRTCM_DATA_HIGH(_n) ((_n) + 0xc)
-+
- #define REG_TXWRR_MODE_CFG 0x1020
- #define TWRR_WEIGHT_SCALE_MASK BIT(31)
- #define TWRR_WEIGHT_BASE_MASK BIT(3)
-@@ -759,6 +775,29 @@ enum tx_sched_mode {
- TC_SCH_WRR2,
- };
-
-+enum trtcm_param_type {
-+ TRTCM_MISC_MODE, /* meter_en, pps_mode, tick_sel */
-+ TRTCM_TOKEN_RATE_MODE,
-+ TRTCM_BUCKETSIZE_SHIFT_MODE,
-+ TRTCM_BUCKET_COUNTER_MODE,
-+};
-+
-+enum trtcm_mode_type {
-+ TRTCM_COMMIT_MODE,
-+ TRTCM_PEAK_MODE,
-+};
-+
-+enum trtcm_param {
-+ TRTCM_TICK_SEL = BIT(0),
-+ TRTCM_PKT_MODE = BIT(1),
-+ TRTCM_METER_MODE = BIT(2),
-+};
-+
-+#define MIN_TOKEN_SIZE 4096
-+#define MAX_TOKEN_SIZE_OFFSET 17
-+#define TRTCM_TOKEN_RATE_MASK GENMASK(23, 6)
-+#define TRTCM_TOKEN_RATE_FRACTION_MASK GENMASK(5, 0)
-+
- struct airoha_queue_entry {
- union {
- void *buf;
-@@ -850,6 +889,8 @@ struct airoha_gdm_port {
-
- struct airoha_hw_stats stats;
-
-+ DECLARE_BITMAP(qos_sq_bmap, AIROHA_NUM_QOS_CHANNELS);
-+
- /* qos stats counters */
- u64 cpu_tx_packets;
- u64 fwd_tx_packets;
-@@ -2809,6 +2850,243 @@ static int airoha_tc_setup_qdisc_ets(str
- }
- }
-
-+static int airoha_qdma_get_trtcm_param(struct airoha_qdma *qdma, int channel,
-+ u32 addr, enum trtcm_param_type param,
-+ enum trtcm_mode_type mode,
-+ u32 *val_low, u32 *val_high)
-+{
-+ u32 idx = QDMA_METER_IDX(channel), group = QDMA_METER_GROUP(channel);
-+ u32 val, config = FIELD_PREP(TRTCM_PARAM_TYPE_MASK, param) |
-+ FIELD_PREP(TRTCM_METER_GROUP_MASK, group) |
-+ FIELD_PREP(TRTCM_PARAM_INDEX_MASK, idx) |
-+ FIELD_PREP(TRTCM_PARAM_RATE_TYPE_MASK, mode);
-+
-+ airoha_qdma_wr(qdma, REG_TRTCM_CFG_PARAM(addr), config);
-+ if (read_poll_timeout(airoha_qdma_rr, val,
-+ val & TRTCM_PARAM_RW_DONE_MASK,
-+ USEC_PER_MSEC, 10 * USEC_PER_MSEC, true,
-+ qdma, REG_TRTCM_CFG_PARAM(addr)))
-+ return -ETIMEDOUT;
-+
-+ *val_low = airoha_qdma_rr(qdma, REG_TRTCM_DATA_LOW(addr));
-+ if (val_high)
-+ *val_high = airoha_qdma_rr(qdma, REG_TRTCM_DATA_HIGH(addr));
-+
-+ return 0;
-+}
-+
-+static int airoha_qdma_set_trtcm_param(struct airoha_qdma *qdma, int channel,
-+ u32 addr, enum trtcm_param_type param,
-+ enum trtcm_mode_type mode, u32 val)
-+{
-+ u32 idx = QDMA_METER_IDX(channel), group = QDMA_METER_GROUP(channel);
-+ u32 config = TRTCM_PARAM_RW_MASK |
-+ FIELD_PREP(TRTCM_PARAM_TYPE_MASK, param) |
-+ FIELD_PREP(TRTCM_METER_GROUP_MASK, group) |
-+ FIELD_PREP(TRTCM_PARAM_INDEX_MASK, idx) |
-+ FIELD_PREP(TRTCM_PARAM_RATE_TYPE_MASK, mode);
-+
-+ airoha_qdma_wr(qdma, REG_TRTCM_DATA_LOW(addr), val);
-+ airoha_qdma_wr(qdma, REG_TRTCM_CFG_PARAM(addr), config);
-+
-+ return read_poll_timeout(airoha_qdma_rr, val,
-+ val & TRTCM_PARAM_RW_DONE_MASK,
-+ USEC_PER_MSEC, 10 * USEC_PER_MSEC, true,
-+ qdma, REG_TRTCM_CFG_PARAM(addr));
-+}
-+
-+static int airoha_qdma_set_trtcm_config(struct airoha_qdma *qdma, int channel,
-+ u32 addr, enum trtcm_mode_type mode,
-+ bool enable, u32 enable_mask)
-+{
-+ u32 val;
-+
-+ if (airoha_qdma_get_trtcm_param(qdma, channel, addr, TRTCM_MISC_MODE,
-+ mode, &val, NULL))
-+ return -EINVAL;
-+
-+ val = enable ? val | enable_mask : val & ~enable_mask;
-+
-+ return airoha_qdma_set_trtcm_param(qdma, channel, addr, TRTCM_MISC_MODE,
-+ mode, val);
-+}
-+
-+static int airoha_qdma_set_trtcm_token_bucket(struct airoha_qdma *qdma,
-+ int channel, u32 addr,
-+ enum trtcm_mode_type mode,
-+ u32 rate_val, u32 bucket_size)
-+{
-+ u32 val, config, tick, unit, rate, rate_frac;
-+ int err;
-+
-+ if (airoha_qdma_get_trtcm_param(qdma, channel, addr, TRTCM_MISC_MODE,
-+ mode, &config, NULL))
-+ return -EINVAL;
-+
-+ val = airoha_qdma_rr(qdma, addr);
-+ tick = FIELD_GET(INGRESS_FAST_TICK_MASK, val);
-+ if (config & TRTCM_TICK_SEL)
-+ tick *= FIELD_GET(INGRESS_SLOW_TICK_RATIO_MASK, val);
-+ if (!tick)
-+ return -EINVAL;
-+
-+ unit = (config & TRTCM_PKT_MODE) ? 1000000 / tick : 8000 / tick;
-+ if (!unit)
-+ return -EINVAL;
-+
-+ rate = rate_val / unit;
-+ rate_frac = rate_val % unit;
-+ rate_frac = FIELD_PREP(TRTCM_TOKEN_RATE_MASK, rate_frac) / unit;
-+ rate = FIELD_PREP(TRTCM_TOKEN_RATE_MASK, rate) |
-+ FIELD_PREP(TRTCM_TOKEN_RATE_FRACTION_MASK, rate_frac);
-+
-+ err = airoha_qdma_set_trtcm_param(qdma, channel, addr,
-+ TRTCM_TOKEN_RATE_MODE, mode, rate);
-+ if (err)
-+ return err;
-+
-+ val = max_t(u32, bucket_size, MIN_TOKEN_SIZE);
-+ val = min_t(u32, __fls(val), MAX_TOKEN_SIZE_OFFSET);
-+
-+ return airoha_qdma_set_trtcm_param(qdma, channel, addr,
-+ TRTCM_BUCKETSIZE_SHIFT_MODE,
-+ mode, val);
-+}
-+
-+static int airoha_qdma_set_tx_rate_limit(struct airoha_gdm_port *port,
-+ int channel, u32 rate,
-+ u32 bucket_size)
-+{
-+ int i, err;
-+
-+ for (i = 0; i <= TRTCM_PEAK_MODE; i++) {
-+ err = airoha_qdma_set_trtcm_config(port->qdma, channel,
-+ REG_EGRESS_TRTCM_CFG, i,
-+ !!rate, TRTCM_METER_MODE);
-+ if (err)
-+ return err;
-+
-+ err = airoha_qdma_set_trtcm_token_bucket(port->qdma, channel,
-+ REG_EGRESS_TRTCM_CFG,
-+ i, rate, bucket_size);
-+ if (err)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+static int airoha_tc_htb_alloc_leaf_queue(struct airoha_gdm_port *port,
-+ struct tc_htb_qopt_offload *opt)
-+{
-+ u32 channel = TC_H_MIN(opt->classid) % AIROHA_NUM_QOS_CHANNELS;
-+ u32 rate = div_u64(opt->rate, 1000) << 3; /* kbps */
-+ struct net_device *dev = port->dev;
-+ int num_tx_queues = dev->real_num_tx_queues;
-+ int err;
-+
-+ if (opt->parent_classid != TC_HTB_CLASSID_ROOT) {
-+ NL_SET_ERR_MSG_MOD(opt->extack, "invalid parent classid");
-+ return -EINVAL;
-+ }
-+
-+ err = airoha_qdma_set_tx_rate_limit(port, channel, rate, opt->quantum);
-+ if (err) {
-+ NL_SET_ERR_MSG_MOD(opt->extack,
-+ "failed configuring htb offload");
-+ return err;
-+ }
-+
-+ if (opt->command == TC_HTB_NODE_MODIFY)
-+ return 0;
-+
-+ err = netif_set_real_num_tx_queues(dev, num_tx_queues + 1);
-+ if (err) {
-+ airoha_qdma_set_tx_rate_limit(port, channel, 0, opt->quantum);
-+ NL_SET_ERR_MSG_MOD(opt->extack,
-+ "failed setting real_num_tx_queues");
-+ return err;
-+ }
-+
-+ set_bit(channel, port->qos_sq_bmap);
-+ opt->qid = AIROHA_NUM_TX_RING + channel;
-+
-+ return 0;
-+}
-+
-+static void airoha_tc_remove_htb_queue(struct airoha_gdm_port *port, int queue)
-+{
-+ struct net_device *dev = port->dev;
-+
-+ netif_set_real_num_tx_queues(dev, dev->real_num_tx_queues - 1);
-+ airoha_qdma_set_tx_rate_limit(port, queue + 1, 0, 0);
-+ clear_bit(queue, port->qos_sq_bmap);
-+}
-+
-+static int airoha_tc_htb_delete_leaf_queue(struct airoha_gdm_port *port,
-+ struct tc_htb_qopt_offload *opt)
-+{
-+ u32 channel = TC_H_MIN(opt->classid) % AIROHA_NUM_QOS_CHANNELS;
-+
-+ if (!test_bit(channel, port->qos_sq_bmap)) {
-+ NL_SET_ERR_MSG_MOD(opt->extack, "invalid queue id");
-+ return -EINVAL;
-+ }
-+
-+ airoha_tc_remove_htb_queue(port, channel);
-+
-+ return 0;
-+}
-+
-+static int airoha_tc_htb_destroy(struct airoha_gdm_port *port)
-+{
-+ int q;
-+
-+ for_each_set_bit(q, port->qos_sq_bmap, AIROHA_NUM_QOS_CHANNELS)
-+ airoha_tc_remove_htb_queue(port, q);
-+
-+ return 0;
-+}
-+
-+static int airoha_tc_get_htb_get_leaf_queue(struct airoha_gdm_port *port,
-+ struct tc_htb_qopt_offload *opt)
-+{
-+ u32 channel = TC_H_MIN(opt->classid) % AIROHA_NUM_QOS_CHANNELS;
-+
-+ if (!test_bit(channel, port->qos_sq_bmap)) {
-+ NL_SET_ERR_MSG_MOD(opt->extack, "invalid queue id");
-+ return -EINVAL;
-+ }
-+
-+ opt->qid = channel;
-+
-+ return 0;
-+}
-+
-+static int airoha_tc_setup_qdisc_htb(struct airoha_gdm_port *port,
-+ struct tc_htb_qopt_offload *opt)
-+{
-+ switch (opt->command) {
-+ case TC_HTB_CREATE:
-+ break;
-+ case TC_HTB_DESTROY:
-+ return airoha_tc_htb_destroy(port);
-+ case TC_HTB_NODE_MODIFY:
-+ case TC_HTB_LEAF_ALLOC_QUEUE:
-+ return airoha_tc_htb_alloc_leaf_queue(port, opt);
-+ case TC_HTB_LEAF_DEL:
-+ case TC_HTB_LEAF_DEL_LAST:
-+ case TC_HTB_LEAF_DEL_LAST_FORCE:
-+ return airoha_tc_htb_delete_leaf_queue(port, opt);
-+ case TC_HTB_LEAF_QUERY_QUEUE:
-+ return airoha_tc_get_htb_get_leaf_queue(port, opt);
-+ default:
-+ return -EOPNOTSUPP;
-+ }
-+
-+ return 0;
-+}
-+
- static int airoha_dev_tc_setup(struct net_device *dev, enum tc_setup_type type,
- void *type_data)
- {
-@@ -2817,6 +3095,8 @@ static int airoha_dev_tc_setup(struct ne
- switch (type) {
- case TC_SETUP_QDISC_ETS:
- return airoha_tc_setup_qdisc_ets(port, type_data);
-+ case TC_SETUP_QDISC_HTB:
-+ return airoha_tc_setup_qdisc_htb(port, type_data);
- default:
- return -EOPNOTSUPP;
- }
-@@ -2867,7 +3147,8 @@ static int airoha_alloc_gdm_port(struct
- }
-
- dev = devm_alloc_etherdev_mqs(eth->dev, sizeof(*port),
-- AIROHA_NUM_TX_RING, AIROHA_NUM_RX_RING);
-+ AIROHA_NUM_NETDEV_TX_RINGS,
-+ AIROHA_NUM_RX_RING);
- if (!dev) {
- dev_err(eth->dev, "alloc_etherdev failed\n");
- return -ENOMEM;
-@@ -2887,6 +3168,11 @@ static int airoha_alloc_gdm_port(struct
- dev->irq = qdma->irq;
- SET_NETDEV_DEV(dev, eth->dev);
-
-+ /* reserve hw queues for HTB offloading */
-+ err = netif_set_real_num_tx_queues(dev, AIROHA_NUM_TX_RING);
-+ if (err)
-+ return err;
-+
- err = of_get_ethdev_address(np, dev);
- if (err) {
- if (err == -EPROBE_DEFER)
diff --git a/lede/target/linux/airoha/patches-6.12/039-v6.14-cpufreq-airoha-Add-EN7581-CPUFreq-SMCCC-driver.patch b/lede/target/linux/airoha/patches-6.12/039-v6.14-cpufreq-airoha-Add-EN7581-CPUFreq-SMCCC-driver.patch
deleted file mode 100644
index c4faaacbe0..0000000000
--- a/lede/target/linux/airoha/patches-6.12/039-v6.14-cpufreq-airoha-Add-EN7581-CPUFreq-SMCCC-driver.patch
+++ /dev/null
@@ -1,232 +0,0 @@
-From 84cf9e541cccb8cb698518a9897942e8c78f1d83 Mon Sep 17 00:00:00 2001
-From: Christian Marangi
-Date: Thu, 9 Jan 2025 14:12:58 +0100
-Subject: [PATCH] cpufreq: airoha: Add EN7581 CPUFreq SMCCC driver
-
-Add simple CPU Freq driver for Airoha EN7581 SoC that control CPU
-frequency scaling with SMC APIs and register a generic "cpufreq-dt"
-device.
-
-All CPU share the same frequency and can't be controlled independently.
-CPU frequency is controlled by the attached PM domain.
-
-Add SoC compatible to cpufreq-dt-plat block list as a dedicated cpufreq
-driver is needed with OPP v2 nodes declared in DTS.
-
-Signed-off-by: Christian Marangi
-Signed-off-by: Viresh Kumar
----
- drivers/cpufreq/Kconfig.arm | 8 ++
- drivers/cpufreq/Makefile | 1 +
- drivers/cpufreq/airoha-cpufreq.c | 152 +++++++++++++++++++++++++++
- drivers/cpufreq/cpufreq-dt-platdev.c | 2 +
- 4 files changed, 163 insertions(+)
- create mode 100644 drivers/cpufreq/airoha-cpufreq.c
-
---- a/drivers/cpufreq/Kconfig.arm
-+++ b/drivers/cpufreq/Kconfig.arm
-@@ -15,6 +15,14 @@ config ARM_ALLWINNER_SUN50I_CPUFREQ_NVME
- To compile this driver as a module, choose M here: the
- module will be called sun50i-cpufreq-nvmem.
-
-+config ARM_AIROHA_SOC_CPUFREQ
-+ tristate "Airoha EN7581 SoC CPUFreq support"
-+ depends on ARCH_AIROHA || COMPILE_TEST
-+ select PM_OPP
-+ default ARCH_AIROHA
-+ help
-+ This adds the CPUFreq driver for Airoha EN7581 SoCs.
-+
- config ARM_APPLE_SOC_CPUFREQ
- tristate "Apple Silicon SoC CPUFreq support"
- depends on ARCH_APPLE || (COMPILE_TEST && 64BIT)
---- a/drivers/cpufreq/Makefile
-+++ b/drivers/cpufreq/Makefile
-@@ -52,6 +52,7 @@ obj-$(CONFIG_X86_AMD_FREQ_SENSITIVITY) +
-
- ##################################################################################
- # ARM SoC drivers
-+obj-$(CONFIG_ARM_AIROHA_SOC_CPUFREQ) += airoha-cpufreq.o
- obj-$(CONFIG_ARM_APPLE_SOC_CPUFREQ) += apple-soc-cpufreq.o
- obj-$(CONFIG_ARM_ARMADA_37XX_CPUFREQ) += armada-37xx-cpufreq.o
- obj-$(CONFIG_ARM_ARMADA_8K_CPUFREQ) += armada-8k-cpufreq.o
---- /dev/null
-+++ b/drivers/cpufreq/airoha-cpufreq.c
-@@ -0,0 +1,166 @@
-+// SPDX-License-Identifier: GPL-2.0
-+
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+
-+#include "cpufreq-dt.h"
-+
-+struct airoha_cpufreq_priv {
-+ int opp_token;
-+ struct device **virt_devs;
-+ struct platform_device *cpufreq_dt;
-+};
-+
-+static struct platform_device *cpufreq_pdev;
-+
-+/* NOP function to disable OPP from setting clock */
-+static int airoha_cpufreq_config_clks_nop(struct device *dev,
-+ struct opp_table *opp_table,
-+ struct dev_pm_opp *old_opp,
-+ struct dev_pm_opp *opp,
-+ void *data, bool scaling_down)
-+{
-+ return 0;
-+}
-+
-+static const char * const airoha_cpufreq_clk_names[] = { "cpu", NULL };
-+static const char * const airoha_cpufreq_pd_names[] = { "perf", NULL };
-+
-+static int airoha_cpufreq_probe(struct platform_device *pdev)
-+{
-+ struct dev_pm_opp_config config = {
-+ .clk_names = airoha_cpufreq_clk_names,
-+ .config_clks = airoha_cpufreq_config_clks_nop,
-+ .genpd_names = airoha_cpufreq_pd_names,
-+ };
-+ struct platform_device *cpufreq_dt;
-+ struct airoha_cpufreq_priv *priv;
-+ struct device *dev = &pdev->dev;
-+ struct device **virt_devs = NULL;
-+ struct device *cpu_dev;
-+ int ret;
-+
-+ /* CPUs refer to the same OPP table */
-+ cpu_dev = get_cpu_device(0);
-+ if (!cpu_dev)
-+ return -ENODEV;
-+
-+ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
-+ if (!priv)
-+ return -ENOMEM;
-+
-+ /* Set OPP table conf with NOP config_clks */
-+ priv->opp_token = dev_pm_opp_set_config(cpu_dev, &config);
-+ if (priv->opp_token < 0)
-+ return dev_err_probe(dev, priv->opp_token, "Failed to set OPP config\n");
-+
-+ /* Set Attached PM for OPP ACTIVE */
-+ if (virt_devs) {
-+ const char * const *name = airoha_cpufreq_pd_names;
-+ int i, j;
-+
-+ for (i = 0; *name; i++, name++) {
-+ ret = pm_runtime_resume_and_get(virt_devs[i]);
-+ if (ret) {
-+ dev_err(cpu_dev, "failed to resume %s: %d\n",
-+ *name, ret);
-+
-+ /* Rollback previous PM runtime calls */
-+ name = config.genpd_names;
-+ for (j = 0; *name && j < i; j++, name++)
-+ pm_runtime_put(virt_devs[j]);
-+
-+ goto err_register_cpufreq;
-+ }
-+ }
-+ priv->virt_devs = virt_devs;
-+ }
-+
-+ cpufreq_dt = platform_device_register_simple("cpufreq-dt", -1, NULL, 0);
-+ ret = PTR_ERR_OR_ZERO(cpufreq_dt);
-+ if (ret) {
-+ dev_err(dev, "failed to create cpufreq-dt device: %d\n", ret);
-+ goto err_register_cpufreq;
-+ }
-+
-+ priv->cpufreq_dt = cpufreq_dt;
-+ platform_set_drvdata(pdev, priv);
-+
-+ return 0;
-+
-+err_register_cpufreq:
-+ dev_pm_opp_clear_config(priv->opp_token);
-+
-+ return ret;
-+}
-+
-+static void airoha_cpufreq_remove(struct platform_device *pdev)
-+{
-+ struct airoha_cpufreq_priv *priv = platform_get_drvdata(pdev);
-+ const char * const *name = airoha_cpufreq_pd_names;
-+ int i;
-+
-+ platform_device_unregister(priv->cpufreq_dt);
-+
-+ dev_pm_opp_clear_config(priv->opp_token);
-+
-+ for (i = 0; *name; i++, name++)
-+ pm_runtime_put(priv->virt_devs[i]);
-+}
-+
-+static struct platform_driver airoha_cpufreq_driver = {
-+ .probe = airoha_cpufreq_probe,
-+ .remove_new = airoha_cpufreq_remove,
-+ .driver = {
-+ .name = "airoha-cpufreq",
-+ },
-+};
-+
-+static const struct of_device_id airoha_cpufreq_match_list[] __initconst = {
-+ { .compatible = "airoha,en7581" },
-+ {},
-+};
-+MODULE_DEVICE_TABLE(of, airoha_cpufreq_match_list);
-+
-+static int __init airoha_cpufreq_init(void)
-+{
-+ struct device_node *np = of_find_node_by_path("/");
-+ const struct of_device_id *match;
-+ int ret;
-+
-+ if (!np)
-+ return -ENODEV;
-+
-+ match = of_match_node(airoha_cpufreq_match_list, np);
-+ of_node_put(np);
-+ if (!match)
-+ return -ENODEV;
-+
-+ ret = platform_driver_register(&airoha_cpufreq_driver);
-+ if (unlikely(ret < 0))
-+ return ret;
-+
-+ cpufreq_pdev = platform_device_register_data(NULL, "airoha-cpufreq",
-+ -1, match, sizeof(*match));
-+ ret = PTR_ERR_OR_ZERO(cpufreq_pdev);
-+ if (ret)
-+ platform_driver_unregister(&airoha_cpufreq_driver);
-+
-+ return ret;
-+}
-+module_init(airoha_cpufreq_init);
-+
-+static void __exit airoha_cpufreq_exit(void)
-+{
-+ platform_device_unregister(cpufreq_pdev);
-+ platform_driver_unregister(&airoha_cpufreq_driver);
-+}
-+module_exit(airoha_cpufreq_exit);
-+
-+MODULE_AUTHOR("Christian Marangi ");
-+MODULE_DESCRIPTION("CPUfreq driver for Airoha SoCs");
-+MODULE_LICENSE("GPL");
---- a/drivers/cpufreq/cpufreq-dt-platdev.c
-+++ b/drivers/cpufreq/cpufreq-dt-platdev.c
-@@ -103,6 +103,8 @@ static const struct of_device_id allowli
- * platforms using "operating-points-v2" property.
- */
- static const struct of_device_id blocklist[] __initconst = {
-+ { .compatible = "airoha,en7581", },
-+
- { .compatible = "allwinner,sun50i-h6", },
- { .compatible = "allwinner,sun50i-h616", },
- { .compatible = "allwinner,sun50i-h618", },
diff --git a/lede/target/linux/airoha/patches-6.12/039-v6.14-net-airoha-Enforce-ETS-Qdisc-priomap.patch b/lede/target/linux/airoha/patches-6.12/039-v6.14-net-airoha-Enforce-ETS-Qdisc-priomap.patch
deleted file mode 100644
index 151865b89c..0000000000
--- a/lede/target/linux/airoha/patches-6.12/039-v6.14-net-airoha-Enforce-ETS-Qdisc-priomap.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From b56e4d660a9688ff83f5cbdc6e3ea063352d0d79 Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi
-Date: Sun, 12 Jan 2025 19:32:45 +0100
-Subject: [PATCH] net: airoha: Enforce ETS Qdisc priomap
-
-EN7581 SoC supports fixed QoS band priority where WRR queues have lowest
-priorities with respect to SP ones.
-E.g: WRR0, WRR1, .., WRRm, SP0, SP1, .., SPn
-
-Enforce ETS Qdisc priomap according to the hw capabilities.
-
-Suggested-by: Davide Caratti