diff --git a/.classpath b/.classpath index 57e97d1..a73e078 100644 --- a/.classpath +++ b/.classpath @@ -1,16 +1,11 @@ - + - - - - - @@ -28,7 +23,9 @@ - + + + diff --git a/JavaTUN.dll b/JavaTUN.dll deleted file mode 100644 index 6174939..0000000 Binary files a/JavaTUN.dll and /dev/null differ diff --git a/KLALB协议规范V3.5.docx b/KLALB协议规范V3.5.docx new file mode 100644 index 0000000..e16a49a Binary files /dev/null and b/KLALB协议规范V3.5.docx differ diff --git a/KLALB软件说明书V3.5.0.docx b/KLALB软件说明书V3.5.0.docx new file mode 100644 index 0000000..b09848f Binary files /dev/null and b/KLALB软件说明书V3.5.0.docx differ diff --git a/KLALB软件说明书V3.5.1.docx b/KLALB软件说明书V3.5.1.docx new file mode 100644 index 0000000..cfea9b0 Binary files /dev/null and b/KLALB软件说明书V3.5.1.docx differ diff --git a/KLALB软件说明书V3.5.2.docx b/KLALB软件说明书V3.5.2.docx new file mode 100644 index 0000000..ff6e150 Binary files /dev/null and b/KLALB软件说明书V3.5.2.docx differ diff --git a/KLALB软件说明书V3.5.3.docx b/KLALB软件说明书V3.5.3.docx new file mode 100644 index 0000000..8461a77 Binary files /dev/null and b/KLALB软件说明书V3.5.3.docx differ diff --git a/hs_err_pid28220.log b/hs_err_pid28220.log deleted file mode 100644 index 37b03ef..0000000 --- a/hs_err_pid28220.log +++ /dev/null @@ -1,2420 +0,0 @@ -# -# There is insufficient memory for the Java Runtime Environment to continue. -# Native memory allocation (mmap) failed to map 855638016 bytes. Error detail: G1 virtual space -# Possible reasons: -# The system is out of physical RAM or swap space -# This process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap -# Possible solutions: -# Reduce memory load on the system -# Increase physical memory or swap space -# Check if swap backing store is full -# Decrease Java heap size (-Xmx/-Xms) -# Decrease number of Java threads -# Decrease Java thread stack sizes (-Xss) -# Set larger code cache with -XX:ReservedCodeCacheSize= -# JVM is running with Zero Based Compressed Oops mode in which the Java heap is -# placed in the first 32GB address space. The Java Heap base address is the -# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress -# to set the Java Heap base and to place the Java Heap above 32GB virtual address. -# This output file may be truncated or incomplete. -# -# Out of Memory Error (os_windows.cpp:3703), pid=28220, tid=13556 -# -# JRE version: Java(TM) SE Runtime Environment Oracle GraalVM 23.0.1+11.1 (23.0.1+11) (build 23.0.1+11-jvmci-b01) -# Java VM: Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 23.0.1+11.1 (23.0.1+11-jvmci-b01, mixed mode, sharing, tiered, jvmci, jvmci compiler, compressed oops, compressed class ptrs, g1 gc, windows-amd64) -# Core dump will be written. Default location: C:\KNEļ\coding\java\KLALB\hs_err_pid28220.mdmp -# - ---------------- S U M M A R Y ------------ - -Command Line: -XX:ThreadPriorityPolicy=1 -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCIProduct -XX:-UnlockExperimentalVMOptions --add-exports=java.base/jdk.internal.misc=jdk.graal.compiler -XX:+ShowCodeDetailsInExceptionMessages --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED --add-exports=java.base/jdk.internal.foreign=ALL-UNNAMED --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED --add-opens=java.base/jdk.internal.foreign=ALL-UNNAMED org.kne.cloud.network.monitor.TimestampMonitor - -Host: Intel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz, 56 cores, 63G, Windows Server 2022 , 64 bit Build 20348 (10.0.20348.1726) -Time: Wed Oct 29 17:48:51 2025 Windows Server 2022 , 64 bit Build 20348 (10.0.20348.1726) elapsed time: 261.462283 seconds (0d 0h 4m 21s) - ---------------- T H R E A D --------------- - -Current thread (0x0000016c7e80d430): VMThread "VM Thread" [id=13556, stack(0x0000000f5c200000,0x0000000f5c300000) (1024K)] - -Stack: [0x0000000f5c200000,0x0000000f5c300000] -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -V [jvm.dll+0x6e08b9] (no source info available) -V [jvm.dll+0x87dc83] (no source info available) -V [jvm.dll+0x88010e] (no source info available) -V [jvm.dll+0x8807e3] (no source info available) -V [jvm.dll+0x27aee6] (no source info available) -V [jvm.dll+0x6dd1c5] (no source info available) -V [jvm.dll+0x6d104a] (no source info available) -V [jvm.dll+0x35b3ea] (no source info available) -V [jvm.dll+0x3637f6] (no source info available) -V [jvm.dll+0x34fd5e] (no source info available) -V [jvm.dll+0x34fff8] (no source info available) -V [jvm.dll+0x3289cc] (no source info available) -V [jvm.dll+0x328a5a] (no source info available) -V [jvm.dll+0x374c92] (no source info available) -V [jvm.dll+0x373392] (no source info available) -V [jvm.dll+0x3281a7] (no source info available) -V [jvm.dll+0x372b44] (no source info available) -V [jvm.dll+0x886720] (no source info available) -V [jvm.dll+0x887a47] (no source info available) -V [jvm.dll+0x887f78] (no source info available) -V [jvm.dll+0x888213] (no source info available) -V [jvm.dll+0x824f8b] (no source info available) -V [jvm.dll+0x6df065] (no source info available) -C [ucrtbase.dll+0x26b4c] (no source info available) -C [KERNEL32.DLL+0x14de0] (no source info available) -C [ntdll.dll+0x7e3db] (no source info available) - -VM_Operation (0x0000000f5d1fefe0): G1CollectForAllocation, mode: safepoint, requested by thread 0x0000016c582cb070 - - ---------------- P R O C E S S --------------- - -Threads class SMR info: -_java_thread_list=0x0000016c5de0b5d0, length=67, elements={ -0x0000016c60b2eec0, 0x0000016c580e9e50, 0x0000016c580eca70, 0x0000016c580edef0, -0x0000016c580ee950, 0x0000016c580fb990, 0x0000016c580fc800, 0x0000016c58109860, -0x0000016c5810ad60, 0x0000016c582310e0, 0x0000016c582c6690, 0x0000016c582cb070, -0x0000016c58357a60, 0x0000016c5836cf60, 0x0000016c583588f0, 0x0000016c58359370, -0x0000016c58361f70, 0x0000016c58363210, 0x0000016c5835f150, 0x0000016c58373510, -0x0000016c58370090, 0x0000016c583727f0, 0x0000016c58372e80, 0x0000016c58370720, -0x0000016c58370db0, 0x0000016c58371ad0, 0x0000016c58371440, 0x0000016c58372160, -0x0000016c58392620, 0x0000016c58392cb0, 0x0000016c583939d0, 0x0000016c5838f830, -0x0000016c5838f1a0, 0x0000016c5838eb10, 0x0000016c58390be0, 0x0000016c5838fec0, -0x0000016c58394060, 0x0000016c58393340, 0x0000016c583946f0, 0x0000016c58391270, -0x0000016c58390550, 0x0000016c58391900, 0x0000016c58391f90, 0x0000016c58394d80, -0x0000016c58395410, 0x0000016c58395aa0, 0x0000016c58396130, 0x0000016c583dbe00, -0x0000016c583dc490, 0x0000016c583de560, 0x0000016c583dcb20, 0x0000016c583dded0, -0x0000016c583e0cc0, 0x0000016c583e0630, 0x0000016c583debf0, 0x0000016c583db770, -0x0000016c583e1350, 0x0000016c583dd1b0, 0x0000016c583df280, 0x0000016c583df910, -0x0000016c583dd840, 0x0000016c583dffa0, 0x0000016c583e19e0, 0x0000016c583e2070, -0x0000016c583e2700, 0x0000016c583e2d90, 0x0000016c5851ebf0 -} - -Java Threads: ( => current thread ) - 0x0000016c60b2eec0 JavaThread "main" [_thread_blocked, id=45052, stack(0x0000000f5bb00000,0x0000000f5bc00000) (1024K)] - 0x0000016c580e9e50 JavaThread "Reference Handler" daemon [_thread_blocked, id=29176, stack(0x0000000f5c300000,0x0000000f5c400000) (1024K)] - 0x0000016c580eca70 JavaThread "Finalizer" daemon [_thread_blocked, id=28088, stack(0x0000000f5c400000,0x0000000f5c500000) (1024K)] - 0x0000016c580edef0 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=50360, stack(0x0000000f5c500000,0x0000000f5c600000) (1024K)] - 0x0000016c580ee950 JavaThread "Attach Listener" daemon [_thread_blocked, id=60964, stack(0x0000000f5c600000,0x0000000f5c700000) (1024K)] - 0x0000016c580fb990 JavaThread "Service Thread" daemon [_thread_blocked, id=83544, stack(0x0000000f5c700000,0x0000000f5c800000) (1024K)] - 0x0000016c580fc800 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=85920, stack(0x0000000f5c800000,0x0000000f5c900000) (1024K)] - 0x0000016c58109860 JavaThread "JVMCI-native CompilerThread0" daemon [_thread_blocked, id=68060, stack(0x0000000f5c900000,0x0000000f5ca00000) (1024K)] - 0x0000016c5810ad60 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=83524, stack(0x0000000f5ca00000,0x0000000f5cb00000) (1024K)] - 0x0000016c582310e0 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=62252, stack(0x0000000f5cb00000,0x0000000f5cc00000) (1024K)] - 0x0000016c582c6690 JavaThread "Notification Thread" daemon [_thread_blocked, id=60032, stack(0x0000000f5d000000,0x0000000f5d100000) (1024K)] - 0x0000016c582cb070 JavaThread "Thread-0" [_thread_blocked, id=82844, stack(0x0000000f5d100000,0x0000000f5d200000) (1024K)] - 0x0000016c58357a60 JavaThread "ForkJoinPool.commonPool-worker-1" daemon [_thread_blocked, id=81496, stack(0x0000000f5d500000,0x0000000f5d600000) (1024K)] - 0x0000016c5836cf60 JavaThread "ForkJoinPool.commonPool-worker-2" daemon [_thread_blocked, id=35456, stack(0x0000000f5d600000,0x0000000f5d700000) (1024K)] - 0x0000016c583588f0 JavaThread "ForkJoinPool.commonPool-worker-3" daemon [_thread_blocked, id=87132, stack(0x0000000f5d700000,0x0000000f5d800000) (1024K)] - 0x0000016c58359370 JavaThread "ForkJoinPool.commonPool-worker-4" daemon [_thread_blocked, id=63832, stack(0x0000000f5d800000,0x0000000f5d900000) (1024K)] - 0x0000016c58361f70 JavaThread "ForkJoinPool.commonPool-worker-5" daemon [_thread_blocked, id=77160, stack(0x0000000f5d900000,0x0000000f5da00000) (1024K)] - 0x0000016c58363210 JavaThread "ForkJoinPool.commonPool-worker-6" daemon [_thread_blocked, id=54012, stack(0x0000000f5da00000,0x0000000f5db00000) (1024K)] - 0x0000016c5835f150 JavaThread "ForkJoinPool.commonPool-worker-7" daemon [_thread_blocked, id=44532, stack(0x0000000f5db00000,0x0000000f5dc00000) (1024K)] - 0x0000016c58373510 JavaThread "ForkJoinPool.commonPool-worker-8" daemon [_thread_blocked, id=75220, stack(0x0000000f5dc00000,0x0000000f5dd00000) (1024K)] - 0x0000016c58370090 JavaThread "ForkJoinPool.commonPool-worker-9" daemon [_thread_blocked, id=49776, stack(0x0000000f5dd00000,0x0000000f5de00000) (1024K)] - 0x0000016c583727f0 JavaThread "ForkJoinPool.commonPool-worker-11" daemon [_thread_blocked, id=68244, stack(0x0000000f5de00000,0x0000000f5df00000) (1024K)] - 0x0000016c58372e80 JavaThread "ForkJoinPool.commonPool-worker-10" daemon [_thread_blocked, id=57564, stack(0x0000000f5df00000,0x0000000f5e000000) (1024K)] - 0x0000016c58370720 JavaThread "ForkJoinPool.commonPool-worker-12" daemon [_thread_blocked, id=32800, stack(0x0000000f5e000000,0x0000000f5e100000) (1024K)] - 0x0000016c58370db0 JavaThread "ForkJoinPool.commonPool-worker-13" daemon [_thread_blocked, id=51912, stack(0x0000000f5e100000,0x0000000f5e200000) (1024K)] - 0x0000016c58371ad0 JavaThread "ForkJoinPool.commonPool-worker-18" daemon [_thread_blocked, id=65772, stack(0x0000000f5e200000,0x0000000f5e300000) (1024K)] - 0x0000016c58371440 JavaThread "ForkJoinPool.commonPool-worker-15" daemon [_thread_blocked, id=37880, stack(0x0000000f5e300000,0x0000000f5e400000) (1024K)] - 0x0000016c58372160 JavaThread "ForkJoinPool.commonPool-worker-24" daemon [_thread_blocked, id=59420, stack(0x0000000f5e400000,0x0000000f5e500000) (1024K)] - 0x0000016c58392620 JavaThread "ForkJoinPool.commonPool-worker-17" daemon [_thread_blocked, id=72856, stack(0x0000000f5e500000,0x0000000f5e600000) (1024K)] - 0x0000016c58392cb0 JavaThread "ForkJoinPool.commonPool-worker-31" daemon [_thread_blocked, id=35700, stack(0x0000000f5e600000,0x0000000f5e700000) (1024K)] - 0x0000016c583939d0 JavaThread "ForkJoinPool.commonPool-worker-19" daemon [_thread_blocked, id=88756, stack(0x0000000f5e700000,0x0000000f5e800000) (1024K)] - 0x0000016c5838f830 JavaThread "ForkJoinPool.commonPool-worker-20" daemon [_thread_blocked, id=39544, stack(0x0000000f5e800000,0x0000000f5e900000) (1024K)] - 0x0000016c5838f1a0 JavaThread "ForkJoinPool.commonPool-worker-21" daemon [_thread_blocked, id=58320, stack(0x0000000f5e900000,0x0000000f5ea00000) (1024K)] - 0x0000016c5838eb10 JavaThread "ForkJoinPool.commonPool-worker-22" daemon [_thread_blocked, id=82040, stack(0x0000000f5ea00000,0x0000000f5eb00000) (1024K)] - 0x0000016c58390be0 JavaThread "ForkJoinPool.commonPool-worker-38" daemon [_thread_blocked, id=15096, stack(0x0000000f5eb00000,0x0000000f5ec00000) (1024K)] - 0x0000016c5838fec0 JavaThread "ForkJoinPool.commonPool-worker-25" daemon [_thread_blocked, id=52120, stack(0x0000000f5ec00000,0x0000000f5ed00000) (1024K)] - 0x0000016c58394060 JavaThread "ForkJoinPool.commonPool-worker-16" daemon [_thread_blocked, id=64948, stack(0x0000000f5ed00000,0x0000000f5ee00000) (1024K)] - 0x0000016c58393340 JavaThread "ForkJoinPool.commonPool-worker-26" daemon [_thread_blocked, id=31312, stack(0x0000000f5ee00000,0x0000000f5ef00000) (1024K)] - 0x0000016c583946f0 JavaThread "ForkJoinPool.commonPool-worker-27" daemon [_thread_blocked, id=34228, stack(0x0000000f5ef00000,0x0000000f5f000000) (1024K)] - 0x0000016c58391270 JavaThread "ForkJoinPool.commonPool-worker-47" daemon [_thread_blocked, id=62248, stack(0x0000000f5f000000,0x0000000f5f100000) (1024K)] - 0x0000016c58390550 JavaThread "ForkJoinPool.commonPool-worker-29" daemon [_thread_blocked, id=46784, stack(0x0000000f5f100000,0x0000000f5f200000) (1024K)] - 0x0000016c58391900 JavaThread "ForkJoinPool.commonPool-worker-30" daemon [_thread_blocked, id=70156, stack(0x0000000f5f200000,0x0000000f5f300000) (1024K)] - 0x0000016c58391f90 JavaThread "ForkJoinPool.commonPool-worker-14" daemon [_thread_blocked, id=39676, stack(0x0000000f5f300000,0x0000000f5f400000) (1024K)] - 0x0000016c58394d80 JavaThread "ForkJoinPool.commonPool-worker-32" daemon [_thread_blocked, id=67984, stack(0x0000000f5f400000,0x0000000f5f500000) (1024K)] - 0x0000016c58395410 JavaThread "ForkJoinPool.commonPool-worker-33" daemon [_thread_blocked, id=89172, stack(0x0000000f5f500000,0x0000000f5f600000) (1024K)] - 0x0000016c58395aa0 JavaThread "ForkJoinPool.commonPool-worker-34" daemon [_thread_blocked, id=33356, stack(0x0000000f5f600000,0x0000000f5f700000) (1024K)] - 0x0000016c58396130 JavaThread "ForkJoinPool.commonPool-worker-35" daemon [_thread_blocked, id=59928, stack(0x0000000f5f700000,0x0000000f5f800000) (1024K)] - 0x0000016c583dbe00 JavaThread "ForkJoinPool.commonPool-worker-36" daemon [_thread_blocked, id=87112, stack(0x0000000f5f800000,0x0000000f5f900000) (1024K)] - 0x0000016c583dc490 JavaThread "ForkJoinPool.commonPool-worker-37" daemon [_thread_blocked, id=53964, stack(0x0000000f5f900000,0x0000000f5fa00000) (1024K)] - 0x0000016c583de560 JavaThread "ForkJoinPool.commonPool-worker-23" daemon [_thread_blocked, id=90448, stack(0x0000000f5fa00000,0x0000000f5fb00000) (1024K)] - 0x0000016c583dcb20 JavaThread "ForkJoinPool.commonPool-worker-39" daemon [_thread_blocked, id=39784, stack(0x0000000f5fb00000,0x0000000f5fc00000) (1024K)] - 0x0000016c583dded0 JavaThread "ForkJoinPool.commonPool-worker-40" daemon [_thread_blocked, id=42380, stack(0x0000000f5fc00000,0x0000000f5fd00000) (1024K)] - 0x0000016c583e0cc0 JavaThread "ForkJoinPool.commonPool-worker-41" daemon [_thread_blocked, id=47440, stack(0x0000000f5fd00000,0x0000000f5fe00000) (1024K)] - 0x0000016c583e0630 JavaThread "ForkJoinPool.commonPool-worker-42" daemon [_thread_blocked, id=65756, stack(0x0000000f5fe00000,0x0000000f5ff00000) (1024K)] - 0x0000016c583debf0 JavaThread "ForkJoinPool.commonPool-worker-43" daemon [_thread_blocked, id=32812, stack(0x0000000f5ff00000,0x0000000f60000000) (1024K)] - 0x0000016c583db770 JavaThread "ForkJoinPool.commonPool-worker-44" daemon [_thread_blocked, id=75164, stack(0x0000000f60000000,0x0000000f60100000) (1024K)] - 0x0000016c583e1350 JavaThread "ForkJoinPool.commonPool-worker-45" daemon [_thread_blocked, id=80228, stack(0x0000000f60100000,0x0000000f60200000) (1024K)] - 0x0000016c583dd1b0 JavaThread "ForkJoinPool.commonPool-worker-46" daemon [_thread_blocked, id=55348, stack(0x0000000f60200000,0x0000000f60300000) (1024K)] - 0x0000016c583df280 JavaThread "ForkJoinPool.commonPool-worker-28" daemon [_thread_blocked, id=49808, stack(0x0000000f60300000,0x0000000f60400000) (1024K)] - 0x0000016c583df910 JavaThread "ForkJoinPool.commonPool-worker-48" daemon [_thread_blocked, id=70976, stack(0x0000000f60400000,0x0000000f60500000) (1024K)] - 0x0000016c583dd840 JavaThread "ForkJoinPool.commonPool-worker-49" daemon [_thread_blocked, id=49336, stack(0x0000000f60500000,0x0000000f60600000) (1024K)] - 0x0000016c583dffa0 JavaThread "ForkJoinPool.commonPool-worker-51" daemon [_thread_blocked, id=42120, stack(0x0000000f60600000,0x0000000f60700000) (1024K)] - 0x0000016c583e19e0 JavaThread "ForkJoinPool.commonPool-worker-50" daemon [_thread_blocked, id=63056, stack(0x0000000f60700000,0x0000000f60800000) (1024K)] - 0x0000016c583e2070 JavaThread "ForkJoinPool.commonPool-worker-54" daemon [_thread_blocked, id=74800, stack(0x0000000f62000000,0x0000000f62100000) (1024K)] - 0x0000016c583e2700 JavaThread "ForkJoinPool.commonPool-worker-53" daemon [_thread_blocked, id=76732, stack(0x0000000f62100000,0x0000000f62200000) (1024K)] - 0x0000016c583e2d90 JavaThread "ForkJoinPool.commonPool-worker-52" daemon [_thread_blocked, id=42632, stack(0x0000000f62200000,0x0000000f62300000) (1024K)] - 0x0000016c5851ebf0 JavaThread "ForkJoinPool.commonPool-worker-55" daemon [_thread_blocked, id=76168, stack(0x0000000f62300000,0x0000000f62400000) (1024K)] -Total: 67 - -Other Threads: -=>0x0000016c7e80d430 VMThread "VM Thread" [id=13556, stack(0x0000000f5c200000,0x0000000f5c300000) (1024K)] - 0x0000016c7e7f9320 WatcherThread "VM Periodic Task Thread" [id=86444, stack(0x0000000f5c100000,0x0000000f5c200000) (1024K)] - 0x0000016c7e65f990 WorkerThread "GC Thread#0" [id=85180, stack(0x0000000f5bc00000,0x0000000f5bd00000) (1024K)] - 0x0000016c58410060 WorkerThread "GC Thread#1" [id=87232, stack(0x0000000f60900000,0x0000000f60a00000) (1024K)] - 0x0000016c58410410 WorkerThread "GC Thread#2" [id=80928, stack(0x0000000f60a00000,0x0000000f60b00000) (1024K)] - 0x0000016c58427ac0 WorkerThread "GC Thread#3" [id=63364, stack(0x0000000f60b00000,0x0000000f60c00000) (1024K)] - 0x0000016c58428280 WorkerThread "GC Thread#4" [id=43376, stack(0x0000000f60c00000,0x0000000f60d00000) (1024K)] - 0x0000016c58428630 WorkerThread "GC Thread#5" [id=15080, stack(0x0000000f60d00000,0x0000000f60e00000) (1024K)] - 0x0000016c5842ca00 WorkerThread "GC Thread#6" [id=60944, stack(0x0000000f60e00000,0x0000000f60f00000) (1024K)] - 0x0000016c58432dd0 WorkerThread "GC Thread#7" [id=89204, stack(0x0000000f60f00000,0x0000000f61000000) (1024K)] - 0x0000016c584375a0 WorkerThread "GC Thread#8" [id=90976, stack(0x0000000f61000000,0x0000000f61100000) (1024K)] - 0x0000016c58437950 WorkerThread "GC Thread#9" [id=85512, stack(0x0000000f61100000,0x0000000f61200000) (1024K)] - 0x0000016c58438110 WorkerThread "GC Thread#10" [id=63540, stack(0x0000000f61200000,0x0000000f61300000) (1024K)] - 0x0000016c584384c0 WorkerThread "GC Thread#11" [id=69832, stack(0x0000000f61300000,0x0000000f61400000) (1024K)] - 0x0000016c58438870 WorkerThread "GC Thread#12" [id=62144, stack(0x0000000f61400000,0x0000000f61500000) (1024K)] - 0x0000016c58439c40 WorkerThread "GC Thread#13" [id=41324, stack(0x0000000f61500000,0x0000000f61600000) (1024K)] - 0x0000016c5843b310 WorkerThread "GC Thread#14" [id=83940, stack(0x0000000f61600000,0x0000000f61700000) (1024K)] - 0x0000016c5843ba70 WorkerThread "GC Thread#15" [id=40028, stack(0x0000000f61700000,0x0000000f61800000) (1024K)] - 0x0000016c5843abb0 WorkerThread "GC Thread#16" [id=43160, stack(0x0000000f61800000,0x0000000f61900000) (1024K)] - 0x0000016c5843be20 WorkerThread "GC Thread#17" [id=25296, stack(0x0000000f61900000,0x0000000f61a00000) (1024K)] - 0x0000016c5843af60 WorkerThread "GC Thread#18" [id=33380, stack(0x0000000f61a00000,0x0000000f61b00000) (1024K)] - 0x0000016c5843a450 WorkerThread "GC Thread#19" [id=92308, stack(0x0000000f61b00000,0x0000000f61c00000) (1024K)] - 0x0000016c5843a800 WorkerThread "GC Thread#20" [id=53060, stack(0x0000000f61c00000,0x0000000f61d00000) (1024K)] - 0x0000016c5843b6c0 WorkerThread "GC Thread#21" [id=29380, stack(0x0000000f61d00000,0x0000000f61e00000) (1024K)] - 0x0000016c58447870 WorkerThread "GC Thread#22" [id=44248, stack(0x0000000f61e00000,0x0000000f61f00000) (1024K)] - 0x0000016c584499a0 WorkerThread "GC Thread#23" [id=45408, stack(0x0000000f61f00000,0x0000000f62000000) (1024K)] - 0x0000016c584495f0 WorkerThread "GC Thread#24" [id=56948, stack(0x0000000f62400000,0x0000000f62500000) (1024K)] - 0x0000016c58447fd0 WorkerThread "GC Thread#25" [id=76872, stack(0x0000000f62500000,0x0000000f62600000) (1024K)] - 0x0000016c58449d50 WorkerThread "GC Thread#26" [id=42688, stack(0x0000000f62600000,0x0000000f62700000) (1024K)] - 0x0000016c5844ac10 WorkerThread "GC Thread#27" [id=63104, stack(0x0000000f62700000,0x0000000f62800000) (1024K)] - 0x0000016c58448730 WorkerThread "GC Thread#28" [id=93524, stack(0x0000000f62800000,0x0000000f62900000) (1024K)] - 0x0000016c58448ae0 WorkerThread "GC Thread#29" [id=63168, stack(0x0000000f62900000,0x0000000f62a00000) (1024K)] - 0x0000016c58448e90 WorkerThread "GC Thread#30" [id=28124, stack(0x0000000f62a00000,0x0000000f62b00000) (1024K)] - 0x0000016c58449240 WorkerThread "GC Thread#31" [id=42284, stack(0x0000000f62b00000,0x0000000f62c00000) (1024K)] - 0x0000016c58447c20 WorkerThread "GC Thread#32" [id=73652, stack(0x0000000f62c00000,0x0000000f62d00000) (1024K)] - 0x0000016c58448380 WorkerThread "GC Thread#33" [id=35496, stack(0x0000000f62d00000,0x0000000f62e00000) (1024K)] - 0x0000016c5844a100 WorkerThread "GC Thread#34" [id=90164, stack(0x0000000f62e00000,0x0000000f62f00000) (1024K)] - 0x0000016c5844a860 WorkerThread "GC Thread#35" [id=24140, stack(0x0000000f62f00000,0x0000000f63000000) (1024K)] - 0x0000016c5844afc0 WorkerThread "GC Thread#36" [id=38588, stack(0x0000000f63000000,0x0000000f63100000) (1024K)] - 0x0000016c584474c0 WorkerThread "GC Thread#37" [id=31728, stack(0x0000000f63100000,0x0000000f63200000) (1024K)] - 0x0000016c6304e650 ConcurrentGCThread "G1 Main Marker" [id=43984, stack(0x0000000f5bd00000,0x0000000f5be00000) (1024K)] - 0x0000016c7e6a2270 WorkerThread "G1 Conc#0" [id=28056, stack(0x0000000f5be00000,0x0000000f5bf00000) (1024K)] - 0x0000016c581fa9b0 WorkerThread "G1 Conc#1" [id=54488, stack(0x0000000f5cd00000,0x0000000f5ce00000) (1024K)] - 0x0000016c581fa250 WorkerThread "G1 Conc#2" [id=81244, stack(0x0000000f5ce00000,0x0000000f5cf00000) (1024K)] - 0x0000016c581fa600 WorkerThread "G1 Conc#3" [id=992, stack(0x0000000f5cf00000,0x0000000f5d000000) (1024K)] - 0x0000016c581f9ea0 WorkerThread "G1 Conc#4" [id=34860, stack(0x0000000f5d200000,0x0000000f5d300000) (1024K)] - 0x0000016c5d8bce90 WorkerThread "G1 Conc#5" [id=33132, stack(0x0000000f5d300000,0x0000000f5d400000) (1024K)] - 0x0000016c5d8bd5f0 WorkerThread "G1 Conc#6" [id=77912, stack(0x0000000f5d400000,0x0000000f5d500000) (1024K)] - 0x0000016c5d8bcae0 WorkerThread "G1 Conc#7" [id=75244, stack(0x0000000f60800000,0x0000000f60900000) (1024K)] - 0x0000016c5d8bd240 WorkerThread "G1 Conc#8" [id=57480, stack(0x0000000f63200000,0x0000000f63300000) (1024K)] - 0x0000016c5daef090 WorkerThread "G1 Conc#9" [id=52160, stack(0x0000000f63300000,0x0000000f63400000) (1024K)] - 0x0000016c7e79d3f0 ConcurrentGCThread "G1 Refine#0" [id=66872, stack(0x0000000f5bf00000,0x0000000f5c000000) (1024K)] - 0x0000016c5d8c9660 ConcurrentGCThread "G1 Refine#1" [id=70168, stack(0x0000000f5cc00000,0x0000000f5cd00000) (1024K)] - 0x0000016c7e79e420 ConcurrentGCThread "G1 Service" [id=31352, stack(0x0000000f5c000000,0x0000000f5c100000) (1024K)] -Total: 54 - -Threads with active compile tasks: -Total: 0 - -VM state: at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event]) -[0x00007ffdace33910] Threads_lock - owner thread: 0x0000016c7e80d430 -[0x00007ffdace33a10] Heap_lock - owner thread: 0x0000016c582cb070 - -Heap address: 0x0000000407000000, size: 16272 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x0000016c17000000-0x0000016c17d80000-0x0000016c17d80000), size 14155776, SharedBaseAddress: 0x0000016c17000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x0000016c18000000-0x0000016c58000000, reserved size: 1073741824 -Narrow klass base: 0x0000016c17000000, Narrow klass shift: 0, Narrow klass range: 0x41000000 - -GC Precious Log: - CardTable entry size: 512 - Card Set container configuration: InlinePtr #cards 4 size 8 Array Of Cards #cards 64 size 144 Howl #buckets 8 coarsen threshold 14745 Howl Bitmap #cards 2048 size 272 coarsen threshold 1843 Card regions per heap region 1 cards per card region 16384 - CPUs: 56 total, 56 available - Memory: 65072M - Large Page Support: Disabled - NUMA Support: Disabled - Compressed Oops: Enabled (Zero based) - Heap Region Size: 8M - Heap Min Capacity: 8M - Heap Initial Capacity: 1G - Heap Max Capacity: 16272M - Pre-touch: Disabled - Parallel Workers: 38 - Concurrent Workers: 10 - Concurrent Refinement Workers: 38 - Periodic GC: Disabled - -Heap: - garbage-first heap total reserved 16662528K, committed 13565952K, used 8408821K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 11 young (90112K), 11 survivors (90112K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K - -Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, TAMS=top-at-mark-start, PB=parsable bottom -| 0|0x0000000407000000, 0x0000000407800000, 0x0000000407800000|100%| O| |TAMS 0x0000000407000000| PB 0x0000000407000000| Untracked | 0 -| 1|0x0000000407800000, 0x0000000408000000, 0x0000000408000000|100%| O| |TAMS 0x0000000407800000| PB 0x0000000407800000| Untracked | 0 -| 2|0x0000000408000000, 0x0000000408800000, 0x0000000408800000|100%| O| |TAMS 0x0000000408000000| PB 0x0000000408000000| Untracked | 0 -| 3|0x0000000408800000, 0x0000000409000000, 0x0000000409000000|100%| O| |TAMS 0x0000000408800000| PB 0x0000000408800000| Untracked | 0 -| 4|0x0000000409000000, 0x0000000409800000, 0x0000000409800000|100%| O| |TAMS 0x0000000409000000| PB 0x0000000409000000| Untracked | 0 -| 5|0x0000000409800000, 0x000000040a000000, 0x000000040a000000|100%| O| |TAMS 0x0000000409800000| PB 0x0000000409800000| Untracked | 0 -| 6|0x000000040a000000, 0x000000040a800000, 0x000000040a800000|100%| O| |TAMS 0x000000040a000000| PB 0x000000040a000000| Untracked | 0 -| 7|0x000000040a800000, 0x000000040b000000, 0x000000040b000000|100%| O| |TAMS 0x000000040a800000| PB 0x000000040a800000| Untracked | 0 -| 8|0x000000040b000000, 0x000000040b800000, 0x000000040b800000|100%| O| |TAMS 0x000000040b000000| PB 0x000000040b000000| Untracked | 0 -| 9|0x000000040b800000, 0x000000040c000000, 0x000000040c000000|100%| O| |TAMS 0x000000040b800000| PB 0x000000040b800000| Untracked | 0 -| 10|0x000000040c000000, 0x000000040c800000, 0x000000040c800000|100%| O| |TAMS 0x000000040c000000| PB 0x000000040c000000| Untracked | 0 -| 11|0x000000040c800000, 0x000000040d000000, 0x000000040d000000|100%| O| |TAMS 0x000000040c800000| PB 0x000000040c800000| Untracked | 0 -| 12|0x000000040d000000, 0x000000040d800000, 0x000000040d800000|100%| O| |TAMS 0x000000040d000000| PB 0x000000040d000000| Untracked | 0 -| 13|0x000000040d800000, 0x000000040e000000, 0x000000040e000000|100%| O| |TAMS 0x000000040d800000| PB 0x000000040d800000| Untracked | 0 -| 14|0x000000040e000000, 0x000000040e800000, 0x000000040e800000|100%| O| |TAMS 0x000000040e000000| PB 0x000000040e000000| Untracked | 0 -| 15|0x000000040e800000, 0x000000040f000000, 0x000000040f000000|100%| O| |TAMS 0x000000040e800000| PB 0x000000040e800000| Untracked | 0 -| 16|0x000000040f000000, 0x000000040f800000, 0x000000040f800000|100%| O| |TAMS 0x000000040f000000| PB 0x000000040f000000| Untracked | 0 -| 17|0x000000040f800000, 0x0000000410000000, 0x0000000410000000|100%| O| |TAMS 0x000000040f800000| PB 0x000000040f800000| Untracked | 0 -| 18|0x0000000410000000, 0x0000000410800000, 0x0000000410800000|100%| O| |TAMS 0x0000000410000000| PB 0x0000000410000000| Untracked | 0 -| 19|0x0000000410800000, 0x0000000411000000, 0x0000000411000000|100%| O| |TAMS 0x0000000410800000| PB 0x0000000410800000| Untracked | 0 -| 20|0x0000000411000000, 0x0000000411800000, 0x0000000411800000|100%| O| |TAMS 0x0000000411000000| PB 0x0000000411000000| Untracked | 0 -| 21|0x0000000411800000, 0x0000000412000000, 0x0000000412000000|100%| O| |TAMS 0x0000000411800000| PB 0x0000000411800000| Untracked | 0 -| 22|0x0000000412000000, 0x0000000412800000, 0x0000000412800000|100%| O| |TAMS 0x0000000412000000| PB 0x0000000412000000| Untracked | 0 -| 23|0x0000000412800000, 0x0000000413000000, 0x0000000413000000|100%| O| |TAMS 0x0000000412800000| PB 0x0000000412800000| Untracked | 0 -| 24|0x0000000413000000, 0x0000000413800000, 0x0000000413800000|100%| O| |TAMS 0x0000000413000000| PB 0x0000000413000000| Untracked | 0 -| 25|0x0000000413800000, 0x0000000414000000, 0x0000000414000000|100%| O| |TAMS 0x0000000413800000| PB 0x0000000413800000| Untracked | 0 -| 26|0x0000000414000000, 0x0000000414800000, 0x0000000414800000|100%| O| |TAMS 0x0000000414000000| PB 0x0000000414000000| Untracked | 0 -| 27|0x0000000414800000, 0x0000000415000000, 0x0000000415000000|100%| O| |TAMS 0x0000000414800000| PB 0x0000000414800000| Untracked | 0 -| 28|0x0000000415000000, 0x0000000415800000, 0x0000000415800000|100%| O| |TAMS 0x0000000415000000| PB 0x0000000415000000| Untracked | 0 -| 29|0x0000000415800000, 0x0000000416000000, 0x0000000416000000|100%| O| |TAMS 0x0000000415800000| PB 0x0000000415800000| Untracked | 0 -| 30|0x0000000416000000, 0x0000000416800000, 0x0000000416800000|100%| O| |TAMS 0x0000000416000000| PB 0x0000000416000000| Untracked | 0 -| 31|0x0000000416800000, 0x0000000417000000, 0x0000000417000000|100%| O| |TAMS 0x0000000416800000| PB 0x0000000416800000| Untracked | 0 -| 32|0x0000000417000000, 0x0000000417800000, 0x0000000417800000|100%| O| |TAMS 0x0000000417000000| PB 0x0000000417000000| Untracked | 0 -| 33|0x0000000417800000, 0x0000000418000000, 0x0000000418000000|100%| O| |TAMS 0x0000000417800000| PB 0x0000000417800000| Untracked | 0 -| 34|0x0000000418000000, 0x0000000418800000, 0x0000000418800000|100%| O| |TAMS 0x0000000418000000| PB 0x0000000418000000| Untracked | 0 -| 35|0x0000000418800000, 0x0000000419000000, 0x0000000419000000|100%| O| |TAMS 0x0000000418800000| PB 0x0000000418800000| Untracked | 0 -| 36|0x0000000419000000, 0x0000000419800000, 0x0000000419800000|100%| O| |TAMS 0x0000000419000000| PB 0x0000000419000000| Untracked | 0 -| 37|0x0000000419800000, 0x000000041a000000, 0x000000041a000000|100%| O| |TAMS 0x0000000419800000| PB 0x0000000419800000| Untracked | 0 -| 38|0x000000041a000000, 0x000000041a800000, 0x000000041a800000|100%| O| |TAMS 0x000000041a000000| PB 0x000000041a000000| Untracked | 0 -| 39|0x000000041a800000, 0x000000041b000000, 0x000000041b000000|100%| O| |TAMS 0x000000041a800000| PB 0x000000041a800000| Untracked | 0 -| 40|0x000000041b000000, 0x000000041b800000, 0x000000041b800000|100%| O| |TAMS 0x000000041b000000| PB 0x000000041b000000| Untracked | 0 -| 41|0x000000041b800000, 0x000000041c000000, 0x000000041c000000|100%| O| |TAMS 0x000000041b800000| PB 0x000000041b800000| Untracked | 0 -| 42|0x000000041c000000, 0x000000041c800000, 0x000000041c800000|100%| O| |TAMS 0x000000041c000000| PB 0x000000041c000000| Untracked | 0 -| 43|0x000000041c800000, 0x000000041d000000, 0x000000041d000000|100%| O| |TAMS 0x000000041c800000| PB 0x000000041c800000| Untracked | 0 -| 44|0x000000041d000000, 0x000000041d800000, 0x000000041d800000|100%| O| |TAMS 0x000000041d000000| PB 0x000000041d000000| Untracked | 0 -| 45|0x000000041d800000, 0x000000041e000000, 0x000000041e000000|100%| O| |TAMS 0x000000041d800000| PB 0x000000041d800000| Untracked | 0 -| 46|0x000000041e000000, 0x000000041e800000, 0x000000041e800000|100%| O| |TAMS 0x000000041e000000| PB 0x000000041e000000| Untracked | 0 -| 47|0x000000041e800000, 0x000000041f000000, 0x000000041f000000|100%| O| |TAMS 0x000000041e800000| PB 0x000000041e800000| Untracked | 0 -| 48|0x000000041f000000, 0x000000041f800000, 0x000000041f800000|100%| O| |TAMS 0x000000041f000000| PB 0x000000041f000000| Untracked | 0 -| 49|0x000000041f800000, 0x0000000420000000, 0x0000000420000000|100%| O| |TAMS 0x000000041f800000| PB 0x000000041f800000| Untracked | 0 -| 50|0x0000000420000000, 0x0000000420800000, 0x0000000420800000|100%| O| |TAMS 0x0000000420000000| PB 0x0000000420000000| Untracked | 0 -| 51|0x0000000420800000, 0x0000000421000000, 0x0000000421000000|100%| O| |TAMS 0x0000000420800000| PB 0x0000000420800000| Untracked | 0 -| 52|0x0000000421000000, 0x0000000421800000, 0x0000000421800000|100%| O| |TAMS 0x0000000421000000| PB 0x0000000421000000| Untracked | 0 -| 53|0x0000000421800000, 0x0000000422000000, 0x0000000422000000|100%| O| |TAMS 0x0000000421800000| PB 0x0000000421800000| Untracked | 0 -| 54|0x0000000422000000, 0x0000000422800000, 0x0000000422800000|100%| O| |TAMS 0x0000000422000000| PB 0x0000000422000000| Untracked | 0 -| 55|0x0000000422800000, 0x0000000423000000, 0x0000000423000000|100%| O| |TAMS 0x0000000422800000| PB 0x0000000422800000| Untracked | 0 -| 56|0x0000000423000000, 0x0000000423800000, 0x0000000423800000|100%| O| |TAMS 0x0000000423000000| PB 0x0000000423000000| Untracked | 0 -| 57|0x0000000423800000, 0x0000000424000000, 0x0000000424000000|100%| O| |TAMS 0x0000000423800000| PB 0x0000000423800000| Untracked | 0 -| 58|0x0000000424000000, 0x0000000424800000, 0x0000000424800000|100%| O| |TAMS 0x0000000424000000| PB 0x0000000424000000| Untracked | 0 -| 59|0x0000000424800000, 0x0000000425000000, 0x0000000425000000|100%| O| |TAMS 0x0000000424800000| PB 0x0000000424800000| Untracked | 0 -| 60|0x0000000425000000, 0x0000000425800000, 0x0000000425800000|100%| O| |TAMS 0x0000000425000000| PB 0x0000000425000000| Untracked | 0 -| 61|0x0000000425800000, 0x0000000426000000, 0x0000000426000000|100%| O| |TAMS 0x0000000425800000| PB 0x0000000425800000| Untracked | 0 -| 62|0x0000000426000000, 0x0000000426800000, 0x0000000426800000|100%| O| |TAMS 0x0000000426000000| PB 0x0000000426000000| Untracked | 0 -| 63|0x0000000426800000, 0x0000000427000000, 0x0000000427000000|100%| O| |TAMS 0x0000000426800000| PB 0x0000000426800000| Untracked | 0 -| 64|0x0000000427000000, 0x0000000427800000, 0x0000000427800000|100%| O| |TAMS 0x0000000427000000| PB 0x0000000427000000| Untracked | 0 -| 65|0x0000000427800000, 0x0000000428000000, 0x0000000428000000|100%| O| |TAMS 0x0000000427800000| PB 0x0000000427800000| Untracked | 0 -| 66|0x0000000428000000, 0x0000000428800000, 0x0000000428800000|100%| O| |TAMS 0x0000000428000000| PB 0x0000000428000000| Untracked | 0 -| 67|0x0000000428800000, 0x0000000429000000, 0x0000000429000000|100%| O| |TAMS 0x0000000428800000| PB 0x0000000428800000| Untracked | 0 -| 68|0x0000000429000000, 0x0000000429800000, 0x0000000429800000|100%| O| |TAMS 0x0000000429000000| PB 0x0000000429000000| Untracked | 0 -| 69|0x0000000429800000, 0x000000042a000000, 0x000000042a000000|100%| O| |TAMS 0x0000000429800000| PB 0x0000000429800000| Untracked | 0 -| 70|0x000000042a000000, 0x000000042a800000, 0x000000042a800000|100%| O| |TAMS 0x000000042a000000| PB 0x000000042a000000| Untracked | 0 -| 71|0x000000042a800000, 0x000000042b000000, 0x000000042b000000|100%| O| |TAMS 0x000000042a800000| PB 0x000000042a800000| Untracked | 0 -| 72|0x000000042b000000, 0x000000042b800000, 0x000000042b800000|100%| O| |TAMS 0x000000042b000000| PB 0x000000042b000000| Untracked | 0 -| 73|0x000000042b800000, 0x000000042c000000, 0x000000042c000000|100%| O| |TAMS 0x000000042b800000| PB 0x000000042b800000| Untracked | 0 -| 74|0x000000042c000000, 0x000000042c800000, 0x000000042c800000|100%| O| |TAMS 0x000000042c000000| PB 0x000000042c000000| Untracked | 0 -| 75|0x000000042c800000, 0x000000042d000000, 0x000000042d000000|100%| O| |TAMS 0x000000042c800000| PB 0x000000042c800000| Untracked | 0 -| 76|0x000000042d000000, 0x000000042d800000, 0x000000042d800000|100%| O| |TAMS 0x000000042d000000| PB 0x000000042d000000| Untracked | 0 -| 77|0x000000042d800000, 0x000000042e000000, 0x000000042e000000|100%| O| |TAMS 0x000000042d800000| PB 0x000000042d800000| Untracked | 0 -| 78|0x000000042e000000, 0x000000042e800000, 0x000000042e800000|100%| O| |TAMS 0x000000042e000000| PB 0x000000042e000000| Untracked | 0 -| 79|0x000000042e800000, 0x000000042f000000, 0x000000042f000000|100%| O| |TAMS 0x000000042e800000| PB 0x000000042e800000| Untracked | 0 -| 80|0x000000042f000000, 0x000000042f800000, 0x000000042f800000|100%| O| |TAMS 0x000000042f000000| PB 0x000000042f000000| Untracked | 0 -| 81|0x000000042f800000, 0x0000000430000000, 0x0000000430000000|100%| O| |TAMS 0x000000042f800000| PB 0x000000042f800000| Untracked | 0 -| 82|0x0000000430000000, 0x0000000430800000, 0x0000000430800000|100%| O| |TAMS 0x0000000430000000| PB 0x0000000430000000| Untracked | 0 -| 83|0x0000000430800000, 0x0000000431000000, 0x0000000431000000|100%| O| |TAMS 0x0000000430800000| PB 0x0000000430800000| Untracked | 0 -| 84|0x0000000431000000, 0x0000000431800000, 0x0000000431800000|100%| O| |TAMS 0x0000000431000000| PB 0x0000000431000000| Untracked | 0 -| 85|0x0000000431800000, 0x0000000432000000, 0x0000000432000000|100%| O| |TAMS 0x0000000431800000| PB 0x0000000431800000| Untracked | 0 -| 86|0x0000000432000000, 0x0000000432800000, 0x0000000432800000|100%| O| |TAMS 0x0000000432000000| PB 0x0000000432000000| Untracked | 0 -| 87|0x0000000432800000, 0x0000000433000000, 0x0000000433000000|100%| O| |TAMS 0x0000000432800000| PB 0x0000000432800000| Untracked | 0 -| 88|0x0000000433000000, 0x0000000433800000, 0x0000000433800000|100%| O| |TAMS 0x0000000433000000| PB 0x0000000433000000| Untracked | 0 -| 89|0x0000000433800000, 0x0000000434000000, 0x0000000434000000|100%| O| |TAMS 0x0000000433800000| PB 0x0000000433800000| Untracked | 0 -| 90|0x0000000434000000, 0x0000000434800000, 0x0000000434800000|100%| O| |TAMS 0x0000000434000000| PB 0x0000000434000000| Untracked | 0 -| 91|0x0000000434800000, 0x0000000435000000, 0x0000000435000000|100%| O| |TAMS 0x0000000434800000| PB 0x0000000434800000| Untracked | 0 -| 92|0x0000000435000000, 0x0000000435800000, 0x0000000435800000|100%| O| |TAMS 0x0000000435000000| PB 0x0000000435000000| Untracked | 0 -| 93|0x0000000435800000, 0x0000000436000000, 0x0000000436000000|100%| O| |TAMS 0x0000000435800000| PB 0x0000000435800000| Untracked | 0 -| 94|0x0000000436000000, 0x0000000436800000, 0x0000000436800000|100%| O| |TAMS 0x0000000436000000| PB 0x0000000436000000| Untracked | 0 -| 95|0x0000000436800000, 0x0000000437000000, 0x0000000437000000|100%| O| |TAMS 0x0000000436800000| PB 0x0000000436800000| Untracked | 0 -| 96|0x0000000437000000, 0x0000000437800000, 0x0000000437800000|100%|HS| |TAMS 0x0000000437000000| PB 0x0000000437000000| Untracked | 0 -| 97|0x0000000437800000, 0x0000000438000000, 0x0000000438000000|100%|HC| |TAMS 0x0000000437800000| PB 0x0000000437800000| Untracked | 0 -| 98|0x0000000438000000, 0x0000000438800000, 0x0000000438800000|100%|HC| |TAMS 0x0000000438000000| PB 0x0000000438000000| Untracked | 0 -| 99|0x0000000438800000, 0x0000000439000000, 0x0000000439000000|100%|HC| |TAMS 0x0000000438800000| PB 0x0000000438800000| Untracked | 0 -| 100|0x0000000439000000, 0x0000000439800000, 0x0000000439800000|100%|HC| |TAMS 0x0000000439000000| PB 0x0000000439000000| Untracked | 0 -| 101|0x0000000439800000, 0x000000043a000000, 0x000000043a000000|100%| O| |TAMS 0x0000000439800000| PB 0x0000000439800000| Untracked | 0 -| 102|0x000000043a000000, 0x000000043a800000, 0x000000043a800000|100%| O| |TAMS 0x000000043a000000| PB 0x000000043a000000| Untracked | 0 -| 103|0x000000043a800000, 0x000000043b000000, 0x000000043b000000|100%| O| |TAMS 0x000000043a800000| PB 0x000000043a800000| Untracked | 0 -| 104|0x000000043b000000, 0x000000043b800000, 0x000000043b800000|100%| O| |TAMS 0x000000043b000000| PB 0x000000043b000000| Untracked | 0 -| 105|0x000000043b800000, 0x000000043c000000, 0x000000043c000000|100%| O| |TAMS 0x000000043b800000| PB 0x000000043b800000| Untracked | 0 -| 106|0x000000043c000000, 0x000000043c800000, 0x000000043c800000|100%| O| |TAMS 0x000000043c000000| PB 0x000000043c000000| Untracked | 0 -| 107|0x000000043c800000, 0x000000043d000000, 0x000000043d000000|100%| O| |TAMS 0x000000043c800000| PB 0x000000043c800000| Untracked | 0 -| 108|0x000000043d000000, 0x000000043d800000, 0x000000043d800000|100%| O| |TAMS 0x000000043d000000| PB 0x000000043d000000| Untracked | 0 -| 109|0x000000043d800000, 0x000000043e000000, 0x000000043e000000|100%| O| |TAMS 0x000000043d800000| PB 0x000000043d800000| Untracked | 0 -| 110|0x000000043e000000, 0x000000043e800000, 0x000000043e800000|100%| O| |TAMS 0x000000043e000000| PB 0x000000043e000000| Untracked | 0 -| 111|0x000000043e800000, 0x000000043f000000, 0x000000043f000000|100%| O| |TAMS 0x000000043e800000| PB 0x000000043e800000| Untracked | 0 -| 112|0x000000043f000000, 0x000000043f800000, 0x000000043f800000|100%| O| |TAMS 0x000000043f000000| PB 0x000000043f000000| Untracked | 0 -| 113|0x000000043f800000, 0x0000000440000000, 0x0000000440000000|100%| O| |TAMS 0x000000043f800000| PB 0x000000043f800000| Untracked | 0 -| 114|0x0000000440000000, 0x0000000440800000, 0x0000000440800000|100%| O| |TAMS 0x0000000440000000| PB 0x0000000440000000| Untracked | 0 -| 115|0x0000000440800000, 0x0000000441000000, 0x0000000441000000|100%| O| |TAMS 0x0000000440800000| PB 0x0000000440800000| Untracked | 0 -| 116|0x0000000441000000, 0x0000000441800000, 0x0000000441800000|100%| O| |TAMS 0x0000000441000000| PB 0x0000000441000000| Untracked | 0 -| 117|0x0000000441800000, 0x0000000442000000, 0x0000000442000000|100%| O| |TAMS 0x0000000441800000| PB 0x0000000441800000| Untracked | 0 -| 118|0x0000000442000000, 0x0000000442800000, 0x0000000442800000|100%| O| |TAMS 0x0000000442000000| PB 0x0000000442000000| Untracked | 0 -| 119|0x0000000442800000, 0x0000000443000000, 0x0000000443000000|100%| O| |TAMS 0x0000000442800000| PB 0x0000000442800000| Untracked | 0 -| 120|0x0000000443000000, 0x0000000443800000, 0x0000000443800000|100%| O| |TAMS 0x0000000443000000| PB 0x0000000443000000| Untracked | 0 -| 121|0x0000000443800000, 0x0000000444000000, 0x0000000444000000|100%| O| |TAMS 0x0000000443800000| PB 0x0000000443800000| Untracked | 0 -| 122|0x0000000444000000, 0x0000000444800000, 0x0000000444800000|100%| O| |TAMS 0x0000000444000000| PB 0x0000000444000000| Untracked | 0 -| 123|0x0000000444800000, 0x0000000445000000, 0x0000000445000000|100%| O| |TAMS 0x0000000444800000| PB 0x0000000444800000| Untracked | 0 -| 124|0x0000000445000000, 0x0000000445800000, 0x0000000445800000|100%| O| |TAMS 0x0000000445000000| PB 0x0000000445000000| Untracked | 0 -| 125|0x0000000445800000, 0x0000000446000000, 0x0000000446000000|100%| O| |TAMS 0x0000000445800000| PB 0x0000000445800000| Untracked | 0 -| 126|0x0000000446000000, 0x0000000446800000, 0x0000000446800000|100%| O| |TAMS 0x0000000446000000| PB 0x0000000446000000| Untracked | 0 -| 127|0x0000000446800000, 0x0000000447000000, 0x0000000447000000|100%| O| |TAMS 0x0000000446800000| PB 0x0000000446800000| Untracked | 0 -| 128|0x0000000447000000, 0x0000000447800000, 0x0000000447800000|100%| O| |TAMS 0x0000000447000000| PB 0x0000000447000000| Untracked | 0 -| 129|0x0000000447800000, 0x0000000448000000, 0x0000000448000000|100%| O| |TAMS 0x0000000447800000| PB 0x0000000447800000| Untracked | 0 -| 130|0x0000000448000000, 0x0000000448800000, 0x0000000448800000|100%| O| |TAMS 0x0000000448000000| PB 0x0000000448000000| Untracked | 0 -| 131|0x0000000448800000, 0x0000000449000000, 0x0000000449000000|100%| O| |TAMS 0x0000000448800000| PB 0x0000000448800000| Untracked | 0 -| 132|0x0000000449000000, 0x0000000449800000, 0x0000000449800000|100%| O| |TAMS 0x0000000449000000| PB 0x0000000449000000| Untracked | 0 -| 133|0x0000000449800000, 0x000000044a000000, 0x000000044a000000|100%| O| |TAMS 0x0000000449800000| PB 0x0000000449800000| Untracked | 0 -| 134|0x000000044a000000, 0x000000044a800000, 0x000000044a800000|100%| O| |TAMS 0x000000044a000000| PB 0x000000044a000000| Untracked | 0 -| 135|0x000000044a800000, 0x000000044b000000, 0x000000044b000000|100%| O| |TAMS 0x000000044a800000| PB 0x000000044a800000| Untracked | 0 -| 136|0x000000044b000000, 0x000000044b800000, 0x000000044b800000|100%| O| |TAMS 0x000000044b000000| PB 0x000000044b000000| Untracked | 0 -| 137|0x000000044b800000, 0x000000044c000000, 0x000000044c000000|100%| O| |TAMS 0x000000044b800000| PB 0x000000044b800000| Untracked | 0 -| 138|0x000000044c000000, 0x000000044c800000, 0x000000044c800000|100%| O| |TAMS 0x000000044c000000| PB 0x000000044c000000| Untracked | 0 -| 139|0x000000044c800000, 0x000000044d000000, 0x000000044d000000|100%| O| |TAMS 0x000000044c800000| PB 0x000000044c800000| Untracked | 0 -| 140|0x000000044d000000, 0x000000044d800000, 0x000000044d800000|100%| O| |TAMS 0x000000044d000000| PB 0x000000044d000000| Untracked | 0 -| 141|0x000000044d800000, 0x000000044e000000, 0x000000044e000000|100%| O| |TAMS 0x000000044d800000| PB 0x000000044d800000| Untracked | 0 -| 142|0x000000044e000000, 0x000000044e800000, 0x000000044e800000|100%| O| |TAMS 0x000000044e000000| PB 0x000000044e000000| Untracked | 0 -| 143|0x000000044e800000, 0x000000044f000000, 0x000000044f000000|100%| O| |TAMS 0x000000044e800000| PB 0x000000044e800000| Untracked | 0 -| 144|0x000000044f000000, 0x000000044f800000, 0x000000044f800000|100%| O| |TAMS 0x000000044f000000| PB 0x000000044f000000| Untracked | 0 -| 145|0x000000044f800000, 0x0000000450000000, 0x0000000450000000|100%| O| |TAMS 0x000000044f800000| PB 0x000000044f800000| Untracked | 0 -| 146|0x0000000450000000, 0x0000000450800000, 0x0000000450800000|100%| O| |TAMS 0x0000000450000000| PB 0x0000000450000000| Untracked | 0 -| 147|0x0000000450800000, 0x0000000451000000, 0x0000000451000000|100%| O| |TAMS 0x0000000450800000| PB 0x0000000450800000| Untracked | 0 -| 148|0x0000000451000000, 0x0000000451800000, 0x0000000451800000|100%| O| |TAMS 0x0000000451000000| PB 0x0000000451000000| Untracked | 0 -| 149|0x0000000451800000, 0x0000000452000000, 0x0000000452000000|100%| O| |TAMS 0x0000000451800000| PB 0x0000000451800000| Untracked | 0 -| 150|0x0000000452000000, 0x0000000452800000, 0x0000000452800000|100%| O| |TAMS 0x0000000452000000| PB 0x0000000452000000| Untracked | 0 -| 151|0x0000000452800000, 0x0000000453000000, 0x0000000453000000|100%| O| |TAMS 0x0000000452800000| PB 0x0000000452800000| Untracked | 0 -| 152|0x0000000453000000, 0x0000000453800000, 0x0000000453800000|100%| O| |TAMS 0x0000000453000000| PB 0x0000000453000000| Untracked | 0 -| 153|0x0000000453800000, 0x0000000454000000, 0x0000000454000000|100%| O| |TAMS 0x0000000453800000| PB 0x0000000453800000| Untracked | 0 -| 154|0x0000000454000000, 0x0000000454800000, 0x0000000454800000|100%| O| |TAMS 0x0000000454000000| PB 0x0000000454000000| Untracked | 0 -| 155|0x0000000454800000, 0x0000000455000000, 0x0000000455000000|100%| O| |TAMS 0x0000000454800000| PB 0x0000000454800000| Untracked | 0 -| 156|0x0000000455000000, 0x0000000455800000, 0x0000000455800000|100%| O| |TAMS 0x0000000455000000| PB 0x0000000455000000| Untracked | 0 -| 157|0x0000000455800000, 0x0000000456000000, 0x0000000456000000|100%| O| |TAMS 0x0000000455800000| PB 0x0000000455800000| Untracked | 0 -| 158|0x0000000456000000, 0x0000000456800000, 0x0000000456800000|100%| O| |TAMS 0x0000000456000000| PB 0x0000000456000000| Untracked | 0 -| 159|0x0000000456800000, 0x0000000457000000, 0x0000000457000000|100%| O| |TAMS 0x0000000456800000| PB 0x0000000456800000| Untracked | 0 -| 160|0x0000000457000000, 0x0000000457800000, 0x0000000457800000|100%| O| |TAMS 0x0000000457000000| PB 0x0000000457000000| Untracked | 0 -| 161|0x0000000457800000, 0x0000000458000000, 0x0000000458000000|100%| O| |TAMS 0x0000000457800000| PB 0x0000000457800000| Untracked | 0 -| 162|0x0000000458000000, 0x0000000458800000, 0x0000000458800000|100%| O| |TAMS 0x0000000458000000| PB 0x0000000458000000| Untracked | 0 -| 163|0x0000000458800000, 0x0000000459000000, 0x0000000459000000|100%| O| |TAMS 0x0000000458800000| PB 0x0000000458800000| Untracked | 0 -| 164|0x0000000459000000, 0x0000000459800000, 0x0000000459800000|100%| O| |TAMS 0x0000000459000000| PB 0x0000000459000000| Untracked | 0 -| 165|0x0000000459800000, 0x000000045a000000, 0x000000045a000000|100%| O| |TAMS 0x0000000459800000| PB 0x0000000459800000| Untracked | 0 -| 166|0x000000045a000000, 0x000000045a800000, 0x000000045a800000|100%| O| |TAMS 0x000000045a000000| PB 0x000000045a000000| Untracked | 0 -| 167|0x000000045a800000, 0x000000045b000000, 0x000000045b000000|100%| O| |TAMS 0x000000045a800000| PB 0x000000045a800000| Untracked | 0 -| 168|0x000000045b000000, 0x000000045b800000, 0x000000045b800000|100%| O| |TAMS 0x000000045b000000| PB 0x000000045b000000| Untracked | 0 -| 169|0x000000045b800000, 0x000000045c000000, 0x000000045c000000|100%| O| |TAMS 0x000000045b800000| PB 0x000000045b800000| Untracked | 0 -| 170|0x000000045c000000, 0x000000045c800000, 0x000000045c800000|100%| O| |TAMS 0x000000045c000000| PB 0x000000045c000000| Untracked | 0 -| 171|0x000000045c800000, 0x000000045d000000, 0x000000045d000000|100%| O| |TAMS 0x000000045c800000| PB 0x000000045c800000| Untracked | 0 -| 172|0x000000045d000000, 0x000000045d800000, 0x000000045d800000|100%| O| |TAMS 0x000000045d000000| PB 0x000000045d000000| Untracked | 0 -| 173|0x000000045d800000, 0x000000045e000000, 0x000000045e000000|100%| O| |TAMS 0x000000045d800000| PB 0x000000045d800000| Untracked | 0 -| 174|0x000000045e000000, 0x000000045e800000, 0x000000045e800000|100%| O| |TAMS 0x000000045e000000| PB 0x000000045e000000| Untracked | 0 -| 175|0x000000045e800000, 0x000000045f000000, 0x000000045f000000|100%| O| |TAMS 0x000000045e800000| PB 0x000000045e800000| Untracked | 0 -| 176|0x000000045f000000, 0x000000045f800000, 0x000000045f800000|100%| O| |TAMS 0x000000045f000000| PB 0x000000045f000000| Untracked | 0 -| 177|0x000000045f800000, 0x0000000460000000, 0x0000000460000000|100%| O| |TAMS 0x000000045f800000| PB 0x000000045f800000| Untracked | 0 -| 178|0x0000000460000000, 0x0000000460800000, 0x0000000460800000|100%| O| |TAMS 0x0000000460000000| PB 0x0000000460000000| Untracked | 0 -| 179|0x0000000460800000, 0x0000000461000000, 0x0000000461000000|100%| O| |TAMS 0x0000000460800000| PB 0x0000000460800000| Untracked | 0 -| 180|0x0000000461000000, 0x0000000461800000, 0x0000000461800000|100%| O| |TAMS 0x0000000461000000| PB 0x0000000461000000| Untracked | 0 -| 181|0x0000000461800000, 0x0000000462000000, 0x0000000462000000|100%| O| |TAMS 0x0000000461800000| PB 0x0000000461800000| Untracked | 0 -| 182|0x0000000462000000, 0x0000000462800000, 0x0000000462800000|100%| O| |TAMS 0x0000000462000000| PB 0x0000000462000000| Untracked | 0 -| 183|0x0000000462800000, 0x0000000463000000, 0x0000000463000000|100%| O| |TAMS 0x0000000462800000| PB 0x0000000462800000| Untracked | 0 -| 184|0x0000000463000000, 0x0000000463800000, 0x0000000463800000|100%| O| |TAMS 0x0000000463000000| PB 0x0000000463000000| Untracked | 0 -| 185|0x0000000463800000, 0x0000000464000000, 0x0000000464000000|100%| O| |TAMS 0x0000000463800000| PB 0x0000000463800000| Untracked | 0 -| 186|0x0000000464000000, 0x0000000464800000, 0x0000000464800000|100%| O| |TAMS 0x0000000464000000| PB 0x0000000464000000| Untracked | 0 -| 187|0x0000000464800000, 0x0000000465000000, 0x0000000465000000|100%| O| |TAMS 0x0000000464800000| PB 0x0000000464800000| Untracked | 0 -| 188|0x0000000465000000, 0x0000000465800000, 0x0000000465800000|100%| O| |TAMS 0x0000000465000000| PB 0x0000000465000000| Untracked | 0 -| 189|0x0000000465800000, 0x0000000466000000, 0x0000000466000000|100%| O| |TAMS 0x0000000465800000| PB 0x0000000465800000| Untracked | 0 -| 190|0x0000000466000000, 0x0000000466800000, 0x0000000466800000|100%| O| |TAMS 0x0000000466000000| PB 0x0000000466000000| Untracked | 0 -| 191|0x0000000466800000, 0x0000000467000000, 0x0000000467000000|100%| O| |TAMS 0x0000000466800000| PB 0x0000000466800000| Untracked | 0 -| 192|0x0000000467000000, 0x0000000467800000, 0x0000000467800000|100%| O| |TAMS 0x0000000467000000| PB 0x0000000467000000| Untracked | 0 -| 193|0x0000000467800000, 0x0000000468000000, 0x0000000468000000|100%| O| |TAMS 0x0000000467800000| PB 0x0000000467800000| Untracked | 0 -| 194|0x0000000468000000, 0x0000000468800000, 0x0000000468800000|100%| O| |TAMS 0x0000000468000000| PB 0x0000000468000000| Untracked | 0 -| 195|0x0000000468800000, 0x0000000469000000, 0x0000000469000000|100%| O| |TAMS 0x0000000468800000| PB 0x0000000468800000| Untracked | 0 -| 196|0x0000000469000000, 0x0000000469800000, 0x0000000469800000|100%| O| |TAMS 0x0000000469000000| PB 0x0000000469000000| Untracked | 0 -| 197|0x0000000469800000, 0x000000046a000000, 0x000000046a000000|100%| O| |TAMS 0x0000000469800000| PB 0x0000000469800000| Untracked | 0 -| 198|0x000000046a000000, 0x000000046a800000, 0x000000046a800000|100%| O| |TAMS 0x000000046a000000| PB 0x000000046a000000| Untracked | 0 -| 199|0x000000046a800000, 0x000000046b000000, 0x000000046b000000|100%| O| |TAMS 0x000000046a800000| PB 0x000000046a800000| Untracked | 0 -| 200|0x000000046b000000, 0x000000046b800000, 0x000000046b800000|100%| O| |TAMS 0x000000046b000000| PB 0x000000046b000000| Untracked | 0 -| 201|0x000000046b800000, 0x000000046c000000, 0x000000046c000000|100%| O| |TAMS 0x000000046b800000| PB 0x000000046b800000| Untracked | 0 -| 202|0x000000046c000000, 0x000000046c800000, 0x000000046c800000|100%| O| |TAMS 0x000000046c000000| PB 0x000000046c000000| Untracked | 0 -| 203|0x000000046c800000, 0x000000046d000000, 0x000000046d000000|100%| O| |TAMS 0x000000046c800000| PB 0x000000046c800000| Untracked | 0 -| 204|0x000000046d000000, 0x000000046d800000, 0x000000046d800000|100%| O| |TAMS 0x000000046d000000| PB 0x000000046d000000| Untracked | 0 -| 205|0x000000046d800000, 0x000000046e000000, 0x000000046e000000|100%| O| |TAMS 0x000000046d800000| PB 0x000000046d800000| Untracked | 0 -| 206|0x000000046e000000, 0x000000046e800000, 0x000000046e800000|100%| O| |TAMS 0x000000046e000000| PB 0x000000046e000000| Untracked | 0 -| 207|0x000000046e800000, 0x000000046f000000, 0x000000046f000000|100%| O| |TAMS 0x000000046e800000| PB 0x000000046e800000| Untracked | 0 -| 208|0x000000046f000000, 0x000000046f800000, 0x000000046f800000|100%| O| |TAMS 0x000000046f000000| PB 0x000000046f000000| Untracked | 0 -| 209|0x000000046f800000, 0x0000000470000000, 0x0000000470000000|100%| O| |TAMS 0x000000046f800000| PB 0x000000046f800000| Untracked | 0 -| 210|0x0000000470000000, 0x0000000470800000, 0x0000000470800000|100%| O| |TAMS 0x0000000470000000| PB 0x0000000470000000| Untracked | 0 -| 211|0x0000000470800000, 0x0000000471000000, 0x0000000471000000|100%| O| |TAMS 0x0000000470800000| PB 0x0000000470800000| Untracked | 0 -| 212|0x0000000471000000, 0x0000000471800000, 0x0000000471800000|100%| O| |TAMS 0x0000000471000000| PB 0x0000000471000000| Untracked | 0 -| 213|0x0000000471800000, 0x0000000472000000, 0x0000000472000000|100%| O| |TAMS 0x0000000471800000| PB 0x0000000471800000| Untracked | 0 -| 214|0x0000000472000000, 0x0000000472800000, 0x0000000472800000|100%| O| |TAMS 0x0000000472000000| PB 0x0000000472000000| Untracked | 0 -| 215|0x0000000472800000, 0x0000000473000000, 0x0000000473000000|100%| O| |TAMS 0x0000000472800000| PB 0x0000000472800000| Untracked | 0 -| 216|0x0000000473000000, 0x0000000473800000, 0x0000000473800000|100%| O| |TAMS 0x0000000473000000| PB 0x0000000473000000| Untracked | 0 -| 217|0x0000000473800000, 0x0000000474000000, 0x0000000474000000|100%| O| |TAMS 0x0000000473800000| PB 0x0000000473800000| Untracked | 0 -| 218|0x0000000474000000, 0x0000000474800000, 0x0000000474800000|100%| O| |TAMS 0x0000000474000000| PB 0x0000000474000000| Untracked | 0 -| 219|0x0000000474800000, 0x0000000475000000, 0x0000000475000000|100%| O| |TAMS 0x0000000474800000| PB 0x0000000474800000| Untracked | 0 -| 220|0x0000000475000000, 0x0000000475800000, 0x0000000475800000|100%| O| |TAMS 0x0000000475000000| PB 0x0000000475000000| Untracked | 0 -| 221|0x0000000475800000, 0x0000000476000000, 0x0000000476000000|100%| O| |TAMS 0x0000000475800000| PB 0x0000000475800000| Untracked | 0 -| 222|0x0000000476000000, 0x0000000476800000, 0x0000000476800000|100%| O| |TAMS 0x0000000476000000| PB 0x0000000476000000| Untracked | 0 -| 223|0x0000000476800000, 0x0000000477000000, 0x0000000477000000|100%| O| |TAMS 0x0000000476800000| PB 0x0000000476800000| Untracked | 0 -| 224|0x0000000477000000, 0x0000000477800000, 0x0000000477800000|100%| O| |TAMS 0x0000000477000000| PB 0x0000000477000000| Untracked | 0 -| 225|0x0000000477800000, 0x0000000478000000, 0x0000000478000000|100%| O| |TAMS 0x0000000477800000| PB 0x0000000477800000| Untracked | 0 -| 226|0x0000000478000000, 0x0000000478800000, 0x0000000478800000|100%| O| |TAMS 0x0000000478000000| PB 0x0000000478000000| Untracked | 0 -| 227|0x0000000478800000, 0x0000000479000000, 0x0000000479000000|100%| O| |TAMS 0x0000000478800000| PB 0x0000000478800000| Untracked | 0 -| 228|0x0000000479000000, 0x0000000479800000, 0x0000000479800000|100%| O| |TAMS 0x0000000479000000| PB 0x0000000479000000| Untracked | 0 -| 229|0x0000000479800000, 0x000000047a000000, 0x000000047a000000|100%| O| |TAMS 0x0000000479800000| PB 0x0000000479800000| Untracked | 0 -| 230|0x000000047a000000, 0x000000047a800000, 0x000000047a800000|100%| O| |TAMS 0x000000047a000000| PB 0x000000047a000000| Untracked | 0 -| 231|0x000000047a800000, 0x000000047b000000, 0x000000047b000000|100%| O| |TAMS 0x000000047a800000| PB 0x000000047a800000| Untracked | 0 -| 232|0x000000047b000000, 0x000000047b800000, 0x000000047b800000|100%| O| |TAMS 0x000000047b000000| PB 0x000000047b000000| Untracked | 0 -| 233|0x000000047b800000, 0x000000047c000000, 0x000000047c000000|100%| O| |TAMS 0x000000047b800000| PB 0x000000047b800000| Untracked | 0 -| 234|0x000000047c000000, 0x000000047c800000, 0x000000047c800000|100%| O| |TAMS 0x000000047c000000| PB 0x000000047c000000| Untracked | 0 -| 235|0x000000047c800000, 0x000000047d000000, 0x000000047d000000|100%| O| |TAMS 0x000000047c800000| PB 0x000000047c800000| Untracked | 0 -| 236|0x000000047d000000, 0x000000047d800000, 0x000000047d800000|100%| O| |TAMS 0x000000047d000000| PB 0x000000047d000000| Untracked | 0 -| 237|0x000000047d800000, 0x000000047e000000, 0x000000047e000000|100%| O| |TAMS 0x000000047d800000| PB 0x000000047d800000| Untracked | 0 -| 238|0x000000047e000000, 0x000000047e800000, 0x000000047e800000|100%| O| |TAMS 0x000000047e000000| PB 0x000000047e000000| Untracked | 0 -| 239|0x000000047e800000, 0x000000047f000000, 0x000000047f000000|100%| O| |TAMS 0x000000047e800000| PB 0x000000047e800000| Untracked | 0 -| 240|0x000000047f000000, 0x000000047f800000, 0x000000047f800000|100%| O| |TAMS 0x000000047f000000| PB 0x000000047f000000| Untracked | 0 -| 241|0x000000047f800000, 0x0000000480000000, 0x0000000480000000|100%| O| |TAMS 0x000000047f800000| PB 0x000000047f800000| Untracked | 0 -| 242|0x0000000480000000, 0x0000000480800000, 0x0000000480800000|100%| O| |TAMS 0x0000000480000000| PB 0x0000000480000000| Untracked | 0 -| 243|0x0000000480800000, 0x0000000481000000, 0x0000000481000000|100%| O| |TAMS 0x0000000480800000| PB 0x0000000480800000| Untracked | 0 -| 244|0x0000000481000000, 0x0000000481800000, 0x0000000481800000|100%| O| |TAMS 0x0000000481000000| PB 0x0000000481000000| Untracked | 0 -| 245|0x0000000481800000, 0x0000000482000000, 0x0000000482000000|100%| O| |TAMS 0x0000000481800000| PB 0x0000000481800000| Untracked | 0 -| 246|0x0000000482000000, 0x0000000482800000, 0x0000000482800000|100%| O| |TAMS 0x0000000482000000| PB 0x0000000482000000| Untracked | 0 -| 247|0x0000000482800000, 0x0000000483000000, 0x0000000483000000|100%| O| |TAMS 0x0000000482800000| PB 0x0000000482800000| Untracked | 0 -| 248|0x0000000483000000, 0x0000000483800000, 0x0000000483800000|100%| O| |TAMS 0x0000000483000000| PB 0x0000000483000000| Untracked | 0 -| 249|0x0000000483800000, 0x0000000484000000, 0x0000000484000000|100%| O| |TAMS 0x0000000483800000| PB 0x0000000483800000| Untracked | 0 -| 250|0x0000000484000000, 0x0000000484800000, 0x0000000484800000|100%| O| |TAMS 0x0000000484000000| PB 0x0000000484000000| Untracked | 0 -| 251|0x0000000484800000, 0x0000000485000000, 0x0000000485000000|100%| O| |TAMS 0x0000000484800000| PB 0x0000000484800000| Untracked | 0 -| 252|0x0000000485000000, 0x0000000485800000, 0x0000000485800000|100%| O| |TAMS 0x0000000485000000| PB 0x0000000485000000| Untracked | 0 -| 253|0x0000000485800000, 0x0000000486000000, 0x0000000486000000|100%| O| |TAMS 0x0000000485800000| PB 0x0000000485800000| Untracked | 0 -| 254|0x0000000486000000, 0x0000000486800000, 0x0000000486800000|100%| O| |TAMS 0x0000000486000000| PB 0x0000000486000000| Untracked | 0 -| 255|0x0000000486800000, 0x0000000487000000, 0x0000000487000000|100%| O| |TAMS 0x0000000486800000| PB 0x0000000486800000| Untracked | 0 -| 256|0x0000000487000000, 0x0000000487800000, 0x0000000487800000|100%| O| |TAMS 0x0000000487000000| PB 0x0000000487000000| Untracked | 0 -| 257|0x0000000487800000, 0x0000000488000000, 0x0000000488000000|100%| O| |TAMS 0x0000000487800000| PB 0x0000000487800000| Untracked | 0 -| 258|0x0000000488000000, 0x0000000488800000, 0x0000000488800000|100%| O| |TAMS 0x0000000488000000| PB 0x0000000488000000| Untracked | 0 -| 259|0x0000000488800000, 0x0000000489000000, 0x0000000489000000|100%| O| |TAMS 0x0000000488800000| PB 0x0000000488800000| Untracked | 0 -| 260|0x0000000489000000, 0x0000000489800000, 0x0000000489800000|100%| O| |TAMS 0x0000000489000000| PB 0x0000000489000000| Untracked | 0 -| 261|0x0000000489800000, 0x000000048a000000, 0x000000048a000000|100%| O| |TAMS 0x0000000489800000| PB 0x0000000489800000| Untracked | 0 -| 262|0x000000048a000000, 0x000000048a800000, 0x000000048a800000|100%| O| |TAMS 0x000000048a000000| PB 0x000000048a000000| Untracked | 0 -| 263|0x000000048a800000, 0x000000048b000000, 0x000000048b000000|100%| O| |TAMS 0x000000048a800000| PB 0x000000048a800000| Untracked | 0 -| 264|0x000000048b000000, 0x000000048b800000, 0x000000048b800000|100%| O| |TAMS 0x000000048b000000| PB 0x000000048b000000| Untracked | 0 -| 265|0x000000048b800000, 0x000000048c000000, 0x000000048c000000|100%| O| |TAMS 0x000000048b800000| PB 0x000000048b800000| Untracked | 0 -| 266|0x000000048c000000, 0x000000048c800000, 0x000000048c800000|100%| O| |TAMS 0x000000048c000000| PB 0x000000048c000000| Untracked | 0 -| 267|0x000000048c800000, 0x000000048d000000, 0x000000048d000000|100%| O| |TAMS 0x000000048c800000| PB 0x000000048c800000| Untracked | 0 -| 268|0x000000048d000000, 0x000000048d800000, 0x000000048d800000|100%| O| |TAMS 0x000000048d000000| PB 0x000000048d000000| Untracked | 0 -| 269|0x000000048d800000, 0x000000048e000000, 0x000000048e000000|100%| O| |TAMS 0x000000048d800000| PB 0x000000048d800000| Untracked | 0 -| 270|0x000000048e000000, 0x000000048e800000, 0x000000048e800000|100%| O| |TAMS 0x000000048e000000| PB 0x000000048e000000| Untracked | 0 -| 271|0x000000048e800000, 0x000000048f000000, 0x000000048f000000|100%| O| |TAMS 0x000000048e800000| PB 0x000000048e800000| Untracked | 0 -| 272|0x000000048f000000, 0x000000048f800000, 0x000000048f800000|100%| O| |TAMS 0x000000048f000000| PB 0x000000048f000000| Untracked | 0 -| 273|0x000000048f800000, 0x0000000490000000, 0x0000000490000000|100%| O| |TAMS 0x000000048f800000| PB 0x000000048f800000| Untracked | 0 -| 274|0x0000000490000000, 0x0000000490800000, 0x0000000490800000|100%| O| |TAMS 0x0000000490000000| PB 0x0000000490000000| Untracked | 0 -| 275|0x0000000490800000, 0x0000000491000000, 0x0000000491000000|100%| O| |TAMS 0x0000000490800000| PB 0x0000000490800000| Untracked | 0 -| 276|0x0000000491000000, 0x0000000491800000, 0x0000000491800000|100%| O| |TAMS 0x0000000491000000| PB 0x0000000491000000| Untracked | 0 -| 277|0x0000000491800000, 0x0000000492000000, 0x0000000492000000|100%| O| |TAMS 0x0000000491800000| PB 0x0000000491800000| Untracked | 0 -| 278|0x0000000492000000, 0x0000000492800000, 0x0000000492800000|100%| O| |TAMS 0x0000000492000000| PB 0x0000000492000000| Untracked | 0 -| 279|0x0000000492800000, 0x0000000493000000, 0x0000000493000000|100%| O| |TAMS 0x0000000492800000| PB 0x0000000492800000| Untracked | 0 -| 280|0x0000000493000000, 0x0000000493800000, 0x0000000493800000|100%| O| |TAMS 0x0000000493000000| PB 0x0000000493000000| Untracked | 0 -| 281|0x0000000493800000, 0x0000000494000000, 0x0000000494000000|100%| O| |TAMS 0x0000000493800000| PB 0x0000000493800000| Untracked | 0 -| 282|0x0000000494000000, 0x0000000494800000, 0x0000000494800000|100%| O| |TAMS 0x0000000494000000| PB 0x0000000494000000| Untracked | 0 -| 283|0x0000000494800000, 0x0000000495000000, 0x0000000495000000|100%| O| |TAMS 0x0000000494800000| PB 0x0000000494800000| Untracked | 0 -| 284|0x0000000495000000, 0x0000000495800000, 0x0000000495800000|100%| O| |TAMS 0x0000000495000000| PB 0x0000000495000000| Untracked | 0 -| 285|0x0000000495800000, 0x0000000496000000, 0x0000000496000000|100%| O| |TAMS 0x0000000495800000| PB 0x0000000495800000| Untracked | 0 -| 286|0x0000000496000000, 0x0000000496800000, 0x0000000496800000|100%| O| |TAMS 0x0000000496000000| PB 0x0000000496000000| Untracked | 0 -| 287|0x0000000496800000, 0x0000000497000000, 0x0000000497000000|100%| O| |TAMS 0x0000000496800000| PB 0x0000000496800000| Untracked | 0 -| 288|0x0000000497000000, 0x0000000497800000, 0x0000000497800000|100%| O| |TAMS 0x0000000497000000| PB 0x0000000497000000| Untracked | 0 -| 289|0x0000000497800000, 0x0000000498000000, 0x0000000498000000|100%| O| |TAMS 0x0000000497800000| PB 0x0000000497800000| Untracked | 0 -| 290|0x0000000498000000, 0x0000000498800000, 0x0000000498800000|100%| O| |TAMS 0x0000000498000000| PB 0x0000000498000000| Untracked | 0 -| 291|0x0000000498800000, 0x0000000499000000, 0x0000000499000000|100%| O| |TAMS 0x0000000498800000| PB 0x0000000498800000| Untracked | 0 -| 292|0x0000000499000000, 0x0000000499800000, 0x0000000499800000|100%| O| |TAMS 0x0000000499000000| PB 0x0000000499000000| Untracked | 0 -| 293|0x0000000499800000, 0x000000049a000000, 0x000000049a000000|100%| O| |TAMS 0x0000000499800000| PB 0x0000000499800000| Untracked | 0 -| 294|0x000000049a000000, 0x000000049a800000, 0x000000049a800000|100%| O| |TAMS 0x000000049a000000| PB 0x000000049a000000| Untracked | 0 -| 295|0x000000049a800000, 0x000000049b000000, 0x000000049b000000|100%| O| |TAMS 0x000000049a800000| PB 0x000000049a800000| Untracked | 0 -| 296|0x000000049b000000, 0x000000049b800000, 0x000000049b800000|100%| O| |TAMS 0x000000049b000000| PB 0x000000049b000000| Untracked | 0 -| 297|0x000000049b800000, 0x000000049c000000, 0x000000049c000000|100%| O| |TAMS 0x000000049b800000| PB 0x000000049b800000| Untracked | 0 -| 298|0x000000049c000000, 0x000000049c800000, 0x000000049c800000|100%| O| |TAMS 0x000000049c000000| PB 0x000000049c000000| Untracked | 0 -| 299|0x000000049c800000, 0x000000049d000000, 0x000000049d000000|100%| O| |TAMS 0x000000049c800000| PB 0x000000049c800000| Untracked | 0 -| 300|0x000000049d000000, 0x000000049d800000, 0x000000049d800000|100%| O| |TAMS 0x000000049d000000| PB 0x000000049d000000| Untracked | 0 -| 301|0x000000049d800000, 0x000000049e000000, 0x000000049e000000|100%| O| |TAMS 0x000000049d800000| PB 0x000000049d800000| Untracked | 0 -| 302|0x000000049e000000, 0x000000049e800000, 0x000000049e800000|100%| O| |TAMS 0x000000049e000000| PB 0x000000049e000000| Untracked | 0 -| 303|0x000000049e800000, 0x000000049f000000, 0x000000049f000000|100%| O| |TAMS 0x000000049e800000| PB 0x000000049e800000| Untracked | 0 -| 304|0x000000049f000000, 0x000000049f800000, 0x000000049f800000|100%| O| |TAMS 0x000000049f000000| PB 0x000000049f000000| Untracked | 0 -| 305|0x000000049f800000, 0x00000004a0000000, 0x00000004a0000000|100%| O| |TAMS 0x000000049f800000| PB 0x000000049f800000| Untracked | 0 -| 306|0x00000004a0000000, 0x00000004a0800000, 0x00000004a0800000|100%| O| |TAMS 0x00000004a0000000| PB 0x00000004a0000000| Untracked | 0 -| 307|0x00000004a0800000, 0x00000004a1000000, 0x00000004a1000000|100%| O| |TAMS 0x00000004a0800000| PB 0x00000004a0800000| Untracked | 0 -| 308|0x00000004a1000000, 0x00000004a1800000, 0x00000004a1800000|100%| O| |TAMS 0x00000004a1000000| PB 0x00000004a1000000| Untracked | 0 -| 309|0x00000004a1800000, 0x00000004a2000000, 0x00000004a2000000|100%| O| |TAMS 0x00000004a1800000| PB 0x00000004a1800000| Untracked | 0 -| 310|0x00000004a2000000, 0x00000004a2800000, 0x00000004a2800000|100%| O| |TAMS 0x00000004a2000000| PB 0x00000004a2000000| Untracked | 0 -| 311|0x00000004a2800000, 0x00000004a3000000, 0x00000004a3000000|100%| O| |TAMS 0x00000004a2800000| PB 0x00000004a2800000| Untracked | 0 -| 312|0x00000004a3000000, 0x00000004a3800000, 0x00000004a3800000|100%| O| |TAMS 0x00000004a3000000| PB 0x00000004a3000000| Untracked | 0 -| 313|0x00000004a3800000, 0x00000004a4000000, 0x00000004a4000000|100%| O| |TAMS 0x00000004a3800000| PB 0x00000004a3800000| Untracked | 0 -| 314|0x00000004a4000000, 0x00000004a4800000, 0x00000004a4800000|100%| O| |TAMS 0x00000004a4000000| PB 0x00000004a4000000| Untracked | 0 -| 315|0x00000004a4800000, 0x00000004a5000000, 0x00000004a5000000|100%| O| |TAMS 0x00000004a4800000| PB 0x00000004a4800000| Untracked | 0 -| 316|0x00000004a5000000, 0x00000004a5800000, 0x00000004a5800000|100%| O| |TAMS 0x00000004a5000000| PB 0x00000004a5000000| Untracked | 0 -| 317|0x00000004a5800000, 0x00000004a6000000, 0x00000004a6000000|100%| O| |TAMS 0x00000004a5800000| PB 0x00000004a5800000| Untracked | 0 -| 318|0x00000004a6000000, 0x00000004a6800000, 0x00000004a6800000|100%| O| |TAMS 0x00000004a6000000| PB 0x00000004a6000000| Untracked | 0 -| 319|0x00000004a6800000, 0x00000004a7000000, 0x00000004a7000000|100%| O| |TAMS 0x00000004a6800000| PB 0x00000004a6800000| Untracked | 0 -| 320|0x00000004a7000000, 0x00000004a7800000, 0x00000004a7800000|100%| O| |TAMS 0x00000004a7000000| PB 0x00000004a7000000| Untracked | 0 -| 321|0x00000004a7800000, 0x00000004a8000000, 0x00000004a8000000|100%| O| |TAMS 0x00000004a7800000| PB 0x00000004a7800000| Untracked | 0 -| 322|0x00000004a8000000, 0x00000004a8800000, 0x00000004a8800000|100%| O| |TAMS 0x00000004a8000000| PB 0x00000004a8000000| Untracked | 0 -| 323|0x00000004a8800000, 0x00000004a9000000, 0x00000004a9000000|100%| O| |TAMS 0x00000004a8800000| PB 0x00000004a8800000| Untracked | 0 -| 324|0x00000004a9000000, 0x00000004a9800000, 0x00000004a9800000|100%| O| |TAMS 0x00000004a9000000| PB 0x00000004a9000000| Untracked | 0 -| 325|0x00000004a9800000, 0x00000004aa000000, 0x00000004aa000000|100%| O| |TAMS 0x00000004a9800000| PB 0x00000004a9800000| Untracked | 0 -| 326|0x00000004aa000000, 0x00000004aa800000, 0x00000004aa800000|100%| O| |TAMS 0x00000004aa000000| PB 0x00000004aa000000| Untracked | 0 -| 327|0x00000004aa800000, 0x00000004ab000000, 0x00000004ab000000|100%| O| |TAMS 0x00000004aa800000| PB 0x00000004aa800000| Untracked | 0 -| 328|0x00000004ab000000, 0x00000004ab800000, 0x00000004ab800000|100%| O| |TAMS 0x00000004ab000000| PB 0x00000004ab000000| Untracked | 0 -| 329|0x00000004ab800000, 0x00000004ac000000, 0x00000004ac000000|100%| O| |TAMS 0x00000004ab800000| PB 0x00000004ab800000| Untracked | 0 -| 330|0x00000004ac000000, 0x00000004ac800000, 0x00000004ac800000|100%| O| |TAMS 0x00000004ac000000| PB 0x00000004ac000000| Untracked | 0 -| 331|0x00000004ac800000, 0x00000004ad000000, 0x00000004ad000000|100%| O| |TAMS 0x00000004ac800000| PB 0x00000004ac800000| Untracked | 0 -| 332|0x00000004ad000000, 0x00000004ad800000, 0x00000004ad800000|100%| O| |TAMS 0x00000004ad000000| PB 0x00000004ad000000| Untracked | 0 -| 333|0x00000004ad800000, 0x00000004ae000000, 0x00000004ae000000|100%| O| |TAMS 0x00000004ad800000| PB 0x00000004ad800000| Untracked | 0 -| 334|0x00000004ae000000, 0x00000004ae800000, 0x00000004ae800000|100%| O| |TAMS 0x00000004ae000000| PB 0x00000004ae000000| Untracked | 0 -| 335|0x00000004ae800000, 0x00000004af000000, 0x00000004af000000|100%| O| |TAMS 0x00000004ae800000| PB 0x00000004ae800000| Untracked | 0 -| 336|0x00000004af000000, 0x00000004af800000, 0x00000004af800000|100%| O| |TAMS 0x00000004af000000| PB 0x00000004af000000| Untracked | 0 -| 337|0x00000004af800000, 0x00000004b0000000, 0x00000004b0000000|100%| O| |TAMS 0x00000004af800000| PB 0x00000004af800000| Untracked | 0 -| 338|0x00000004b0000000, 0x00000004b0800000, 0x00000004b0800000|100%| O| |TAMS 0x00000004b0000000| PB 0x00000004b0000000| Untracked | 0 -| 339|0x00000004b0800000, 0x00000004b1000000, 0x00000004b1000000|100%| O| |TAMS 0x00000004b0800000| PB 0x00000004b0800000| Untracked | 0 -| 340|0x00000004b1000000, 0x00000004b1800000, 0x00000004b1800000|100%| O| |TAMS 0x00000004b1000000| PB 0x00000004b1000000| Untracked | 0 -| 341|0x00000004b1800000, 0x00000004b2000000, 0x00000004b2000000|100%| O| |TAMS 0x00000004b1800000| PB 0x00000004b1800000| Untracked | 0 -| 342|0x00000004b2000000, 0x00000004b2800000, 0x00000004b2800000|100%| O| |TAMS 0x00000004b2000000| PB 0x00000004b2000000| Untracked | 0 -| 343|0x00000004b2800000, 0x00000004b3000000, 0x00000004b3000000|100%| O| |TAMS 0x00000004b2800000| PB 0x00000004b2800000| Untracked | 0 -| 344|0x00000004b3000000, 0x00000004b3800000, 0x00000004b3800000|100%| O| |TAMS 0x00000004b3000000| PB 0x00000004b3000000| Untracked | 0 -| 345|0x00000004b3800000, 0x00000004b4000000, 0x00000004b4000000|100%| O| |TAMS 0x00000004b3800000| PB 0x00000004b3800000| Untracked | 0 -| 346|0x00000004b4000000, 0x00000004b4800000, 0x00000004b4800000|100%| O| |TAMS 0x00000004b4000000| PB 0x00000004b4000000| Untracked | 0 -| 347|0x00000004b4800000, 0x00000004b5000000, 0x00000004b5000000|100%| O| |TAMS 0x00000004b4800000| PB 0x00000004b4800000| Untracked | 0 -| 348|0x00000004b5000000, 0x00000004b5800000, 0x00000004b5800000|100%| O| |TAMS 0x00000004b5000000| PB 0x00000004b5000000| Untracked | 0 -| 349|0x00000004b5800000, 0x00000004b6000000, 0x00000004b6000000|100%| O| |TAMS 0x00000004b5800000| PB 0x00000004b5800000| Untracked | 0 -| 350|0x00000004b6000000, 0x00000004b6800000, 0x00000004b6800000|100%| O| |TAMS 0x00000004b6000000| PB 0x00000004b6000000| Untracked | 0 -| 351|0x00000004b6800000, 0x00000004b7000000, 0x00000004b7000000|100%| O| |TAMS 0x00000004b6800000| PB 0x00000004b6800000| Untracked | 0 -| 352|0x00000004b7000000, 0x00000004b7800000, 0x00000004b7800000|100%| O| |TAMS 0x00000004b7000000| PB 0x00000004b7000000| Untracked | 0 -| 353|0x00000004b7800000, 0x00000004b8000000, 0x00000004b8000000|100%| O| |TAMS 0x00000004b7800000| PB 0x00000004b7800000| Untracked | 0 -| 354|0x00000004b8000000, 0x00000004b8800000, 0x00000004b8800000|100%| O| |TAMS 0x00000004b8000000| PB 0x00000004b8000000| Untracked | 0 -| 355|0x00000004b8800000, 0x00000004b9000000, 0x00000004b9000000|100%| O| |TAMS 0x00000004b8800000| PB 0x00000004b8800000| Untracked | 0 -| 356|0x00000004b9000000, 0x00000004b9800000, 0x00000004b9800000|100%| O| |TAMS 0x00000004b9000000| PB 0x00000004b9000000| Untracked | 0 -| 357|0x00000004b9800000, 0x00000004ba000000, 0x00000004ba000000|100%| O| |TAMS 0x00000004b9800000| PB 0x00000004b9800000| Untracked | 0 -| 358|0x00000004ba000000, 0x00000004ba800000, 0x00000004ba800000|100%| O| |TAMS 0x00000004ba000000| PB 0x00000004ba000000| Untracked | 0 -| 359|0x00000004ba800000, 0x00000004bb000000, 0x00000004bb000000|100%| O| |TAMS 0x00000004ba800000| PB 0x00000004ba800000| Untracked | 0 -| 360|0x00000004bb000000, 0x00000004bb800000, 0x00000004bb800000|100%| O| |TAMS 0x00000004bb000000| PB 0x00000004bb000000| Untracked | 0 -| 361|0x00000004bb800000, 0x00000004bc000000, 0x00000004bc000000|100%| O| |TAMS 0x00000004bb800000| PB 0x00000004bb800000| Untracked | 0 -| 362|0x00000004bc000000, 0x00000004bc800000, 0x00000004bc800000|100%| O| |TAMS 0x00000004bc000000| PB 0x00000004bc000000| Untracked | 0 -| 363|0x00000004bc800000, 0x00000004bd000000, 0x00000004bd000000|100%| O| |TAMS 0x00000004bc800000| PB 0x00000004bc800000| Untracked | 0 -| 364|0x00000004bd000000, 0x00000004bd800000, 0x00000004bd800000|100%| O| |TAMS 0x00000004bd000000| PB 0x00000004bd000000| Untracked | 0 -| 365|0x00000004bd800000, 0x00000004be000000, 0x00000004be000000|100%| O| |TAMS 0x00000004bd800000| PB 0x00000004bd800000| Untracked | 0 -| 366|0x00000004be000000, 0x00000004be800000, 0x00000004be800000|100%| O| |TAMS 0x00000004be000000| PB 0x00000004be000000| Untracked | 0 -| 367|0x00000004be800000, 0x00000004bf000000, 0x00000004bf000000|100%| O| |TAMS 0x00000004be800000| PB 0x00000004be800000| Untracked | 0 -| 368|0x00000004bf000000, 0x00000004bf800000, 0x00000004bf800000|100%| O| |TAMS 0x00000004bf000000| PB 0x00000004bf000000| Untracked | 0 -| 369|0x00000004bf800000, 0x00000004c0000000, 0x00000004c0000000|100%| O| |TAMS 0x00000004bf800000| PB 0x00000004bf800000| Untracked | 0 -| 370|0x00000004c0000000, 0x00000004c0800000, 0x00000004c0800000|100%| O| |TAMS 0x00000004c0000000| PB 0x00000004c0000000| Untracked | 0 -| 371|0x00000004c0800000, 0x00000004c1000000, 0x00000004c1000000|100%| O| |TAMS 0x00000004c0800000| PB 0x00000004c0800000| Untracked | 0 -| 372|0x00000004c1000000, 0x00000004c1800000, 0x00000004c1800000|100%| O| |TAMS 0x00000004c1000000| PB 0x00000004c1000000| Untracked | 0 -| 373|0x00000004c1800000, 0x00000004c2000000, 0x00000004c2000000|100%| O| |TAMS 0x00000004c1800000| PB 0x00000004c1800000| Untracked | 0 -| 374|0x00000004c2000000, 0x00000004c2800000, 0x00000004c2800000|100%| O| |TAMS 0x00000004c2000000| PB 0x00000004c2000000| Untracked | 0 -| 375|0x00000004c2800000, 0x00000004c3000000, 0x00000004c3000000|100%| O| |TAMS 0x00000004c2800000| PB 0x00000004c2800000| Untracked | 0 -| 376|0x00000004c3000000, 0x00000004c3800000, 0x00000004c3800000|100%| O| |TAMS 0x00000004c3000000| PB 0x00000004c3000000| Untracked | 0 -| 377|0x00000004c3800000, 0x00000004c4000000, 0x00000004c4000000|100%| O| |TAMS 0x00000004c3800000| PB 0x00000004c3800000| Untracked | 0 -| 378|0x00000004c4000000, 0x00000004c4800000, 0x00000004c4800000|100%| O| |TAMS 0x00000004c4000000| PB 0x00000004c4000000| Untracked | 0 -| 379|0x00000004c4800000, 0x00000004c5000000, 0x00000004c5000000|100%| O| |TAMS 0x00000004c4800000| PB 0x00000004c4800000| Untracked | 0 -| 380|0x00000004c5000000, 0x00000004c5800000, 0x00000004c5800000|100%| O| |TAMS 0x00000004c5000000| PB 0x00000004c5000000| Untracked | 0 -| 381|0x00000004c5800000, 0x00000004c6000000, 0x00000004c6000000|100%| O| |TAMS 0x00000004c5800000| PB 0x00000004c5800000| Untracked | 0 -| 382|0x00000004c6000000, 0x00000004c6800000, 0x00000004c6800000|100%| O| |TAMS 0x00000004c6000000| PB 0x00000004c6000000| Untracked | 0 -| 383|0x00000004c6800000, 0x00000004c7000000, 0x00000004c7000000|100%| O| |TAMS 0x00000004c6800000| PB 0x00000004c6800000| Untracked | 0 -| 384|0x00000004c7000000, 0x00000004c7800000, 0x00000004c7800000|100%| O| |TAMS 0x00000004c7000000| PB 0x00000004c7000000| Untracked | 0 -| 385|0x00000004c7800000, 0x00000004c8000000, 0x00000004c8000000|100%| O| |TAMS 0x00000004c7800000| PB 0x00000004c7800000| Untracked | 0 -| 386|0x00000004c8000000, 0x00000004c8800000, 0x00000004c8800000|100%| O| |TAMS 0x00000004c8000000| PB 0x00000004c8000000| Untracked | 0 -| 387|0x00000004c8800000, 0x00000004c9000000, 0x00000004c9000000|100%| O| |TAMS 0x00000004c8800000| PB 0x00000004c8800000| Untracked | 0 -| 388|0x00000004c9000000, 0x00000004c9800000, 0x00000004c9800000|100%| O| |TAMS 0x00000004c9000000| PB 0x00000004c9000000| Untracked | 0 -| 389|0x00000004c9800000, 0x00000004ca000000, 0x00000004ca000000|100%| O| |TAMS 0x00000004c9800000| PB 0x00000004c9800000| Untracked | 0 -| 390|0x00000004ca000000, 0x00000004ca800000, 0x00000004ca800000|100%| O| |TAMS 0x00000004ca000000| PB 0x00000004ca000000| Untracked | 0 -| 391|0x00000004ca800000, 0x00000004cb000000, 0x00000004cb000000|100%| O| |TAMS 0x00000004ca800000| PB 0x00000004ca800000| Untracked | 0 -| 392|0x00000004cb000000, 0x00000004cb800000, 0x00000004cb800000|100%| O| |TAMS 0x00000004cb000000| PB 0x00000004cb000000| Untracked | 0 -| 393|0x00000004cb800000, 0x00000004cc000000, 0x00000004cc000000|100%| O| |TAMS 0x00000004cb800000| PB 0x00000004cb800000| Untracked | 0 -| 394|0x00000004cc000000, 0x00000004cc800000, 0x00000004cc800000|100%| O| |TAMS 0x00000004cc000000| PB 0x00000004cc000000| Untracked | 0 -| 395|0x00000004cc800000, 0x00000004cd000000, 0x00000004cd000000|100%| O| |TAMS 0x00000004cc800000| PB 0x00000004cc800000| Untracked | 0 -| 396|0x00000004cd000000, 0x00000004cd800000, 0x00000004cd800000|100%| O| |TAMS 0x00000004cd000000| PB 0x00000004cd000000| Untracked | 0 -| 397|0x00000004cd800000, 0x00000004ce000000, 0x00000004ce000000|100%| O| |TAMS 0x00000004cd800000| PB 0x00000004cd800000| Untracked | 0 -| 398|0x00000004ce000000, 0x00000004ce800000, 0x00000004ce800000|100%| O| |TAMS 0x00000004ce000000| PB 0x00000004ce000000| Untracked | 0 -| 399|0x00000004ce800000, 0x00000004cf000000, 0x00000004cf000000|100%| O| |TAMS 0x00000004ce800000| PB 0x00000004ce800000| Untracked | 0 -| 400|0x00000004cf000000, 0x00000004cf800000, 0x00000004cf800000|100%| O| |TAMS 0x00000004cf000000| PB 0x00000004cf000000| Untracked | 0 -| 401|0x00000004cf800000, 0x00000004d0000000, 0x00000004d0000000|100%| O| |TAMS 0x00000004cf800000| PB 0x00000004cf800000| Untracked | 0 -| 402|0x00000004d0000000, 0x00000004d0800000, 0x00000004d0800000|100%| O| |TAMS 0x00000004d0000000| PB 0x00000004d0000000| Untracked | 0 -| 403|0x00000004d0800000, 0x00000004d1000000, 0x00000004d1000000|100%| O| |TAMS 0x00000004d0800000| PB 0x00000004d0800000| Untracked | 0 -| 404|0x00000004d1000000, 0x00000004d1800000, 0x00000004d1800000|100%| O| |TAMS 0x00000004d1000000| PB 0x00000004d1000000| Untracked | 0 -| 405|0x00000004d1800000, 0x00000004d2000000, 0x00000004d2000000|100%| O| |TAMS 0x00000004d1800000| PB 0x00000004d1800000| Untracked | 0 -| 406|0x00000004d2000000, 0x00000004d2800000, 0x00000004d2800000|100%| O| |TAMS 0x00000004d2000000| PB 0x00000004d2000000| Untracked | 0 -| 407|0x00000004d2800000, 0x00000004d3000000, 0x00000004d3000000|100%| O| |TAMS 0x00000004d2800000| PB 0x00000004d2800000| Untracked | 0 -| 408|0x00000004d3000000, 0x00000004d3800000, 0x00000004d3800000|100%| O| |TAMS 0x00000004d3000000| PB 0x00000004d3000000| Untracked | 0 -| 409|0x00000004d3800000, 0x00000004d4000000, 0x00000004d4000000|100%| O| |TAMS 0x00000004d3800000| PB 0x00000004d3800000| Untracked | 0 -| 410|0x00000004d4000000, 0x00000004d4800000, 0x00000004d4800000|100%| O| |TAMS 0x00000004d4000000| PB 0x00000004d4000000| Untracked | 0 -| 411|0x00000004d4800000, 0x00000004d5000000, 0x00000004d5000000|100%| O| |TAMS 0x00000004d4800000| PB 0x00000004d4800000| Untracked | 0 -| 412|0x00000004d5000000, 0x00000004d5800000, 0x00000004d5800000|100%| O| |TAMS 0x00000004d5000000| PB 0x00000004d5000000| Untracked | 0 -| 413|0x00000004d5800000, 0x00000004d6000000, 0x00000004d6000000|100%| O| |TAMS 0x00000004d5800000| PB 0x00000004d5800000| Untracked | 0 -| 414|0x00000004d6000000, 0x00000004d6800000, 0x00000004d6800000|100%| O| |TAMS 0x00000004d6000000| PB 0x00000004d6000000| Untracked | 0 -| 415|0x00000004d6800000, 0x00000004d7000000, 0x00000004d7000000|100%| O| |TAMS 0x00000004d6800000| PB 0x00000004d6800000| Untracked | 0 -| 416|0x00000004d7000000, 0x00000004d7800000, 0x00000004d7800000|100%| O| |TAMS 0x00000004d7000000| PB 0x00000004d7000000| Untracked | 0 -| 417|0x00000004d7800000, 0x00000004d8000000, 0x00000004d8000000|100%| O| |TAMS 0x00000004d7800000| PB 0x00000004d7800000| Untracked | 0 -| 418|0x00000004d8000000, 0x00000004d8800000, 0x00000004d8800000|100%| O| |TAMS 0x00000004d8000000| PB 0x00000004d8000000| Untracked | 0 -| 419|0x00000004d8800000, 0x00000004d9000000, 0x00000004d9000000|100%| O| |TAMS 0x00000004d8800000| PB 0x00000004d8800000| Untracked | 0 -| 420|0x00000004d9000000, 0x00000004d9800000, 0x00000004d9800000|100%| O| |TAMS 0x00000004d9000000| PB 0x00000004d9000000| Untracked | 0 -| 421|0x00000004d9800000, 0x00000004da000000, 0x00000004da000000|100%| O| |TAMS 0x00000004d9800000| PB 0x00000004d9800000| Untracked | 0 -| 422|0x00000004da000000, 0x00000004da800000, 0x00000004da800000|100%| O| |TAMS 0x00000004da000000| PB 0x00000004da000000| Untracked | 0 -| 423|0x00000004da800000, 0x00000004db000000, 0x00000004db000000|100%| O| |TAMS 0x00000004da800000| PB 0x00000004da800000| Untracked | 0 -| 424|0x00000004db000000, 0x00000004db800000, 0x00000004db800000|100%| O| |TAMS 0x00000004db000000| PB 0x00000004db000000| Untracked | 0 -| 425|0x00000004db800000, 0x00000004dc000000, 0x00000004dc000000|100%| O| |TAMS 0x00000004db800000| PB 0x00000004db800000| Untracked | 0 -| 426|0x00000004dc000000, 0x00000004dc800000, 0x00000004dc800000|100%| O| |TAMS 0x00000004dc000000| PB 0x00000004dc000000| Untracked | 0 -| 427|0x00000004dc800000, 0x00000004dd000000, 0x00000004dd000000|100%| O| |TAMS 0x00000004dc800000| PB 0x00000004dc800000| Untracked | 0 -| 428|0x00000004dd000000, 0x00000004dd800000, 0x00000004dd800000|100%| O| |TAMS 0x00000004dd000000| PB 0x00000004dd000000| Untracked | 0 -| 429|0x00000004dd800000, 0x00000004de000000, 0x00000004de000000|100%| O| |TAMS 0x00000004dd800000| PB 0x00000004dd800000| Untracked | 0 -| 430|0x00000004de000000, 0x00000004de800000, 0x00000004de800000|100%| O| |TAMS 0x00000004de000000| PB 0x00000004de000000| Untracked | 0 -| 431|0x00000004de800000, 0x00000004df000000, 0x00000004df000000|100%| O| |TAMS 0x00000004de800000| PB 0x00000004de800000| Untracked | 0 -| 432|0x00000004df000000, 0x00000004df800000, 0x00000004df800000|100%| O| |TAMS 0x00000004df000000| PB 0x00000004df000000| Untracked | 0 -| 433|0x00000004df800000, 0x00000004e0000000, 0x00000004e0000000|100%| O| |TAMS 0x00000004df800000| PB 0x00000004df800000| Untracked | 0 -| 434|0x00000004e0000000, 0x00000004e0800000, 0x00000004e0800000|100%| O| |TAMS 0x00000004e0000000| PB 0x00000004e0000000| Untracked | 0 -| 435|0x00000004e0800000, 0x00000004e1000000, 0x00000004e1000000|100%| O| |TAMS 0x00000004e0800000| PB 0x00000004e0800000| Untracked | 0 -| 436|0x00000004e1000000, 0x00000004e1800000, 0x00000004e1800000|100%| O| |TAMS 0x00000004e1000000| PB 0x00000004e1000000| Untracked | 0 -| 437|0x00000004e1800000, 0x00000004e2000000, 0x00000004e2000000|100%| O| |TAMS 0x00000004e1800000| PB 0x00000004e1800000| Untracked | 0 -| 438|0x00000004e2000000, 0x00000004e2800000, 0x00000004e2800000|100%| O| |TAMS 0x00000004e2000000| PB 0x00000004e2000000| Untracked | 0 -| 439|0x00000004e2800000, 0x00000004e3000000, 0x00000004e3000000|100%| O| |TAMS 0x00000004e2800000| PB 0x00000004e2800000| Untracked | 0 -| 440|0x00000004e3000000, 0x00000004e3800000, 0x00000004e3800000|100%| O| |TAMS 0x00000004e3000000| PB 0x00000004e3000000| Untracked | 0 -| 441|0x00000004e3800000, 0x00000004e4000000, 0x00000004e4000000|100%| O| |TAMS 0x00000004e3800000| PB 0x00000004e3800000| Untracked | 0 -| 442|0x00000004e4000000, 0x00000004e4800000, 0x00000004e4800000|100%| O| |TAMS 0x00000004e4000000| PB 0x00000004e4000000| Untracked | 0 -| 443|0x00000004e4800000, 0x00000004e5000000, 0x00000004e5000000|100%| O| |TAMS 0x00000004e4800000| PB 0x00000004e4800000| Untracked | 0 -| 444|0x00000004e5000000, 0x00000004e5800000, 0x00000004e5800000|100%| O| |TAMS 0x00000004e5000000| PB 0x00000004e5000000| Untracked | 0 -| 445|0x00000004e5800000, 0x00000004e6000000, 0x00000004e6000000|100%| O| |TAMS 0x00000004e5800000| PB 0x00000004e5800000| Untracked | 0 -| 446|0x00000004e6000000, 0x00000004e6800000, 0x00000004e6800000|100%| O| |TAMS 0x00000004e6000000| PB 0x00000004e6000000| Untracked | 0 -| 447|0x00000004e6800000, 0x00000004e7000000, 0x00000004e7000000|100%| O| |TAMS 0x00000004e6800000| PB 0x00000004e6800000| Untracked | 0 -| 448|0x00000004e7000000, 0x00000004e7800000, 0x00000004e7800000|100%| O| |TAMS 0x00000004e7000000| PB 0x00000004e7000000| Untracked | 0 -| 449|0x00000004e7800000, 0x00000004e8000000, 0x00000004e8000000|100%| O| |TAMS 0x00000004e7800000| PB 0x00000004e7800000| Untracked | 0 -| 450|0x00000004e8000000, 0x00000004e8800000, 0x00000004e8800000|100%| O| |TAMS 0x00000004e8000000| PB 0x00000004e8000000| Untracked | 0 -| 451|0x00000004e8800000, 0x00000004e9000000, 0x00000004e9000000|100%| O| |TAMS 0x00000004e8800000| PB 0x00000004e8800000| Untracked | 0 -| 452|0x00000004e9000000, 0x00000004e9800000, 0x00000004e9800000|100%| O| |TAMS 0x00000004e9000000| PB 0x00000004e9000000| Untracked | 0 -| 453|0x00000004e9800000, 0x00000004ea000000, 0x00000004ea000000|100%| O| |TAMS 0x00000004e9800000| PB 0x00000004e9800000| Untracked | 0 -| 454|0x00000004ea000000, 0x00000004ea800000, 0x00000004ea800000|100%| O| |TAMS 0x00000004ea000000| PB 0x00000004ea000000| Untracked | 0 -| 455|0x00000004ea800000, 0x00000004eb000000, 0x00000004eb000000|100%| O| |TAMS 0x00000004ea800000| PB 0x00000004ea800000| Untracked | 0 -| 456|0x00000004eb000000, 0x00000004eb800000, 0x00000004eb800000|100%| O| |TAMS 0x00000004eb000000| PB 0x00000004eb000000| Untracked | 0 -| 457|0x00000004eb800000, 0x00000004ec000000, 0x00000004ec000000|100%| O| |TAMS 0x00000004eb800000| PB 0x00000004eb800000| Untracked | 0 -| 458|0x00000004ec000000, 0x00000004ec800000, 0x00000004ec800000|100%| O| |TAMS 0x00000004ec000000| PB 0x00000004ec000000| Untracked | 0 -| 459|0x00000004ec800000, 0x00000004ed000000, 0x00000004ed000000|100%| O| |TAMS 0x00000004ec800000| PB 0x00000004ec800000| Untracked | 0 -| 460|0x00000004ed000000, 0x00000004ed800000, 0x00000004ed800000|100%| O| |TAMS 0x00000004ed000000| PB 0x00000004ed000000| Untracked | 0 -| 461|0x00000004ed800000, 0x00000004ee000000, 0x00000004ee000000|100%| O| |TAMS 0x00000004ed800000| PB 0x00000004ed800000| Untracked | 0 -| 462|0x00000004ee000000, 0x00000004ee800000, 0x00000004ee800000|100%| O| |TAMS 0x00000004ee000000| PB 0x00000004ee000000| Untracked | 0 -| 463|0x00000004ee800000, 0x00000004ef000000, 0x00000004ef000000|100%| O| |TAMS 0x00000004ee800000| PB 0x00000004ee800000| Untracked | 0 -| 464|0x00000004ef000000, 0x00000004ef800000, 0x00000004ef800000|100%| O| |TAMS 0x00000004ef000000| PB 0x00000004ef000000| Untracked | 0 -| 465|0x00000004ef800000, 0x00000004f0000000, 0x00000004f0000000|100%| O| |TAMS 0x00000004ef800000| PB 0x00000004ef800000| Untracked | 0 -| 466|0x00000004f0000000, 0x00000004f0800000, 0x00000004f0800000|100%| O| |TAMS 0x00000004f0000000| PB 0x00000004f0000000| Untracked | 0 -| 467|0x00000004f0800000, 0x00000004f1000000, 0x00000004f1000000|100%| O| |TAMS 0x00000004f0800000| PB 0x00000004f0800000| Untracked | 0 -| 468|0x00000004f1000000, 0x00000004f1800000, 0x00000004f1800000|100%| O| |TAMS 0x00000004f1000000| PB 0x00000004f1000000| Untracked | 0 -| 469|0x00000004f1800000, 0x00000004f2000000, 0x00000004f2000000|100%| O| |TAMS 0x00000004f1800000| PB 0x00000004f1800000| Untracked | 0 -| 470|0x00000004f2000000, 0x00000004f2800000, 0x00000004f2800000|100%| O| |TAMS 0x00000004f2000000| PB 0x00000004f2000000| Untracked | 0 -| 471|0x00000004f2800000, 0x00000004f3000000, 0x00000004f3000000|100%| O| |TAMS 0x00000004f2800000| PB 0x00000004f2800000| Untracked | 0 -| 472|0x00000004f3000000, 0x00000004f3800000, 0x00000004f3800000|100%| O| |TAMS 0x00000004f3000000| PB 0x00000004f3000000| Untracked | 0 -| 473|0x00000004f3800000, 0x00000004f4000000, 0x00000004f4000000|100%| O| |TAMS 0x00000004f3800000| PB 0x00000004f3800000| Untracked | 0 -| 474|0x00000004f4000000, 0x00000004f4800000, 0x00000004f4800000|100%| O| |TAMS 0x00000004f4000000| PB 0x00000004f4000000| Untracked | 0 -| 475|0x00000004f4800000, 0x00000004f5000000, 0x00000004f5000000|100%| O| |TAMS 0x00000004f4800000| PB 0x00000004f4800000| Untracked | 0 -| 476|0x00000004f5000000, 0x00000004f5800000, 0x00000004f5800000|100%| O| |TAMS 0x00000004f5000000| PB 0x00000004f5000000| Untracked | 0 -| 477|0x00000004f5800000, 0x00000004f6000000, 0x00000004f6000000|100%| O| |TAMS 0x00000004f5800000| PB 0x00000004f5800000| Untracked | 0 -| 478|0x00000004f6000000, 0x00000004f6800000, 0x00000004f6800000|100%| O| |TAMS 0x00000004f6000000| PB 0x00000004f6000000| Untracked | 0 -| 479|0x00000004f6800000, 0x00000004f7000000, 0x00000004f7000000|100%| O| |TAMS 0x00000004f6800000| PB 0x00000004f6800000| Untracked | 0 -| 480|0x00000004f7000000, 0x00000004f7800000, 0x00000004f7800000|100%| O| |TAMS 0x00000004f7000000| PB 0x00000004f7000000| Untracked | 0 -| 481|0x00000004f7800000, 0x00000004f8000000, 0x00000004f8000000|100%| O| |TAMS 0x00000004f7800000| PB 0x00000004f7800000| Untracked | 0 -| 482|0x00000004f8000000, 0x00000004f8800000, 0x00000004f8800000|100%| O| |TAMS 0x00000004f8000000| PB 0x00000004f8000000| Untracked | 0 -| 483|0x00000004f8800000, 0x00000004f9000000, 0x00000004f9000000|100%| O| |TAMS 0x00000004f8800000| PB 0x00000004f8800000| Untracked | 0 -| 484|0x00000004f9000000, 0x00000004f9800000, 0x00000004f9800000|100%| O| |TAMS 0x00000004f9000000| PB 0x00000004f9000000| Untracked | 0 -| 485|0x00000004f9800000, 0x00000004fa000000, 0x00000004fa000000|100%| O| |TAMS 0x00000004f9800000| PB 0x00000004f9800000| Untracked | 0 -| 486|0x00000004fa000000, 0x00000004fa800000, 0x00000004fa800000|100%| O| |TAMS 0x00000004fa000000| PB 0x00000004fa000000| Untracked | 0 -| 487|0x00000004fa800000, 0x00000004fb000000, 0x00000004fb000000|100%| O| |TAMS 0x00000004fa800000| PB 0x00000004fa800000| Untracked | 0 -| 488|0x00000004fb000000, 0x00000004fb800000, 0x00000004fb800000|100%| O| |TAMS 0x00000004fb000000| PB 0x00000004fb000000| Untracked | 0 -| 489|0x00000004fb800000, 0x00000004fc000000, 0x00000004fc000000|100%| O| |TAMS 0x00000004fb800000| PB 0x00000004fb800000| Untracked | 0 -| 490|0x00000004fc000000, 0x00000004fc800000, 0x00000004fc800000|100%| O| |TAMS 0x00000004fc000000| PB 0x00000004fc000000| Untracked | 0 -| 491|0x00000004fc800000, 0x00000004fd000000, 0x00000004fd000000|100%| O| |TAMS 0x00000004fc800000| PB 0x00000004fc800000| Untracked | 0 -| 492|0x00000004fd000000, 0x00000004fd800000, 0x00000004fd800000|100%| O| |TAMS 0x00000004fd000000| PB 0x00000004fd000000| Untracked | 0 -| 493|0x00000004fd800000, 0x00000004fe000000, 0x00000004fe000000|100%| O| |TAMS 0x00000004fd800000| PB 0x00000004fd800000| Untracked | 0 -| 494|0x00000004fe000000, 0x00000004fe800000, 0x00000004fe800000|100%| O| |TAMS 0x00000004fe000000| PB 0x00000004fe000000| Untracked | 0 -| 495|0x00000004fe800000, 0x00000004ff000000, 0x00000004ff000000|100%| O| |TAMS 0x00000004fe800000| PB 0x00000004fe800000| Untracked | 0 -| 496|0x00000004ff000000, 0x00000004ff800000, 0x00000004ff800000|100%| O| |TAMS 0x00000004ff000000| PB 0x00000004ff000000| Untracked | 0 -| 497|0x00000004ff800000, 0x0000000500000000, 0x0000000500000000|100%| O| |TAMS 0x00000004ff800000| PB 0x00000004ff800000| Untracked | 0 -| 498|0x0000000500000000, 0x0000000500800000, 0x0000000500800000|100%| O| |TAMS 0x0000000500000000| PB 0x0000000500000000| Untracked | 0 -| 499|0x0000000500800000, 0x0000000501000000, 0x0000000501000000|100%| O| |TAMS 0x0000000500800000| PB 0x0000000500800000| Untracked | 0 -| 500|0x0000000501000000, 0x0000000501800000, 0x0000000501800000|100%| O| |TAMS 0x0000000501000000| PB 0x0000000501000000| Untracked | 0 -| 501|0x0000000501800000, 0x0000000502000000, 0x0000000502000000|100%| O| |TAMS 0x0000000501800000| PB 0x0000000501800000| Untracked | 0 -| 502|0x0000000502000000, 0x0000000502800000, 0x0000000502800000|100%| O| |TAMS 0x0000000502000000| PB 0x0000000502000000| Untracked | 0 -| 503|0x0000000502800000, 0x0000000503000000, 0x0000000503000000|100%| O| |TAMS 0x0000000502800000| PB 0x0000000502800000| Untracked | 0 -| 504|0x0000000503000000, 0x0000000503800000, 0x0000000503800000|100%| O| |TAMS 0x0000000503000000| PB 0x0000000503000000| Untracked | 0 -| 505|0x0000000503800000, 0x0000000504000000, 0x0000000504000000|100%| O| |TAMS 0x0000000503800000| PB 0x0000000503800000| Untracked | 0 -| 506|0x0000000504000000, 0x0000000504800000, 0x0000000504800000|100%| O| |TAMS 0x0000000504000000| PB 0x0000000504000000| Untracked | 0 -| 507|0x0000000504800000, 0x0000000505000000, 0x0000000505000000|100%| O| |TAMS 0x0000000504800000| PB 0x0000000504800000| Untracked | 0 -| 508|0x0000000505000000, 0x0000000505800000, 0x0000000505800000|100%| O| |TAMS 0x0000000505000000| PB 0x0000000505000000| Untracked | 0 -| 509|0x0000000505800000, 0x0000000506000000, 0x0000000506000000|100%| O| |TAMS 0x0000000505800000| PB 0x0000000505800000| Untracked | 0 -| 510|0x0000000506000000, 0x0000000506800000, 0x0000000506800000|100%| O| |TAMS 0x0000000506000000| PB 0x0000000506000000| Untracked | 0 -| 511|0x0000000506800000, 0x0000000507000000, 0x0000000507000000|100%| O| |TAMS 0x0000000506800000| PB 0x0000000506800000| Untracked | 0 -| 512|0x0000000507000000, 0x0000000507800000, 0x0000000507800000|100%| O| |TAMS 0x0000000507000000| PB 0x0000000507000000| Untracked | 0 -| 513|0x0000000507800000, 0x0000000508000000, 0x0000000508000000|100%| O| |TAMS 0x0000000507800000| PB 0x0000000507800000| Untracked | 0 -| 514|0x0000000508000000, 0x0000000508800000, 0x0000000508800000|100%| O| |TAMS 0x0000000508000000| PB 0x0000000508000000| Untracked | 0 -| 515|0x0000000508800000, 0x0000000509000000, 0x0000000509000000|100%| O| |TAMS 0x0000000508800000| PB 0x0000000508800000| Untracked | 0 -| 516|0x0000000509000000, 0x0000000509800000, 0x0000000509800000|100%| O| |TAMS 0x0000000509000000| PB 0x0000000509000000| Untracked | 0 -| 517|0x0000000509800000, 0x000000050a000000, 0x000000050a000000|100%| O| |TAMS 0x0000000509800000| PB 0x0000000509800000| Untracked | 0 -| 518|0x000000050a000000, 0x000000050a800000, 0x000000050a800000|100%| O| |TAMS 0x000000050a000000| PB 0x000000050a000000| Untracked | 0 -| 519|0x000000050a800000, 0x000000050b000000, 0x000000050b000000|100%| O| |TAMS 0x000000050a800000| PB 0x000000050a800000| Untracked | 0 -| 520|0x000000050b000000, 0x000000050b800000, 0x000000050b800000|100%| O| |TAMS 0x000000050b000000| PB 0x000000050b000000| Untracked | 0 -| 521|0x000000050b800000, 0x000000050c000000, 0x000000050c000000|100%| O| |TAMS 0x000000050b800000| PB 0x000000050b800000| Untracked | 0 -| 522|0x000000050c000000, 0x000000050c800000, 0x000000050c800000|100%| O| |TAMS 0x000000050c000000| PB 0x000000050c000000| Untracked | 0 -| 523|0x000000050c800000, 0x000000050d000000, 0x000000050d000000|100%| O| |TAMS 0x000000050c800000| PB 0x000000050c800000| Untracked | 0 -| 524|0x000000050d000000, 0x000000050d800000, 0x000000050d800000|100%| O| |TAMS 0x000000050d000000| PB 0x000000050d000000| Untracked | 0 -| 525|0x000000050d800000, 0x000000050e000000, 0x000000050e000000|100%| O| |TAMS 0x000000050d800000| PB 0x000000050d800000| Untracked | 0 -| 526|0x000000050e000000, 0x000000050e800000, 0x000000050e800000|100%| O| |TAMS 0x000000050e000000| PB 0x000000050e000000| Untracked | 0 -| 527|0x000000050e800000, 0x000000050f000000, 0x000000050f000000|100%| O| |TAMS 0x000000050e800000| PB 0x000000050e800000| Untracked | 0 -| 528|0x000000050f000000, 0x000000050f800000, 0x000000050f800000|100%| O| |TAMS 0x000000050f000000| PB 0x000000050f000000| Untracked | 0 -| 529|0x000000050f800000, 0x0000000510000000, 0x0000000510000000|100%| O| |TAMS 0x000000050f800000| PB 0x000000050f800000| Untracked | 0 -| 530|0x0000000510000000, 0x0000000510800000, 0x0000000510800000|100%| O| |TAMS 0x0000000510000000| PB 0x0000000510000000| Untracked | 0 -| 531|0x0000000510800000, 0x0000000511000000, 0x0000000511000000|100%| O| |TAMS 0x0000000510800000| PB 0x0000000510800000| Untracked | 0 -| 532|0x0000000511000000, 0x0000000511800000, 0x0000000511800000|100%| O| |TAMS 0x0000000511000000| PB 0x0000000511000000| Untracked | 0 -| 533|0x0000000511800000, 0x0000000512000000, 0x0000000512000000|100%| O| |TAMS 0x0000000511800000| PB 0x0000000511800000| Untracked | 0 -| 534|0x0000000512000000, 0x0000000512800000, 0x0000000512800000|100%| O| |TAMS 0x0000000512000000| PB 0x0000000512000000| Untracked | 0 -| 535|0x0000000512800000, 0x0000000513000000, 0x0000000513000000|100%| O| |TAMS 0x0000000512800000| PB 0x0000000512800000| Untracked | 0 -| 536|0x0000000513000000, 0x0000000513800000, 0x0000000513800000|100%| O| |TAMS 0x0000000513000000| PB 0x0000000513000000| Untracked | 0 -| 537|0x0000000513800000, 0x0000000514000000, 0x0000000514000000|100%| O| |TAMS 0x0000000513800000| PB 0x0000000513800000| Untracked | 0 -| 538|0x0000000514000000, 0x0000000514800000, 0x0000000514800000|100%| O| |TAMS 0x0000000514000000| PB 0x0000000514000000| Untracked | 0 -| 539|0x0000000514800000, 0x0000000515000000, 0x0000000515000000|100%| O| |TAMS 0x0000000514800000| PB 0x0000000514800000| Untracked | 0 -| 540|0x0000000515000000, 0x0000000515800000, 0x0000000515800000|100%| O| |TAMS 0x0000000515000000| PB 0x0000000515000000| Untracked | 0 -| 541|0x0000000515800000, 0x0000000516000000, 0x0000000516000000|100%| O| |TAMS 0x0000000515800000| PB 0x0000000515800000| Untracked | 0 -| 542|0x0000000516000000, 0x0000000516800000, 0x0000000516800000|100%| O| |TAMS 0x0000000516000000| PB 0x0000000516000000| Untracked | 0 -| 543|0x0000000516800000, 0x0000000517000000, 0x0000000517000000|100%| O| |TAMS 0x0000000516800000| PB 0x0000000516800000| Untracked | 0 -| 544|0x0000000517000000, 0x0000000517800000, 0x0000000517800000|100%| O| |TAMS 0x0000000517000000| PB 0x0000000517000000| Untracked | 0 -| 545|0x0000000517800000, 0x0000000518000000, 0x0000000518000000|100%| O| |TAMS 0x0000000517800000| PB 0x0000000517800000| Untracked | 0 -| 546|0x0000000518000000, 0x0000000518800000, 0x0000000518800000|100%| O| |TAMS 0x0000000518000000| PB 0x0000000518000000| Untracked | 0 -| 547|0x0000000518800000, 0x0000000519000000, 0x0000000519000000|100%| O| |TAMS 0x0000000518800000| PB 0x0000000518800000| Untracked | 0 -| 548|0x0000000519000000, 0x0000000519800000, 0x0000000519800000|100%| O| |TAMS 0x0000000519000000| PB 0x0000000519000000| Untracked | 0 -| 549|0x0000000519800000, 0x000000051a000000, 0x000000051a000000|100%| O| |TAMS 0x0000000519800000| PB 0x0000000519800000| Untracked | 0 -| 550|0x000000051a000000, 0x000000051a800000, 0x000000051a800000|100%| O| |TAMS 0x000000051a000000| PB 0x000000051a000000| Untracked | 0 -| 551|0x000000051a800000, 0x000000051b000000, 0x000000051b000000|100%| O| |TAMS 0x000000051a800000| PB 0x000000051a800000| Untracked | 0 -| 552|0x000000051b000000, 0x000000051b800000, 0x000000051b800000|100%| O| |TAMS 0x000000051b000000| PB 0x000000051b000000| Untracked | 0 -| 553|0x000000051b800000, 0x000000051c000000, 0x000000051c000000|100%| O| |TAMS 0x000000051b800000| PB 0x000000051b800000| Untracked | 0 -| 554|0x000000051c000000, 0x000000051c800000, 0x000000051c800000|100%| O| |TAMS 0x000000051c000000| PB 0x000000051c000000| Untracked | 0 -| 555|0x000000051c800000, 0x000000051d000000, 0x000000051d000000|100%| O| |TAMS 0x000000051c800000| PB 0x000000051c800000| Untracked | 0 -| 556|0x000000051d000000, 0x000000051d800000, 0x000000051d800000|100%| O| |TAMS 0x000000051d000000| PB 0x000000051d000000| Untracked | 0 -| 557|0x000000051d800000, 0x000000051e000000, 0x000000051e000000|100%| O| |TAMS 0x000000051d800000| PB 0x000000051d800000| Untracked | 0 -| 558|0x000000051e000000, 0x000000051e800000, 0x000000051e800000|100%| O| |TAMS 0x000000051e000000| PB 0x000000051e000000| Untracked | 0 -| 559|0x000000051e800000, 0x000000051f000000, 0x000000051f000000|100%| O| |TAMS 0x000000051e800000| PB 0x000000051e800000| Untracked | 0 -| 560|0x000000051f000000, 0x000000051f800000, 0x000000051f800000|100%| O| |TAMS 0x000000051f000000| PB 0x000000051f000000| Untracked | 0 -| 561|0x000000051f800000, 0x0000000520000000, 0x0000000520000000|100%| O| |TAMS 0x000000051f800000| PB 0x000000051f800000| Untracked | 0 -| 562|0x0000000520000000, 0x0000000520800000, 0x0000000520800000|100%| O| |TAMS 0x0000000520000000| PB 0x0000000520000000| Untracked | 0 -| 563|0x0000000520800000, 0x0000000521000000, 0x0000000521000000|100%| O| |TAMS 0x0000000520800000| PB 0x0000000520800000| Untracked | 0 -| 564|0x0000000521000000, 0x0000000521800000, 0x0000000521800000|100%| O| |TAMS 0x0000000521000000| PB 0x0000000521000000| Untracked | 0 -| 565|0x0000000521800000, 0x0000000522000000, 0x0000000522000000|100%| O| |TAMS 0x0000000521800000| PB 0x0000000521800000| Untracked | 0 -| 566|0x0000000522000000, 0x0000000522800000, 0x0000000522800000|100%| O| |TAMS 0x0000000522000000| PB 0x0000000522000000| Untracked | 0 -| 567|0x0000000522800000, 0x0000000523000000, 0x0000000523000000|100%| O| |TAMS 0x0000000522800000| PB 0x0000000522800000| Untracked | 0 -| 568|0x0000000523000000, 0x0000000523800000, 0x0000000523800000|100%| O| |TAMS 0x0000000523000000| PB 0x0000000523000000| Untracked | 0 -| 569|0x0000000523800000, 0x0000000524000000, 0x0000000524000000|100%| O| |TAMS 0x0000000523800000| PB 0x0000000523800000| Untracked | 0 -| 570|0x0000000524000000, 0x0000000524800000, 0x0000000524800000|100%| O| |TAMS 0x0000000524000000| PB 0x0000000524000000| Untracked | 0 -| 571|0x0000000524800000, 0x0000000525000000, 0x0000000525000000|100%| O| |TAMS 0x0000000524800000| PB 0x0000000524800000| Untracked | 0 -| 572|0x0000000525000000, 0x0000000525800000, 0x0000000525800000|100%| O| |TAMS 0x0000000525000000| PB 0x0000000525000000| Untracked | 0 -| 573|0x0000000525800000, 0x0000000526000000, 0x0000000526000000|100%| O| |TAMS 0x0000000525800000| PB 0x0000000525800000| Untracked | 0 -| 574|0x0000000526000000, 0x0000000526800000, 0x0000000526800000|100%| O| |TAMS 0x0000000526000000| PB 0x0000000526000000| Untracked | 0 -| 575|0x0000000526800000, 0x0000000527000000, 0x0000000527000000|100%| O| |TAMS 0x0000000526800000| PB 0x0000000526800000| Untracked | 0 -| 576|0x0000000527000000, 0x0000000527800000, 0x0000000527800000|100%| O| |TAMS 0x0000000527000000| PB 0x0000000527000000| Untracked | 0 -| 577|0x0000000527800000, 0x0000000528000000, 0x0000000528000000|100%| O| |TAMS 0x0000000527800000| PB 0x0000000527800000| Untracked | 0 -| 578|0x0000000528000000, 0x0000000528800000, 0x0000000528800000|100%| O| |TAMS 0x0000000528000000| PB 0x0000000528000000| Untracked | 0 -| 579|0x0000000528800000, 0x0000000529000000, 0x0000000529000000|100%| O| |TAMS 0x0000000528800000| PB 0x0000000528800000| Untracked | 0 -| 580|0x0000000529000000, 0x0000000529800000, 0x0000000529800000|100%| O| |TAMS 0x0000000529000000| PB 0x0000000529000000| Untracked | 0 -| 581|0x0000000529800000, 0x000000052a000000, 0x000000052a000000|100%| O| |TAMS 0x0000000529800000| PB 0x0000000529800000| Untracked | 0 -| 582|0x000000052a000000, 0x000000052a800000, 0x000000052a800000|100%| O| |TAMS 0x000000052a000000| PB 0x000000052a000000| Untracked | 0 -| 583|0x000000052a800000, 0x000000052b000000, 0x000000052b000000|100%| O| |TAMS 0x000000052a800000| PB 0x000000052a800000| Untracked | 0 -| 584|0x000000052b000000, 0x000000052b800000, 0x000000052b800000|100%| O| |TAMS 0x000000052b000000| PB 0x000000052b000000| Untracked | 0 -| 585|0x000000052b800000, 0x000000052c000000, 0x000000052c000000|100%| O| |TAMS 0x000000052b800000| PB 0x000000052b800000| Untracked | 0 -| 586|0x000000052c000000, 0x000000052c800000, 0x000000052c800000|100%| O| |TAMS 0x000000052c000000| PB 0x000000052c000000| Untracked | 0 -| 587|0x000000052c800000, 0x000000052d000000, 0x000000052d000000|100%| O| |TAMS 0x000000052c800000| PB 0x000000052c800000| Untracked | 0 -| 588|0x000000052d000000, 0x000000052d800000, 0x000000052d800000|100%| O| |TAMS 0x000000052d000000| PB 0x000000052d000000| Untracked | 0 -| 589|0x000000052d800000, 0x000000052e000000, 0x000000052e000000|100%| O| |TAMS 0x000000052d800000| PB 0x000000052d800000| Untracked | 0 -| 590|0x000000052e000000, 0x000000052e800000, 0x000000052e800000|100%| O| |TAMS 0x000000052e000000| PB 0x000000052e000000| Untracked | 0 -| 591|0x000000052e800000, 0x000000052f000000, 0x000000052f000000|100%| O| |TAMS 0x000000052e800000| PB 0x000000052e800000| Untracked | 0 -| 592|0x000000052f000000, 0x000000052f800000, 0x000000052f800000|100%| O| |TAMS 0x000000052f000000| PB 0x000000052f000000| Untracked | 0 -| 593|0x000000052f800000, 0x0000000530000000, 0x0000000530000000|100%| O| |TAMS 0x000000052f800000| PB 0x000000052f800000| Untracked | 0 -| 594|0x0000000530000000, 0x0000000530800000, 0x0000000530800000|100%| O| |TAMS 0x0000000530000000| PB 0x0000000530000000| Untracked | 0 -| 595|0x0000000530800000, 0x0000000531000000, 0x0000000531000000|100%| O| |TAMS 0x0000000530800000| PB 0x0000000530800000| Untracked | 0 -| 596|0x0000000531000000, 0x0000000531800000, 0x0000000531800000|100%| O| |TAMS 0x0000000531000000| PB 0x0000000531000000| Untracked | 0 -| 597|0x0000000531800000, 0x0000000532000000, 0x0000000532000000|100%| O| |TAMS 0x0000000531800000| PB 0x0000000531800000| Untracked | 0 -| 598|0x0000000532000000, 0x0000000532800000, 0x0000000532800000|100%| O| |TAMS 0x0000000532000000| PB 0x0000000532000000| Untracked | 0 -| 599|0x0000000532800000, 0x0000000533000000, 0x0000000533000000|100%| O| |TAMS 0x0000000532800000| PB 0x0000000532800000| Untracked | 0 -| 600|0x0000000533000000, 0x0000000533800000, 0x0000000533800000|100%| O| |TAMS 0x0000000533000000| PB 0x0000000533000000| Untracked | 0 -| 601|0x0000000533800000, 0x0000000534000000, 0x0000000534000000|100%| O| |TAMS 0x0000000533800000| PB 0x0000000533800000| Untracked | 0 -| 602|0x0000000534000000, 0x0000000534800000, 0x0000000534800000|100%| O| |TAMS 0x0000000534000000| PB 0x0000000534000000| Untracked | 0 -| 603|0x0000000534800000, 0x0000000535000000, 0x0000000535000000|100%| O| |TAMS 0x0000000534800000| PB 0x0000000534800000| Untracked | 0 -| 604|0x0000000535000000, 0x0000000535800000, 0x0000000535800000|100%| O| |TAMS 0x0000000535000000| PB 0x0000000535000000| Untracked | 0 -| 605|0x0000000535800000, 0x0000000536000000, 0x0000000536000000|100%| O| |TAMS 0x0000000535800000| PB 0x0000000535800000| Untracked | 0 -| 606|0x0000000536000000, 0x0000000536800000, 0x0000000536800000|100%| O| |TAMS 0x0000000536000000| PB 0x0000000536000000| Untracked | 0 -| 607|0x0000000536800000, 0x0000000537000000, 0x0000000537000000|100%| O| |TAMS 0x0000000536800000| PB 0x0000000536800000| Untracked | 0 -| 608|0x0000000537000000, 0x0000000537800000, 0x0000000537800000|100%| O| |TAMS 0x0000000537000000| PB 0x0000000537000000| Untracked | 0 -| 609|0x0000000537800000, 0x0000000538000000, 0x0000000538000000|100%| O| |TAMS 0x0000000537800000| PB 0x0000000537800000| Untracked | 0 -| 610|0x0000000538000000, 0x0000000538800000, 0x0000000538800000|100%| O| |TAMS 0x0000000538000000| PB 0x0000000538000000| Untracked | 0 -| 611|0x0000000538800000, 0x0000000539000000, 0x0000000539000000|100%| O| |TAMS 0x0000000538800000| PB 0x0000000538800000| Untracked | 0 -| 612|0x0000000539000000, 0x0000000539800000, 0x0000000539800000|100%| O| |TAMS 0x0000000539000000| PB 0x0000000539000000| Untracked | 0 -| 613|0x0000000539800000, 0x000000053a000000, 0x000000053a000000|100%| O| |TAMS 0x0000000539800000| PB 0x0000000539800000| Untracked | 0 -| 614|0x000000053a000000, 0x000000053a800000, 0x000000053a800000|100%| O| |TAMS 0x000000053a000000| PB 0x000000053a000000| Untracked | 0 -| 615|0x000000053a800000, 0x000000053b000000, 0x000000053b000000|100%| O| |TAMS 0x000000053a800000| PB 0x000000053a800000| Untracked | 0 -| 616|0x000000053b000000, 0x000000053b800000, 0x000000053b800000|100%| O| |TAMS 0x000000053b000000| PB 0x000000053b000000| Untracked | 0 -| 617|0x000000053b800000, 0x000000053c000000, 0x000000053c000000|100%| O| |TAMS 0x000000053b800000| PB 0x000000053b800000| Untracked | 0 -| 618|0x000000053c000000, 0x000000053c800000, 0x000000053c800000|100%| O| |TAMS 0x000000053c000000| PB 0x000000053c000000| Untracked | 0 -| 619|0x000000053c800000, 0x000000053d000000, 0x000000053d000000|100%| O| |TAMS 0x000000053c800000| PB 0x000000053c800000| Untracked | 0 -| 620|0x000000053d000000, 0x000000053d800000, 0x000000053d800000|100%| O| |TAMS 0x000000053d000000| PB 0x000000053d000000| Untracked | 0 -| 621|0x000000053d800000, 0x000000053e000000, 0x000000053e000000|100%| O| |TAMS 0x000000053d800000| PB 0x000000053d800000| Untracked | 0 -| 622|0x000000053e000000, 0x000000053e800000, 0x000000053e800000|100%| O| |TAMS 0x000000053e000000| PB 0x000000053e000000| Untracked | 0 -| 623|0x000000053e800000, 0x000000053f000000, 0x000000053f000000|100%| O| |TAMS 0x000000053e800000| PB 0x000000053e800000| Untracked | 0 -| 624|0x000000053f000000, 0x000000053f800000, 0x000000053f800000|100%| O| |TAMS 0x000000053f000000| PB 0x000000053f000000| Untracked | 0 -| 625|0x000000053f800000, 0x0000000540000000, 0x0000000540000000|100%| O| |TAMS 0x000000053f800000| PB 0x000000053f800000| Untracked | 0 -| 626|0x0000000540000000, 0x0000000540800000, 0x0000000540800000|100%| O| |TAMS 0x0000000540000000| PB 0x0000000540000000| Untracked | 0 -| 627|0x0000000540800000, 0x0000000541000000, 0x0000000541000000|100%| O| |TAMS 0x0000000540800000| PB 0x0000000540800000| Untracked | 0 -| 628|0x0000000541000000, 0x0000000541800000, 0x0000000541800000|100%| O| |TAMS 0x0000000541000000| PB 0x0000000541000000| Untracked | 0 -| 629|0x0000000541800000, 0x0000000542000000, 0x0000000542000000|100%| O| |TAMS 0x0000000541800000| PB 0x0000000541800000| Untracked | 0 -| 630|0x0000000542000000, 0x0000000542800000, 0x0000000542800000|100%| O| |TAMS 0x0000000542000000| PB 0x0000000542000000| Untracked | 0 -| 631|0x0000000542800000, 0x0000000543000000, 0x0000000543000000|100%| O| |TAMS 0x0000000542800000| PB 0x0000000542800000| Untracked | 0 -| 632|0x0000000543000000, 0x0000000543800000, 0x0000000543800000|100%| O| |TAMS 0x0000000543000000| PB 0x0000000543000000| Untracked | 0 -| 633|0x0000000543800000, 0x0000000544000000, 0x0000000544000000|100%| O| |TAMS 0x0000000543800000| PB 0x0000000543800000| Untracked | 0 -| 634|0x0000000544000000, 0x0000000544800000, 0x0000000544800000|100%| O| |TAMS 0x0000000544000000| PB 0x0000000544000000| Untracked | 0 -| 635|0x0000000544800000, 0x0000000545000000, 0x0000000545000000|100%| O| |TAMS 0x0000000544800000| PB 0x0000000544800000| Untracked | 0 -| 636|0x0000000545000000, 0x0000000545800000, 0x0000000545800000|100%| O| |TAMS 0x0000000545000000| PB 0x0000000545000000| Untracked | 0 -| 637|0x0000000545800000, 0x0000000546000000, 0x0000000546000000|100%| O| |TAMS 0x0000000545800000| PB 0x0000000545800000| Untracked | 0 -| 638|0x0000000546000000, 0x0000000546800000, 0x0000000546800000|100%| O| |TAMS 0x0000000546000000| PB 0x0000000546000000| Untracked | 0 -| 639|0x0000000546800000, 0x0000000547000000, 0x0000000547000000|100%| O| |TAMS 0x0000000546800000| PB 0x0000000546800000| Untracked | 0 -| 640|0x0000000547000000, 0x0000000547800000, 0x0000000547800000|100%| O| |TAMS 0x0000000547000000| PB 0x0000000547000000| Untracked | 0 -| 641|0x0000000547800000, 0x0000000548000000, 0x0000000548000000|100%| O| |TAMS 0x0000000547800000| PB 0x0000000547800000| Untracked | 0 -| 642|0x0000000548000000, 0x0000000548800000, 0x0000000548800000|100%| O| |TAMS 0x0000000548000000| PB 0x0000000548000000| Untracked | 0 -| 643|0x0000000548800000, 0x0000000549000000, 0x0000000549000000|100%| O| |TAMS 0x0000000548800000| PB 0x0000000548800000| Untracked | 0 -| 644|0x0000000549000000, 0x0000000549800000, 0x0000000549800000|100%| O| |TAMS 0x0000000549000000| PB 0x0000000549000000| Untracked | 0 -| 645|0x0000000549800000, 0x000000054a000000, 0x000000054a000000|100%| O| |TAMS 0x0000000549800000| PB 0x0000000549800000| Untracked | 0 -| 646|0x000000054a000000, 0x000000054a800000, 0x000000054a800000|100%| O| |TAMS 0x000000054a000000| PB 0x000000054a000000| Untracked | 0 -| 647|0x000000054a800000, 0x000000054b000000, 0x000000054b000000|100%| O| |TAMS 0x000000054a800000| PB 0x000000054a800000| Untracked | 0 -| 648|0x000000054b000000, 0x000000054b800000, 0x000000054b800000|100%| O| |TAMS 0x000000054b000000| PB 0x000000054b000000| Untracked | 0 -| 649|0x000000054b800000, 0x000000054c000000, 0x000000054c000000|100%| O| |TAMS 0x000000054b800000| PB 0x000000054b800000| Untracked | 0 -| 650|0x000000054c000000, 0x000000054c800000, 0x000000054c800000|100%| O| |TAMS 0x000000054c000000| PB 0x000000054c000000| Untracked | 0 -| 651|0x000000054c800000, 0x000000054d000000, 0x000000054d000000|100%| O| |TAMS 0x000000054c800000| PB 0x000000054c800000| Untracked | 0 -| 652|0x000000054d000000, 0x000000054d800000, 0x000000054d800000|100%| O| |TAMS 0x000000054d000000| PB 0x000000054d000000| Untracked | 0 -| 653|0x000000054d800000, 0x000000054e000000, 0x000000054e000000|100%| O| |TAMS 0x000000054d800000| PB 0x000000054d800000| Untracked | 0 -| 654|0x000000054e000000, 0x000000054e800000, 0x000000054e800000|100%| O| |TAMS 0x000000054e000000| PB 0x000000054e000000| Untracked | 0 -| 655|0x000000054e800000, 0x000000054f000000, 0x000000054f000000|100%| O| |TAMS 0x000000054e800000| PB 0x000000054e800000| Untracked | 0 -| 656|0x000000054f000000, 0x000000054f800000, 0x000000054f800000|100%| O| |TAMS 0x000000054f000000| PB 0x000000054f000000| Untracked | 0 -| 657|0x000000054f800000, 0x0000000550000000, 0x0000000550000000|100%| O| |TAMS 0x000000054f800000| PB 0x000000054f800000| Untracked | 0 -| 658|0x0000000550000000, 0x0000000550800000, 0x0000000550800000|100%| O| |TAMS 0x0000000550000000| PB 0x0000000550000000| Untracked | 0 -| 659|0x0000000550800000, 0x0000000551000000, 0x0000000551000000|100%| O| |TAMS 0x0000000550800000| PB 0x0000000550800000| Untracked | 0 -| 660|0x0000000551000000, 0x0000000551800000, 0x0000000551800000|100%| O| |TAMS 0x0000000551000000| PB 0x0000000551000000| Untracked | 0 -| 661|0x0000000551800000, 0x0000000552000000, 0x0000000552000000|100%| O| |TAMS 0x0000000551800000| PB 0x0000000551800000| Untracked | 0 -| 662|0x0000000552000000, 0x0000000552800000, 0x0000000552800000|100%| O| |TAMS 0x0000000552000000| PB 0x0000000552000000| Untracked | 0 -| 663|0x0000000552800000, 0x0000000553000000, 0x0000000553000000|100%| O| |TAMS 0x0000000552800000| PB 0x0000000552800000| Untracked | 0 -| 664|0x0000000553000000, 0x0000000553800000, 0x0000000553800000|100%| O| |TAMS 0x0000000553000000| PB 0x0000000553000000| Untracked | 0 -| 665|0x0000000553800000, 0x0000000554000000, 0x0000000554000000|100%| O| |TAMS 0x0000000553800000| PB 0x0000000553800000| Untracked | 0 -| 666|0x0000000554000000, 0x0000000554800000, 0x0000000554800000|100%| O| |TAMS 0x0000000554000000| PB 0x0000000554000000| Untracked | 0 -| 667|0x0000000554800000, 0x0000000555000000, 0x0000000555000000|100%| O| |TAMS 0x0000000554800000| PB 0x0000000554800000| Untracked | 0 -| 668|0x0000000555000000, 0x0000000555800000, 0x0000000555800000|100%| O| |TAMS 0x0000000555000000| PB 0x0000000555000000| Untracked | 0 -| 669|0x0000000555800000, 0x0000000556000000, 0x0000000556000000|100%| O| |TAMS 0x0000000555800000| PB 0x0000000555800000| Untracked | 0 -| 670|0x0000000556000000, 0x0000000556800000, 0x0000000556800000|100%| O| |TAMS 0x0000000556000000| PB 0x0000000556000000| Untracked | 0 -| 671|0x0000000556800000, 0x0000000557000000, 0x0000000557000000|100%| O| |TAMS 0x0000000556800000| PB 0x0000000556800000| Untracked | 0 -| 672|0x0000000557000000, 0x0000000557800000, 0x0000000557800000|100%| O| |TAMS 0x0000000557000000| PB 0x0000000557000000| Untracked | 0 -| 673|0x0000000557800000, 0x0000000558000000, 0x0000000558000000|100%| O| |TAMS 0x0000000557800000| PB 0x0000000557800000| Untracked | 0 -| 674|0x0000000558000000, 0x0000000558800000, 0x0000000558800000|100%| O| |TAMS 0x0000000558000000| PB 0x0000000558000000| Untracked | 0 -| 675|0x0000000558800000, 0x0000000559000000, 0x0000000559000000|100%| O| |TAMS 0x0000000558800000| PB 0x0000000558800000| Untracked | 0 -| 676|0x0000000559000000, 0x0000000559800000, 0x0000000559800000|100%| O| |TAMS 0x0000000559000000| PB 0x0000000559000000| Untracked | 0 -| 677|0x0000000559800000, 0x000000055a000000, 0x000000055a000000|100%| O| |TAMS 0x0000000559800000| PB 0x0000000559800000| Untracked | 0 -| 678|0x000000055a000000, 0x000000055a800000, 0x000000055a800000|100%| O| |TAMS 0x000000055a000000| PB 0x000000055a000000| Untracked | 0 -| 679|0x000000055a800000, 0x000000055b000000, 0x000000055b000000|100%| O| |TAMS 0x000000055a800000| PB 0x000000055a800000| Untracked | 0 -| 680|0x000000055b000000, 0x000000055b800000, 0x000000055b800000|100%| O| |TAMS 0x000000055b000000| PB 0x000000055b000000| Untracked | 0 -| 681|0x000000055b800000, 0x000000055c000000, 0x000000055c000000|100%| O| |TAMS 0x000000055b800000| PB 0x000000055b800000| Untracked | 0 -| 682|0x000000055c000000, 0x000000055c800000, 0x000000055c800000|100%| O| |TAMS 0x000000055c000000| PB 0x000000055c000000| Untracked | 0 -| 683|0x000000055c800000, 0x000000055d000000, 0x000000055d000000|100%| O| |TAMS 0x000000055c800000| PB 0x000000055c800000| Untracked | 0 -| 684|0x000000055d000000, 0x000000055d800000, 0x000000055d800000|100%| O| |TAMS 0x000000055d000000| PB 0x000000055d000000| Untracked | 0 -| 685|0x000000055d800000, 0x000000055e000000, 0x000000055e000000|100%| O| |TAMS 0x000000055d800000| PB 0x000000055d800000| Untracked | 0 -| 686|0x000000055e000000, 0x000000055e800000, 0x000000055e800000|100%| O| |TAMS 0x000000055e000000| PB 0x000000055e000000| Untracked | 0 -| 687|0x000000055e800000, 0x000000055f000000, 0x000000055f000000|100%| O| |TAMS 0x000000055e800000| PB 0x000000055e800000| Untracked | 0 -| 688|0x000000055f000000, 0x000000055f800000, 0x000000055f800000|100%| O| |TAMS 0x000000055f000000| PB 0x000000055f000000| Untracked | 0 -| 689|0x000000055f800000, 0x0000000560000000, 0x0000000560000000|100%| O| |TAMS 0x000000055f800000| PB 0x000000055f800000| Untracked | 0 -| 690|0x0000000560000000, 0x0000000560800000, 0x0000000560800000|100%| O| |TAMS 0x0000000560000000| PB 0x0000000560000000| Untracked | 0 -| 691|0x0000000560800000, 0x0000000561000000, 0x0000000561000000|100%| O| |TAMS 0x0000000560800000| PB 0x0000000560800000| Untracked | 0 -| 692|0x0000000561000000, 0x0000000561800000, 0x0000000561800000|100%| O| |TAMS 0x0000000561000000| PB 0x0000000561000000| Untracked | 0 -| 693|0x0000000561800000, 0x0000000562000000, 0x0000000562000000|100%| O| |TAMS 0x0000000561800000| PB 0x0000000561800000| Untracked | 0 -| 694|0x0000000562000000, 0x0000000562800000, 0x0000000562800000|100%| O| |TAMS 0x0000000562000000| PB 0x0000000562000000| Untracked | 0 -| 695|0x0000000562800000, 0x0000000563000000, 0x0000000563000000|100%| O| |TAMS 0x0000000562800000| PB 0x0000000562800000| Untracked | 0 -| 696|0x0000000563000000, 0x0000000563800000, 0x0000000563800000|100%| O| |TAMS 0x0000000563000000| PB 0x0000000563000000| Untracked | 0 -| 697|0x0000000563800000, 0x0000000564000000, 0x0000000564000000|100%| O| |TAMS 0x0000000563800000| PB 0x0000000563800000| Untracked | 0 -| 698|0x0000000564000000, 0x0000000564800000, 0x0000000564800000|100%| O| |TAMS 0x0000000564000000| PB 0x0000000564000000| Untracked | 0 -| 699|0x0000000564800000, 0x0000000565000000, 0x0000000565000000|100%| O| |TAMS 0x0000000564800000| PB 0x0000000564800000| Untracked | 0 -| 700|0x0000000565000000, 0x0000000565800000, 0x0000000565800000|100%| O| |TAMS 0x0000000565000000| PB 0x0000000565000000| Untracked | 0 -| 701|0x0000000565800000, 0x0000000566000000, 0x0000000566000000|100%| O| |TAMS 0x0000000565800000| PB 0x0000000565800000| Untracked | 0 -| 702|0x0000000566000000, 0x0000000566800000, 0x0000000566800000|100%| O| |TAMS 0x0000000566000000| PB 0x0000000566000000| Untracked | 0 -| 703|0x0000000566800000, 0x0000000567000000, 0x0000000567000000|100%| O| |TAMS 0x0000000566800000| PB 0x0000000566800000| Untracked | 0 -| 704|0x0000000567000000, 0x0000000567800000, 0x0000000567800000|100%| O| |TAMS 0x0000000567000000| PB 0x0000000567000000| Untracked | 0 -| 705|0x0000000567800000, 0x0000000568000000, 0x0000000568000000|100%| O| |TAMS 0x0000000567800000| PB 0x0000000567800000| Untracked | 0 -| 706|0x0000000568000000, 0x0000000568800000, 0x0000000568800000|100%| O| |TAMS 0x0000000568000000| PB 0x0000000568000000| Untracked | 0 -| 707|0x0000000568800000, 0x0000000569000000, 0x0000000569000000|100%| O| |TAMS 0x0000000568800000| PB 0x0000000568800000| Untracked | 0 -| 708|0x0000000569000000, 0x0000000569800000, 0x0000000569800000|100%| O| |TAMS 0x0000000569000000| PB 0x0000000569000000| Untracked | 0 -| 709|0x0000000569800000, 0x000000056a000000, 0x000000056a000000|100%| O| |TAMS 0x0000000569800000| PB 0x0000000569800000| Untracked | 0 -| 710|0x000000056a000000, 0x000000056a800000, 0x000000056a800000|100%| O| |TAMS 0x000000056a000000| PB 0x000000056a000000| Untracked | 0 -| 711|0x000000056a800000, 0x000000056b000000, 0x000000056b000000|100%| O| |TAMS 0x000000056a800000| PB 0x000000056a800000| Untracked | 0 -| 712|0x000000056b000000, 0x000000056b800000, 0x000000056b800000|100%| O| |TAMS 0x000000056b000000| PB 0x000000056b000000| Untracked | 0 -| 713|0x000000056b800000, 0x000000056c000000, 0x000000056c000000|100%| O| |TAMS 0x000000056b800000| PB 0x000000056b800000| Untracked | 0 -| 714|0x000000056c000000, 0x000000056c800000, 0x000000056c800000|100%| O| |TAMS 0x000000056c000000| PB 0x000000056c000000| Untracked | 0 -| 715|0x000000056c800000, 0x000000056d000000, 0x000000056d000000|100%| O| |TAMS 0x000000056c800000| PB 0x000000056c800000| Untracked | 0 -| 716|0x000000056d000000, 0x000000056d800000, 0x000000056d800000|100%| O| |TAMS 0x000000056d000000| PB 0x000000056d000000| Untracked | 0 -| 717|0x000000056d800000, 0x000000056e000000, 0x000000056e000000|100%| O| |TAMS 0x000000056d800000| PB 0x000000056d800000| Untracked | 0 -| 718|0x000000056e000000, 0x000000056e800000, 0x000000056e800000|100%| O| |TAMS 0x000000056e000000| PB 0x000000056e000000| Untracked | 0 -| 719|0x000000056e800000, 0x000000056f000000, 0x000000056f000000|100%| O| |TAMS 0x000000056e800000| PB 0x000000056e800000| Untracked | 0 -| 720|0x000000056f000000, 0x000000056f800000, 0x000000056f800000|100%| O| |TAMS 0x000000056f000000| PB 0x000000056f000000| Untracked | 0 -| 721|0x000000056f800000, 0x0000000570000000, 0x0000000570000000|100%| O| |TAMS 0x000000056f800000| PB 0x000000056f800000| Untracked | 0 -| 722|0x0000000570000000, 0x0000000570800000, 0x0000000570800000|100%| O| |TAMS 0x0000000570000000| PB 0x0000000570000000| Untracked | 0 -| 723|0x0000000570800000, 0x0000000571000000, 0x0000000571000000|100%| O| |TAMS 0x0000000570800000| PB 0x0000000570800000| Untracked | 0 -| 724|0x0000000571000000, 0x0000000571800000, 0x0000000571800000|100%| O| |TAMS 0x0000000571000000| PB 0x0000000571000000| Untracked | 0 -| 725|0x0000000571800000, 0x0000000572000000, 0x0000000572000000|100%| O| |TAMS 0x0000000571800000| PB 0x0000000571800000| Untracked | 0 -| 726|0x0000000572000000, 0x0000000572800000, 0x0000000572800000|100%| O| |TAMS 0x0000000572000000| PB 0x0000000572000000| Untracked | 0 -| 727|0x0000000572800000, 0x0000000573000000, 0x0000000573000000|100%| O| |TAMS 0x0000000572800000| PB 0x0000000572800000| Untracked | 0 -| 728|0x0000000573000000, 0x0000000573800000, 0x0000000573800000|100%| O| |TAMS 0x0000000573000000| PB 0x0000000573000000| Untracked | 0 -| 729|0x0000000573800000, 0x0000000574000000, 0x0000000574000000|100%| O| |TAMS 0x0000000573800000| PB 0x0000000573800000| Untracked | 0 -| 730|0x0000000574000000, 0x0000000574800000, 0x0000000574800000|100%| O| |TAMS 0x0000000574000000| PB 0x0000000574000000| Untracked | 0 -| 731|0x0000000574800000, 0x0000000575000000, 0x0000000575000000|100%| O| |TAMS 0x0000000574800000| PB 0x0000000574800000| Untracked | 0 -| 732|0x0000000575000000, 0x0000000575800000, 0x0000000575800000|100%| O| |TAMS 0x0000000575000000| PB 0x0000000575000000| Untracked | 0 -| 733|0x0000000575800000, 0x0000000576000000, 0x0000000576000000|100%| O| |TAMS 0x0000000575800000| PB 0x0000000575800000| Untracked | 0 -| 734|0x0000000576000000, 0x0000000576800000, 0x0000000576800000|100%| O| |TAMS 0x0000000576000000| PB 0x0000000576000000| Untracked | 0 -| 735|0x0000000576800000, 0x0000000577000000, 0x0000000577000000|100%| O| |TAMS 0x0000000576800000| PB 0x0000000576800000| Untracked | 0 -| 736|0x0000000577000000, 0x0000000577800000, 0x0000000577800000|100%| O| |TAMS 0x0000000577000000| PB 0x0000000577000000| Untracked | 0 -| 737|0x0000000577800000, 0x0000000578000000, 0x0000000578000000|100%| O| |TAMS 0x0000000577800000| PB 0x0000000577800000| Untracked | 0 -| 738|0x0000000578000000, 0x0000000578800000, 0x0000000578800000|100%| O| |TAMS 0x0000000578000000| PB 0x0000000578000000| Untracked | 0 -| 739|0x0000000578800000, 0x0000000579000000, 0x0000000579000000|100%| O| |TAMS 0x0000000578800000| PB 0x0000000578800000| Untracked | 0 -| 740|0x0000000579000000, 0x0000000579800000, 0x0000000579800000|100%| O| |TAMS 0x0000000579000000| PB 0x0000000579000000| Untracked | 0 -| 741|0x0000000579800000, 0x000000057a000000, 0x000000057a000000|100%| O| |TAMS 0x0000000579800000| PB 0x0000000579800000| Untracked | 0 -| 742|0x000000057a000000, 0x000000057a800000, 0x000000057a800000|100%| O| |TAMS 0x000000057a000000| PB 0x000000057a000000| Untracked | 0 -| 743|0x000000057a800000, 0x000000057b000000, 0x000000057b000000|100%| O| |TAMS 0x000000057a800000| PB 0x000000057a800000| Untracked | 0 -| 744|0x000000057b000000, 0x000000057b800000, 0x000000057b800000|100%| O| |TAMS 0x000000057b000000| PB 0x000000057b000000| Untracked | 0 -| 745|0x000000057b800000, 0x000000057c000000, 0x000000057c000000|100%| O| |TAMS 0x000000057b800000| PB 0x000000057b800000| Untracked | 0 -| 746|0x000000057c000000, 0x000000057c800000, 0x000000057c800000|100%| O| |TAMS 0x000000057c000000| PB 0x000000057c000000| Untracked | 0 -| 747|0x000000057c800000, 0x000000057d000000, 0x000000057d000000|100%| O| |TAMS 0x000000057c800000| PB 0x000000057c800000| Untracked | 0 -| 748|0x000000057d000000, 0x000000057d800000, 0x000000057d800000|100%| O| |TAMS 0x000000057d000000| PB 0x000000057d000000| Untracked | 0 -| 749|0x000000057d800000, 0x000000057e000000, 0x000000057e000000|100%| O| |TAMS 0x000000057d800000| PB 0x000000057d800000| Untracked | 0 -| 750|0x000000057e000000, 0x000000057e800000, 0x000000057e800000|100%| O| |TAMS 0x000000057e000000| PB 0x000000057e000000| Untracked | 0 -| 751|0x000000057e800000, 0x000000057f000000, 0x000000057f000000|100%| O| |TAMS 0x000000057e800000| PB 0x000000057e800000| Untracked | 0 -| 752|0x000000057f000000, 0x000000057f800000, 0x000000057f800000|100%| O| |TAMS 0x000000057f000000| PB 0x000000057f000000| Untracked | 0 -| 753|0x000000057f800000, 0x0000000580000000, 0x0000000580000000|100%| O| |TAMS 0x000000057f800000| PB 0x000000057f800000| Untracked | 0 -| 754|0x0000000580000000, 0x0000000580800000, 0x0000000580800000|100%| O| |TAMS 0x0000000580000000| PB 0x0000000580000000| Untracked | 0 -| 755|0x0000000580800000, 0x0000000581000000, 0x0000000581000000|100%| O| |TAMS 0x0000000580800000| PB 0x0000000580800000| Untracked | 0 -| 756|0x0000000581000000, 0x0000000581800000, 0x0000000581800000|100%| O| |TAMS 0x0000000581000000| PB 0x0000000581000000| Untracked | 0 -| 757|0x0000000581800000, 0x0000000582000000, 0x0000000582000000|100%| O| |TAMS 0x0000000581800000| PB 0x0000000581800000| Untracked | 0 -| 758|0x0000000582000000, 0x0000000582800000, 0x0000000582800000|100%| O| |TAMS 0x0000000582000000| PB 0x0000000582000000| Untracked | 0 -| 759|0x0000000582800000, 0x0000000583000000, 0x0000000583000000|100%| O| |TAMS 0x0000000582800000| PB 0x0000000582800000| Untracked | 0 -| 760|0x0000000583000000, 0x0000000583800000, 0x0000000583800000|100%| O| |TAMS 0x0000000583000000| PB 0x0000000583000000| Untracked | 0 -| 761|0x0000000583800000, 0x0000000584000000, 0x0000000584000000|100%| O| |TAMS 0x0000000583800000| PB 0x0000000583800000| Untracked | 0 -| 762|0x0000000584000000, 0x0000000584800000, 0x0000000584800000|100%| O| |TAMS 0x0000000584000000| PB 0x0000000584000000| Untracked | 0 -| 763|0x0000000584800000, 0x0000000585000000, 0x0000000585000000|100%| O| |TAMS 0x0000000584800000| PB 0x0000000584800000| Untracked | 0 -| 764|0x0000000585000000, 0x0000000585800000, 0x0000000585800000|100%| O| |TAMS 0x0000000585000000| PB 0x0000000585000000| Untracked | 0 -| 765|0x0000000585800000, 0x0000000586000000, 0x0000000586000000|100%| O| |TAMS 0x0000000585800000| PB 0x0000000585800000| Untracked | 0 -| 766|0x0000000586000000, 0x0000000586800000, 0x0000000586800000|100%| O| |TAMS 0x0000000586000000| PB 0x0000000586000000| Untracked | 0 -| 767|0x0000000586800000, 0x0000000587000000, 0x0000000587000000|100%| O| |TAMS 0x0000000586800000| PB 0x0000000586800000| Untracked | 0 -| 768|0x0000000587000000, 0x0000000587800000, 0x0000000587800000|100%| O| |TAMS 0x0000000587000000| PB 0x0000000587000000| Untracked | 0 -| 769|0x0000000587800000, 0x0000000588000000, 0x0000000588000000|100%| O| |TAMS 0x0000000587800000| PB 0x0000000587800000| Untracked | 0 -| 770|0x0000000588000000, 0x0000000588800000, 0x0000000588800000|100%| O| |TAMS 0x0000000588000000| PB 0x0000000588000000| Untracked | 0 -| 771|0x0000000588800000, 0x0000000589000000, 0x0000000589000000|100%| O| |TAMS 0x0000000588800000| PB 0x0000000588800000| Untracked | 0 -| 772|0x0000000589000000, 0x0000000589800000, 0x0000000589800000|100%| O| |TAMS 0x0000000589000000| PB 0x0000000589000000| Untracked | 0 -| 773|0x0000000589800000, 0x000000058a000000, 0x000000058a000000|100%| O| |TAMS 0x0000000589800000| PB 0x0000000589800000| Untracked | 0 -| 774|0x000000058a000000, 0x000000058a800000, 0x000000058a800000|100%| O| |TAMS 0x000000058a000000| PB 0x000000058a000000| Untracked | 0 -| 775|0x000000058a800000, 0x000000058b000000, 0x000000058b000000|100%| O| |TAMS 0x000000058a800000| PB 0x000000058a800000| Untracked | 0 -| 776|0x000000058b000000, 0x000000058b800000, 0x000000058b800000|100%| O| |TAMS 0x000000058b000000| PB 0x000000058b000000| Untracked | 0 -| 777|0x000000058b800000, 0x000000058c000000, 0x000000058c000000|100%| O| |TAMS 0x000000058b800000| PB 0x000000058b800000| Untracked | 0 -| 778|0x000000058c000000, 0x000000058c800000, 0x000000058c800000|100%| O| |TAMS 0x000000058c000000| PB 0x000000058c000000| Untracked | 0 -| 779|0x000000058c800000, 0x000000058d000000, 0x000000058d000000|100%| O| |TAMS 0x000000058c800000| PB 0x000000058c800000| Untracked | 0 -| 780|0x000000058d000000, 0x000000058d800000, 0x000000058d800000|100%| O| |TAMS 0x000000058d000000| PB 0x000000058d000000| Untracked | 0 -| 781|0x000000058d800000, 0x000000058e000000, 0x000000058e000000|100%| O| |TAMS 0x000000058d800000| PB 0x000000058d800000| Untracked | 0 -| 782|0x000000058e000000, 0x000000058e800000, 0x000000058e800000|100%| O| |TAMS 0x000000058e000000| PB 0x000000058e000000| Untracked | 0 -| 783|0x000000058e800000, 0x000000058f000000, 0x000000058f000000|100%| O| |TAMS 0x000000058e800000| PB 0x000000058e800000| Untracked | 0 -| 784|0x000000058f000000, 0x000000058f800000, 0x000000058f800000|100%| O| |TAMS 0x000000058f000000| PB 0x000000058f000000| Untracked | 0 -| 785|0x000000058f800000, 0x0000000590000000, 0x0000000590000000|100%| O| |TAMS 0x000000058f800000| PB 0x000000058f800000| Untracked | 0 -| 786|0x0000000590000000, 0x0000000590800000, 0x0000000590800000|100%| O| |TAMS 0x0000000590000000| PB 0x0000000590000000| Untracked | 0 -| 787|0x0000000590800000, 0x0000000591000000, 0x0000000591000000|100%| O| |TAMS 0x0000000590800000| PB 0x0000000590800000| Untracked | 0 -| 788|0x0000000591000000, 0x0000000591800000, 0x0000000591800000|100%| O| |TAMS 0x0000000591000000| PB 0x0000000591000000| Untracked | 0 -| 789|0x0000000591800000, 0x0000000592000000, 0x0000000592000000|100%| O| |TAMS 0x0000000591800000| PB 0x0000000591800000| Untracked | 0 -| 790|0x0000000592000000, 0x0000000592800000, 0x0000000592800000|100%| O| |TAMS 0x0000000592000000| PB 0x0000000592000000| Untracked | 0 -| 791|0x0000000592800000, 0x0000000593000000, 0x0000000593000000|100%| O| |TAMS 0x0000000592800000| PB 0x0000000592800000| Untracked | 0 -| 792|0x0000000593000000, 0x0000000593800000, 0x0000000593800000|100%| O| |TAMS 0x0000000593000000| PB 0x0000000593000000| Untracked | 0 -| 793|0x0000000593800000, 0x0000000594000000, 0x0000000594000000|100%| O| |TAMS 0x0000000593800000| PB 0x0000000593800000| Untracked | 0 -| 794|0x0000000594000000, 0x0000000594800000, 0x0000000594800000|100%| O| |TAMS 0x0000000594000000| PB 0x0000000594000000| Untracked | 0 -| 795|0x0000000594800000, 0x0000000595000000, 0x0000000595000000|100%| O| |TAMS 0x0000000594800000| PB 0x0000000594800000| Untracked | 0 -| 796|0x0000000595000000, 0x0000000595800000, 0x0000000595800000|100%| O| |TAMS 0x0000000595000000| PB 0x0000000595000000| Untracked | 0 -| 797|0x0000000595800000, 0x0000000596000000, 0x0000000596000000|100%| O| |TAMS 0x0000000595800000| PB 0x0000000595800000| Untracked | 0 -| 798|0x0000000596000000, 0x0000000596800000, 0x0000000596800000|100%| O| |TAMS 0x0000000596000000| PB 0x0000000596000000| Untracked | 0 -| 799|0x0000000596800000, 0x0000000597000000, 0x0000000597000000|100%| O| |TAMS 0x0000000596800000| PB 0x0000000596800000| Untracked | 0 -| 800|0x0000000597000000, 0x0000000597800000, 0x0000000597800000|100%| O| |TAMS 0x0000000597000000| PB 0x0000000597000000| Untracked | 0 -| 801|0x0000000597800000, 0x0000000598000000, 0x0000000598000000|100%| O| |TAMS 0x0000000597800000| PB 0x0000000597800000| Untracked | 0 -| 802|0x0000000598000000, 0x0000000598800000, 0x0000000598800000|100%| O| |TAMS 0x0000000598000000| PB 0x0000000598000000| Untracked | 0 -| 803|0x0000000598800000, 0x0000000599000000, 0x0000000599000000|100%| O| |TAMS 0x0000000598800000| PB 0x0000000598800000| Untracked | 0 -| 804|0x0000000599000000, 0x0000000599800000, 0x0000000599800000|100%| O| |TAMS 0x0000000599000000| PB 0x0000000599000000| Untracked | 0 -| 805|0x0000000599800000, 0x000000059a000000, 0x000000059a000000|100%| O| |TAMS 0x0000000599800000| PB 0x0000000599800000| Untracked | 0 -| 806|0x000000059a000000, 0x000000059a800000, 0x000000059a800000|100%| O| |TAMS 0x000000059a000000| PB 0x000000059a000000| Untracked | 0 -| 807|0x000000059a800000, 0x000000059b000000, 0x000000059b000000|100%| O| |TAMS 0x000000059a800000| PB 0x000000059a800000| Untracked | 0 -| 808|0x000000059b000000, 0x000000059b800000, 0x000000059b800000|100%| O| |TAMS 0x000000059b000000| PB 0x000000059b000000| Untracked | 0 -| 809|0x000000059b800000, 0x000000059c000000, 0x000000059c000000|100%| O| |TAMS 0x000000059b800000| PB 0x000000059b800000| Untracked | 0 -| 810|0x000000059c000000, 0x000000059c800000, 0x000000059c800000|100%| O| |TAMS 0x000000059c000000| PB 0x000000059c000000| Untracked | 0 -| 811|0x000000059c800000, 0x000000059d000000, 0x000000059d000000|100%| O| |TAMS 0x000000059c800000| PB 0x000000059c800000| Untracked | 0 -| 812|0x000000059d000000, 0x000000059d800000, 0x000000059d800000|100%| O| |TAMS 0x000000059d000000| PB 0x000000059d000000| Untracked | 0 -| 813|0x000000059d800000, 0x000000059e000000, 0x000000059e000000|100%| O| |TAMS 0x000000059d800000| PB 0x000000059d800000| Untracked | 0 -| 814|0x000000059e000000, 0x000000059e800000, 0x000000059e800000|100%| O| |TAMS 0x000000059e000000| PB 0x000000059e000000| Untracked | 0 -| 815|0x000000059e800000, 0x000000059f000000, 0x000000059f000000|100%| O| |TAMS 0x000000059e800000| PB 0x000000059e800000| Untracked | 0 -| 816|0x000000059f000000, 0x000000059f800000, 0x000000059f800000|100%| O| |TAMS 0x000000059f000000| PB 0x000000059f000000| Untracked | 0 -| 817|0x000000059f800000, 0x00000005a0000000, 0x00000005a0000000|100%| O| |TAMS 0x000000059f800000| PB 0x000000059f800000| Untracked | 0 -| 818|0x00000005a0000000, 0x00000005a0800000, 0x00000005a0800000|100%| O| |TAMS 0x00000005a0000000| PB 0x00000005a0000000| Untracked | 0 -| 819|0x00000005a0800000, 0x00000005a1000000, 0x00000005a1000000|100%| O| |TAMS 0x00000005a0800000| PB 0x00000005a0800000| Untracked | 0 -| 820|0x00000005a1000000, 0x00000005a1800000, 0x00000005a1800000|100%| O| |TAMS 0x00000005a1000000| PB 0x00000005a1000000| Untracked | 0 -| 821|0x00000005a1800000, 0x00000005a2000000, 0x00000005a2000000|100%| O| |TAMS 0x00000005a1800000| PB 0x00000005a1800000| Untracked | 0 -| 822|0x00000005a2000000, 0x00000005a2800000, 0x00000005a2800000|100%| O| |TAMS 0x00000005a2000000| PB 0x00000005a2000000| Untracked | 0 -| 823|0x00000005a2800000, 0x00000005a3000000, 0x00000005a3000000|100%| O| |TAMS 0x00000005a2800000| PB 0x00000005a2800000| Untracked | 0 -| 824|0x00000005a3000000, 0x00000005a3800000, 0x00000005a3800000|100%| O| |TAMS 0x00000005a3000000| PB 0x00000005a3000000| Untracked | 0 -| 825|0x00000005a3800000, 0x00000005a4000000, 0x00000005a4000000|100%| O| |TAMS 0x00000005a3800000| PB 0x00000005a3800000| Untracked | 0 -| 826|0x00000005a4000000, 0x00000005a4800000, 0x00000005a4800000|100%| O| |TAMS 0x00000005a4000000| PB 0x00000005a4000000| Untracked | 0 -| 827|0x00000005a4800000, 0x00000005a5000000, 0x00000005a5000000|100%| O| |TAMS 0x00000005a4800000| PB 0x00000005a4800000| Untracked | 0 -| 828|0x00000005a5000000, 0x00000005a5800000, 0x00000005a5800000|100%| O| |TAMS 0x00000005a5000000| PB 0x00000005a5000000| Untracked | 0 -| 829|0x00000005a5800000, 0x00000005a6000000, 0x00000005a6000000|100%| O| |TAMS 0x00000005a5800000| PB 0x00000005a5800000| Untracked | 0 -| 830|0x00000005a6000000, 0x00000005a6800000, 0x00000005a6800000|100%| O| |TAMS 0x00000005a6000000| PB 0x00000005a6000000| Untracked | 0 -| 831|0x00000005a6800000, 0x00000005a7000000, 0x00000005a7000000|100%| O| |TAMS 0x00000005a6800000| PB 0x00000005a6800000| Untracked | 0 -| 832|0x00000005a7000000, 0x00000005a7800000, 0x00000005a7800000|100%| O| |TAMS 0x00000005a7000000| PB 0x00000005a7000000| Untracked | 0 -| 833|0x00000005a7800000, 0x00000005a8000000, 0x00000005a8000000|100%| O| |TAMS 0x00000005a7800000| PB 0x00000005a7800000| Untracked | 0 -| 834|0x00000005a8000000, 0x00000005a8800000, 0x00000005a8800000|100%| O| |TAMS 0x00000005a8000000| PB 0x00000005a8000000| Untracked | 0 -| 835|0x00000005a8800000, 0x00000005a9000000, 0x00000005a9000000|100%| O| |TAMS 0x00000005a8800000| PB 0x00000005a8800000| Untracked | 0 -| 836|0x00000005a9000000, 0x00000005a9800000, 0x00000005a9800000|100%| O| |TAMS 0x00000005a9000000| PB 0x00000005a9000000| Untracked | 0 -| 837|0x00000005a9800000, 0x00000005aa000000, 0x00000005aa000000|100%| O| |TAMS 0x00000005a9800000| PB 0x00000005a9800000| Untracked | 0 -| 838|0x00000005aa000000, 0x00000005aa800000, 0x00000005aa800000|100%| O| |TAMS 0x00000005aa000000| PB 0x00000005aa000000| Untracked | 0 -| 839|0x00000005aa800000, 0x00000005ab000000, 0x00000005ab000000|100%| O| |TAMS 0x00000005aa800000| PB 0x00000005aa800000| Untracked | 0 -| 840|0x00000005ab000000, 0x00000005ab800000, 0x00000005ab800000|100%| O| |TAMS 0x00000005ab000000| PB 0x00000005ab000000| Untracked | 0 -| 841|0x00000005ab800000, 0x00000005ac000000, 0x00000005ac000000|100%| O| |TAMS 0x00000005ab800000| PB 0x00000005ab800000| Untracked | 0 -| 842|0x00000005ac000000, 0x00000005ac800000, 0x00000005ac800000|100%| O| |TAMS 0x00000005ac000000| PB 0x00000005ac000000| Untracked | 0 -| 843|0x00000005ac800000, 0x00000005ad000000, 0x00000005ad000000|100%| O| |TAMS 0x00000005ac800000| PB 0x00000005ac800000| Untracked | 0 -| 844|0x00000005ad000000, 0x00000005ad800000, 0x00000005ad800000|100%| O| |TAMS 0x00000005ad000000| PB 0x00000005ad000000| Untracked | 0 -| 845|0x00000005ad800000, 0x00000005ae000000, 0x00000005ae000000|100%| O| |TAMS 0x00000005ad800000| PB 0x00000005ad800000| Untracked | 0 -| 846|0x00000005ae000000, 0x00000005ae800000, 0x00000005ae800000|100%| O| |TAMS 0x00000005ae000000| PB 0x00000005ae000000| Untracked | 0 -| 847|0x00000005ae800000, 0x00000005af000000, 0x00000005af000000|100%| O| |TAMS 0x00000005ae800000| PB 0x00000005ae800000| Untracked | 0 -| 848|0x00000005af000000, 0x00000005af800000, 0x00000005af800000|100%| O| |TAMS 0x00000005af000000| PB 0x00000005af000000| Untracked | 0 -| 849|0x00000005af800000, 0x00000005b0000000, 0x00000005b0000000|100%| O| |TAMS 0x00000005af800000| PB 0x00000005af800000| Untracked | 0 -| 850|0x00000005b0000000, 0x00000005b0800000, 0x00000005b0800000|100%| O| |TAMS 0x00000005b0000000| PB 0x00000005b0000000| Untracked | 0 -| 851|0x00000005b0800000, 0x00000005b1000000, 0x00000005b1000000|100%| O| |TAMS 0x00000005b0800000| PB 0x00000005b0800000| Untracked | 0 -| 852|0x00000005b1000000, 0x00000005b1800000, 0x00000005b1800000|100%| O| |TAMS 0x00000005b1000000| PB 0x00000005b1000000| Untracked | 0 -| 853|0x00000005b1800000, 0x00000005b2000000, 0x00000005b2000000|100%| O| |TAMS 0x00000005b1800000| PB 0x00000005b1800000| Untracked | 0 -| 854|0x00000005b2000000, 0x00000005b2800000, 0x00000005b2800000|100%| O| |TAMS 0x00000005b2000000| PB 0x00000005b2000000| Untracked | 0 -| 855|0x00000005b2800000, 0x00000005b3000000, 0x00000005b3000000|100%| O| |TAMS 0x00000005b2800000| PB 0x00000005b2800000| Untracked | 0 -| 856|0x00000005b3000000, 0x00000005b3800000, 0x00000005b3800000|100%| O| |TAMS 0x00000005b3000000| PB 0x00000005b3000000| Untracked | 0 -| 857|0x00000005b3800000, 0x00000005b4000000, 0x00000005b4000000|100%| O| |TAMS 0x00000005b3800000| PB 0x00000005b3800000| Untracked | 0 -| 858|0x00000005b4000000, 0x00000005b4800000, 0x00000005b4800000|100%| O| |TAMS 0x00000005b4000000| PB 0x00000005b4000000| Untracked | 0 -| 859|0x00000005b4800000, 0x00000005b5000000, 0x00000005b5000000|100%| O| |TAMS 0x00000005b4800000| PB 0x00000005b4800000| Untracked | 0 -| 860|0x00000005b5000000, 0x00000005b5800000, 0x00000005b5800000|100%| O| |TAMS 0x00000005b5000000| PB 0x00000005b5000000| Untracked | 0 -| 861|0x00000005b5800000, 0x00000005b6000000, 0x00000005b6000000|100%| O| |TAMS 0x00000005b5800000| PB 0x00000005b5800000| Untracked | 0 -| 862|0x00000005b6000000, 0x00000005b6800000, 0x00000005b6800000|100%| O| |TAMS 0x00000005b6000000| PB 0x00000005b6000000| Untracked | 0 -| 863|0x00000005b6800000, 0x00000005b7000000, 0x00000005b7000000|100%| O| |TAMS 0x00000005b6800000| PB 0x00000005b6800000| Untracked | 0 -| 864|0x00000005b7000000, 0x00000005b7800000, 0x00000005b7800000|100%| O| |TAMS 0x00000005b7000000| PB 0x00000005b7000000| Untracked | 0 -| 865|0x00000005b7800000, 0x00000005b8000000, 0x00000005b8000000|100%| O| |TAMS 0x00000005b7800000| PB 0x00000005b7800000| Untracked | 0 -| 866|0x00000005b8000000, 0x00000005b8800000, 0x00000005b8800000|100%| O| |TAMS 0x00000005b8000000| PB 0x00000005b8000000| Untracked | 0 -| 867|0x00000005b8800000, 0x00000005b89a1208, 0x00000005b9000000| 20%| O| |TAMS 0x00000005b8800000| PB 0x00000005b8800000| Untracked | 0 -| 868|0x00000005b9000000, 0x00000005b9000000, 0x00000005b9800000| 0%| F| |TAMS 0x00000005b9000000| PB 0x00000005b9000000| Untracked | 0 -| 869|0x00000005b9800000, 0x00000005b9800000, 0x00000005ba000000| 0%| F| |TAMS 0x00000005b9800000| PB 0x00000005b9800000| Untracked | 0 -| 870|0x00000005ba000000, 0x00000005ba000000, 0x00000005ba800000| 0%| F| |TAMS 0x00000005ba000000| PB 0x00000005ba000000| Untracked | 0 -| 871|0x00000005ba800000, 0x00000005ba800000, 0x00000005bb000000| 0%| F| |TAMS 0x00000005ba800000| PB 0x00000005ba800000| Untracked | 0 -| 872|0x00000005bb000000, 0x00000005bb000000, 0x00000005bb800000| 0%| F| |TAMS 0x00000005bb000000| PB 0x00000005bb000000| Untracked | 0 -| 873|0x00000005bb800000, 0x00000005bb800000, 0x00000005bc000000| 0%| F| |TAMS 0x00000005bb800000| PB 0x00000005bb800000| Untracked | 0 -| 874|0x00000005bc000000, 0x00000005bc000000, 0x00000005bc800000| 0%| F| |TAMS 0x00000005bc000000| PB 0x00000005bc000000| Untracked | 0 -| 875|0x00000005bc800000, 0x00000005bc800000, 0x00000005bd000000| 0%| F| |TAMS 0x00000005bc800000| PB 0x00000005bc800000| Untracked | 0 -| 876|0x00000005bd000000, 0x00000005bd000000, 0x00000005bd800000| 0%| F| |TAMS 0x00000005bd000000| PB 0x00000005bd000000| Untracked | 0 -| 877|0x00000005bd800000, 0x00000005bd800000, 0x00000005be000000| 0%| F| |TAMS 0x00000005bd800000| PB 0x00000005bd800000| Untracked | 0 -| 878|0x00000005be000000, 0x00000005be000000, 0x00000005be800000| 0%| F| |TAMS 0x00000005be000000| PB 0x00000005be000000| Untracked | 0 -| 879|0x00000005be800000, 0x00000005be800000, 0x00000005bf000000| 0%| F| |TAMS 0x00000005be800000| PB 0x00000005be800000| Untracked | 0 -| 880|0x00000005bf000000, 0x00000005bf000000, 0x00000005bf800000| 0%| F| |TAMS 0x00000005bf000000| PB 0x00000005bf000000| Untracked | 0 -| 881|0x00000005bf800000, 0x00000005bf800000, 0x00000005c0000000| 0%| F| |TAMS 0x00000005bf800000| PB 0x00000005bf800000| Untracked | 0 -| 882|0x00000005c0000000, 0x00000005c0000000, 0x00000005c0800000| 0%| F| |TAMS 0x00000005c0000000| PB 0x00000005c0000000| Untracked | 0 -| 883|0x00000005c0800000, 0x00000005c0800000, 0x00000005c1000000| 0%| F| |TAMS 0x00000005c0800000| PB 0x00000005c0800000| Untracked | 0 -| 884|0x00000005c1000000, 0x00000005c1000000, 0x00000005c1800000| 0%| F| |TAMS 0x00000005c1000000| PB 0x00000005c1000000| Untracked | 0 -| 885|0x00000005c1800000, 0x00000005c1800000, 0x00000005c2000000| 0%| F| |TAMS 0x00000005c1800000| PB 0x00000005c1800000| Untracked | 0 -| 886|0x00000005c2000000, 0x00000005c2000000, 0x00000005c2800000| 0%| F| |TAMS 0x00000005c2000000| PB 0x00000005c2000000| Untracked | 0 -| 887|0x00000005c2800000, 0x00000005c2800000, 0x00000005c3000000| 0%| F| |TAMS 0x00000005c2800000| PB 0x00000005c2800000| Untracked | 0 -| 888|0x00000005c3000000, 0x00000005c3000000, 0x00000005c3800000| 0%| F| |TAMS 0x00000005c3000000| PB 0x00000005c3000000| Untracked | 0 -| 889|0x00000005c3800000, 0x00000005c3800000, 0x00000005c4000000| 0%| F| |TAMS 0x00000005c3800000| PB 0x00000005c3800000| Untracked | 0 -| 890|0x00000005c4000000, 0x00000005c4000000, 0x00000005c4800000| 0%| F| |TAMS 0x00000005c4000000| PB 0x00000005c4000000| Untracked | 0 -| 891|0x00000005c4800000, 0x00000005c4800000, 0x00000005c5000000| 0%| F| |TAMS 0x00000005c4800000| PB 0x00000005c4800000| Untracked | 0 -| 892|0x00000005c5000000, 0x00000005c5000000, 0x00000005c5800000| 0%| F| |TAMS 0x00000005c5000000| PB 0x00000005c5000000| Untracked | 0 -| 893|0x00000005c5800000, 0x00000005c5800000, 0x00000005c6000000| 0%| F| |TAMS 0x00000005c5800000| PB 0x00000005c5800000| Untracked | 0 -| 894|0x00000005c6000000, 0x00000005c6000000, 0x00000005c6800000| 0%| F| |TAMS 0x00000005c6000000| PB 0x00000005c6000000| Untracked | 0 -| 895|0x00000005c6800000, 0x00000005c6800000, 0x00000005c7000000| 0%| F| |TAMS 0x00000005c6800000| PB 0x00000005c6800000| Untracked | 0 -| 896|0x00000005c7000000, 0x00000005c7000000, 0x00000005c7800000| 0%| F| |TAMS 0x00000005c7000000| PB 0x00000005c7000000| Untracked | 0 -| 897|0x00000005c7800000, 0x00000005c7800000, 0x00000005c8000000| 0%| F| |TAMS 0x00000005c7800000| PB 0x00000005c7800000| Untracked | 0 -| 898|0x00000005c8000000, 0x00000005c8000000, 0x00000005c8800000| 0%| F| |TAMS 0x00000005c8000000| PB 0x00000005c8000000| Untracked | 0 -| 899|0x00000005c8800000, 0x00000005c8800000, 0x00000005c9000000| 0%| F| |TAMS 0x00000005c8800000| PB 0x00000005c8800000| Untracked | 0 -| 900|0x00000005c9000000, 0x00000005c9000000, 0x00000005c9800000| 0%| F| |TAMS 0x00000005c9000000| PB 0x00000005c9000000| Untracked | 0 -| 901|0x00000005c9800000, 0x00000005c9800000, 0x00000005ca000000| 0%| F| |TAMS 0x00000005c9800000| PB 0x00000005c9800000| Untracked | 0 -| 902|0x00000005ca000000, 0x00000005ca000000, 0x00000005ca800000| 0%| F| |TAMS 0x00000005ca000000| PB 0x00000005ca000000| Untracked | 0 -| 903|0x00000005ca800000, 0x00000005ca800000, 0x00000005cb000000| 0%| F| |TAMS 0x00000005ca800000| PB 0x00000005ca800000| Untracked | 0 -| 904|0x00000005cb000000, 0x00000005cb000000, 0x00000005cb800000| 0%| F| |TAMS 0x00000005cb000000| PB 0x00000005cb000000| Untracked | 0 -| 905|0x00000005cb800000, 0x00000005cb800000, 0x00000005cc000000| 0%| F| |TAMS 0x00000005cb800000| PB 0x00000005cb800000| Untracked | 0 -| 906|0x00000005cc000000, 0x00000005cc000000, 0x00000005cc800000| 0%| F| |TAMS 0x00000005cc000000| PB 0x00000005cc000000| Untracked | 0 -| 907|0x00000005cc800000, 0x00000005cc800000, 0x00000005cd000000| 0%| F| |TAMS 0x00000005cc800000| PB 0x00000005cc800000| Untracked | 0 -| 908|0x00000005cd000000, 0x00000005cd000000, 0x00000005cd800000| 0%| F| |TAMS 0x00000005cd000000| PB 0x00000005cd000000| Untracked | 0 -| 909|0x00000005cd800000, 0x00000005cd800000, 0x00000005ce000000| 0%| F| |TAMS 0x00000005cd800000| PB 0x00000005cd800000| Untracked | 0 -| 910|0x00000005ce000000, 0x00000005ce000000, 0x00000005ce800000| 0%| F| |TAMS 0x00000005ce000000| PB 0x00000005ce000000| Untracked | 0 -| 911|0x00000005ce800000, 0x00000005ce800000, 0x00000005cf000000| 0%| F| |TAMS 0x00000005ce800000| PB 0x00000005ce800000| Untracked | 0 -| 912|0x00000005cf000000, 0x00000005cf000000, 0x00000005cf800000| 0%| F| |TAMS 0x00000005cf000000| PB 0x00000005cf000000| Untracked | 0 -| 913|0x00000005cf800000, 0x00000005cf800000, 0x00000005d0000000| 0%| F| |TAMS 0x00000005cf800000| PB 0x00000005cf800000| Untracked | 0 -| 914|0x00000005d0000000, 0x00000005d0000000, 0x00000005d0800000| 0%| F| |TAMS 0x00000005d0000000| PB 0x00000005d0000000| Untracked | 0 -| 915|0x00000005d0800000, 0x00000005d0800000, 0x00000005d1000000| 0%| F| |TAMS 0x00000005d0800000| PB 0x00000005d0800000| Untracked | 0 -| 916|0x00000005d1000000, 0x00000005d1000000, 0x00000005d1800000| 0%| F| |TAMS 0x00000005d1000000| PB 0x00000005d1000000| Untracked | 0 -| 917|0x00000005d1800000, 0x00000005d1800000, 0x00000005d2000000| 0%| F| |TAMS 0x00000005d1800000| PB 0x00000005d1800000| Untracked | 0 -| 918|0x00000005d2000000, 0x00000005d2000000, 0x00000005d2800000| 0%| F| |TAMS 0x00000005d2000000| PB 0x00000005d2000000| Untracked | 0 -| 919|0x00000005d2800000, 0x00000005d2800000, 0x00000005d3000000| 0%| F| |TAMS 0x00000005d2800000| PB 0x00000005d2800000| Untracked | 0 -| 920|0x00000005d3000000, 0x00000005d3000000, 0x00000005d3800000| 0%| F| |TAMS 0x00000005d3000000| PB 0x00000005d3000000| Untracked | 0 -| 921|0x00000005d3800000, 0x00000005d3800000, 0x00000005d4000000| 0%| F| |TAMS 0x00000005d3800000| PB 0x00000005d3800000| Untracked | 0 -| 922|0x00000005d4000000, 0x00000005d4000000, 0x00000005d4800000| 0%| F| |TAMS 0x00000005d4000000| PB 0x00000005d4000000| Untracked | 0 -| 923|0x00000005d4800000, 0x00000005d4800000, 0x00000005d5000000| 0%| F| |TAMS 0x00000005d4800000| PB 0x00000005d4800000| Untracked | 0 -| 924|0x00000005d5000000, 0x00000005d5000000, 0x00000005d5800000| 0%| F| |TAMS 0x00000005d5000000| PB 0x00000005d5000000| Untracked | 0 -| 925|0x00000005d5800000, 0x00000005d5800000, 0x00000005d6000000| 0%| F| |TAMS 0x00000005d5800000| PB 0x00000005d5800000| Untracked | 0 -| 926|0x00000005d6000000, 0x00000005d6000000, 0x00000005d6800000| 0%| F| |TAMS 0x00000005d6000000| PB 0x00000005d6000000| Untracked | 0 -| 927|0x00000005d6800000, 0x00000005d6800000, 0x00000005d7000000| 0%| F| |TAMS 0x00000005d6800000| PB 0x00000005d6800000| Untracked | 0 -| 928|0x00000005d7000000, 0x00000005d7000000, 0x00000005d7800000| 0%| F| |TAMS 0x00000005d7000000| PB 0x00000005d7000000| Untracked | 0 -| 929|0x00000005d7800000, 0x00000005d7800000, 0x00000005d8000000| 0%| F| |TAMS 0x00000005d7800000| PB 0x00000005d7800000| Untracked | 0 -| 930|0x00000005d8000000, 0x00000005d8000000, 0x00000005d8800000| 0%| F| |TAMS 0x00000005d8000000| PB 0x00000005d8000000| Untracked | 0 -| 931|0x00000005d8800000, 0x00000005d8800000, 0x00000005d9000000| 0%| F| |TAMS 0x00000005d8800000| PB 0x00000005d8800000| Untracked | 0 -| 932|0x00000005d9000000, 0x00000005d9000000, 0x00000005d9800000| 0%| F| |TAMS 0x00000005d9000000| PB 0x00000005d9000000| Untracked | 0 -| 933|0x00000005d9800000, 0x00000005d9800000, 0x00000005da000000| 0%| F| |TAMS 0x00000005d9800000| PB 0x00000005d9800000| Untracked | 0 -| 934|0x00000005da000000, 0x00000005da000000, 0x00000005da800000| 0%| F| |TAMS 0x00000005da000000| PB 0x00000005da000000| Untracked | 0 -| 935|0x00000005da800000, 0x00000005da800000, 0x00000005db000000| 0%| F| |TAMS 0x00000005da800000| PB 0x00000005da800000| Untracked | 0 -| 936|0x00000005db000000, 0x00000005db000000, 0x00000005db800000| 0%| F| |TAMS 0x00000005db000000| PB 0x00000005db000000| Untracked | 0 -| 937|0x00000005db800000, 0x00000005db800000, 0x00000005dc000000| 0%| F| |TAMS 0x00000005db800000| PB 0x00000005db800000| Untracked | 0 -| 938|0x00000005dc000000, 0x00000005dc000000, 0x00000005dc800000| 0%| F| |TAMS 0x00000005dc000000| PB 0x00000005dc000000| Untracked | 0 -| 939|0x00000005dc800000, 0x00000005dc800000, 0x00000005dd000000| 0%| F| |TAMS 0x00000005dc800000| PB 0x00000005dc800000| Untracked | 0 -| 940|0x00000005dd000000, 0x00000005dd000000, 0x00000005dd800000| 0%| F| |TAMS 0x00000005dd000000| PB 0x00000005dd000000| Untracked | 0 -| 941|0x00000005dd800000, 0x00000005dd800000, 0x00000005de000000| 0%| F| |TAMS 0x00000005dd800000| PB 0x00000005dd800000| Untracked | 0 -| 942|0x00000005de000000, 0x00000005de000000, 0x00000005de800000| 0%| F| |TAMS 0x00000005de000000| PB 0x00000005de000000| Untracked | 0 -| 943|0x00000005de800000, 0x00000005de800000, 0x00000005df000000| 0%| F| |TAMS 0x00000005de800000| PB 0x00000005de800000| Untracked | 0 -| 944|0x00000005df000000, 0x00000005df000000, 0x00000005df800000| 0%| F| |TAMS 0x00000005df000000| PB 0x00000005df000000| Untracked | 0 -| 945|0x00000005df800000, 0x00000005df800000, 0x00000005e0000000| 0%| F| |TAMS 0x00000005df800000| PB 0x00000005df800000| Untracked | 0 -| 946|0x00000005e0000000, 0x00000005e0000000, 0x00000005e0800000| 0%| F| |TAMS 0x00000005e0000000| PB 0x00000005e0000000| Untracked | 0 -| 947|0x00000005e0800000, 0x00000005e0800000, 0x00000005e1000000| 0%| F| |TAMS 0x00000005e0800000| PB 0x00000005e0800000| Untracked | 0 -| 948|0x00000005e1000000, 0x00000005e1000000, 0x00000005e1800000| 0%| F| |TAMS 0x00000005e1000000| PB 0x00000005e1000000| Untracked | 0 -| 949|0x00000005e1800000, 0x00000005e1800000, 0x00000005e2000000| 0%| F| |TAMS 0x00000005e1800000| PB 0x00000005e1800000| Untracked | 0 -| 950|0x00000005e2000000, 0x00000005e2000000, 0x00000005e2800000| 0%| F| |TAMS 0x00000005e2000000| PB 0x00000005e2000000| Untracked | 0 -| 951|0x00000005e2800000, 0x00000005e2800000, 0x00000005e3000000| 0%| F| |TAMS 0x00000005e2800000| PB 0x00000005e2800000| Untracked | 0 -| 952|0x00000005e3000000, 0x00000005e3000000, 0x00000005e3800000| 0%| F| |TAMS 0x00000005e3000000| PB 0x00000005e3000000| Untracked | 0 -| 953|0x00000005e3800000, 0x00000005e3800000, 0x00000005e4000000| 0%| F| |TAMS 0x00000005e3800000| PB 0x00000005e3800000| Untracked | 0 -| 954|0x00000005e4000000, 0x00000005e4000000, 0x00000005e4800000| 0%| F| |TAMS 0x00000005e4000000| PB 0x00000005e4000000| Untracked | 0 -| 955|0x00000005e4800000, 0x00000005e4800000, 0x00000005e5000000| 0%| F| |TAMS 0x00000005e4800000| PB 0x00000005e4800000| Untracked | 0 -| 956|0x00000005e5000000, 0x00000005e5000000, 0x00000005e5800000| 0%| F| |TAMS 0x00000005e5000000| PB 0x00000005e5000000| Untracked | 0 -| 957|0x00000005e5800000, 0x00000005e5800000, 0x00000005e6000000| 0%| F| |TAMS 0x00000005e5800000| PB 0x00000005e5800000| Untracked | 0 -| 958|0x00000005e6000000, 0x00000005e6000000, 0x00000005e6800000| 0%| F| |TAMS 0x00000005e6000000| PB 0x00000005e6000000| Untracked | 0 -| 959|0x00000005e6800000, 0x00000005e6800000, 0x00000005e7000000| 0%| F| |TAMS 0x00000005e6800000| PB 0x00000005e6800000| Untracked | 0 -| 960|0x00000005e7000000, 0x00000005e7000000, 0x00000005e7800000| 0%| F| |TAMS 0x00000005e7000000| PB 0x00000005e7000000| Untracked | 0 -| 961|0x00000005e7800000, 0x00000005e7800000, 0x00000005e8000000| 0%| F| |TAMS 0x00000005e7800000| PB 0x00000005e7800000| Untracked | 0 -| 962|0x00000005e8000000, 0x00000005e8000000, 0x00000005e8800000| 0%| F| |TAMS 0x00000005e8000000| PB 0x00000005e8000000| Untracked | 0 -| 963|0x00000005e8800000, 0x00000005e8800000, 0x00000005e9000000| 0%| F| |TAMS 0x00000005e8800000| PB 0x00000005e8800000| Untracked | 0 -| 964|0x00000005e9000000, 0x00000005e9000000, 0x00000005e9800000| 0%| F| |TAMS 0x00000005e9000000| PB 0x00000005e9000000| Untracked | 0 -| 965|0x00000005e9800000, 0x00000005e9800000, 0x00000005ea000000| 0%| F| |TAMS 0x00000005e9800000| PB 0x00000005e9800000| Untracked | 0 -| 966|0x00000005ea000000, 0x00000005ea000000, 0x00000005ea800000| 0%| F| |TAMS 0x00000005ea000000| PB 0x00000005ea000000| Untracked | 0 -| 967|0x00000005ea800000, 0x00000005ea800000, 0x00000005eb000000| 0%| F| |TAMS 0x00000005ea800000| PB 0x00000005ea800000| Untracked | 0 -| 968|0x00000005eb000000, 0x00000005eb000000, 0x00000005eb800000| 0%| F| |TAMS 0x00000005eb000000| PB 0x00000005eb000000| Untracked | 0 -| 969|0x00000005eb800000, 0x00000005eb800000, 0x00000005ec000000| 0%| F| |TAMS 0x00000005eb800000| PB 0x00000005eb800000| Untracked | 0 -| 970|0x00000005ec000000, 0x00000005ec000000, 0x00000005ec800000| 0%| F| |TAMS 0x00000005ec000000| PB 0x00000005ec000000| Untracked | 0 -| 971|0x00000005ec800000, 0x00000005ec800000, 0x00000005ed000000| 0%| F| |TAMS 0x00000005ec800000| PB 0x00000005ec800000| Untracked | 0 -| 972|0x00000005ed000000, 0x00000005ed000000, 0x00000005ed800000| 0%| F| |TAMS 0x00000005ed000000| PB 0x00000005ed000000| Untracked | 0 -| 973|0x00000005ed800000, 0x00000005ed800000, 0x00000005ee000000| 0%| F| |TAMS 0x00000005ed800000| PB 0x00000005ed800000| Untracked | 0 -| 974|0x00000005ee000000, 0x00000005ee000000, 0x00000005ee800000| 0%| F| |TAMS 0x00000005ee000000| PB 0x00000005ee000000| Untracked | 0 -| 975|0x00000005ee800000, 0x00000005ee800000, 0x00000005ef000000| 0%| F| |TAMS 0x00000005ee800000| PB 0x00000005ee800000| Untracked | 0 -| 976|0x00000005ef000000, 0x00000005ef000000, 0x00000005ef800000| 0%| F| |TAMS 0x00000005ef000000| PB 0x00000005ef000000| Untracked | 0 -| 977|0x00000005ef800000, 0x00000005ef800000, 0x00000005f0000000| 0%| F| |TAMS 0x00000005ef800000| PB 0x00000005ef800000| Untracked | 0 -| 978|0x00000005f0000000, 0x00000005f0000000, 0x00000005f0800000| 0%| F| |TAMS 0x00000005f0000000| PB 0x00000005f0000000| Untracked | 0 -| 979|0x00000005f0800000, 0x00000005f0800000, 0x00000005f1000000| 0%| F| |TAMS 0x00000005f0800000| PB 0x00000005f0800000| Untracked | 0 -| 980|0x00000005f1000000, 0x00000005f1000000, 0x00000005f1800000| 0%| F| |TAMS 0x00000005f1000000| PB 0x00000005f1000000| Untracked | 0 -| 981|0x00000005f1800000, 0x00000005f1800000, 0x00000005f2000000| 0%| F| |TAMS 0x00000005f1800000| PB 0x00000005f1800000| Untracked | 0 -| 982|0x00000005f2000000, 0x00000005f2000000, 0x00000005f2800000| 0%| F| |TAMS 0x00000005f2000000| PB 0x00000005f2000000| Untracked | 0 -| 983|0x00000005f2800000, 0x00000005f2800000, 0x00000005f3000000| 0%| F| |TAMS 0x00000005f2800000| PB 0x00000005f2800000| Untracked | 0 -| 984|0x00000005f3000000, 0x00000005f3000000, 0x00000005f3800000| 0%| F| |TAMS 0x00000005f3000000| PB 0x00000005f3000000| Untracked | 0 -| 985|0x00000005f3800000, 0x00000005f3800000, 0x00000005f4000000| 0%| F| |TAMS 0x00000005f3800000| PB 0x00000005f3800000| Untracked | 0 -| 986|0x00000005f4000000, 0x00000005f4000000, 0x00000005f4800000| 0%| F| |TAMS 0x00000005f4000000| PB 0x00000005f4000000| Untracked | 0 -| 987|0x00000005f4800000, 0x00000005f4800000, 0x00000005f5000000| 0%| F| |TAMS 0x00000005f4800000| PB 0x00000005f4800000| Untracked | 0 -| 988|0x00000005f5000000, 0x00000005f5000000, 0x00000005f5800000| 0%| F| |TAMS 0x00000005f5000000| PB 0x00000005f5000000| Untracked | 0 -| 989|0x00000005f5800000, 0x00000005f5800000, 0x00000005f6000000| 0%| F| |TAMS 0x00000005f5800000| PB 0x00000005f5800000| Untracked | 0 -| 990|0x00000005f6000000, 0x00000005f6000000, 0x00000005f6800000| 0%| F| |TAMS 0x00000005f6000000| PB 0x00000005f6000000| Untracked | 0 -| 991|0x00000005f6800000, 0x00000005f6800000, 0x00000005f7000000| 0%| F| |TAMS 0x00000005f6800000| PB 0x00000005f6800000| Untracked | 0 -| 992|0x00000005f7000000, 0x00000005f7000000, 0x00000005f7800000| 0%| F| |TAMS 0x00000005f7000000| PB 0x00000005f7000000| Untracked | 0 -| 993|0x00000005f7800000, 0x00000005f7800000, 0x00000005f8000000| 0%| F| |TAMS 0x00000005f7800000| PB 0x00000005f7800000| Untracked | 0 -| 994|0x00000005f8000000, 0x00000005f8000000, 0x00000005f8800000| 0%| F| |TAMS 0x00000005f8000000| PB 0x00000005f8000000| Untracked | 0 -| 995|0x00000005f8800000, 0x00000005f8800000, 0x00000005f9000000| 0%| F| |TAMS 0x00000005f8800000| PB 0x00000005f8800000| Untracked | 0 -| 996|0x00000005f9000000, 0x00000005f9000000, 0x00000005f9800000| 0%| F| |TAMS 0x00000005f9000000| PB 0x00000005f9000000| Untracked | 0 -| 997|0x00000005f9800000, 0x00000005f9800000, 0x00000005fa000000| 0%| F| |TAMS 0x00000005f9800000| PB 0x00000005f9800000| Untracked | 0 -| 998|0x00000005fa000000, 0x00000005fa000000, 0x00000005fa800000| 0%| F| |TAMS 0x00000005fa000000| PB 0x00000005fa000000| Untracked | 0 -| 999|0x00000005fa800000, 0x00000005fa800000, 0x00000005fb000000| 0%| F| |TAMS 0x00000005fa800000| PB 0x00000005fa800000| Untracked | 0 -|1000|0x00000005fb000000, 0x00000005fb000000, 0x00000005fb800000| 0%| F| |TAMS 0x00000005fb000000| PB 0x00000005fb000000| Untracked | 0 -|1001|0x00000005fb800000, 0x00000005fb800000, 0x00000005fc000000| 0%| F| |TAMS 0x00000005fb800000| PB 0x00000005fb800000| Untracked | 0 -|1002|0x00000005fc000000, 0x00000005fc000000, 0x00000005fc800000| 0%| F| |TAMS 0x00000005fc000000| PB 0x00000005fc000000| Untracked | 0 -|1003|0x00000005fc800000, 0x00000005fc800000, 0x00000005fd000000| 0%| F| |TAMS 0x00000005fc800000| PB 0x00000005fc800000| Untracked | 0 -|1004|0x00000005fd000000, 0x00000005fd000000, 0x00000005fd800000| 0%| F| |TAMS 0x00000005fd000000| PB 0x00000005fd000000| Untracked | 0 -|1005|0x00000005fd800000, 0x00000005fd800000, 0x00000005fe000000| 0%| F| |TAMS 0x00000005fd800000| PB 0x00000005fd800000| Untracked | 0 -|1006|0x00000005fe000000, 0x00000005fe000000, 0x00000005fe800000| 0%| F| |TAMS 0x00000005fe000000| PB 0x00000005fe000000| Untracked | 0 -|1007|0x00000005fe800000, 0x00000005fe800000, 0x00000005ff000000| 0%| F| |TAMS 0x00000005fe800000| PB 0x00000005fe800000| Untracked | 0 -|1008|0x00000005ff000000, 0x00000005ff000000, 0x00000005ff800000| 0%| F| |TAMS 0x00000005ff000000| PB 0x00000005ff000000| Untracked | 0 -|1009|0x00000005ff800000, 0x00000005ff800000, 0x0000000600000000| 0%| F| |TAMS 0x00000005ff800000| PB 0x00000005ff800000| Untracked | 0 -|1010|0x0000000600000000, 0x0000000600000000, 0x0000000600800000| 0%| F| |TAMS 0x0000000600000000| PB 0x0000000600000000| Untracked | 0 -|1011|0x0000000600800000, 0x0000000600800000, 0x0000000601000000| 0%| F| |TAMS 0x0000000600800000| PB 0x0000000600800000| Untracked | 0 -|1012|0x0000000601000000, 0x0000000601000000, 0x0000000601800000| 0%| F| |TAMS 0x0000000601000000| PB 0x0000000601000000| Untracked | 0 -|1013|0x0000000601800000, 0x0000000601800000, 0x0000000602000000| 0%| F| |TAMS 0x0000000601800000| PB 0x0000000601800000| Untracked | 0 -|1014|0x0000000602000000, 0x0000000602000000, 0x0000000602800000| 0%| F| |TAMS 0x0000000602000000| PB 0x0000000602000000| Untracked | 0 -|1015|0x0000000602800000, 0x0000000602800000, 0x0000000603000000| 0%| F| |TAMS 0x0000000602800000| PB 0x0000000602800000| Untracked | 0 -|1016|0x0000000603000000, 0x0000000603000000, 0x0000000603800000| 0%| F| |TAMS 0x0000000603000000| PB 0x0000000603000000| Untracked | 0 -|1017|0x0000000603800000, 0x0000000603800000, 0x0000000604000000| 0%| F| |TAMS 0x0000000603800000| PB 0x0000000603800000| Untracked | 0 -|1018|0x0000000604000000, 0x0000000604000000, 0x0000000604800000| 0%| F| |TAMS 0x0000000604000000| PB 0x0000000604000000| Untracked | 0 -|1019|0x0000000604800000, 0x0000000604800000, 0x0000000605000000| 0%| F| |TAMS 0x0000000604800000| PB 0x0000000604800000| Untracked | 0 -|1020|0x0000000605000000, 0x0000000605000000, 0x0000000605800000| 0%| F| |TAMS 0x0000000605000000| PB 0x0000000605000000| Untracked | 0 -|1021|0x0000000605800000, 0x0000000605800000, 0x0000000606000000| 0%| F| |TAMS 0x0000000605800000| PB 0x0000000605800000| Untracked | 0 -|1022|0x0000000606000000, 0x0000000606000000, 0x0000000606800000| 0%| F| |TAMS 0x0000000606000000| PB 0x0000000606000000| Untracked | 0 -|1023|0x0000000606800000, 0x0000000606800000, 0x0000000607000000| 0%| F| |TAMS 0x0000000606800000| PB 0x0000000606800000| Untracked | 0 -|1024|0x0000000607000000, 0x0000000607000000, 0x0000000607800000| 0%| F| |TAMS 0x0000000607000000| PB 0x0000000607000000| Untracked | 0 -|1025|0x0000000607800000, 0x0000000607800000, 0x0000000608000000| 0%| F| |TAMS 0x0000000607800000| PB 0x0000000607800000| Untracked | 0 -|1026|0x0000000608000000, 0x0000000608000000, 0x0000000608800000| 0%| F| |TAMS 0x0000000608000000| PB 0x0000000608000000| Untracked | 0 -|1027|0x0000000608800000, 0x0000000608800000, 0x0000000609000000| 0%| F| |TAMS 0x0000000608800000| PB 0x0000000608800000| Untracked | 0 -|1028|0x0000000609000000, 0x0000000609000000, 0x0000000609800000| 0%| F| |TAMS 0x0000000609000000| PB 0x0000000609000000| Untracked | 0 -|1029|0x0000000609800000, 0x0000000609800000, 0x000000060a000000| 0%| F| |TAMS 0x0000000609800000| PB 0x0000000609800000| Untracked | 0 -|1030|0x000000060a000000, 0x000000060a000000, 0x000000060a800000| 0%| F| |TAMS 0x000000060a000000| PB 0x000000060a000000| Untracked | 0 -|1031|0x000000060a800000, 0x000000060a800000, 0x000000060b000000| 0%| F| |TAMS 0x000000060a800000| PB 0x000000060a800000| Untracked | 0 -|1032|0x000000060b000000, 0x000000060b000000, 0x000000060b800000| 0%| F| |TAMS 0x000000060b000000| PB 0x000000060b000000| Untracked | 0 -|1033|0x000000060b800000, 0x000000060b800000, 0x000000060c000000| 0%| F| |TAMS 0x000000060b800000| PB 0x000000060b800000| Untracked | 0 -|1034|0x000000060c000000, 0x000000060c000000, 0x000000060c800000| 0%| F| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 -|1035|0x000000060c800000, 0x000000060c800000, 0x000000060d000000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 -|1036|0x000000060d000000, 0x000000060d000000, 0x000000060d800000| 0%| F| |TAMS 0x000000060d000000| PB 0x000000060d000000| Untracked | 0 -|1037|0x000000060d800000, 0x000000060d800000, 0x000000060e000000| 0%| F| |TAMS 0x000000060d800000| PB 0x000000060d800000| Untracked | 0 -|1038|0x000000060e000000, 0x000000060e000000, 0x000000060e800000| 0%| F| |TAMS 0x000000060e000000| PB 0x000000060e000000| Untracked | 0 -|1039|0x000000060e800000, 0x000000060e800000, 0x000000060f000000| 0%| F| |TAMS 0x000000060e800000| PB 0x000000060e800000| Untracked | 0 -|1040|0x000000060f000000, 0x000000060f000000, 0x000000060f800000| 0%| F| |TAMS 0x000000060f000000| PB 0x000000060f000000| Untracked | 0 -|1041|0x000000060f800000, 0x000000060f800000, 0x0000000610000000| 0%| F| |TAMS 0x000000060f800000| PB 0x000000060f800000| Untracked | 0 -|1042|0x0000000610000000, 0x0000000610000000, 0x0000000610800000| 0%| F| |TAMS 0x0000000610000000| PB 0x0000000610000000| Untracked | 0 -|1043|0x0000000610800000, 0x0000000610800000, 0x0000000611000000| 0%| F| |TAMS 0x0000000610800000| PB 0x0000000610800000| Untracked | 0 -|1044|0x0000000611000000, 0x0000000611000000, 0x0000000611800000| 0%| F| |TAMS 0x0000000611000000| PB 0x0000000611000000| Untracked | 0 -|1045|0x0000000611800000, 0x0000000611800000, 0x0000000612000000| 0%| F| |TAMS 0x0000000611800000| PB 0x0000000611800000| Untracked | 0 -|1046|0x0000000612000000, 0x0000000612000000, 0x0000000612800000| 0%| F| |TAMS 0x0000000612000000| PB 0x0000000612000000| Untracked | 0 -|1047|0x0000000612800000, 0x0000000612800000, 0x0000000613000000| 0%| F| |TAMS 0x0000000612800000| PB 0x0000000612800000| Untracked | 0 -|1048|0x0000000613000000, 0x0000000613000000, 0x0000000613800000| 0%| F| |TAMS 0x0000000613000000| PB 0x0000000613000000| Untracked | 0 -|1049|0x0000000613800000, 0x0000000613800000, 0x0000000614000000| 0%| F| |TAMS 0x0000000613800000| PB 0x0000000613800000| Untracked | 0 -|1050|0x0000000614000000, 0x0000000614000000, 0x0000000614800000| 0%| F| |TAMS 0x0000000614000000| PB 0x0000000614000000| Untracked | 0 -|1051|0x0000000614800000, 0x0000000614800000, 0x0000000615000000| 0%| F| |TAMS 0x0000000614800000| PB 0x0000000614800000| Untracked | 0 -|1052|0x0000000615000000, 0x0000000615000000, 0x0000000615800000| 0%| F| |TAMS 0x0000000615000000| PB 0x0000000615000000| Untracked | 0 -|1053|0x0000000615800000, 0x0000000615800000, 0x0000000616000000| 0%| F| |TAMS 0x0000000615800000| PB 0x0000000615800000| Untracked | 0 -|1054|0x0000000616000000, 0x0000000616000000, 0x0000000616800000| 0%| F| |TAMS 0x0000000616000000| PB 0x0000000616000000| Untracked | 0 -|1055|0x0000000616800000, 0x0000000616800000, 0x0000000617000000| 0%| F| |TAMS 0x0000000616800000| PB 0x0000000616800000| Untracked | 0 -|1056|0x0000000617000000, 0x0000000617000000, 0x0000000617800000| 0%| F| |TAMS 0x0000000617000000| PB 0x0000000617000000| Untracked | 0 -|1057|0x0000000617800000, 0x0000000617800000, 0x0000000618000000| 0%| F| |TAMS 0x0000000617800000| PB 0x0000000617800000| Untracked | 0 -|1058|0x0000000618000000, 0x0000000618000000, 0x0000000618800000| 0%| F| |TAMS 0x0000000618000000| PB 0x0000000618000000| Untracked | 0 -|1059|0x0000000618800000, 0x0000000618800000, 0x0000000619000000| 0%| F| |TAMS 0x0000000618800000| PB 0x0000000618800000| Untracked | 0 -|1060|0x0000000619000000, 0x0000000619000000, 0x0000000619800000| 0%| F| |TAMS 0x0000000619000000| PB 0x0000000619000000| Untracked | 0 -|1061|0x0000000619800000, 0x0000000619800000, 0x000000061a000000| 0%| F| |TAMS 0x0000000619800000| PB 0x0000000619800000| Untracked | 0 -|1062|0x000000061a000000, 0x000000061a000000, 0x000000061a800000| 0%| F| |TAMS 0x000000061a000000| PB 0x000000061a000000| Untracked | 0 -|1063|0x000000061a800000, 0x000000061a800000, 0x000000061b000000| 0%| F| |TAMS 0x000000061a800000| PB 0x000000061a800000| Untracked | 0 -|1064|0x000000061b000000, 0x000000061b000000, 0x000000061b800000| 0%| F| |TAMS 0x000000061b000000| PB 0x000000061b000000| Untracked | 0 -|1065|0x000000061b800000, 0x000000061b800000, 0x000000061c000000| 0%| F| |TAMS 0x000000061b800000| PB 0x000000061b800000| Untracked | 0 -|1066|0x000000061c000000, 0x000000061c000000, 0x000000061c800000| 0%| F| |TAMS 0x000000061c000000| PB 0x000000061c000000| Untracked | 0 -|1067|0x000000061c800000, 0x000000061c800000, 0x000000061d000000| 0%| F| |TAMS 0x000000061c800000| PB 0x000000061c800000| Untracked | 0 -|1068|0x000000061d000000, 0x000000061d000000, 0x000000061d800000| 0%| F| |TAMS 0x000000061d000000| PB 0x000000061d000000| Untracked | 0 -|1069|0x000000061d800000, 0x000000061d800000, 0x000000061e000000| 0%| F| |TAMS 0x000000061d800000| PB 0x000000061d800000| Untracked | 0 -|1070|0x000000061e000000, 0x000000061e000000, 0x000000061e800000| 0%| F| |TAMS 0x000000061e000000| PB 0x000000061e000000| Untracked | 0 -|1071|0x000000061e800000, 0x000000061e800000, 0x000000061f000000| 0%| F| |TAMS 0x000000061e800000| PB 0x000000061e800000| Untracked | 0 -|1072|0x000000061f000000, 0x000000061f000000, 0x000000061f800000| 0%| F| |TAMS 0x000000061f000000| PB 0x000000061f000000| Untracked | 0 -|1073|0x000000061f800000, 0x000000061f800000, 0x0000000620000000| 0%| F| |TAMS 0x000000061f800000| PB 0x000000061f800000| Untracked | 0 -|1074|0x0000000620000000, 0x0000000620000000, 0x0000000620800000| 0%| F| |TAMS 0x0000000620000000| PB 0x0000000620000000| Untracked | 0 -|1075|0x0000000620800000, 0x0000000620800000, 0x0000000621000000| 0%| F| |TAMS 0x0000000620800000| PB 0x0000000620800000| Untracked | 0 -|1076|0x0000000621000000, 0x0000000621000000, 0x0000000621800000| 0%| F| |TAMS 0x0000000621000000| PB 0x0000000621000000| Untracked | 0 -|1077|0x0000000621800000, 0x0000000621800000, 0x0000000622000000| 0%| F| |TAMS 0x0000000621800000| PB 0x0000000621800000| Untracked | 0 -|1078|0x0000000622000000, 0x0000000622000000, 0x0000000622800000| 0%| F| |TAMS 0x0000000622000000| PB 0x0000000622000000| Untracked | 0 -|1079|0x0000000622800000, 0x0000000622800000, 0x0000000623000000| 0%| F| |TAMS 0x0000000622800000| PB 0x0000000622800000| Untracked | 0 -|1080|0x0000000623000000, 0x0000000623000000, 0x0000000623800000| 0%| F| |TAMS 0x0000000623000000| PB 0x0000000623000000| Untracked | 0 -|1081|0x0000000623800000, 0x0000000623800000, 0x0000000624000000| 0%| F| |TAMS 0x0000000623800000| PB 0x0000000623800000| Untracked | 0 -|1082|0x0000000624000000, 0x0000000624000000, 0x0000000624800000| 0%| F| |TAMS 0x0000000624000000| PB 0x0000000624000000| Untracked | 0 -|1083|0x0000000624800000, 0x0000000624800000, 0x0000000625000000| 0%| F| |TAMS 0x0000000624800000| PB 0x0000000624800000| Untracked | 0 -|1084|0x0000000625000000, 0x0000000625000000, 0x0000000625800000| 0%| F| |TAMS 0x0000000625000000| PB 0x0000000625000000| Untracked | 0 -|1085|0x0000000625800000, 0x0000000625800000, 0x0000000626000000| 0%| F| |TAMS 0x0000000625800000| PB 0x0000000625800000| Untracked | 0 -|1086|0x0000000626000000, 0x0000000626000000, 0x0000000626800000| 0%| F| |TAMS 0x0000000626000000| PB 0x0000000626000000| Untracked | 0 -|1087|0x0000000626800000, 0x0000000626800000, 0x0000000627000000| 0%| F| |TAMS 0x0000000626800000| PB 0x0000000626800000| Untracked | 0 -|1088|0x0000000627000000, 0x0000000627000000, 0x0000000627800000| 0%| F| |TAMS 0x0000000627000000| PB 0x0000000627000000| Untracked | 0 -|1089|0x0000000627800000, 0x0000000627800000, 0x0000000628000000| 0%| F| |TAMS 0x0000000627800000| PB 0x0000000627800000| Untracked | 0 -|1090|0x0000000628000000, 0x0000000628000000, 0x0000000628800000| 0%| F| |TAMS 0x0000000628000000| PB 0x0000000628000000| Untracked | 0 -|1091|0x0000000628800000, 0x0000000628800000, 0x0000000629000000| 0%| F| |TAMS 0x0000000628800000| PB 0x0000000628800000| Untracked | 0 -|1092|0x0000000629000000, 0x0000000629000000, 0x0000000629800000| 0%| F| |TAMS 0x0000000629000000| PB 0x0000000629000000| Untracked | 0 -|1093|0x0000000629800000, 0x0000000629800000, 0x000000062a000000| 0%| F| |TAMS 0x0000000629800000| PB 0x0000000629800000| Untracked | 0 -|1094|0x000000062a000000, 0x000000062a000000, 0x000000062a800000| 0%| F| |TAMS 0x000000062a000000| PB 0x000000062a000000| Untracked | 0 -|1095|0x000000062a800000, 0x000000062a800000, 0x000000062b000000| 0%| F| |TAMS 0x000000062a800000| PB 0x000000062a800000| Untracked | 0 -|1096|0x000000062b000000, 0x000000062b000000, 0x000000062b800000| 0%| F| |TAMS 0x000000062b000000| PB 0x000000062b000000| Untracked | 0 -|1097|0x000000062b800000, 0x000000062b800000, 0x000000062c000000| 0%| F| |TAMS 0x000000062b800000| PB 0x000000062b800000| Untracked | 0 -|1098|0x000000062c000000, 0x000000062c000000, 0x000000062c800000| 0%| F| |TAMS 0x000000062c000000| PB 0x000000062c000000| Untracked | 0 -|1099|0x000000062c800000, 0x000000062c800000, 0x000000062d000000| 0%| F| |TAMS 0x000000062c800000| PB 0x000000062c800000| Untracked | 0 -|1100|0x000000062d000000, 0x000000062d000000, 0x000000062d800000| 0%| F| |TAMS 0x000000062d000000| PB 0x000000062d000000| Untracked | 0 -|1101|0x000000062d800000, 0x000000062d800000, 0x000000062e000000| 0%| F| |TAMS 0x000000062d800000| PB 0x000000062d800000| Untracked | 0 -|1102|0x000000062e000000, 0x000000062e000000, 0x000000062e800000| 0%| F| |TAMS 0x000000062e000000| PB 0x000000062e000000| Untracked | 0 -|1103|0x000000062e800000, 0x000000062e800000, 0x000000062f000000| 0%| F| |TAMS 0x000000062e800000| PB 0x000000062e800000| Untracked | 0 -|1104|0x000000062f000000, 0x000000062f000000, 0x000000062f800000| 0%| F| |TAMS 0x000000062f000000| PB 0x000000062f000000| Untracked | 0 -|1105|0x000000062f800000, 0x000000062f800000, 0x0000000630000000| 0%| F| |TAMS 0x000000062f800000| PB 0x000000062f800000| Untracked | 0 -|1106|0x0000000630000000, 0x0000000630000000, 0x0000000630800000| 0%| F| |TAMS 0x0000000630000000| PB 0x0000000630000000| Untracked | 0 -|1107|0x0000000630800000, 0x0000000630800000, 0x0000000631000000| 0%| F| |TAMS 0x0000000630800000| PB 0x0000000630800000| Untracked | 0 -|1108|0x0000000631000000, 0x0000000631000000, 0x0000000631800000| 0%| F| |TAMS 0x0000000631000000| PB 0x0000000631000000| Untracked | 0 -|1109|0x0000000631800000, 0x0000000631800000, 0x0000000632000000| 0%| F| |TAMS 0x0000000631800000| PB 0x0000000631800000| Untracked | 0 -|1110|0x0000000632000000, 0x0000000632000000, 0x0000000632800000| 0%| F| |TAMS 0x0000000632000000| PB 0x0000000632000000| Untracked | 0 -|1111|0x0000000632800000, 0x0000000632800000, 0x0000000633000000| 0%| F| |TAMS 0x0000000632800000| PB 0x0000000632800000| Untracked | 0 -|1112|0x0000000633000000, 0x0000000633000000, 0x0000000633800000| 0%| F| |TAMS 0x0000000633000000| PB 0x0000000633000000| Untracked | 0 -|1113|0x0000000633800000, 0x0000000633800000, 0x0000000634000000| 0%| F| |TAMS 0x0000000633800000| PB 0x0000000633800000| Untracked | 0 -|1114|0x0000000634000000, 0x0000000634000000, 0x0000000634800000| 0%| F| |TAMS 0x0000000634000000| PB 0x0000000634000000| Untracked | 0 -|1115|0x0000000634800000, 0x0000000634800000, 0x0000000635000000| 0%| F| |TAMS 0x0000000634800000| PB 0x0000000634800000| Untracked | 0 -|1116|0x0000000635000000, 0x0000000635000000, 0x0000000635800000| 0%| F| |TAMS 0x0000000635000000| PB 0x0000000635000000| Untracked | 0 -|1117|0x0000000635800000, 0x0000000635800000, 0x0000000636000000| 0%| F| |TAMS 0x0000000635800000| PB 0x0000000635800000| Untracked | 0 -|1118|0x0000000636000000, 0x0000000636000000, 0x0000000636800000| 0%| F| |TAMS 0x0000000636000000| PB 0x0000000636000000| Untracked | 0 -|1119|0x0000000636800000, 0x0000000636800000, 0x0000000637000000| 0%| F| |TAMS 0x0000000636800000| PB 0x0000000636800000| Untracked | 0 -|1120|0x0000000637000000, 0x0000000637000000, 0x0000000637800000| 0%| F| |TAMS 0x0000000637000000| PB 0x0000000637000000| Untracked | 0 -|1121|0x0000000637800000, 0x0000000637800000, 0x0000000638000000| 0%| F| |TAMS 0x0000000637800000| PB 0x0000000637800000| Untracked | 0 -|1122|0x0000000638000000, 0x0000000638000000, 0x0000000638800000| 0%| F| |TAMS 0x0000000638000000| PB 0x0000000638000000| Untracked | 0 -|1123|0x0000000638800000, 0x0000000638800000, 0x0000000639000000| 0%| F| |TAMS 0x0000000638800000| PB 0x0000000638800000| Untracked | 0 -|1124|0x0000000639000000, 0x0000000639000000, 0x0000000639800000| 0%| F| |TAMS 0x0000000639000000| PB 0x0000000639000000| Untracked | 0 -|1125|0x0000000639800000, 0x0000000639800000, 0x000000063a000000| 0%| F| |TAMS 0x0000000639800000| PB 0x0000000639800000| Untracked | 0 -|1126|0x000000063a000000, 0x000000063a000000, 0x000000063a800000| 0%| F| |TAMS 0x000000063a000000| PB 0x000000063a000000| Untracked | 0 -|1127|0x000000063a800000, 0x000000063a800000, 0x000000063b000000| 0%| F| |TAMS 0x000000063a800000| PB 0x000000063a800000| Untracked | 0 -|1128|0x000000063b000000, 0x000000063b000000, 0x000000063b800000| 0%| F| |TAMS 0x000000063b000000| PB 0x000000063b000000| Untracked | 0 -|1129|0x000000063b800000, 0x000000063b800000, 0x000000063c000000| 0%| F| |TAMS 0x000000063b800000| PB 0x000000063b800000| Untracked | 0 -|1130|0x000000063c000000, 0x000000063c000000, 0x000000063c800000| 0%| F| |TAMS 0x000000063c000000| PB 0x000000063c000000| Untracked | 0 -|1131|0x000000063c800000, 0x000000063c800000, 0x000000063d000000| 0%| F| |TAMS 0x000000063c800000| PB 0x000000063c800000| Untracked | 0 -|1132|0x000000063d000000, 0x000000063d000000, 0x000000063d800000| 0%| F| |TAMS 0x000000063d000000| PB 0x000000063d000000| Untracked | 0 -|1133|0x000000063d800000, 0x000000063d800000, 0x000000063e000000| 0%| F| |TAMS 0x000000063d800000| PB 0x000000063d800000| Untracked | 0 -|1134|0x000000063e000000, 0x000000063e000000, 0x000000063e800000| 0%| F| |TAMS 0x000000063e000000| PB 0x000000063e000000| Untracked | 0 -|1135|0x000000063e800000, 0x000000063e800000, 0x000000063f000000| 0%| F| |TAMS 0x000000063e800000| PB 0x000000063e800000| Untracked | 0 -|1136|0x000000063f000000, 0x000000063f000000, 0x000000063f800000| 0%| F| |TAMS 0x000000063f000000| PB 0x000000063f000000| Untracked | 0 -|1137|0x000000063f800000, 0x000000063f800000, 0x0000000640000000| 0%| F| |TAMS 0x000000063f800000| PB 0x000000063f800000| Untracked | 0 -|1138|0x0000000640000000, 0x0000000640000000, 0x0000000640800000| 0%| F| |TAMS 0x0000000640000000| PB 0x0000000640000000| Untracked | 0 -|1139|0x0000000640800000, 0x0000000640800000, 0x0000000641000000| 0%| F| |TAMS 0x0000000640800000| PB 0x0000000640800000| Untracked | 0 -|1140|0x0000000641000000, 0x0000000641000000, 0x0000000641800000| 0%| F| |TAMS 0x0000000641000000| PB 0x0000000641000000| Untracked | 0 -|1141|0x0000000641800000, 0x0000000641800000, 0x0000000642000000| 0%| F| |TAMS 0x0000000641800000| PB 0x0000000641800000| Untracked | 0 -|1142|0x0000000642000000, 0x0000000642000000, 0x0000000642800000| 0%| F| |TAMS 0x0000000642000000| PB 0x0000000642000000| Untracked | 0 -|1143|0x0000000642800000, 0x0000000642800000, 0x0000000643000000| 0%| F| |TAMS 0x0000000642800000| PB 0x0000000642800000| Untracked | 0 -|1144|0x0000000643000000, 0x0000000643000000, 0x0000000643800000| 0%| F| |TAMS 0x0000000643000000| PB 0x0000000643000000| Untracked | 0 -|1145|0x0000000643800000, 0x0000000643800000, 0x0000000644000000| 0%| F| |TAMS 0x0000000643800000| PB 0x0000000643800000| Untracked | 0 -|1146|0x0000000644000000, 0x0000000644000000, 0x0000000644800000| 0%| F| |TAMS 0x0000000644000000| PB 0x0000000644000000| Untracked | 0 -|1147|0x0000000644800000, 0x0000000644800000, 0x0000000645000000| 0%| F| |TAMS 0x0000000644800000| PB 0x0000000644800000| Untracked | 0 -|1148|0x0000000645000000, 0x0000000645000000, 0x0000000645800000| 0%| F| |TAMS 0x0000000645000000| PB 0x0000000645000000| Untracked | 0 -|1149|0x0000000645800000, 0x0000000645800000, 0x0000000646000000| 0%| F| |TAMS 0x0000000645800000| PB 0x0000000645800000| Untracked | 0 -|1150|0x0000000646000000, 0x0000000646000000, 0x0000000646800000| 0%| F| |TAMS 0x0000000646000000| PB 0x0000000646000000| Untracked | 0 -|1151|0x0000000646800000, 0x0000000646800000, 0x0000000647000000| 0%| F| |TAMS 0x0000000646800000| PB 0x0000000646800000| Untracked | 0 -|1152|0x0000000647000000, 0x0000000647000000, 0x0000000647800000| 0%| F| |TAMS 0x0000000647000000| PB 0x0000000647000000| Untracked | 0 -|1153|0x0000000647800000, 0x0000000647800000, 0x0000000648000000| 0%| F| |TAMS 0x0000000647800000| PB 0x0000000647800000| Untracked | 0 -|1154|0x0000000648000000, 0x0000000648000000, 0x0000000648800000| 0%| F| |TAMS 0x0000000648000000| PB 0x0000000648000000| Untracked | 0 -|1155|0x0000000648800000, 0x0000000648800000, 0x0000000649000000| 0%| F| |TAMS 0x0000000648800000| PB 0x0000000648800000| Untracked | 0 -|1156|0x0000000649000000, 0x0000000649000000, 0x0000000649800000| 0%| F| |TAMS 0x0000000649000000| PB 0x0000000649000000| Untracked | 0 -|1157|0x0000000649800000, 0x0000000649800000, 0x000000064a000000| 0%| F| |TAMS 0x0000000649800000| PB 0x0000000649800000| Untracked | 0 -|1158|0x000000064a000000, 0x000000064a000000, 0x000000064a800000| 0%| F| |TAMS 0x000000064a000000| PB 0x000000064a000000| Untracked | 0 -|1159|0x000000064a800000, 0x000000064a800000, 0x000000064b000000| 0%| F| |TAMS 0x000000064a800000| PB 0x000000064a800000| Untracked | 0 -|1160|0x000000064b000000, 0x000000064b000000, 0x000000064b800000| 0%| F| |TAMS 0x000000064b000000| PB 0x000000064b000000| Untracked | 0 -|1161|0x000000064b800000, 0x000000064b800000, 0x000000064c000000| 0%| F| |TAMS 0x000000064b800000| PB 0x000000064b800000| Untracked | 0 -|1162|0x000000064c000000, 0x000000064c000000, 0x000000064c800000| 0%| F| |TAMS 0x000000064c000000| PB 0x000000064c000000| Untracked | 0 -|1163|0x000000064c800000, 0x000000064c800000, 0x000000064d000000| 0%| F| |TAMS 0x000000064c800000| PB 0x000000064c800000| Untracked | 0 -|1164|0x000000064d000000, 0x000000064d000000, 0x000000064d800000| 0%| F| |TAMS 0x000000064d000000| PB 0x000000064d000000| Untracked | 0 -|1165|0x000000064d800000, 0x000000064d800000, 0x000000064e000000| 0%| F| |TAMS 0x000000064d800000| PB 0x000000064d800000| Untracked | 0 -|1166|0x000000064e000000, 0x000000064e000000, 0x000000064e800000| 0%| F| |TAMS 0x000000064e000000| PB 0x000000064e000000| Untracked | 0 -|1167|0x000000064e800000, 0x000000064e800000, 0x000000064f000000| 0%| F| |TAMS 0x000000064e800000| PB 0x000000064e800000| Untracked | 0 -|1168|0x000000064f000000, 0x000000064f000000, 0x000000064f800000| 0%| F| |TAMS 0x000000064f000000| PB 0x000000064f000000| Untracked | 0 -|1169|0x000000064f800000, 0x000000064f800000, 0x0000000650000000| 0%| F| |TAMS 0x000000064f800000| PB 0x000000064f800000| Untracked | 0 -|1170|0x0000000650000000, 0x0000000650000000, 0x0000000650800000| 0%| F| |TAMS 0x0000000650000000| PB 0x0000000650000000| Untracked | 0 -|1171|0x0000000650800000, 0x0000000650800000, 0x0000000651000000| 0%| F| |TAMS 0x0000000650800000| PB 0x0000000650800000| Untracked | 0 -|1172|0x0000000651000000, 0x0000000651000000, 0x0000000651800000| 0%| F| |TAMS 0x0000000651000000| PB 0x0000000651000000| Untracked | 0 -|1173|0x0000000651800000, 0x0000000651800000, 0x0000000652000000| 0%| F| |TAMS 0x0000000651800000| PB 0x0000000651800000| Untracked | 0 -|1174|0x0000000652000000, 0x0000000652000000, 0x0000000652800000| 0%| F| |TAMS 0x0000000652000000| PB 0x0000000652000000| Untracked | 0 -|1175|0x0000000652800000, 0x0000000652800000, 0x0000000653000000| 0%| F| |TAMS 0x0000000652800000| PB 0x0000000652800000| Untracked | 0 -|1176|0x0000000653000000, 0x0000000653000000, 0x0000000653800000| 0%| F| |TAMS 0x0000000653000000| PB 0x0000000653000000| Untracked | 0 -|1177|0x0000000653800000, 0x0000000653800000, 0x0000000654000000| 0%| F| |TAMS 0x0000000653800000| PB 0x0000000653800000| Untracked | 0 -|1178|0x0000000654000000, 0x0000000654000000, 0x0000000654800000| 0%| F| |TAMS 0x0000000654000000| PB 0x0000000654000000| Untracked | 0 -|1179|0x0000000654800000, 0x0000000654800000, 0x0000000655000000| 0%| F| |TAMS 0x0000000654800000| PB 0x0000000654800000| Untracked | 0 -|1180|0x0000000655000000, 0x0000000655000000, 0x0000000655800000| 0%| F| |TAMS 0x0000000655000000| PB 0x0000000655000000| Untracked | 0 -|1181|0x0000000655800000, 0x0000000655800000, 0x0000000656000000| 0%| F| |TAMS 0x0000000655800000| PB 0x0000000655800000| Untracked | 0 -|1182|0x0000000656000000, 0x0000000656000000, 0x0000000656800000| 0%| F| |TAMS 0x0000000656000000| PB 0x0000000656000000| Untracked | 0 -|1183|0x0000000656800000, 0x0000000656800000, 0x0000000657000000| 0%| F| |TAMS 0x0000000656800000| PB 0x0000000656800000| Untracked | 0 -|1184|0x0000000657000000, 0x0000000657000000, 0x0000000657800000| 0%| F| |TAMS 0x0000000657000000| PB 0x0000000657000000| Untracked | 0 -|1185|0x0000000657800000, 0x0000000657800000, 0x0000000658000000| 0%| F| |TAMS 0x0000000657800000| PB 0x0000000657800000| Untracked | 0 -|1186|0x0000000658000000, 0x0000000658000000, 0x0000000658800000| 0%| F| |TAMS 0x0000000658000000| PB 0x0000000658000000| Untracked | 0 -|1187|0x0000000658800000, 0x0000000658800000, 0x0000000659000000| 0%| F| |TAMS 0x0000000658800000| PB 0x0000000658800000| Untracked | 0 -|1188|0x0000000659000000, 0x0000000659000000, 0x0000000659800000| 0%| F| |TAMS 0x0000000659000000| PB 0x0000000659000000| Untracked | 0 -|1189|0x0000000659800000, 0x0000000659800000, 0x000000065a000000| 0%| F| |TAMS 0x0000000659800000| PB 0x0000000659800000| Untracked | 0 -|1190|0x000000065a000000, 0x000000065a000000, 0x000000065a800000| 0%| F| |TAMS 0x000000065a000000| PB 0x000000065a000000| Untracked | 0 -|1191|0x000000065a800000, 0x000000065a800000, 0x000000065b000000| 0%| F| |TAMS 0x000000065a800000| PB 0x000000065a800000| Untracked | 0 -|1192|0x000000065b000000, 0x000000065b000000, 0x000000065b800000| 0%| F| |TAMS 0x000000065b000000| PB 0x000000065b000000| Untracked | 0 -|1193|0x000000065b800000, 0x000000065b800000, 0x000000065c000000| 0%| F| |TAMS 0x000000065b800000| PB 0x000000065b800000| Untracked | 0 -|1194|0x000000065c000000, 0x000000065c000000, 0x000000065c800000| 0%| F| |TAMS 0x000000065c000000| PB 0x000000065c000000| Untracked | 0 -|1195|0x000000065c800000, 0x000000065c800000, 0x000000065d000000| 0%| F| |TAMS 0x000000065c800000| PB 0x000000065c800000| Untracked | 0 -|1196|0x000000065d000000, 0x000000065d000000, 0x000000065d800000| 0%| F| |TAMS 0x000000065d000000| PB 0x000000065d000000| Untracked | 0 -|1197|0x000000065d800000, 0x000000065d800000, 0x000000065e000000| 0%| F| |TAMS 0x000000065d800000| PB 0x000000065d800000| Untracked | 0 -|1198|0x000000065e000000, 0x000000065e000000, 0x000000065e800000| 0%| F| |TAMS 0x000000065e000000| PB 0x000000065e000000| Untracked | 0 -|1199|0x000000065e800000, 0x000000065e800000, 0x000000065f000000| 0%| F| |TAMS 0x000000065e800000| PB 0x000000065e800000| Untracked | 0 -|1200|0x000000065f000000, 0x000000065f000000, 0x000000065f800000| 0%| F| |TAMS 0x000000065f000000| PB 0x000000065f000000| Untracked | 0 -|1201|0x000000065f800000, 0x000000065f800000, 0x0000000660000000| 0%| F| |TAMS 0x000000065f800000| PB 0x000000065f800000| Untracked | 0 -|1202|0x0000000660000000, 0x0000000660000000, 0x0000000660800000| 0%| F| |TAMS 0x0000000660000000| PB 0x0000000660000000| Untracked | 0 -|1203|0x0000000660800000, 0x0000000660800000, 0x0000000661000000| 0%| F| |TAMS 0x0000000660800000| PB 0x0000000660800000| Untracked | 0 -|1204|0x0000000661000000, 0x0000000661000000, 0x0000000661800000| 0%| F| |TAMS 0x0000000661000000| PB 0x0000000661000000| Untracked | 0 -|1205|0x0000000661800000, 0x0000000661800000, 0x0000000662000000| 0%| F| |TAMS 0x0000000661800000| PB 0x0000000661800000| Untracked | 0 -|1206|0x0000000662000000, 0x0000000662000000, 0x0000000662800000| 0%| F| |TAMS 0x0000000662000000| PB 0x0000000662000000| Untracked | 0 -|1207|0x0000000662800000, 0x0000000662800000, 0x0000000663000000| 0%| F| |TAMS 0x0000000662800000| PB 0x0000000662800000| Untracked | 0 -|1208|0x0000000663000000, 0x0000000663000000, 0x0000000663800000| 0%| F| |TAMS 0x0000000663000000| PB 0x0000000663000000| Untracked | 0 -|1209|0x0000000663800000, 0x0000000663800000, 0x0000000664000000| 0%| F| |TAMS 0x0000000663800000| PB 0x0000000663800000| Untracked | 0 -|1210|0x0000000664000000, 0x0000000664000000, 0x0000000664800000| 0%| F| |TAMS 0x0000000664000000| PB 0x0000000664000000| Untracked | 0 -|1211|0x0000000664800000, 0x0000000664800000, 0x0000000665000000| 0%| F| |TAMS 0x0000000664800000| PB 0x0000000664800000| Untracked | 0 -|1212|0x0000000665000000, 0x0000000665000000, 0x0000000665800000| 0%| F| |TAMS 0x0000000665000000| PB 0x0000000665000000| Untracked | 0 -|1213|0x0000000665800000, 0x0000000665800000, 0x0000000666000000| 0%| F| |TAMS 0x0000000665800000| PB 0x0000000665800000| Untracked | 0 -|1214|0x0000000666000000, 0x0000000666000000, 0x0000000666800000| 0%| F| |TAMS 0x0000000666000000| PB 0x0000000666000000| Untracked | 0 -|1215|0x0000000666800000, 0x0000000666800000, 0x0000000667000000| 0%| F| |TAMS 0x0000000666800000| PB 0x0000000666800000| Untracked | 0 -|1216|0x0000000667000000, 0x0000000667000000, 0x0000000667800000| 0%| F| |TAMS 0x0000000667000000| PB 0x0000000667000000| Untracked | 0 -|1217|0x0000000667800000, 0x0000000667800000, 0x0000000668000000| 0%| F| |TAMS 0x0000000667800000| PB 0x0000000667800000| Untracked | 0 -|1218|0x0000000668000000, 0x0000000668000000, 0x0000000668800000| 0%| F| |TAMS 0x0000000668000000| PB 0x0000000668000000| Untracked | 0 -|1219|0x0000000668800000, 0x0000000668800000, 0x0000000669000000| 0%| F| |TAMS 0x0000000668800000| PB 0x0000000668800000| Untracked | 0 -|1220|0x0000000669000000, 0x0000000669000000, 0x0000000669800000| 0%| F| |TAMS 0x0000000669000000| PB 0x0000000669000000| Untracked | 0 -|1221|0x0000000669800000, 0x0000000669800000, 0x000000066a000000| 0%| F| |TAMS 0x0000000669800000| PB 0x0000000669800000| Untracked | 0 -|1222|0x000000066a000000, 0x000000066a000000, 0x000000066a800000| 0%| F| |TAMS 0x000000066a000000| PB 0x000000066a000000| Untracked | 0 -|1223|0x000000066a800000, 0x000000066a800000, 0x000000066b000000| 0%| F| |TAMS 0x000000066a800000| PB 0x000000066a800000| Untracked | 0 -|1224|0x000000066b000000, 0x000000066b000000, 0x000000066b800000| 0%| F| |TAMS 0x000000066b000000| PB 0x000000066b000000| Untracked | 0 -|1225|0x000000066b800000, 0x000000066b800000, 0x000000066c000000| 0%| F| |TAMS 0x000000066b800000| PB 0x000000066b800000| Untracked | 0 -|1226|0x000000066c000000, 0x000000066c000000, 0x000000066c800000| 0%| F| |TAMS 0x000000066c000000| PB 0x000000066c000000| Untracked | 0 -|1227|0x000000066c800000, 0x000000066c800000, 0x000000066d000000| 0%| F| |TAMS 0x000000066c800000| PB 0x000000066c800000| Untracked | 0 -|1228|0x000000066d000000, 0x000000066d000000, 0x000000066d800000| 0%| F| |TAMS 0x000000066d000000| PB 0x000000066d000000| Untracked | 0 -|1229|0x000000066d800000, 0x000000066d800000, 0x000000066e000000| 0%| F| |TAMS 0x000000066d800000| PB 0x000000066d800000| Untracked | 0 -|1230|0x000000066e000000, 0x000000066e000000, 0x000000066e800000| 0%| F| |TAMS 0x000000066e000000| PB 0x000000066e000000| Untracked | 0 -|1231|0x000000066e800000, 0x000000066e800000, 0x000000066f000000| 0%| F| |TAMS 0x000000066e800000| PB 0x000000066e800000| Untracked | 0 -|1232|0x000000066f000000, 0x000000066f000000, 0x000000066f800000| 0%| F| |TAMS 0x000000066f000000| PB 0x000000066f000000| Untracked | 0 -|1233|0x000000066f800000, 0x000000066f800000, 0x0000000670000000| 0%| F| |TAMS 0x000000066f800000| PB 0x000000066f800000| Untracked | 0 -|1234|0x0000000670000000, 0x0000000670000000, 0x0000000670800000| 0%| F| |TAMS 0x0000000670000000| PB 0x0000000670000000| Untracked | 0 -|1235|0x0000000670800000, 0x0000000670800000, 0x0000000671000000| 0%| F| |TAMS 0x0000000670800000| PB 0x0000000670800000| Untracked | 0 -|1236|0x0000000671000000, 0x0000000671000000, 0x0000000671800000| 0%| F| |TAMS 0x0000000671000000| PB 0x0000000671000000| Untracked | 0 -|1237|0x0000000671800000, 0x0000000671800000, 0x0000000672000000| 0%| F| |TAMS 0x0000000671800000| PB 0x0000000671800000| Untracked | 0 -|1238|0x0000000672000000, 0x0000000672000000, 0x0000000672800000| 0%| F| |TAMS 0x0000000672000000| PB 0x0000000672000000| Untracked | 0 -|1239|0x0000000672800000, 0x0000000672800000, 0x0000000673000000| 0%| F| |TAMS 0x0000000672800000| PB 0x0000000672800000| Untracked | 0 -|1240|0x0000000673000000, 0x0000000673000000, 0x0000000673800000| 0%| F| |TAMS 0x0000000673000000| PB 0x0000000673000000| Untracked | 0 -|1241|0x0000000673800000, 0x0000000673800000, 0x0000000674000000| 0%| F| |TAMS 0x0000000673800000| PB 0x0000000673800000| Untracked | 0 -|1242|0x0000000674000000, 0x0000000674000000, 0x0000000674800000| 0%| F| |TAMS 0x0000000674000000| PB 0x0000000674000000| Untracked | 0 -|1243|0x0000000674800000, 0x0000000674800000, 0x0000000675000000| 0%| F| |TAMS 0x0000000674800000| PB 0x0000000674800000| Untracked | 0 -|1244|0x0000000675000000, 0x0000000675000000, 0x0000000675800000| 0%| F| |TAMS 0x0000000675000000| PB 0x0000000675000000| Untracked | 0 -|1245|0x0000000675800000, 0x0000000675800000, 0x0000000676000000| 0%| F| |TAMS 0x0000000675800000| PB 0x0000000675800000| Untracked | 0 -|1246|0x0000000676000000, 0x0000000676000000, 0x0000000676800000| 0%| F| |TAMS 0x0000000676000000| PB 0x0000000676000000| Untracked | 0 -|1247|0x0000000676800000, 0x0000000676800000, 0x0000000677000000| 0%| F| |TAMS 0x0000000676800000| PB 0x0000000676800000| Untracked | 0 -|1248|0x0000000677000000, 0x0000000677000000, 0x0000000677800000| 0%| F| |TAMS 0x0000000677000000| PB 0x0000000677000000| Untracked | 0 -|1249|0x0000000677800000, 0x0000000677800000, 0x0000000678000000| 0%| F| |TAMS 0x0000000677800000| PB 0x0000000677800000| Untracked | 0 -|1250|0x0000000678000000, 0x0000000678000000, 0x0000000678800000| 0%| F| |TAMS 0x0000000678000000| PB 0x0000000678000000| Untracked | 0 -|1251|0x0000000678800000, 0x0000000678800000, 0x0000000679000000| 0%| F| |TAMS 0x0000000678800000| PB 0x0000000678800000| Untracked | 0 -|1252|0x0000000679000000, 0x0000000679000000, 0x0000000679800000| 0%| F| |TAMS 0x0000000679000000| PB 0x0000000679000000| Untracked | 0 -|1253|0x0000000679800000, 0x0000000679800000, 0x000000067a000000| 0%| F| |TAMS 0x0000000679800000| PB 0x0000000679800000| Untracked | 0 -|1254|0x000000067a000000, 0x000000067a000000, 0x000000067a800000| 0%| F| |TAMS 0x000000067a000000| PB 0x000000067a000000| Untracked | 0 -|1255|0x000000067a800000, 0x000000067a800000, 0x000000067b000000| 0%| F| |TAMS 0x000000067a800000| PB 0x000000067a800000| Untracked | 0 -|1256|0x000000067b000000, 0x000000067b000000, 0x000000067b800000| 0%| F| |TAMS 0x000000067b000000| PB 0x000000067b000000| Untracked | 0 -|1257|0x000000067b800000, 0x000000067b800000, 0x000000067c000000| 0%| F| |TAMS 0x000000067b800000| PB 0x000000067b800000| Untracked | 0 -|1258|0x000000067c000000, 0x000000067c000000, 0x000000067c800000| 0%| F| |TAMS 0x000000067c000000| PB 0x000000067c000000| Untracked | 0 -|1259|0x000000067c800000, 0x000000067c800000, 0x000000067d000000| 0%| F| |TAMS 0x000000067c800000| PB 0x000000067c800000| Untracked | 0 -|1260|0x000000067d000000, 0x000000067d000000, 0x000000067d800000| 0%| F| |TAMS 0x000000067d000000| PB 0x000000067d000000| Untracked | 0 -|1261|0x000000067d800000, 0x000000067d800000, 0x000000067e000000| 0%| F| |TAMS 0x000000067d800000| PB 0x000000067d800000| Untracked | 0 -|1262|0x000000067e000000, 0x000000067e000000, 0x000000067e800000| 0%| F| |TAMS 0x000000067e000000| PB 0x000000067e000000| Untracked | 0 -|1263|0x000000067e800000, 0x000000067e800000, 0x000000067f000000| 0%| F| |TAMS 0x000000067e800000| PB 0x000000067e800000| Untracked | 0 -|1264|0x000000067f000000, 0x000000067f000000, 0x000000067f800000| 0%| F| |TAMS 0x000000067f000000| PB 0x000000067f000000| Untracked | 0 -|1265|0x000000067f800000, 0x000000067f800000, 0x0000000680000000| 0%| F| |TAMS 0x000000067f800000| PB 0x000000067f800000| Untracked | 0 -|1266|0x0000000680000000, 0x0000000680000000, 0x0000000680800000| 0%| F| |TAMS 0x0000000680000000| PB 0x0000000680000000| Untracked | 0 -|1267|0x0000000680800000, 0x0000000680800000, 0x0000000681000000| 0%| F| |TAMS 0x0000000680800000| PB 0x0000000680800000| Untracked | 0 -|1268|0x0000000681000000, 0x0000000681000000, 0x0000000681800000| 0%| F| |TAMS 0x0000000681000000| PB 0x0000000681000000| Untracked | 0 -|1269|0x0000000681800000, 0x0000000681800000, 0x0000000682000000| 0%| F| |TAMS 0x0000000681800000| PB 0x0000000681800000| Untracked | 0 -|1270|0x0000000682000000, 0x0000000682000000, 0x0000000682800000| 0%| F| |TAMS 0x0000000682000000| PB 0x0000000682000000| Untracked | 0 -|1271|0x0000000682800000, 0x0000000682800000, 0x0000000683000000| 0%| F| |TAMS 0x0000000682800000| PB 0x0000000682800000| Untracked | 0 -|1272|0x0000000683000000, 0x0000000683000000, 0x0000000683800000| 0%| F| |TAMS 0x0000000683000000| PB 0x0000000683000000| Untracked | 0 -|1273|0x0000000683800000, 0x0000000683800000, 0x0000000684000000| 0%| F| |TAMS 0x0000000683800000| PB 0x0000000683800000| Untracked | 0 -|1274|0x0000000684000000, 0x0000000684000000, 0x0000000684800000| 0%| F| |TAMS 0x0000000684000000| PB 0x0000000684000000| Untracked | 0 -|1275|0x0000000684800000, 0x0000000684800000, 0x0000000685000000| 0%| F| |TAMS 0x0000000684800000| PB 0x0000000684800000| Untracked | 0 -|1276|0x0000000685000000, 0x0000000685000000, 0x0000000685800000| 0%| F| |TAMS 0x0000000685000000| PB 0x0000000685000000| Untracked | 0 -|1277|0x0000000685800000, 0x0000000685800000, 0x0000000686000000| 0%| F| |TAMS 0x0000000685800000| PB 0x0000000685800000| Untracked | 0 -|1278|0x0000000686000000, 0x0000000686000000, 0x0000000686800000| 0%| F| |TAMS 0x0000000686000000| PB 0x0000000686000000| Untracked | 0 -|1279|0x0000000686800000, 0x0000000686800000, 0x0000000687000000| 0%| F| |TAMS 0x0000000686800000| PB 0x0000000686800000| Untracked | 0 -|1280|0x0000000687000000, 0x0000000687000000, 0x0000000687800000| 0%| F| |TAMS 0x0000000687000000| PB 0x0000000687000000| Untracked | 0 -|1281|0x0000000687800000, 0x0000000687800000, 0x0000000688000000| 0%| F| |TAMS 0x0000000687800000| PB 0x0000000687800000| Untracked | 0 -|1282|0x0000000688000000, 0x0000000688000000, 0x0000000688800000| 0%| F| |TAMS 0x0000000688000000| PB 0x0000000688000000| Untracked | 0 -|1283|0x0000000688800000, 0x0000000688800000, 0x0000000689000000| 0%| F| |TAMS 0x0000000688800000| PB 0x0000000688800000| Untracked | 0 -|1284|0x0000000689000000, 0x0000000689000000, 0x0000000689800000| 0%| F| |TAMS 0x0000000689000000| PB 0x0000000689000000| Untracked | 0 -|1285|0x0000000689800000, 0x0000000689800000, 0x000000068a000000| 0%| F| |TAMS 0x0000000689800000| PB 0x0000000689800000| Untracked | 0 -|1286|0x000000068a000000, 0x000000068a000000, 0x000000068a800000| 0%| F| |TAMS 0x000000068a000000| PB 0x000000068a000000| Untracked | 0 -|1287|0x000000068a800000, 0x000000068a800000, 0x000000068b000000| 0%| F| |TAMS 0x000000068a800000| PB 0x000000068a800000| Untracked | 0 -|1288|0x000000068b000000, 0x000000068b000000, 0x000000068b800000| 0%| F| |TAMS 0x000000068b000000| PB 0x000000068b000000| Untracked | 0 -|1289|0x000000068b800000, 0x000000068b800000, 0x000000068c000000| 0%| F| |TAMS 0x000000068b800000| PB 0x000000068b800000| Untracked | 0 -|1290|0x000000068c000000, 0x000000068c000000, 0x000000068c800000| 0%| F| |TAMS 0x000000068c000000| PB 0x000000068c000000| Untracked | 0 -|1291|0x000000068c800000, 0x000000068c800000, 0x000000068d000000| 0%| F| |TAMS 0x000000068c800000| PB 0x000000068c800000| Untracked | 0 -|1292|0x000000068d000000, 0x000000068d000000, 0x000000068d800000| 0%| F| |TAMS 0x000000068d000000| PB 0x000000068d000000| Untracked | 0 -|1293|0x000000068d800000, 0x000000068d800000, 0x000000068e000000| 0%| F| |TAMS 0x000000068d800000| PB 0x000000068d800000| Untracked | 0 -|1294|0x000000068e000000, 0x000000068e000000, 0x000000068e800000| 0%| F| |TAMS 0x000000068e000000| PB 0x000000068e000000| Untracked | 0 -|1295|0x000000068e800000, 0x000000068e800000, 0x000000068f000000| 0%| F| |TAMS 0x000000068e800000| PB 0x000000068e800000| Untracked | 0 -|1296|0x000000068f000000, 0x000000068f000000, 0x000000068f800000| 0%| F| |TAMS 0x000000068f000000| PB 0x000000068f000000| Untracked | 0 -|1297|0x000000068f800000, 0x000000068f800000, 0x0000000690000000| 0%| F| |TAMS 0x000000068f800000| PB 0x000000068f800000| Untracked | 0 -|1298|0x0000000690000000, 0x0000000690000000, 0x0000000690800000| 0%| F| |TAMS 0x0000000690000000| PB 0x0000000690000000| Untracked | 0 -|1299|0x0000000690800000, 0x0000000690800000, 0x0000000691000000| 0%| F| |TAMS 0x0000000690800000| PB 0x0000000690800000| Untracked | 0 -|1300|0x0000000691000000, 0x0000000691000000, 0x0000000691800000| 0%| F| |TAMS 0x0000000691000000| PB 0x0000000691000000| Untracked | 0 -|1301|0x0000000691800000, 0x0000000691800000, 0x0000000692000000| 0%| F| |TAMS 0x0000000691800000| PB 0x0000000691800000| Untracked | 0 -|1302|0x0000000692000000, 0x0000000692000000, 0x0000000692800000| 0%| F| |TAMS 0x0000000692000000| PB 0x0000000692000000| Untracked | 0 -|1303|0x0000000692800000, 0x0000000692800000, 0x0000000693000000| 0%| F| |TAMS 0x0000000692800000| PB 0x0000000692800000| Untracked | 0 -|1304|0x0000000693000000, 0x0000000693000000, 0x0000000693800000| 0%| F| |TAMS 0x0000000693000000| PB 0x0000000693000000| Untracked | 0 -|1305|0x0000000693800000, 0x0000000693800000, 0x0000000694000000| 0%| F| |TAMS 0x0000000693800000| PB 0x0000000693800000| Untracked | 0 -|1306|0x0000000694000000, 0x0000000694000000, 0x0000000694800000| 0%| F| |TAMS 0x0000000694000000| PB 0x0000000694000000| Untracked | 0 -|1307|0x0000000694800000, 0x0000000694800000, 0x0000000695000000| 0%| F| |TAMS 0x0000000694800000| PB 0x0000000694800000| Untracked | 0 -|1308|0x0000000695000000, 0x0000000695000000, 0x0000000695800000| 0%| F| |TAMS 0x0000000695000000| PB 0x0000000695000000| Untracked | 0 -|1309|0x0000000695800000, 0x0000000695800000, 0x0000000696000000| 0%| F| |TAMS 0x0000000695800000| PB 0x0000000695800000| Untracked | 0 -|1310|0x0000000696000000, 0x0000000696000000, 0x0000000696800000| 0%| F| |TAMS 0x0000000696000000| PB 0x0000000696000000| Untracked | 0 -|1311|0x0000000696800000, 0x0000000696800000, 0x0000000697000000| 0%| F| |TAMS 0x0000000696800000| PB 0x0000000696800000| Untracked | 0 -|1312|0x0000000697000000, 0x0000000697000000, 0x0000000697800000| 0%| F| |TAMS 0x0000000697000000| PB 0x0000000697000000| Untracked | 0 -|1313|0x0000000697800000, 0x0000000697800000, 0x0000000698000000| 0%| F| |TAMS 0x0000000697800000| PB 0x0000000697800000| Untracked | 0 -|1314|0x0000000698000000, 0x0000000698000000, 0x0000000698800000| 0%| F| |TAMS 0x0000000698000000| PB 0x0000000698000000| Untracked | 0 -|1315|0x0000000698800000, 0x0000000698800000, 0x0000000699000000| 0%| F| |TAMS 0x0000000698800000| PB 0x0000000698800000| Untracked | 0 -|1316|0x0000000699000000, 0x0000000699000000, 0x0000000699800000| 0%| F| |TAMS 0x0000000699000000| PB 0x0000000699000000| Untracked | 0 -|1317|0x0000000699800000, 0x0000000699800000, 0x000000069a000000| 0%| F| |TAMS 0x0000000699800000| PB 0x0000000699800000| Untracked | 0 -|1318|0x000000069a000000, 0x000000069a000000, 0x000000069a800000| 0%| F| |TAMS 0x000000069a000000| PB 0x000000069a000000| Untracked | 0 -|1319|0x000000069a800000, 0x000000069a800000, 0x000000069b000000| 0%| F| |TAMS 0x000000069a800000| PB 0x000000069a800000| Untracked | 0 -|1320|0x000000069b000000, 0x000000069b000000, 0x000000069b800000| 0%| F| |TAMS 0x000000069b000000| PB 0x000000069b000000| Untracked | 0 -|1321|0x000000069b800000, 0x000000069b800000, 0x000000069c000000| 0%| F| |TAMS 0x000000069b800000| PB 0x000000069b800000| Untracked | 0 -|1322|0x000000069c000000, 0x000000069c000000, 0x000000069c800000| 0%| F| |TAMS 0x000000069c000000| PB 0x000000069c000000| Untracked | 0 -|1323|0x000000069c800000, 0x000000069c800000, 0x000000069d000000| 0%| F| |TAMS 0x000000069c800000| PB 0x000000069c800000| Untracked | 0 -|1324|0x000000069d000000, 0x000000069d000000, 0x000000069d800000| 0%| F| |TAMS 0x000000069d000000| PB 0x000000069d000000| Untracked | 0 -|1325|0x000000069d800000, 0x000000069d800000, 0x000000069e000000| 0%| F| |TAMS 0x000000069d800000| PB 0x000000069d800000| Untracked | 0 -|1326|0x000000069e000000, 0x000000069e000000, 0x000000069e800000| 0%| F| |TAMS 0x000000069e000000| PB 0x000000069e000000| Untracked | 0 -|1327|0x000000069e800000, 0x000000069e800000, 0x000000069f000000| 0%| F| |TAMS 0x000000069e800000| PB 0x000000069e800000| Untracked | 0 -|1328|0x000000069f000000, 0x000000069f000000, 0x000000069f800000| 0%| F| |TAMS 0x000000069f000000| PB 0x000000069f000000| Untracked | 0 -|1329|0x000000069f800000, 0x000000069f800000, 0x00000006a0000000| 0%| F| |TAMS 0x000000069f800000| PB 0x000000069f800000| Untracked | 0 -|1330|0x00000006a0000000, 0x00000006a0000000, 0x00000006a0800000| 0%| F| |TAMS 0x00000006a0000000| PB 0x00000006a0000000| Untracked | 0 -|1331|0x00000006a0800000, 0x00000006a0800000, 0x00000006a1000000| 0%| F| |TAMS 0x00000006a0800000| PB 0x00000006a0800000| Untracked | 0 -|1332|0x00000006a1000000, 0x00000006a1000000, 0x00000006a1800000| 0%| F| |TAMS 0x00000006a1000000| PB 0x00000006a1000000| Untracked | 0 -|1333|0x00000006a1800000, 0x00000006a1800000, 0x00000006a2000000| 0%| F| |TAMS 0x00000006a1800000| PB 0x00000006a1800000| Untracked | 0 -|1334|0x00000006a2000000, 0x00000006a2000000, 0x00000006a2800000| 0%| F| |TAMS 0x00000006a2000000| PB 0x00000006a2000000| Untracked | 0 -|1335|0x00000006a2800000, 0x00000006a2800000, 0x00000006a3000000| 0%| F| |TAMS 0x00000006a2800000| PB 0x00000006a2800000| Untracked | 0 -|1336|0x00000006a3000000, 0x00000006a3000000, 0x00000006a3800000| 0%| F| |TAMS 0x00000006a3000000| PB 0x00000006a3000000| Untracked | 0 -|1337|0x00000006a3800000, 0x00000006a3800000, 0x00000006a4000000| 0%| F| |TAMS 0x00000006a3800000| PB 0x00000006a3800000| Untracked | 0 -|1338|0x00000006a4000000, 0x00000006a4000000, 0x00000006a4800000| 0%| F| |TAMS 0x00000006a4000000| PB 0x00000006a4000000| Untracked | 0 -|1339|0x00000006a4800000, 0x00000006a4800000, 0x00000006a5000000| 0%| F| |TAMS 0x00000006a4800000| PB 0x00000006a4800000| Untracked | 0 -|1340|0x00000006a5000000, 0x00000006a5000000, 0x00000006a5800000| 0%| F| |TAMS 0x00000006a5000000| PB 0x00000006a5000000| Untracked | 0 -|1341|0x00000006a5800000, 0x00000006a5800000, 0x00000006a6000000| 0%| F| |TAMS 0x00000006a5800000| PB 0x00000006a5800000| Untracked | 0 -|1342|0x00000006a6000000, 0x00000006a6000000, 0x00000006a6800000| 0%| F| |TAMS 0x00000006a6000000| PB 0x00000006a6000000| Untracked | 0 -|1343|0x00000006a6800000, 0x00000006a6800000, 0x00000006a7000000| 0%| F| |TAMS 0x00000006a6800000| PB 0x00000006a6800000| Untracked | 0 -|1344|0x00000006a7000000, 0x00000006a7000000, 0x00000006a7800000| 0%| F| |TAMS 0x00000006a7000000| PB 0x00000006a7000000| Untracked | 0 -|1345|0x00000006a7800000, 0x00000006a7800000, 0x00000006a8000000| 0%| F| |TAMS 0x00000006a7800000| PB 0x00000006a7800000| Untracked | 0 -|1346|0x00000006a8000000, 0x00000006a8000000, 0x00000006a8800000| 0%| F| |TAMS 0x00000006a8000000| PB 0x00000006a8000000| Untracked | 0 -|1347|0x00000006a8800000, 0x00000006a8800000, 0x00000006a9000000| 0%| F| |TAMS 0x00000006a8800000| PB 0x00000006a8800000| Untracked | 0 -|1348|0x00000006a9000000, 0x00000006a9000000, 0x00000006a9800000| 0%| F| |TAMS 0x00000006a9000000| PB 0x00000006a9000000| Untracked | 0 -|1349|0x00000006a9800000, 0x00000006a9800000, 0x00000006aa000000| 0%| F| |TAMS 0x00000006a9800000| PB 0x00000006a9800000| Untracked | 0 -|1350|0x00000006aa000000, 0x00000006aa000000, 0x00000006aa800000| 0%| F| |TAMS 0x00000006aa000000| PB 0x00000006aa000000| Untracked | 0 -|1351|0x00000006aa800000, 0x00000006aa800000, 0x00000006ab000000| 0%| F| |TAMS 0x00000006aa800000| PB 0x00000006aa800000| Untracked | 0 -|1352|0x00000006ab000000, 0x00000006ab000000, 0x00000006ab800000| 0%| F| |TAMS 0x00000006ab000000| PB 0x00000006ab000000| Untracked | 0 -|1353|0x00000006ab800000, 0x00000006ab800000, 0x00000006ac000000| 0%| F| |TAMS 0x00000006ab800000| PB 0x00000006ab800000| Untracked | 0 -|1354|0x00000006ac000000, 0x00000006ac000000, 0x00000006ac800000| 0%| F| |TAMS 0x00000006ac000000| PB 0x00000006ac000000| Untracked | 0 -|1355|0x00000006ac800000, 0x00000006ac800000, 0x00000006ad000000| 0%| F| |TAMS 0x00000006ac800000| PB 0x00000006ac800000| Untracked | 0 -|1356|0x00000006ad000000, 0x00000006ad000000, 0x00000006ad800000| 0%| F| |TAMS 0x00000006ad000000| PB 0x00000006ad000000| Untracked | 0 -|1357|0x00000006ad800000, 0x00000006ad800000, 0x00000006ae000000| 0%| F| |TAMS 0x00000006ad800000| PB 0x00000006ad800000| Untracked | 0 -|1358|0x00000006ae000000, 0x00000006ae000000, 0x00000006ae800000| 0%| F| |TAMS 0x00000006ae000000| PB 0x00000006ae000000| Untracked | 0 -|1359|0x00000006ae800000, 0x00000006ae800000, 0x00000006af000000| 0%| F| |TAMS 0x00000006ae800000| PB 0x00000006ae800000| Untracked | 0 -|1360|0x00000006af000000, 0x00000006af000000, 0x00000006af800000| 0%| F| |TAMS 0x00000006af000000| PB 0x00000006af000000| Untracked | 0 -|1361|0x00000006af800000, 0x00000006af800000, 0x00000006b0000000| 0%| F| |TAMS 0x00000006af800000| PB 0x00000006af800000| Untracked | 0 -|1362|0x00000006b0000000, 0x00000006b0000000, 0x00000006b0800000| 0%| F| |TAMS 0x00000006b0000000| PB 0x00000006b0000000| Untracked | 0 -|1363|0x00000006b0800000, 0x00000006b0800000, 0x00000006b1000000| 0%| F| |TAMS 0x00000006b0800000| PB 0x00000006b0800000| Untracked | 0 -|1364|0x00000006b1000000, 0x00000006b1000000, 0x00000006b1800000| 0%| F| |TAMS 0x00000006b1000000| PB 0x00000006b1000000| Untracked | 0 -|1365|0x00000006b1800000, 0x00000006b1800000, 0x00000006b2000000| 0%| F| |TAMS 0x00000006b1800000| PB 0x00000006b1800000| Untracked | 0 -|1366|0x00000006b2000000, 0x00000006b2000000, 0x00000006b2800000| 0%| F| |TAMS 0x00000006b2000000| PB 0x00000006b2000000| Untracked | 0 -|1367|0x00000006b2800000, 0x00000006b2800000, 0x00000006b3000000| 0%| F| |TAMS 0x00000006b2800000| PB 0x00000006b2800000| Untracked | 0 -|1368|0x00000006b3000000, 0x00000006b3000000, 0x00000006b3800000| 0%| F| |TAMS 0x00000006b3000000| PB 0x00000006b3000000| Untracked | 0 -|1369|0x00000006b3800000, 0x00000006b3800000, 0x00000006b4000000| 0%| F| |TAMS 0x00000006b3800000| PB 0x00000006b3800000| Untracked | 0 -|1370|0x00000006b4000000, 0x00000006b4000000, 0x00000006b4800000| 0%| F| |TAMS 0x00000006b4000000| PB 0x00000006b4000000| Untracked | 0 -|1371|0x00000006b4800000, 0x00000006b4800000, 0x00000006b5000000| 0%| F| |TAMS 0x00000006b4800000| PB 0x00000006b4800000| Untracked | 0 -|1372|0x00000006b5000000, 0x00000006b5000000, 0x00000006b5800000| 0%| F| |TAMS 0x00000006b5000000| PB 0x00000006b5000000| Untracked | 0 -|1373|0x00000006b5800000, 0x00000006b6000000, 0x00000006b6000000|100%| O| |TAMS 0x00000006b5800000| PB 0x00000006b5800000| Untracked | 0 -|1374|0x00000006b6000000, 0x00000006b6000000, 0x00000006b6800000| 0%| F| |TAMS 0x00000006b6000000| PB 0x00000006b6000000| Untracked | 0 -|1375|0x00000006b6800000, 0x00000006b7000000, 0x00000006b7000000|100%| O| |TAMS 0x00000006b6800000| PB 0x00000006b6800000| Untracked | 0 -|1376|0x00000006b7000000, 0x00000006b7800000, 0x00000006b7800000|100%| O| |TAMS 0x00000006b7000000| PB 0x00000006b7000000| Untracked | 0 -|1377|0x00000006b7800000, 0x00000006b7800000, 0x00000006b8000000| 0%| F| |TAMS 0x00000006b7800000| PB 0x00000006b7800000| Untracked | 0 -|1378|0x00000006b8000000, 0x00000006b8000000, 0x00000006b8800000| 0%| F| |TAMS 0x00000006b8000000| PB 0x00000006b8000000| Untracked | 0 -|1379|0x00000006b8800000, 0x00000006b8800000, 0x00000006b9000000| 0%| F| |TAMS 0x00000006b8800000| PB 0x00000006b8800000| Untracked | 0 -|1380|0x00000006b9000000, 0x00000006b9800000, 0x00000006b9800000|100%| O| |TAMS 0x00000006b9000000| PB 0x00000006b9000000| Untracked | 0 -|1381|0x00000006b9800000, 0x00000006b9800000, 0x00000006ba000000| 0%| F| |TAMS 0x00000006b9800000| PB 0x00000006b9800000| Untracked | 0 -|1382|0x00000006ba000000, 0x00000006ba000000, 0x00000006ba800000| 0%| F| |TAMS 0x00000006ba000000| PB 0x00000006ba000000| Untracked | 0 -|1383|0x00000006ba800000, 0x00000006bb000000, 0x00000006bb000000|100%| O| |TAMS 0x00000006ba800000| PB 0x00000006ba800000| Untracked | 0 -|1384|0x00000006bb000000, 0x00000006bb800000, 0x00000006bb800000|100%| O| |TAMS 0x00000006bb000000| PB 0x00000006bb000000| Untracked | 0 -|1385|0x00000006bb800000, 0x00000006bb800000, 0x00000006bc000000| 0%| F| |TAMS 0x00000006bb800000| PB 0x00000006bb800000| Untracked | 0 -|1386|0x00000006bc000000, 0x00000006bc800000, 0x00000006bc800000|100%| O| |TAMS 0x00000006bc000000| PB 0x00000006bc000000| Untracked | 0 -|1387|0x00000006bc800000, 0x00000006bc800000, 0x00000006bd000000| 0%| F| |TAMS 0x00000006bc800000| PB 0x00000006bc800000| Untracked | 0 -|1388|0x00000006bd000000, 0x00000006bd000000, 0x00000006bd800000| 0%| F| |TAMS 0x00000006bd000000| PB 0x00000006bd000000| Untracked | 0 -|1389|0x00000006bd800000, 0x00000006bd800000, 0x00000006be000000| 0%| F| |TAMS 0x00000006bd800000| PB 0x00000006bd800000| Untracked | 0 -|1390|0x00000006be000000, 0x00000006be000000, 0x00000006be800000| 0%| F| |TAMS 0x00000006be000000| PB 0x00000006be000000| Untracked | 0 -|1391|0x00000006be800000, 0x00000006be800000, 0x00000006bf000000| 0%| F| |TAMS 0x00000006be800000| PB 0x00000006be800000| Untracked | 0 -|1392|0x00000006bf000000, 0x00000006bf000000, 0x00000006bf800000| 0%| F| |TAMS 0x00000006bf000000| PB 0x00000006bf000000| Untracked | 0 -|1393|0x00000006bf800000, 0x00000006c0000000, 0x00000006c0000000|100%| O| |TAMS 0x00000006bf800000| PB 0x00000006bf800000| Untracked | 0 -|1394|0x00000006c0000000, 0x00000006c0000000, 0x00000006c0800000| 0%| F| |TAMS 0x00000006c0000000| PB 0x00000006c0000000| Untracked | 0 -|1395|0x00000006c0800000, 0x00000006c1000000, 0x00000006c1000000|100%| O| |TAMS 0x00000006c0800000| PB 0x00000006c0800000| Untracked | 0 -|1396|0x00000006c1000000, 0x00000006c1000000, 0x00000006c1800000| 0%| F| |TAMS 0x00000006c1000000| PB 0x00000006c1000000| Untracked | 0 -|1397|0x00000006c1800000, 0x00000006c2000000, 0x00000006c2000000|100%| O| |TAMS 0x00000006c1800000| PB 0x00000006c1800000| Untracked | 0 -|1398|0x00000006c2000000, 0x00000006c2800000, 0x00000006c2800000|100%| O| |TAMS 0x00000006c2000000| PB 0x00000006c2000000| Untracked | 0 -|1399|0x00000006c2800000, 0x00000006c3000000, 0x00000006c3000000|100%| O| |TAMS 0x00000006c2800000| PB 0x00000006c2800000| Untracked | 0 -|1400|0x00000006c3000000, 0x00000006c3800000, 0x00000006c3800000|100%| O| |TAMS 0x00000006c3000000| PB 0x00000006c3000000| Untracked | 0 -|1401|0x00000006c3800000, 0x00000006c4000000, 0x00000006c4000000|100%| O| |TAMS 0x00000006c3800000| PB 0x00000006c3800000| Untracked | 0 -|1402|0x00000006c4000000, 0x00000006c4800000, 0x00000006c4800000|100%| O| |TAMS 0x00000006c4000000| PB 0x00000006c4000000| Untracked | 0 -|1403|0x00000006c4800000, 0x00000006c5000000, 0x00000006c5000000|100%| O| |TAMS 0x00000006c4800000| PB 0x00000006c4800000| Untracked | 0 -|1404|0x00000006c5000000, 0x00000006c5800000, 0x00000006c5800000|100%| O| |TAMS 0x00000006c5000000| PB 0x00000006c5000000| Untracked | 0 -|1405|0x00000006c5800000, 0x00000006c6000000, 0x00000006c6000000|100%| O| |TAMS 0x00000006c5800000| PB 0x00000006c5800000| Untracked | 0 -|1406|0x00000006c6000000, 0x00000006c6800000, 0x00000006c6800000|100%| O| |TAMS 0x00000006c6000000| PB 0x00000006c6000000| Untracked | 0 -|1407|0x00000006c6800000, 0x00000006c7000000, 0x00000006c7000000|100%| O| |TAMS 0x00000006c6800000| PB 0x00000006c6800000| Untracked | 0 -|1408|0x00000006c7000000, 0x00000006c7800000, 0x00000006c7800000|100%| O| |TAMS 0x00000006c7000000| PB 0x00000006c7000000| Untracked | 0 -|1409|0x00000006c7800000, 0x00000006c8000000, 0x00000006c8000000|100%| O| |TAMS 0x00000006c7800000| PB 0x00000006c7800000| Untracked | 0 -|1410|0x00000006c8000000, 0x00000006c8800000, 0x00000006c8800000|100%| O| |TAMS 0x00000006c8000000| PB 0x00000006c8000000| Untracked | 0 -|1411|0x00000006c8800000, 0x00000006c9000000, 0x00000006c9000000|100%| O| |TAMS 0x00000006c8800000| PB 0x00000006c8800000| Untracked | 0 -|1412|0x00000006c9000000, 0x00000006c9800000, 0x00000006c9800000|100%| O| |TAMS 0x00000006c9000000| PB 0x00000006c9000000| Untracked | 0 -|1413|0x00000006c9800000, 0x00000006ca000000, 0x00000006ca000000|100%| O| |TAMS 0x00000006c9800000| PB 0x00000006c9800000| Untracked | 0 -|1414|0x00000006ca000000, 0x00000006ca800000, 0x00000006ca800000|100%| O| |TAMS 0x00000006ca000000| PB 0x00000006ca000000| Untracked | 0 -|1415|0x00000006ca800000, 0x00000006cb000000, 0x00000006cb000000|100%| O| |TAMS 0x00000006ca800000| PB 0x00000006ca800000| Untracked | 0 -|1416|0x00000006cb000000, 0x00000006cb800000, 0x00000006cb800000|100%| O| |TAMS 0x00000006cb000000| PB 0x00000006cb000000| Untracked | 0 -|1417|0x00000006cb800000, 0x00000006cc000000, 0x00000006cc000000|100%| O| |TAMS 0x00000006cb800000| PB 0x00000006cb800000| Untracked | 0 -|1418|0x00000006cc000000, 0x00000006cc800000, 0x00000006cc800000|100%| O| |TAMS 0x00000006cc000000| PB 0x00000006cc000000| Untracked | 0 -|1419|0x00000006cc800000, 0x00000006cd000000, 0x00000006cd000000|100%| O| |TAMS 0x00000006cc800000| PB 0x00000006cc800000| Untracked | 0 -|1420|0x00000006cd000000, 0x00000006cd800000, 0x00000006cd800000|100%| O| |TAMS 0x00000006cd000000| PB 0x00000006cd000000| Untracked | 0 -|1421|0x00000006cd800000, 0x00000006ce000000, 0x00000006ce000000|100%| O| |TAMS 0x00000006cd800000| PB 0x00000006cd800000| Untracked | 0 -|1422|0x00000006ce000000, 0x00000006ce800000, 0x00000006ce800000|100%| O| |TAMS 0x00000006ce000000| PB 0x00000006ce000000| Untracked | 0 -|1423|0x00000006ce800000, 0x00000006cf000000, 0x00000006cf000000|100%| O| |TAMS 0x00000006ce800000| PB 0x00000006ce800000| Untracked | 0 -|1424|0x00000006cf000000, 0x00000006cf800000, 0x00000006cf800000|100%| O| |TAMS 0x00000006cf000000| PB 0x00000006cf000000| Untracked | 0 -|1425|0x00000006cf800000, 0x00000006d0000000, 0x00000006d0000000|100%| O| |TAMS 0x00000006cf800000| PB 0x00000006cf800000| Untracked | 0 -|1426|0x00000006d0000000, 0x00000006d0800000, 0x00000006d0800000|100%| O| |TAMS 0x00000006d0000000| PB 0x00000006d0000000| Untracked | 0 -|1427|0x00000006d0800000, 0x00000006d1000000, 0x00000006d1000000|100%| O| |TAMS 0x00000006d0800000| PB 0x00000006d0800000| Untracked | 0 -|1428|0x00000006d1000000, 0x00000006d1800000, 0x00000006d1800000|100%| O| |TAMS 0x00000006d1000000| PB 0x00000006d1000000| Untracked | 0 -|1429|0x00000006d1800000, 0x00000006d2000000, 0x00000006d2000000|100%| O| |TAMS 0x00000006d1800000| PB 0x00000006d1800000| Untracked | 0 -|1430|0x00000006d2000000, 0x00000006d2800000, 0x00000006d2800000|100%| O| |TAMS 0x00000006d2000000| PB 0x00000006d2000000| Untracked | 0 -|1431|0x00000006d2800000, 0x00000006d3000000, 0x00000006d3000000|100%| O| |TAMS 0x00000006d2800000| PB 0x00000006d2800000| Untracked | 0 -|1432|0x00000006d3000000, 0x00000006d3800000, 0x00000006d3800000|100%| O| |TAMS 0x00000006d3000000| PB 0x00000006d3000000| Untracked | 0 -|1433|0x00000006d3800000, 0x00000006d4000000, 0x00000006d4000000|100%| O| |TAMS 0x00000006d3800000| PB 0x00000006d3800000| Untracked | 0 -|1434|0x00000006d4000000, 0x00000006d4800000, 0x00000006d4800000|100%| O| |TAMS 0x00000006d4000000| PB 0x00000006d4000000| Untracked | 0 -|1435|0x00000006d4800000, 0x00000006d5000000, 0x00000006d5000000|100%| O| |TAMS 0x00000006d4800000| PB 0x00000006d4800000| Untracked | 0 -|1436|0x00000006d5000000, 0x00000006d5800000, 0x00000006d5800000|100%| O| |TAMS 0x00000006d5000000| PB 0x00000006d5000000| Untracked | 0 -|1437|0x00000006d5800000, 0x00000006d6000000, 0x00000006d6000000|100%| O| |TAMS 0x00000006d5800000| PB 0x00000006d5800000| Untracked | 0 -|1438|0x00000006d6000000, 0x00000006d6800000, 0x00000006d6800000|100%| O| |TAMS 0x00000006d6000000| PB 0x00000006d6000000| Untracked | 0 -|1439|0x00000006d6800000, 0x00000006d7000000, 0x00000006d7000000|100%| O| |TAMS 0x00000006d6800000| PB 0x00000006d6800000| Untracked | 0 -|1440|0x00000006d7000000, 0x00000006d7800000, 0x00000006d7800000|100%| O| |TAMS 0x00000006d7000000| PB 0x00000006d7000000| Untracked | 0 -|1441|0x00000006d7800000, 0x00000006d8000000, 0x00000006d8000000|100%| O| |TAMS 0x00000006d7800000| PB 0x00000006d7800000| Untracked | 0 -|1442|0x00000006d8000000, 0x00000006d8800000, 0x00000006d8800000|100%| O| |TAMS 0x00000006d8000000| PB 0x00000006d8000000| Untracked | 0 -|1443|0x00000006d8800000, 0x00000006d9000000, 0x00000006d9000000|100%| O| |TAMS 0x00000006d8800000| PB 0x00000006d8800000| Untracked | 0 -|1444|0x00000006d9000000, 0x00000006d9800000, 0x00000006d9800000|100%| O| |TAMS 0x00000006d9000000| PB 0x00000006d9000000| Untracked | 0 -|1445|0x00000006d9800000, 0x00000006da000000, 0x00000006da000000|100%| O| |TAMS 0x00000006d9800000| PB 0x00000006d9800000| Untracked | 0 -|1446|0x00000006da000000, 0x00000006da800000, 0x00000006da800000|100%| O| |TAMS 0x00000006da000000| PB 0x00000006da000000| Untracked | 0 -|1447|0x00000006da800000, 0x00000006db000000, 0x00000006db000000|100%| O| |TAMS 0x00000006da800000| PB 0x00000006da800000| Untracked | 0 -|1448|0x00000006db000000, 0x00000006db800000, 0x00000006db800000|100%| O| |TAMS 0x00000006db000000| PB 0x00000006db000000| Untracked | 0 -|1449|0x00000006db800000, 0x00000006dc000000, 0x00000006dc000000|100%| O| |TAMS 0x00000006db800000| PB 0x00000006db800000| Untracked | 0 -|1450|0x00000006dc000000, 0x00000006dc800000, 0x00000006dc800000|100%| O| |TAMS 0x00000006dc000000| PB 0x00000006dc000000| Untracked | 0 -|1451|0x00000006dc800000, 0x00000006dd000000, 0x00000006dd000000|100%| O| |TAMS 0x00000006dc800000| PB 0x00000006dc800000| Untracked | 0 -|1452|0x00000006dd000000, 0x00000006dd800000, 0x00000006dd800000|100%| O| |TAMS 0x00000006dd000000| PB 0x00000006dd000000| Untracked | 0 -|1453|0x00000006dd800000, 0x00000006de000000, 0x00000006de000000|100%| O| |TAMS 0x00000006dd800000| PB 0x00000006dd800000| Untracked | 0 -|1454|0x00000006de000000, 0x00000006de800000, 0x00000006de800000|100%| O| |TAMS 0x00000006de000000| PB 0x00000006de000000| Untracked | 0 -|1455|0x00000006de800000, 0x00000006df000000, 0x00000006df000000|100%| O| |TAMS 0x00000006de800000| PB 0x00000006de800000| Untracked | 0 -|1456|0x00000006df000000, 0x00000006df800000, 0x00000006df800000|100%| O| |TAMS 0x00000006df000000| PB 0x00000006df000000| Untracked | 0 -|1457|0x00000006df800000, 0x00000006e0000000, 0x00000006e0000000|100%| O| |TAMS 0x00000006df800000| PB 0x00000006df800000| Untracked | 0 -|1458|0x00000006e0000000, 0x00000006e0800000, 0x00000006e0800000|100%| O| |TAMS 0x00000006e0000000| PB 0x00000006e0000000| Untracked | 0 -|1459|0x00000006e0800000, 0x00000006e1000000, 0x00000006e1000000|100%| O| |TAMS 0x00000006e0800000| PB 0x00000006e0800000| Untracked | 0 -|1460|0x00000006e1000000, 0x00000006e1800000, 0x00000006e1800000|100%| O| |TAMS 0x00000006e1000000| PB 0x00000006e1000000| Untracked | 0 -|1461|0x00000006e1800000, 0x00000006e2000000, 0x00000006e2000000|100%| O| |TAMS 0x00000006e1800000| PB 0x00000006e1800000| Untracked | 0 -|1462|0x00000006e2000000, 0x00000006e2800000, 0x00000006e2800000|100%| O| |TAMS 0x00000006e2000000| PB 0x00000006e2000000| Untracked | 0 -|1463|0x00000006e2800000, 0x00000006e3000000, 0x00000006e3000000|100%| O| |TAMS 0x00000006e2800000| PB 0x00000006e2800000| Untracked | 0 -|1464|0x00000006e3000000, 0x00000006e3800000, 0x00000006e3800000|100%| O| |TAMS 0x00000006e3000000| PB 0x00000006e3000000| Untracked | 0 -|1465|0x00000006e3800000, 0x00000006e4000000, 0x00000006e4000000|100%| O| |TAMS 0x00000006e3800000| PB 0x00000006e3800000| Untracked | 0 -|1466|0x00000006e4000000, 0x00000006e4800000, 0x00000006e4800000|100%| O| |TAMS 0x00000006e4000000| PB 0x00000006e4000000| Untracked | 0 -|1467|0x00000006e4800000, 0x00000006e5000000, 0x00000006e5000000|100%| O| |TAMS 0x00000006e4800000| PB 0x00000006e4800000| Untracked | 0 -|1468|0x00000006e5000000, 0x00000006e5800000, 0x00000006e5800000|100%| O| |TAMS 0x00000006e5000000| PB 0x00000006e5000000| Untracked | 0 -|1469|0x00000006e5800000, 0x00000006e6000000, 0x00000006e6000000|100%| O| |TAMS 0x00000006e5800000| PB 0x00000006e5800000| Untracked | 0 -|1470|0x00000006e6000000, 0x00000006e6800000, 0x00000006e6800000|100%| O| |TAMS 0x00000006e6000000| PB 0x00000006e6000000| Untracked | 0 -|1471|0x00000006e6800000, 0x00000006e7000000, 0x00000006e7000000|100%| O| |TAMS 0x00000006e6800000| PB 0x00000006e6800000| Untracked | 0 -|1472|0x00000006e7000000, 0x00000006e7800000, 0x00000006e7800000|100%| O| |TAMS 0x00000006e7000000| PB 0x00000006e7000000| Untracked | 0 -|1473|0x00000006e7800000, 0x00000006e8000000, 0x00000006e8000000|100%| O| |TAMS 0x00000006e7800000| PB 0x00000006e7800000| Untracked | 0 -|1474|0x00000006e8000000, 0x00000006e8800000, 0x00000006e8800000|100%| O| |TAMS 0x00000006e8000000| PB 0x00000006e8000000| Untracked | 0 -|1475|0x00000006e8800000, 0x00000006e9000000, 0x00000006e9000000|100%| O| |TAMS 0x00000006e8800000| PB 0x00000006e8800000| Untracked | 0 -|1476|0x00000006e9000000, 0x00000006e9800000, 0x00000006e9800000|100%| O| |TAMS 0x00000006e9000000| PB 0x00000006e9000000| Untracked | 0 -|1477|0x00000006e9800000, 0x00000006ea000000, 0x00000006ea000000|100%| O| |TAMS 0x00000006e9800000| PB 0x00000006e9800000| Untracked | 0 -|1478|0x00000006ea000000, 0x00000006ea800000, 0x00000006ea800000|100%| O| |TAMS 0x00000006ea000000| PB 0x00000006ea000000| Untracked | 0 -|1479|0x00000006ea800000, 0x00000006eb000000, 0x00000006eb000000|100%| O| |TAMS 0x00000006ea800000| PB 0x00000006ea800000| Untracked | 0 -|1480|0x00000006eb000000, 0x00000006eb800000, 0x00000006eb800000|100%| O| |TAMS 0x00000006eb000000| PB 0x00000006eb000000| Untracked | 0 -|1481|0x00000006eb800000, 0x00000006ec000000, 0x00000006ec000000|100%| O| |TAMS 0x00000006eb800000| PB 0x00000006eb800000| Untracked | 0 -|1482|0x00000006ec000000, 0x00000006ec800000, 0x00000006ec800000|100%| O| |TAMS 0x00000006ec000000| PB 0x00000006ec000000| Untracked | 0 -|1483|0x00000006ec800000, 0x00000006ed000000, 0x00000006ed000000|100%| O| |TAMS 0x00000006ec800000| PB 0x00000006ec800000| Untracked | 0 -|1484|0x00000006ed000000, 0x00000006ed800000, 0x00000006ed800000|100%| O| |TAMS 0x00000006ed000000| PB 0x00000006ed000000| Untracked | 0 -|1485|0x00000006ed800000, 0x00000006ee000000, 0x00000006ee000000|100%| O| |TAMS 0x00000006ed800000| PB 0x00000006ed800000| Untracked | 0 -|1486|0x00000006ee000000, 0x00000006ee800000, 0x00000006ee800000|100%| O| |TAMS 0x00000006ee000000| PB 0x00000006ee000000| Untracked | 0 -|1487|0x00000006ee800000, 0x00000006ef000000, 0x00000006ef000000|100%| O| |TAMS 0x00000006ee800000| PB 0x00000006ee800000| Untracked | 0 -|1488|0x00000006ef000000, 0x00000006ef800000, 0x00000006ef800000|100%| O| |TAMS 0x00000006ef000000| PB 0x00000006ef000000| Untracked | 0 -|1489|0x00000006ef800000, 0x00000006f0000000, 0x00000006f0000000|100%| O| |TAMS 0x00000006ef800000| PB 0x00000006ef800000| Untracked | 0 -|1490|0x00000006f0000000, 0x00000006f0800000, 0x00000006f0800000|100%| O| |TAMS 0x00000006f0000000| PB 0x00000006f0000000| Untracked | 0 -|1491|0x00000006f0800000, 0x00000006f1000000, 0x00000006f1000000|100%| O| |TAMS 0x00000006f0800000| PB 0x00000006f0800000| Untracked | 0 -|1492|0x00000006f1000000, 0x00000006f1800000, 0x00000006f1800000|100%| O| |TAMS 0x00000006f1000000| PB 0x00000006f1000000| Untracked | 0 -|1493|0x00000006f1800000, 0x00000006f2000000, 0x00000006f2000000|100%| O| |TAMS 0x00000006f1800000| PB 0x00000006f1800000| Untracked | 0 -|1494|0x00000006f2000000, 0x00000006f2800000, 0x00000006f2800000|100%| O| |TAMS 0x00000006f2000000| PB 0x00000006f2000000| Untracked | 0 -|1495|0x00000006f2800000, 0x00000006f3000000, 0x00000006f3000000|100%| O| |TAMS 0x00000006f2800000| PB 0x00000006f2800000| Untracked | 0 -|1496|0x00000006f3000000, 0x00000006f3800000, 0x00000006f3800000|100%| O| |TAMS 0x00000006f3000000| PB 0x00000006f3000000| Untracked | 0 -|1497|0x00000006f3800000, 0x00000006f4000000, 0x00000006f4000000|100%| O| |TAMS 0x00000006f3800000| PB 0x00000006f3800000| Untracked | 0 -|1498|0x00000006f4000000, 0x00000006f4800000, 0x00000006f4800000|100%| O| |TAMS 0x00000006f4000000| PB 0x00000006f4000000| Untracked | 0 -|1499|0x00000006f4800000, 0x00000006f5000000, 0x00000006f5000000|100%| O| |TAMS 0x00000006f4800000| PB 0x00000006f4800000| Untracked | 0 -|1500|0x00000006f5000000, 0x00000006f5800000, 0x00000006f5800000|100%| O| |TAMS 0x00000006f5000000| PB 0x00000006f5000000| Untracked | 0 -|1501|0x00000006f5800000, 0x00000006f6000000, 0x00000006f6000000|100%| O| |TAMS 0x00000006f5800000| PB 0x00000006f5800000| Untracked | 0 -|1502|0x00000006f6000000, 0x00000006f6800000, 0x00000006f6800000|100%| O| |TAMS 0x00000006f6000000| PB 0x00000006f6000000| Untracked | 0 -|1503|0x00000006f6800000, 0x00000006f7000000, 0x00000006f7000000|100%| O| |TAMS 0x00000006f6800000| PB 0x00000006f6800000| Untracked | 0 -|1504|0x00000006f7000000, 0x00000006f7800000, 0x00000006f7800000|100%| O| |TAMS 0x00000006f7000000| PB 0x00000006f7000000| Untracked | 0 -|1505|0x00000006f7800000, 0x00000006f8000000, 0x00000006f8000000|100%| O| |TAMS 0x00000006f7800000| PB 0x00000006f7800000| Untracked | 0 -|1506|0x00000006f8000000, 0x00000006f8800000, 0x00000006f8800000|100%| O| |TAMS 0x00000006f8000000| PB 0x00000006f8000000| Untracked | 0 -|1507|0x00000006f8800000, 0x00000006f9000000, 0x00000006f9000000|100%| O| |TAMS 0x00000006f8800000| PB 0x00000006f8800000| Untracked | 0 -|1508|0x00000006f9000000, 0x00000006f9800000, 0x00000006f9800000|100%| O| |TAMS 0x00000006f9000000| PB 0x00000006f9000000| Untracked | 0 -|1509|0x00000006f9800000, 0x00000006fa000000, 0x00000006fa000000|100%| O| |TAMS 0x00000006f9800000| PB 0x00000006f9800000| Untracked | 0 -|1510|0x00000006fa000000, 0x00000006fa800000, 0x00000006fa800000|100%| O| |TAMS 0x00000006fa000000| PB 0x00000006fa000000| Untracked | 0 -|1511|0x00000006fa800000, 0x00000006fb000000, 0x00000006fb000000|100%| O| |TAMS 0x00000006fa800000| PB 0x00000006fa800000| Untracked | 0 -|1512|0x00000006fb000000, 0x00000006fb800000, 0x00000006fb800000|100%| O| |TAMS 0x00000006fb000000| PB 0x00000006fb000000| Untracked | 0 -|1513|0x00000006fb800000, 0x00000006fc000000, 0x00000006fc000000|100%| O| |TAMS 0x00000006fb800000| PB 0x00000006fb800000| Untracked | 0 -|1514|0x00000006fc000000, 0x00000006fc800000, 0x00000006fc800000|100%| O| |TAMS 0x00000006fc000000| PB 0x00000006fc000000| Untracked | 0 -|1515|0x00000006fc800000, 0x00000006fd000000, 0x00000006fd000000|100%| O| |TAMS 0x00000006fc800000| PB 0x00000006fc800000| Untracked | 0 -|1516|0x00000006fd000000, 0x00000006fd800000, 0x00000006fd800000|100%| O| |TAMS 0x00000006fd000000| PB 0x00000006fd000000| Untracked | 0 -|1517|0x00000006fd800000, 0x00000006fe000000, 0x00000006fe000000|100%| O| |TAMS 0x00000006fd800000| PB 0x00000006fd800000| Untracked | 0 -|1518|0x00000006fe000000, 0x00000006fe800000, 0x00000006fe800000|100%| O| |TAMS 0x00000006fe000000| PB 0x00000006fe000000| Untracked | 0 -|1519|0x00000006fe800000, 0x00000006ff000000, 0x00000006ff000000|100%| O| |TAMS 0x00000006fe800000| PB 0x00000006fe800000| Untracked | 0 -|1520|0x00000006ff000000, 0x00000006ff800000, 0x00000006ff800000|100%| O| |TAMS 0x00000006ff000000| PB 0x00000006ff000000| Untracked | 0 -|1521|0x00000006ff800000, 0x0000000700000000, 0x0000000700000000|100%| O| |TAMS 0x00000006ff800000| PB 0x00000006ff800000| Untracked | 0 -|1522|0x0000000700000000, 0x0000000700800000, 0x0000000700800000|100%| O| |TAMS 0x0000000700000000| PB 0x0000000700000000| Untracked | 0 -|1523|0x0000000700800000, 0x0000000701000000, 0x0000000701000000|100%| O| |TAMS 0x0000000700800000| PB 0x0000000700800000| Untracked | 0 -|1524|0x0000000701000000, 0x0000000701800000, 0x0000000701800000|100%| O| |TAMS 0x0000000701000000| PB 0x0000000701000000| Untracked | 0 -|1525|0x0000000701800000, 0x0000000702000000, 0x0000000702000000|100%| O| |TAMS 0x0000000701800000| PB 0x0000000701800000| Untracked | 0 -|1526|0x0000000702000000, 0x0000000702800000, 0x0000000702800000|100%| O| |TAMS 0x0000000702000000| PB 0x0000000702000000| Untracked | 0 -|1527|0x0000000702800000, 0x0000000703000000, 0x0000000703000000|100%| O| |TAMS 0x0000000702800000| PB 0x0000000702800000| Untracked | 0 -|1528|0x0000000703000000, 0x0000000703800000, 0x0000000703800000|100%| O| |TAMS 0x0000000703000000| PB 0x0000000703000000| Untracked | 0 -|1529|0x0000000703800000, 0x0000000703800000, 0x0000000704000000| 0%| F| |TAMS 0x0000000703800000| PB 0x0000000703800000| Untracked | 0 -|1530|0x0000000704000000, 0x0000000704000000, 0x0000000704800000| 0%| F| |TAMS 0x0000000704000000| PB 0x0000000704000000| Untracked | 0 -|1531|0x0000000704800000, 0x0000000704800000, 0x0000000705000000| 0%| F| |TAMS 0x0000000704800000| PB 0x0000000704800000| Untracked | 0 -|1532|0x0000000705000000, 0x0000000705000000, 0x0000000705800000| 0%| F| |TAMS 0x0000000705000000| PB 0x0000000705000000| Untracked | 0 -|1659|0x0000000744800000, 0x0000000745000000, 0x0000000745000000|100%| O| |TAMS 0x0000000744800000| PB 0x0000000744800000| Untracked | 0 -|1660|0x0000000745000000, 0x0000000745800000, 0x0000000745800000|100%| O| |TAMS 0x0000000745000000| PB 0x0000000745000000| Untracked | 0 -|1661|0x0000000745800000, 0x0000000746000000, 0x0000000746000000|100%| O| |TAMS 0x0000000745800000| PB 0x0000000745800000| Untracked | 0 -|1662|0x0000000746000000, 0x0000000746800000, 0x0000000746800000|100%| O| |TAMS 0x0000000746000000| PB 0x0000000746000000| Untracked | 0 -|1663|0x0000000746800000, 0x0000000747000000, 0x0000000747000000|100%| O| |TAMS 0x0000000746800000| PB 0x0000000746800000| Untracked | 0 -|1664|0x0000000747000000, 0x0000000747800000, 0x0000000747800000|100%| O| |TAMS 0x0000000747000000| PB 0x0000000747000000| Untracked | 0 -|1665|0x0000000747800000, 0x0000000748000000, 0x0000000748000000|100%| O| |TAMS 0x0000000747800000| PB 0x0000000747800000| Untracked | 0 -|1666|0x0000000748000000, 0x000000074821c248, 0x0000000748800000| 26%| O| |TAMS 0x0000000748000000| PB 0x0000000748000000| Untracked | 0 -|1869|0x00000007ad800000, 0x00000007ad800000, 0x00000007ae000000| 0%| F| |TAMS 0x00000007ad800000| PB 0x00000007ad800000| Untracked | 0 -|1870|0x00000007ae000000, 0x00000007ae000000, 0x00000007ae800000| 0%| F| |TAMS 0x00000007ae000000| PB 0x00000007ae000000| Untracked | 0 -|1871|0x00000007ae800000, 0x00000007ae800000, 0x00000007af000000| 0%| F| |TAMS 0x00000007ae800000| PB 0x00000007ae800000| Untracked | 0 -|1872|0x00000007af000000, 0x00000007af000000, 0x00000007af800000| 0%| F| |TAMS 0x00000007af000000| PB 0x00000007af000000| Untracked | 0 -|1873|0x00000007af800000, 0x00000007af800000, 0x00000007b0000000| 0%| F| |TAMS 0x00000007af800000| PB 0x00000007af800000| Untracked | 0 -|1874|0x00000007b0000000, 0x00000007b0000000, 0x00000007b0800000| 0%| F| |TAMS 0x00000007b0000000| PB 0x00000007b0000000| Untracked | 0 -|1875|0x00000007b0800000, 0x00000007b0800000, 0x00000007b1000000| 0%| F| |TAMS 0x00000007b0800000| PB 0x00000007b0800000| Untracked | 0 -|1876|0x00000007b1000000, 0x00000007b1000000, 0x00000007b1800000| 0%| F| |TAMS 0x00000007b1000000| PB 0x00000007b1000000| Untracked | 0 -|1877|0x00000007b1800000, 0x00000007b1800000, 0x00000007b2000000| 0%| F| |TAMS 0x00000007b1800000| PB 0x00000007b1800000| Untracked | 0 -|1878|0x00000007b2000000, 0x00000007b2000000, 0x00000007b2800000| 0%| F| |TAMS 0x00000007b2000000| PB 0x00000007b2000000| Untracked | 0 -|1879|0x00000007b2800000, 0x00000007b2800000, 0x00000007b3000000| 0%| F| |TAMS 0x00000007b2800000| PB 0x00000007b2800000| Untracked | 0 -|1880|0x00000007b3000000, 0x00000007b3000000, 0x00000007b3800000| 0%| F| |TAMS 0x00000007b3000000| PB 0x00000007b3000000| Untracked | 0 -|1881|0x00000007b3800000, 0x00000007b3800000, 0x00000007b4000000| 0%| F| |TAMS 0x00000007b3800000| PB 0x00000007b3800000| Untracked | 0 -|1882|0x00000007b4000000, 0x00000007b4000000, 0x00000007b4800000| 0%| F| |TAMS 0x00000007b4000000| PB 0x00000007b4000000| Untracked | 0 -|1883|0x00000007b4800000, 0x00000007b4800000, 0x00000007b5000000| 0%| F| |TAMS 0x00000007b4800000| PB 0x00000007b4800000| Untracked | 0 -|1884|0x00000007b5000000, 0x00000007b5000000, 0x00000007b5800000| 0%| F| |TAMS 0x00000007b5000000| PB 0x00000007b5000000| Untracked | 0 -|1885|0x00000007b5800000, 0x00000007b5800000, 0x00000007b6000000| 0%| F| |TAMS 0x00000007b5800000| PB 0x00000007b5800000| Untracked | 0 -|1886|0x00000007b6000000, 0x00000007b6000000, 0x00000007b6800000| 0%| F| |TAMS 0x00000007b6000000| PB 0x00000007b6000000| Untracked | 0 -|1887|0x00000007b6800000, 0x00000007b6800000, 0x00000007b7000000| 0%| F| |TAMS 0x00000007b6800000| PB 0x00000007b6800000| Untracked | 0 -|1888|0x00000007b7000000, 0x00000007b7000000, 0x00000007b7800000| 0%| F| |TAMS 0x00000007b7000000| PB 0x00000007b7000000| Untracked | 0 -|1889|0x00000007b7800000, 0x00000007b7800000, 0x00000007b8000000| 0%| F| |TAMS 0x00000007b7800000| PB 0x00000007b7800000| Untracked | 0 -|1890|0x00000007b8000000, 0x00000007b8000000, 0x00000007b8800000| 0%| F| |TAMS 0x00000007b8000000| PB 0x00000007b8000000| Untracked | 0 -|1891|0x00000007b8800000, 0x00000007b8800000, 0x00000007b9000000| 0%| F| |TAMS 0x00000007b8800000| PB 0x00000007b8800000| Untracked | 0 -|1892|0x00000007b9000000, 0x00000007b9000000, 0x00000007b9800000| 0%| F| |TAMS 0x00000007b9000000| PB 0x00000007b9000000| Untracked | 0 -|1893|0x00000007b9800000, 0x00000007b9800000, 0x00000007ba000000| 0%| F| |TAMS 0x00000007b9800000| PB 0x00000007b9800000| Untracked | 0 -|1894|0x00000007ba000000, 0x00000007ba000000, 0x00000007ba800000| 0%| F| |TAMS 0x00000007ba000000| PB 0x00000007ba000000| Untracked | 0 -|1895|0x00000007ba800000, 0x00000007ba800000, 0x00000007bb000000| 0%| F| |TAMS 0x00000007ba800000| PB 0x00000007ba800000| Untracked | 0 -|1896|0x00000007bb000000, 0x00000007bb000000, 0x00000007bb800000| 0%| F| |TAMS 0x00000007bb000000| PB 0x00000007bb000000| Untracked | 0 -|1897|0x00000007bb800000, 0x00000007bb800000, 0x00000007bc000000| 0%| F| |TAMS 0x00000007bb800000| PB 0x00000007bb800000| Untracked | 0 -|1898|0x00000007bc000000, 0x00000007bc000000, 0x00000007bc800000| 0%| F| |TAMS 0x00000007bc000000| PB 0x00000007bc000000| Untracked | 0 -|1899|0x00000007bc800000, 0x00000007bc800000, 0x00000007bd000000| 0%| F| |TAMS 0x00000007bc800000| PB 0x00000007bc800000| Untracked | 0 -|1900|0x00000007bd000000, 0x00000007bd000000, 0x00000007bd800000| 0%| F| |TAMS 0x00000007bd000000| PB 0x00000007bd000000| Untracked | 0 -|1901|0x00000007bd800000, 0x00000007bd800000, 0x00000007be000000| 0%| F| |TAMS 0x00000007bd800000| PB 0x00000007bd800000| Untracked | 0 -|1902|0x00000007be000000, 0x00000007be800000, 0x00000007be800000|100%| S|CS|TAMS 0x00000007be000000| PB 0x00000007be000000| Complete | 0 -|1903|0x00000007be800000, 0x00000007bf000000, 0x00000007bf000000|100%| S|CS|TAMS 0x00000007be800000| PB 0x00000007be800000| Complete | 0 -|1904|0x00000007bf000000, 0x00000007bf800000, 0x00000007bf800000|100%| S|CS|TAMS 0x00000007bf000000| PB 0x00000007bf000000| Complete | 0 -|1905|0x00000007bf800000, 0x00000007c0000000, 0x00000007c0000000|100%| S|CS|TAMS 0x00000007bf800000| PB 0x00000007bf800000| Complete | 0 -|1906|0x00000007c0000000, 0x00000007c0800000, 0x00000007c0800000|100%| S|CS|TAMS 0x00000007c0000000| PB 0x00000007c0000000| Complete | 0 -|1907|0x00000007c0800000, 0x00000007c1000000, 0x00000007c1000000|100%| S|CS|TAMS 0x00000007c0800000| PB 0x00000007c0800000| Complete | 0 -|1908|0x00000007c1000000, 0x00000007c1800000, 0x00000007c1800000|100%| S|CS|TAMS 0x00000007c1000000| PB 0x00000007c1000000| Complete | 0 -|1909|0x00000007c1800000, 0x00000007c2000000, 0x00000007c2000000|100%| S|CS|TAMS 0x00000007c1800000| PB 0x00000007c1800000| Complete | 0 -|1910|0x00000007c2000000, 0x00000007c2800000, 0x00000007c2800000|100%| S|CS|TAMS 0x00000007c2000000| PB 0x00000007c2000000| Complete | 0 -|1911|0x00000007c2800000, 0x00000007c3000000, 0x00000007c3000000|100%| S|CS|TAMS 0x00000007c2800000| PB 0x00000007c2800000| Complete | 0 -|1912|0x00000007c3000000, 0x00000007c3800000, 0x00000007c3800000|100%| S|CS|TAMS 0x00000007c3000000| PB 0x00000007c3000000| Complete | 0 -|1913|0x00000007c3800000, 0x00000007c3800000, 0x00000007c4000000| 0%| F| |TAMS 0x00000007c3800000| PB 0x00000007c3800000| Untracked | 0 -|1914|0x00000007c4000000, 0x00000007c4000000, 0x00000007c4800000| 0%| F| |TAMS 0x00000007c4000000| PB 0x00000007c4000000| Untracked | 0 -|1915|0x00000007c4800000, 0x00000007c4800000, 0x00000007c5000000| 0%| F| |TAMS 0x00000007c4800000| PB 0x00000007c4800000| Untracked | 0 -|1916|0x00000007c5000000, 0x00000007c5000000, 0x00000007c5800000| 0%| F| |TAMS 0x00000007c5000000| PB 0x00000007c5000000| Untracked | 0 -|1917|0x00000007c5800000, 0x00000007c5800000, 0x00000007c6000000| 0%| F| |TAMS 0x00000007c5800000| PB 0x00000007c5800000| Untracked | 0 -|1918|0x00000007c6000000, 0x00000007c6000000, 0x00000007c6800000| 0%| F| |TAMS 0x00000007c6000000| PB 0x00000007c6000000| Untracked | 0 -|1919|0x00000007c6800000, 0x00000007c6800000, 0x00000007c7000000| 0%| F| |TAMS 0x00000007c6800000| PB 0x00000007c6800000| Untracked | 0 -|1920|0x00000007c7000000, 0x00000007c7000000, 0x00000007c7800000| 0%| F| |TAMS 0x00000007c7000000| PB 0x00000007c7000000| Untracked | 0 -|1921|0x00000007c7800000, 0x00000007c7800000, 0x00000007c8000000| 0%| F| |TAMS 0x00000007c7800000| PB 0x00000007c7800000| Untracked | 0 -|1922|0x00000007c8000000, 0x00000007c8000000, 0x00000007c8800000| 0%| F| |TAMS 0x00000007c8000000| PB 0x00000007c8000000| Untracked | 0 -|1923|0x00000007c8800000, 0x00000007c8800000, 0x00000007c9000000| 0%| F| |TAMS 0x00000007c8800000| PB 0x00000007c8800000| Untracked | 0 -|1924|0x00000007c9000000, 0x00000007c9000000, 0x00000007c9800000| 0%| F| |TAMS 0x00000007c9000000| PB 0x00000007c9000000| Untracked | 0 -|1925|0x00000007c9800000, 0x00000007c9800000, 0x00000007ca000000| 0%| F| |TAMS 0x00000007c9800000| PB 0x00000007c9800000| Untracked | 0 -|1926|0x00000007ca000000, 0x00000007ca000000, 0x00000007ca800000| 0%| F| |TAMS 0x00000007ca000000| PB 0x00000007ca000000| Untracked | 0 -|1927|0x00000007ca800000, 0x00000007ca800000, 0x00000007cb000000| 0%| F| |TAMS 0x00000007ca800000| PB 0x00000007ca800000| Untracked | 0 -|1928|0x00000007cb000000, 0x00000007cb000000, 0x00000007cb800000| 0%| F| |TAMS 0x00000007cb000000| PB 0x00000007cb000000| Untracked | 0 -|1929|0x00000007cb800000, 0x00000007cb800000, 0x00000007cc000000| 0%| F| |TAMS 0x00000007cb800000| PB 0x00000007cb800000| Untracked | 0 -|1930|0x00000007cc000000, 0x00000007cc000000, 0x00000007cc800000| 0%| F| |TAMS 0x00000007cc000000| PB 0x00000007cc000000| Untracked | 0 -|1931|0x00000007cc800000, 0x00000007cc800000, 0x00000007cd000000| 0%| F| |TAMS 0x00000007cc800000| PB 0x00000007cc800000| Untracked | 0 -|1932|0x00000007cd000000, 0x00000007cd000000, 0x00000007cd800000| 0%| F| |TAMS 0x00000007cd000000| PB 0x00000007cd000000| Untracked | 0 -|1933|0x00000007cd800000, 0x00000007cd800000, 0x00000007ce000000| 0%| F| |TAMS 0x00000007cd800000| PB 0x00000007cd800000| Untracked | 0 -|1934|0x00000007ce000000, 0x00000007ce000000, 0x00000007ce800000| 0%| F| |TAMS 0x00000007ce000000| PB 0x00000007ce000000| Untracked | 0 -|1935|0x00000007ce800000, 0x00000007ce800000, 0x00000007cf000000| 0%| F| |TAMS 0x00000007ce800000| PB 0x00000007ce800000| Untracked | 0 -|1936|0x00000007cf000000, 0x00000007cf000000, 0x00000007cf800000| 0%| F| |TAMS 0x00000007cf000000| PB 0x00000007cf000000| Untracked | 0 -|1937|0x00000007cf800000, 0x00000007cf800000, 0x00000007d0000000| 0%| F| |TAMS 0x00000007cf800000| PB 0x00000007cf800000| Untracked | 0 -|1938|0x00000007d0000000, 0x00000007d0000000, 0x00000007d0800000| 0%| F| |TAMS 0x00000007d0000000| PB 0x00000007d0000000| Untracked | 0 -|1939|0x00000007d0800000, 0x00000007d0800000, 0x00000007d1000000| 0%| F| |TAMS 0x00000007d0800000| PB 0x00000007d0800000| Untracked | 0 -|1940|0x00000007d1000000, 0x00000007d1000000, 0x00000007d1800000| 0%| F| |TAMS 0x00000007d1000000| PB 0x00000007d1000000| Untracked | 0 -|1941|0x00000007d1800000, 0x00000007d1800000, 0x00000007d2000000| 0%| F| |TAMS 0x00000007d1800000| PB 0x00000007d1800000| Untracked | 0 -|1942|0x00000007d2000000, 0x00000007d2000000, 0x00000007d2800000| 0%| F| |TAMS 0x00000007d2000000| PB 0x00000007d2000000| Untracked | 0 -|1943|0x00000007d2800000, 0x00000007d2800000, 0x00000007d3000000| 0%| F| |TAMS 0x00000007d2800000| PB 0x00000007d2800000| Untracked | 0 -|1944|0x00000007d3000000, 0x00000007d3000000, 0x00000007d3800000| 0%| F| |TAMS 0x00000007d3000000| PB 0x00000007d3000000| Untracked | 0 -|1945|0x00000007d3800000, 0x00000007d3800000, 0x00000007d4000000| 0%| F| |TAMS 0x00000007d3800000| PB 0x00000007d3800000| Untracked | 0 -|1946|0x00000007d4000000, 0x00000007d4000000, 0x00000007d4800000| 0%| F| |TAMS 0x00000007d4000000| PB 0x00000007d4000000| Untracked | 0 -|1947|0x00000007d4800000, 0x00000007d4800000, 0x00000007d5000000| 0%| F| |TAMS 0x00000007d4800000| PB 0x00000007d4800000| Untracked | 0 -|1948|0x00000007d5000000, 0x00000007d5000000, 0x00000007d5800000| 0%| F| |TAMS 0x00000007d5000000| PB 0x00000007d5000000| Untracked | 0 -|1949|0x00000007d5800000, 0x00000007d5800000, 0x00000007d6000000| 0%| F| |TAMS 0x00000007d5800000| PB 0x00000007d5800000| Untracked | 0 -|1956|0x00000007d9000000, 0x00000007d9000000, 0x00000007d9800000| 0%| F| |TAMS 0x00000007d9000000| PB 0x00000007d9000000| Untracked | 0 -|1957|0x00000007d9800000, 0x00000007d9800000, 0x00000007da000000| 0%| F| |TAMS 0x00000007d9800000| PB 0x00000007d9800000| Untracked | 0 -|1958|0x00000007da000000, 0x00000007da000000, 0x00000007da800000| 0%| F| |TAMS 0x00000007da000000| PB 0x00000007da000000| Untracked | 0 -|1959|0x00000007da800000, 0x00000007da800000, 0x00000007db000000| 0%| F| |TAMS 0x00000007da800000| PB 0x00000007da800000| Untracked | 0 -|1960|0x00000007db000000, 0x00000007db000000, 0x00000007db800000| 0%| F| |TAMS 0x00000007db000000| PB 0x00000007db000000| Untracked | 0 -|1961|0x00000007db800000, 0x00000007db800000, 0x00000007dc000000| 0%| F| |TAMS 0x00000007db800000| PB 0x00000007db800000| Untracked | 0 -|1962|0x00000007dc000000, 0x00000007dc000000, 0x00000007dc800000| 0%| F| |TAMS 0x00000007dc000000| PB 0x00000007dc000000| Untracked | 0 -|1963|0x00000007dc800000, 0x00000007dc800000, 0x00000007dd000000| 0%| F| |TAMS 0x00000007dc800000| PB 0x00000007dc800000| Untracked | 0 -|1964|0x00000007dd000000, 0x00000007dd000000, 0x00000007dd800000| 0%| F| |TAMS 0x00000007dd000000| PB 0x00000007dd000000| Untracked | 0 -|1965|0x00000007dd800000, 0x00000007dd800000, 0x00000007de000000| 0%| F| |TAMS 0x00000007dd800000| PB 0x00000007dd800000| Untracked | 0 -|1966|0x00000007de000000, 0x00000007de000000, 0x00000007de800000| 0%| F| |TAMS 0x00000007de000000| PB 0x00000007de000000| Untracked | 0 -|1967|0x00000007de800000, 0x00000007de800000, 0x00000007df000000| 0%| F| |TAMS 0x00000007de800000| PB 0x00000007de800000| Untracked | 0 -|1968|0x00000007df000000, 0x00000007df000000, 0x00000007df800000| 0%| F| |TAMS 0x00000007df000000| PB 0x00000007df000000| Untracked | 0 -|1969|0x00000007df800000, 0x00000007df800000, 0x00000007e0000000| 0%| F| |TAMS 0x00000007df800000| PB 0x00000007df800000| Untracked | 0 -|1970|0x00000007e0000000, 0x00000007e0000000, 0x00000007e0800000| 0%| F| |TAMS 0x00000007e0000000| PB 0x00000007e0000000| Untracked | 0 -|1971|0x00000007e0800000, 0x00000007e0800000, 0x00000007e1000000| 0%| F| |TAMS 0x00000007e0800000| PB 0x00000007e0800000| Untracked | 0 -|1972|0x00000007e1000000, 0x00000007e1000000, 0x00000007e1800000| 0%| F| |TAMS 0x00000007e1000000| PB 0x00000007e1000000| Untracked | 0 -|1973|0x00000007e1800000, 0x00000007e1800000, 0x00000007e2000000| 0%| F| |TAMS 0x00000007e1800000| PB 0x00000007e1800000| Untracked | 0 -|1974|0x00000007e2000000, 0x00000007e2000000, 0x00000007e2800000| 0%| F| |TAMS 0x00000007e2000000| PB 0x00000007e2000000| Untracked | 0 -|1975|0x00000007e2800000, 0x00000007e2800000, 0x00000007e3000000| 0%| F| |TAMS 0x00000007e2800000| PB 0x00000007e2800000| Untracked | 0 -|1976|0x00000007e3000000, 0x00000007e3000000, 0x00000007e3800000| 0%| F| |TAMS 0x00000007e3000000| PB 0x00000007e3000000| Untracked | 0 -|1977|0x00000007e3800000, 0x00000007e3800000, 0x00000007e4000000| 0%| F| |TAMS 0x00000007e3800000| PB 0x00000007e3800000| Untracked | 0 -|1978|0x00000007e4000000, 0x00000007e4000000, 0x00000007e4800000| 0%| F| |TAMS 0x00000007e4000000| PB 0x00000007e4000000| Untracked | 0 -|1979|0x00000007e4800000, 0x00000007e4800000, 0x00000007e5000000| 0%| F| |TAMS 0x00000007e4800000| PB 0x00000007e4800000| Untracked | 0 -|1980|0x00000007e5000000, 0x00000007e5000000, 0x00000007e5800000| 0%| F| |TAMS 0x00000007e5000000| PB 0x00000007e5000000| Untracked | 0 -|1981|0x00000007e5800000, 0x00000007e5800000, 0x00000007e6000000| 0%| F| |TAMS 0x00000007e5800000| PB 0x00000007e5800000| Untracked | 0 -|1982|0x00000007e6000000, 0x00000007e6000000, 0x00000007e6800000| 0%| F| |TAMS 0x00000007e6000000| PB 0x00000007e6000000| Untracked | 0 -|1983|0x00000007e6800000, 0x00000007e6800000, 0x00000007e7000000| 0%| F| |TAMS 0x00000007e6800000| PB 0x00000007e6800000| Untracked | 0 -|1984|0x00000007e7000000, 0x00000007e7000000, 0x00000007e7800000| 0%| F| |TAMS 0x00000007e7000000| PB 0x00000007e7000000| Untracked | 0 -|1985|0x00000007e7800000, 0x00000007e7800000, 0x00000007e8000000| 0%| F| |TAMS 0x00000007e7800000| PB 0x00000007e7800000| Untracked | 0 -|1986|0x00000007e8000000, 0x00000007e8000000, 0x00000007e8800000| 0%| F| |TAMS 0x00000007e8000000| PB 0x00000007e8000000| Untracked | 0 -|1987|0x00000007e8800000, 0x00000007e8800000, 0x00000007e9000000| 0%| F| |TAMS 0x00000007e8800000| PB 0x00000007e8800000| Untracked | 0 -|1988|0x00000007e9000000, 0x00000007e9000000, 0x00000007e9800000| 0%| F| |TAMS 0x00000007e9000000| PB 0x00000007e9000000| Untracked | 0 -|1989|0x00000007e9800000, 0x00000007e9800000, 0x00000007ea000000| 0%| F| |TAMS 0x00000007e9800000| PB 0x00000007e9800000| Untracked | 0 - -Card table byte_map: [0x0000016c01fd0000,0x0000016c03fa0000] _byte_map_base: 0x0000016bfff98000 - -Marking Bits: (CMBitMap*) 0x0000016c7e6600a0 - Bits: [0x0000016c03fa0000, 0x0000016c13de0000) - -Polling page: 0x0000016c60f40000 - -Metaspace: - -Usage: - Non-class: 1.16 MB used. - Class: 58.49 KB used. - Both: 1.22 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 1.25 MB ( 2%) committed, 1 nodes. - Class space: 1.00 GB reserved, 128.00 KB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 1.38 MB ( <1%) committed. - -Chunk freelists: - Non-Class: 11.86 MB - Class: 15.73 MB - Both: 27.59 MB - -MaxMetaspaceSize: unlimited -CompressedClassSpaceSize: 1.00 GB -Initial GC threshold: 21.00 MB -Current GC threshold: 21.00 MB -CDS: on - - commit_granule_bytes: 65536. - - commit_granule_words: 8192. - - virtual_space_node_default_size: 8388608. - - enlarge_chunks_in_place: 1. - - use_allocation_guard: 0. - - -Internal statistics: - -num_allocs_failed_limit: 0. -num_arena_births: 16. -num_arena_deaths: 0. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 22. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 0. -num_chunks_taken_from_freelist: 26. -num_chunk_merges: 0. -num_chunk_splits: 16. -num_chunks_enlarged: 11. -num_inconsistent_stats: 0. - -CodeHeap 'non-profiled nmethods': size=117248Kb used=895Kb max_used=1177Kb free=116352Kb - bounds [0x0000016c74e30000, 0x0000016c750a0000, 0x0000016c7c0b0000] -CodeHeap 'profiled nmethods': size=117184Kb used=934Kb max_used=941Kb free=116249Kb - bounds [0x0000016c6d0b0000, 0x0000016c6d320000, 0x0000016c74320000] -CodeHeap 'non-nmethods': size=11328Kb used=1303Kb max_used=6373Kb free=10024Kb - bounds [0x0000016c74320000, 0x0000016c74970000, 0x0000016c74e30000] -CodeCache: size=245760Kb, used=3132Kb, max_used=8491Kb, free=242625Kb - total_blobs=1198, nmethods=785, adapters=327, full_count=0 -Compilation: enabled, stopped_count=0, restarted_count=0 - -JVMCI Events (20 events): -Event: 253.792 Thread 0x0000016c58109860 initializing JVMCI runtime 3 -Event: 253.792 Thread 0x0000016c58109860 done waiting for JavaVM references initialization in JVMCI runtime 3 -Event: 253.792 Thread 0x0000016c58109860 initialized JVMCI runtime 3 -Event: 255.221 Thread 0x0000016c58109860 detaching from JVMCI runtime 3: releasing idle compiler thread (0 other threads still attached) -Event: 255.221 Thread 0x0000016c58109860 shutting down HotSpotJVMCIRuntime for JVMCI runtime 3 -Event: 255.221 Thread 0x0000016c58109860 shut down JVMCI runtime 3 -Event: 255.227 Thread 0x0000016c58109860 destroyed JavaVM[28]@0x0000016c80a1bd38 for JVMCI runtime 3 -Event: 255.227 Thread 0x0000016c58109860 releasing handles for JVMCI runtime 3: oop handles=101, metadata handles={total=251, live=238, blocks=12} -Event: 255.227 Thread 0x0000016c58109860 detached from JVMCI runtime 3 -Event: 258.467 Thread 0x0000016c58109860 attached to JVMCI runtime 3 -Event: 258.473 Thread 0x0000016c58109860 created JavaVM[29]@0x0000016c80a1bd38 for JVMCI runtime 3 -Event: 258.473 Thread 0x0000016c58109860 initializing JVMCI runtime 3 -Event: 258.473 Thread 0x0000016c58109860 done waiting for JavaVM references initialization in JVMCI runtime 3 -Event: 258.473 Thread 0x0000016c58109860 initialized JVMCI runtime 3 -Event: 259.496 Thread 0x0000016c58109860 detaching from JVMCI runtime 3: releasing idle compiler thread (0 other threads still attached) -Event: 259.496 Thread 0x0000016c58109860 shutting down HotSpotJVMCIRuntime for JVMCI runtime 3 -Event: 259.496 Thread 0x0000016c58109860 shut down JVMCI runtime 3 -Event: 259.498 Thread 0x0000016c58109860 destroyed JavaVM[29]@0x0000016c80a1bd38 for JVMCI runtime 3 -Event: 259.498 Thread 0x0000016c58109860 releasing handles for JVMCI runtime 3: oop handles=52, metadata handles={total=90, live=78, blocks=12} -Event: 259.498 Thread 0x0000016c58109860 detached from JVMCI runtime 3 - -Compilation events (20 events): -Event: 215.121 Thread 0x0000016c5810ad60 1025 3 java.util.concurrent.ForkJoinPool::tryTrim (209 bytes) -Event: 215.122 Thread 0x0000016c5810ad60 nmethod 1025 0x0000016c6d169108 code [0x0000016c6d169260, 0x0000016c6d1697e8] -Event: 216.227 Thread 0x0000016c5810ad60 1026 ! 3 java.util.concurrent.ForkJoinTask::awaitDone (350 bytes) -Event: 216.231 Thread 0x0000016c5810ad60 nmethod 1026 0x0000016c6d19b688 code [0x0000016c6d19b9c0, 0x0000016c6d19dae0] -Event: 216.231 Thread 0x0000016c5810ad60 1027 3 java.util.concurrent.ForkJoinTask$Aux:: (15 bytes) -Event: 216.231 Thread 0x0000016c5810ad60 nmethod 1027 0x0000016c6d0ff888 code [0x0000016c6d0ff9a0, 0x0000016c6d0ffbd0] -Event: 225.242 Thread 0x0000016c58109860 1028 4 java.lang.AbstractStringBuilder::charAt (36 bytes) -Event: 225.263 Thread 0x0000016c58109860 nmethod 1028 0x0000016c74eed308 code [0x0000016c74eed400, 0x0000016c74eed540] -Event: 226.597 Thread 0x0000016c58109860 1029 % 4 java.util.concurrent.ForkJoinPool::helpComplete @ 153 (435 bytes) -Event: 227.034 Thread 0x0000016c58109860 nmethod 1029% 0x0000016c74e7f508 code [0x0000016c74e7fa40, 0x0000016c74e84a58] -Event: 249.559 Thread 0x0000016c5810ad60 1030 3 java.util.stream.AbstractPipeline::hasAnyStateful (38 bytes) -Event: 249.562 Thread 0x0000016c5810ad60 nmethod 1030 0x0000016c6d0ff288 code [0x0000016c6d0ff3c0, 0x0000016c6d0ff808] -Event: 250.842 Thread 0x0000016c58109860 1031 4 java.lang.StringLatin1::inflate (34 bytes) -Event: 250.909 Thread 0x0000016c58109860 nmethod 1031 0x0000016c74eecf88 code [0x0000016c74eed080, 0x0000016c74eed2c8] -Event: 253.782 Thread 0x0000016c58109860 1032 4 java.util.concurrent.ForkJoinPool::helpComplete (435 bytes) -Event: 254.221 Thread 0x0000016c58109860 nmethod 1032 0x0000016c74ef7908 code [0x0000016c74ef7da0, 0x0000016c74efd548] -Event: 258.421 Thread 0x0000016c5810ad60 1033 % 3 java.util.concurrent.ForkJoinPool::helpComplete @ 252 (435 bytes) -Event: 258.430 Thread 0x0000016c5810ad60 nmethod 1033% 0x0000016c6d19db88 code [0x0000016c6d19de20, 0x0000016c6d1a0168] -Event: 258.467 Thread 0x0000016c58109860 1034 4 java.lang.StringCoding::implEncodeAsciiArray (47 bytes) -Event: 258.496 Thread 0x0000016c58109860 nmethod 1034 0x0000016c74ed5108 code [0x0000016c74ed5200, 0x0000016c74ed54f0] - -GC Heap History (20 events): -Event: 251.790 GC heap after -{Heap after GC invocations=293 (full 0): - garbage-first heap total reserved 16662528K, committed 9887744K, used 5102489K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 8 young (65536K), 8 survivors (65536K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 252.414 GC heap before -{Heap before GC invocations=293 (full 0): - garbage-first heap total reserved 16662528K, committed 9887744K, used 5528473K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 60 young (491520K), 8 survivors (65536K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 252.611 GC heap after -{Heap after GC invocations=294 (full 0): - garbage-first heap total reserved 16662528K, committed 9887744K, used 5376112K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 8 young (65536K), 8 survivors (65536K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 253.031 GC heap before -{Heap before GC invocations=294 (full 0): - garbage-first heap total reserved 16662528K, committed 9887744K, used 5802096K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 60 young (491520K), 8 survivors (65536K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 253.256 GC heap after -{Heap after GC invocations=295 (full 0): - garbage-first heap total reserved 16662528K, committed 11714560K, used 5657356K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 8 young (65536K), 8 survivors (65536K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 253.828 GC heap before -{Heap before GC invocations=295 (full 0): - garbage-first heap total reserved 16662528K, committed 11714560K, used 6173452K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 71 young (581632K), 8 survivors (65536K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 254.079 GC heap after -{Heap after GC invocations=296 (full 0): - garbage-first heap total reserved 16662528K, committed 11714560K, used 5998704K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 9 young (73728K), 9 survivors (73728K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 254.635 GC heap before -{Heap before GC invocations=296 (full 0): - garbage-first heap total reserved 16662528K, committed 11714560K, used 6506608K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 71 young (581632K), 9 survivors (73728K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 254.889 GC heap after -{Heap after GC invocations=297 (full 0): - garbage-first heap total reserved 16662528K, committed 11714560K, used 6327909K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 9 young (73728K), 9 survivors (73728K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 255.422 GC heap before -{Heap before GC invocations=297 (full 0): - garbage-first heap total reserved 16662528K, committed 11714560K, used 6835813K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 71 young (581632K), 9 survivors (73728K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 255.693 GC heap after -{Heap after GC invocations=298 (full 0): - garbage-first heap total reserved 16662528K, committed 11714560K, used 6661935K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 9 young (73728K), 9 survivors (73728K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 256.404 GC heap before -{Heap before GC invocations=298 (full 0): - garbage-first heap total reserved 16662528K, committed 11714560K, used 7169839K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 71 young (581632K), 9 survivors (73728K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 256.690 GC heap after -{Heap after GC invocations=299 (full 0): - garbage-first heap total reserved 16662528K, committed 13565952K, used 6994724K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 9 young (73728K), 9 survivors (73728K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 257.788 GC heap before -{Heap before GC invocations=299 (full 0): - garbage-first heap total reserved 16662528K, committed 13565952K, used 7592740K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 82 young (671744K), 9 survivors (73728K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 258.127 GC heap after -{Heap after GC invocations=300 (full 0): - garbage-first heap total reserved 16662528K, committed 13565952K, used 7364983K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 11 young (90112K), 11 survivors (90112K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 259.075 GC heap before -{Heap before GC invocations=300 (full 0): - garbage-first heap total reserved 16662528K, committed 13565952K, used 7946615K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 82 young (671744K), 11 survivors (90112K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 259.387 GC heap after -{Heap after GC invocations=301 (full 0): - garbage-first heap total reserved 16662528K, committed 13565952K, used 7712514K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 11 young (90112K), 11 survivors (90112K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 260.195 GC heap before -{Heap before GC invocations=301 (full 0): - garbage-first heap total reserved 16662528K, committed 13565952K, used 8294146K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 82 young (671744K), 11 survivors (90112K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 260.413 GC heap after -{Heap after GC invocations=302 (full 0): - garbage-first heap total reserved 16662528K, committed 13565952K, used 8056576K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 11 young (90112K), 11 survivors (90112K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} -Event: 261.174 GC heap before -{Heap before GC invocations=302 (full 0): - garbage-first heap total reserved 16662528K, committed 13565952K, used 8638208K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 82 young (671744K), 11 survivors (90112K) - Metaspace used 1247K, committed 1408K, reserved 1114112K - class space used 58K, committed 128K, reserved 1048576K -} - -Dll operation events (4 events): -Event: 0.008 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\java.dll -Event: 0.058 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jsvml.dll -Event: 0.061 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jvmcicompiler.dll -Event: 0.167 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jimage.dll - -Deoptimization events (20 events): -Event: 171.128 Thread 0x0000016c583e1350 DEOPT PACKING pc=0x0000016c6d12fdf2 sp=0x0000000f601ff270 -Event: 171.128 Thread 0x0000016c583e1350 DEOPT UNPACKING pc=0x0000016c743749a3 sp=0x0000000f601fe750 mode 0 -Event: 180.638 Thread 0x0000016c583946f0 DEOPT PACKING pc=0x0000016c6d0ff9f2 sp=0x0000000f5efff130 -Event: 180.638 Thread 0x0000016c583946f0 DEOPT UNPACKING pc=0x0000016c743749a3 sp=0x0000000f5effe610 mode 0 -Event: 185.597 Thread 0x0000016c583dbe00 Uncommon trap: trap_request=0xffffffed fr.pc=0x0000016c74ed1d8f relative=0x000000000000a80f -Event: 185.597 Thread 0x0000016c583dbe00 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x0000016c74ed1d8f method=java.util.concurrent.CountedCompleter.weakCompareAndSetPendingCount(II)Z @ 12 jvmci -Event: 185.597 Thread 0x0000016c583dbe00 DEOPT PACKING pc=0x0000016c74ed1d8f sp=0x0000000f5f8ff250 -Event: 185.597 Thread 0x0000016c583dbe00 DEOPT UNPACKING pc=0x0000016c743749a3 sp=0x0000000f5f8fe560 mode 3 -Event: 201.227 Thread 0x0000016c583e19e0 DEOPT PACKING pc=0x0000016c6d13c8f2 sp=0x0000000f607ff320 -Event: 201.227 Thread 0x0000016c583e19e0 DEOPT UNPACKING pc=0x0000016c743749a3 sp=0x0000000f607fe800 mode 0 -Event: 245.767 Thread 0x0000016c583e2700 Uncommon trap: trap_request=0xffffffed fr.pc=0x0000016c74ed124e relative=0x0000000000009cce -Event: 245.767 Thread 0x0000016c583e2700 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x0000016c74ed124e method=java.util.concurrent.ForkJoinPool.runWorker(Ljava/util/concurrent/ForkJoinPool$WorkQueue;)V @ 128 jvmci -Event: 245.767 Thread 0x0000016c583e2700 DEOPT PACKING pc=0x0000016c74ed124e sp=0x0000000f621fee80 -Event: 245.767 Thread 0x0000016c583e2700 DEOPT UNPACKING pc=0x0000016c743749a3 sp=0x0000000f621fe480 mode 3 -Event: 253.782 Thread 0x0000016c60b2eec0 DEOPT PACKING pc=0x0000016c6d0d8a9d sp=0x0000000f5bbfef80 -Event: 253.782 Thread 0x0000016c60b2eec0 DEOPT UNPACKING pc=0x0000016c743749a3 sp=0x0000000f5bbfe440 mode 0 -Event: 254.540 Thread 0x0000016c60b2eec0 Uncommon trap: trap_request=0xffffffed fr.pc=0x0000016c74efc0d8 relative=0x0000000000004338 -Event: 254.541 Thread 0x0000016c60b2eec0 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x0000016c74efc0d8 method=java.util.concurrent.ForkJoinPool.helpComplete(Ljava/util/concurrent/ForkJoinTask;Ljava/util/concurrent/ForkJoinPool$WorkQueue;Z)I @ 293 jvmci -Event: 254.541 Thread 0x0000016c60b2eec0 DEOPT PACKING pc=0x0000016c74efc0d8 sp=0x0000000f5bbfef40 -Event: 254.541 Thread 0x0000016c60b2eec0 DEOPT UNPACKING pc=0x0000016c743749a3 sp=0x0000000f5bbfe438 mode 3 - -Classes loaded (20 events): -Event: 0.162 Loading class jdk/internal/module/ModulePatcher$PatchedModuleReader -Event: 0.162 Loading class jdk/internal/module/ModulePatcher$PatchedModuleReader done -Event: 0.169 Loading class sun/net/www/protocol/jrt/Handler -Event: 0.169 Loading class sun/net/www/protocol/jrt/Handler done -Event: 0.180 Loading class sun/util/resources/LocaleData$CommonResourceBundleProvider -Event: 0.180 Loading class sun/util/resources/LocaleData$LocaleDataResourceBundleProvider -Event: 0.180 Loading class java/util/spi/ResourceBundleProvider -Event: 0.181 Loading class java/util/spi/ResourceBundleProvider done -Event: 0.181 Loading class sun/util/resources/LocaleData$LocaleDataResourceBundleProvider done -Event: 0.181 Loading class sun/util/resources/LocaleData$CommonResourceBundleProvider done -Event: 0.182 Loading class sun/util/cldr/CLDRBaseLocaleDataMetaInfo$CLDRMapHolder -Event: 0.183 Loading class sun/util/cldr/CLDRBaseLocaleDataMetaInfo$CLDRMapHolder done -Event: 0.186 Loading class java/util/HashMap$EntrySpliterator -Event: 0.186 Loading class java/util/HashMap$EntrySpliterator done -Event: 0.191 Loading class sun/util/resources/Bundles$2 -Event: 0.191 Loading class sun/util/resources/Bundles$2 done -Event: 0.192 Loading class java/lang/InstantiationException -Event: 0.192 Loading class java/lang/InstantiationException done -Event: 0.192 Loading class java/lang/IllegalAccessException -Event: 0.192 Loading class java/lang/IllegalAccessException done - -Classes unloaded (0 events): -No events - -Classes redefined (0 events): -No events - -Internal exceptions (4 events): -Event: 0.127 Thread 0x0000016c60b2eec0 Exception (0x0000000446e9f428) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 796] -Event: 0.187 Thread 0x0000016c60b2eec0 Exception (0x00000004469462c0) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 796] -Event: 119.530 Thread 0x0000016c58363210 Implicit null exception at 0x0000016c74f34dc0 to 0x0000016c74f3aec8 -Event: 128.645 Thread 0x0000016c583946f0 Implicit null exception at 0x0000016c74ea7840 to 0x0000016c74ead3f9 - -VM Operations (20 events): -Event: 251.790 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 252.413 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 252.611 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 253.030 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 253.256 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 253.828 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 254.079 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 254.635 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 254.889 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 255.422 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 255.693 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 256.404 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 256.690 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 257.788 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 258.128 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 259.075 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 259.387 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 260.195 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 260.413 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 261.174 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) - -Memory protections (0 events): -No events - -Nmethod flushes (20 events): -Event: 56.478 Thread 0x0000016c7e80d430 flushing osr nmethod 0x0000016c6d142b08 -Event: 121.330 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c6d0c5a88 -Event: 121.330 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c6d139508 -Event: 121.330 Thread 0x0000016c7e80d430 flushing osr nmethod 0x0000016c74f48188 -Event: 121.330 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c6d0f7b88 -Event: 121.330 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c6d172208 -Event: 121.330 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c74e8af08 -Event: 121.330 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c6d149908 -Event: 154.582 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c6d0e4488 -Event: 183.826 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c6d0e4b08 -Event: 183.826 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c6d147408 -Event: 183.826 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c6d149388 -Event: 183.826 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c6d0bf208 -Event: 211.526 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c6d17e808 -Event: 211.526 Thread 0x0000016c7e80d430 flushing osr nmethod 0x0000016c6d15a388 -Event: 211.526 Thread 0x0000016c7e80d430 flushing nmethod 0x0000016c6d169108 -Event: 211.526 Thread 0x0000016c7e80d430 flushing osr nmethod 0x0000016c6d12e908 -Event: 211.526 Thread 0x0000016c7e80d430 flushing osr nmethod 0x0000016c6d172508 -Event: 211.526 Thread 0x0000016c7e80d430 flushing osr nmethod 0x0000016c6d0fe508 -Event: 241.599 Thread 0x0000016c7e80d430 flushing osr nmethod 0x0000016c6d13b408 - -Events (20 events): -Event: 153.463 Thread 0x0000016c5810ad60 Thread added: 0x0000016c5e2b9a40 -Event: 153.463 Thread 0x0000016c5810ad60 Thread added: 0x0000016c5df302f0 -Event: 153.463 Thread 0x0000016c5810ad60 Thread added: 0x0000016c589dd330 -Event: 153.463 Thread 0x0000016c5810ad60 Thread added: 0x0000016c5e1354d0 -Event: 153.463 Thread 0x0000016c5810ad60 Thread added: 0x0000016c5e1c5c20 -Event: 157.010 Thread 0x0000016c5e1c5c20 Thread exited: 0x0000016c5e1c5c20 -Event: 162.010 Thread 0x0000016c5e1354d0 Thread exited: 0x0000016c5e1354d0 -Event: 167.011 Thread 0x0000016c589dd330 Thread exited: 0x0000016c589dd330 -Event: 167.012 Thread 0x0000016c5df302f0 Thread exited: 0x0000016c5df302f0 -Event: 170.536 Thread 0x0000016c5e2b9a40 Thread exited: 0x0000016c5e2b9a40 -Event: 175.796 Thread 0x0000016c5e0bace0 Thread exited: 0x0000016c5e0bace0 -Event: 175.796 Thread 0x0000016c5e039d30 Thread exited: 0x0000016c5e039d30 -Event: 180.796 Thread 0x0000016c5e133d90 Thread exited: 0x0000016c5e133d90 -Event: 180.796 Thread 0x0000016c58a97a20 Thread exited: 0x0000016c58a97a20 -Event: 205.464 Thread 0x0000016c5810ad60 Thread added: 0x0000016c5e23ff10 -Event: 205.465 Thread 0x0000016c5810ad60 Thread added: 0x0000016c589dd330 -Event: 205.465 Thread 0x0000016c5810ad60 Thread added: 0x0000016c5deb4350 -Event: 210.599 Thread 0x0000016c5deb4350 Thread exited: 0x0000016c5deb4350 -Event: 210.766 Thread 0x0000016c589dd330 Thread exited: 0x0000016c589dd330 -Event: 215.116 Thread 0x0000016c5e23ff10 Thread exited: 0x0000016c5e23ff10 - - -Dynamic libraries: -0x00007ff63b640000 - 0x00007ff63b650000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\javaw.exe -0x00007fff302e0000 - 0x00007fff304e1000 C:\Windows\SYSTEM32\ntdll.dll -0x00007fff2ef90000 - 0x00007fff2f04e000 C:\Windows\System32\KERNEL32.DLL -0x00007fff2d9a0000 - 0x00007fff2dd0e000 C:\Windows\System32\KERNELBASE.dll -0x00007fff2df20000 - 0x00007fff2e030000 C:\Windows\System32\ucrtbase.dll -0x00007fff28040000 - 0x00007fff2805b000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\VCRUNTIME140.dll -0x00007fff28080000 - 0x00007fff28097000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jli.dll -0x00007fff2e9c0000 - 0x00007fff2eb65000 C:\Windows\System32\USER32.dll -0x00007fff13dd0000 - 0x00007fff14075000 C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.20348.1_none_88d3d41d702dedea\COMCTL32.dll -0x00007fff2ddd0000 - 0x00007fff2ddf6000 C:\Windows\System32\win32u.dll -0x00007fff2e3e0000 - 0x00007fff2e40b000 C:\Windows\System32\GDI32.dll -0x00007fff2f460000 - 0x00007fff2f503000 C:\Windows\System32\msvcrt.dll -0x00007fff2de00000 - 0x00007fff2df1a000 C:\Windows\System32\gdi32full.dll -0x00007fff2d900000 - 0x00007fff2d9a0000 C:\Windows\System32\msvcp_win.dll -0x00007fff2fe80000 - 0x00007fff2feb1000 C:\Windows\System32\IMM32.DLL -0x00007fff1a850000 - 0x00007fff1a85c000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\vcruntime140_1.dll -0x00007ffefd890000 - 0x00007ffefd91e000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\msvcp140.dll -0x00007ffdac1c0000 - 0x00007ffdacf0f000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\server\jvm.dll -0x00007fff2f3b0000 - 0x00007fff2f45e000 C:\Windows\System32\ADVAPI32.dll -0x00007fff2e920000 - 0x00007fff2e9bf000 C:\Windows\System32\sechost.dll -0x00007fff2fd50000 - 0x00007fff2fe6f000 C:\Windows\System32\RPCRT4.dll -0x00007fff2f0f0000 - 0x00007fff2f161000 C:\Windows\System32\WS2_32.dll -0x00007fff2d770000 - 0x00007fff2d7bd000 C:\Windows\SYSTEM32\POWRPROF.dll -0x00007fff26410000 - 0x00007fff26437000 C:\Windows\SYSTEM32\WINMM.dll -0x00007fff293d0000 - 0x00007fff293da000 C:\Windows\SYSTEM32\VERSION.dll -0x00007fff2d750000 - 0x00007fff2d763000 C:\Windows\SYSTEM32\UMPDC.dll -0x00007fff2c1f0000 - 0x00007fff2c207000 C:\Windows\SYSTEM32\kernel.appcore.dll -0x00007fff19fd0000 - 0x00007fff19fda000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jimage.dll -0x00007fff179e0000 - 0x00007fff17bf2000 C:\Windows\SYSTEM32\DBGHELP.DLL -0x00007fff16980000 - 0x00007fff169b0000 C:\Windows\SYSTEM32\dbgcore.DLL -0x00007fff2e030000 - 0x00007fff2e0ad000 C:\Windows\System32\bcryptPrimitives.dll -0x00007fff16340000 - 0x00007fff1635e000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\java.dll -0x00007fff2f170000 - 0x00007fff2f2a5000 C:\Windows\System32\ole32.dll -0x00007fff2ff20000 - 0x00007fff30291000 C:\Windows\System32\combase.dll -0x00007fff2f570000 - 0x00007fff2fcca000 C:\Windows\System32\SHELL32.dll -0x00007fff23550000 - 0x00007fff23d96000 C:\Windows\SYSTEM32\windows.storage.dll -0x00007fff2eea0000 - 0x00007fff2ef8a000 C:\Windows\System32\SHCORE.dll -0x00007fff2fcf0000 - 0x00007fff2fd4f000 C:\Windows\System32\shlwapi.dll -0x00007fff2d7c0000 - 0x00007fff2d7e1000 C:\Windows\SYSTEM32\profapi.dll -0x00007ffee94d0000 - 0x00007ffee95a7000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jsvml.dll -0x00007ffd377e0000 - 0x00007ffd3a408000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jvmcicompiler.dll -0x00007fff2f0e0000 - 0x00007fff2f0e8000 C:\Windows\System32\PSAPI.DLL -0x00007fff2e0b0000 - 0x00007fff2e210000 C:\Windows\System32\CRYPT32.dll -0x00007fff2ce60000 - 0x00007fff2ce8e000 C:\Windows\SYSTEM32\USERENV.dll -0x00007fff2d0d0000 - 0x00007fff2d0fe000 C:\Windows\SYSTEM32\ncrypt.dll -0x00007fff2caa0000 - 0x00007fff2cacd000 C:\Windows\SYSTEM32\IPHLPAPI.DLL -0x00007fff2cd60000 - 0x00007fff2cdc8000 C:\Windows\SYSTEM32\MSWSOCK.dll -0x00007fff2d090000 - 0x00007fff2d0c7000 C:\Windows\SYSTEM32\NTASN1.dll - -dbghelp: loaded successfully - version: 4.0.5 - missing functions: none -symbol engine: initialized successfully - sym options: 0x614 - pdb path: .;C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin;C:\Windows\SYSTEM32;C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.20348.1_none_88d3d41d702dedea;C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\server - -VM Arguments: -jvm_args: -XX:ThreadPriorityPolicy=1 -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCIProduct -XX:-UnlockExperimentalVMOptions --add-exports=java.base/jdk.internal.misc=jdk.graal.compiler -XX:+ShowCodeDetailsInExceptionMessages --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED --add-exports=java.base/jdk.internal.foreign=ALL-UNNAMED --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED --add-opens=java.base/jdk.internal.foreign=ALL-UNNAMED -java_command: org.kne.cloud.network.monitor.TimestampMonitor -java_class_path (initial): C:\KNEļ\coding\java\KLALB\bin;C:\KNEļ\coding\java\KNElib\bin;C:\KNEļ\coding\java\KLALB\lib\gson-2.1.jar;C:\KNEļ\coding\java\KLALB\lib\javassist.jar;C:\KNEļ\coding\java\KLALB\lib\ini4j.jar;C:\KNEļ\coding\java\KLALB\lib\JFreeChart1.5.2.jar;C:\KNEļ\coding\java\KLALB\lib\toml4j-0.7.1.jar;C:\KNEļ\coding\java\KLALB\lib\pcap4j-core-1.8.2.jar;C:\KNEļ\coding\java\KLALB\lib\pcap4j-packetfactory-propertiesbased-1.8.2.jar;C:\KNEļ\coding\java\KLALB\lib\pcap4j-packetfactory-static-1.8.2.jar;C:\KNEļ\coding\java\KLALB\lib\pcap4j-sample-1.8.2.jar;C:\KNEļ\coding\java\KLALB\lib\slf4j-api-2.0.9.jar;C:\KNEļ\coding\java\KLALB\lib\slf4j-api-2.0.9-javadoc.jar;C:\KNEļ\coding\java\KLALB\lib\slf4j-api-2.0.9-sources.jar;C:\KNEļ\coding\java\KLALB\lib\slf4j-api-2.0.9-tests.jar;C:\KNEļ\coding\java\KLALB\lib\disruptor-4.0.0.jar;C:\KNEļ\coding\java\KLALB\lib\disruptor-4.0.0-javadoc.jar;C:\KNEļ\coding\java\KLALB\lib\disruptor-4.0.0-sources.jar;C:\KNEļ\coding\java\KLALB\lib\JavaTUN.jar -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 15 {product} {ergonomic} - uint ConcGCThreads = 10 {product} {ergonomic} - bool EnableJVMCIProduct = true {JVMCI product} {jimage} - uint G1ConcRefinementThreads = 38 {product} {ergonomic} - size_t G1HeapRegionSize = 8388608 {product} {ergonomic} - size_t InitialHeapSize = 1073741824 {product} {ergonomic} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MarkStackSizeMax = 536870912 {product} {ergonomic} - size_t MaxHeapSize = 17062428672 {product} {ergonomic} - size_t MaxNewSize = 10234101760 {product} {ergonomic} - size_t MinHeapDeltaBytes = 8388608 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonNMethodCodeHeapSize = 11599872 {pd product} {ergonomic} - uintx NonProfiledCodeHeapSize = 120061952 {pd product} {ergonomic} - uintx ProfiledCodeHeapSize = 119996416 {pd product} {ergonomic} - uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} - bool SegmentedCodeCache = true {product} {ergonomic} - bool ShowCodeDetailsInExceptionMessages = true {manageable} {command line} - size_t SoftMaxHeapSize = 17062428672 {manageable} {ergonomic} - int ThreadPriorityPolicy = 1 {product} {jimage} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags foldmultilines=false - #1: stderr all=off uptime,level,tags foldmultilines=false - -Environment Variables: -JAVA_HOME=C:\Program Files\Java\jdk-19 -PATH=C:/Program Files/Java/graalvm-ce-java19-22.3.1/bin/server;C:/Program Files/Java/graalvm-ce-java19-22.3.1/bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\libnvvp;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\libnvvp;C:\Program Files (x86)\VMware\VMware Workstation\bin\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Java\jdk-19\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\Bandizip\;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\chocolatey\bin;C:\tools\Manim\Scripts;C:\Program Files\MiKTeX\miktex\bin\x64\;C:\Program Files\MySQL\MySQL Server 8.0\bin;C:\Program Files\dotnet\;C:\Program Files (x86)\NetSarang\Xftp 7\;C:\Program Files\010 Editor;C:\Program Files\nodejs\;C:\Program Files\Microsoft VS Code Insiders\bin;C:\Program Files\Disktrix\UltimateDefrag;C:\Program Files\Sunshine;C:\Program Files\Sunshine\tools;C:\Program Files\NVIDIA Corporation\Nsight Compute 2023.1.0\;C:\Users\Administrator\AppData\Local\Programs\Python\Python310\Scripts\;C:\Users\Administrator\AppData\Local\Programs\Python\Python310\;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;C:\Users\Administrator\AppData\Roaming\npm;C:\Program Files\eclipse; -USERNAME=Administrator -OS=Windows_NT -PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 85 Stepping 4, GenuineIntel -TMP=C:\Users\ADMINI~1\AppData\Local\Temp -TEMP=C:\Users\ADMINI~1\AppData\Local\Temp - - - - -Periodic native trim disabled - ---------------- S Y S T E M --------------- - -OS: - Windows Server 2022 , 64 bit Build 20348 (10.0.20348.1726) -OS uptime: 20 days 23:58 hours - -CPU: total 56 (initial active 56) (14 cores per cpu, 2 threads per core) family 6 model 85 stepping 4 microcode 0x2006b06, cx8, cmov, fxsr, ht, mmx, 3dnowpref, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, lzcnt, tsc, tscinvbit, avx, avx2, aes, erms, clmul, bmi1, bmi2, rtm, adx, fma, vzeroupper, clflush, clflushopt, clwb, rdtscp, f16c, pku -Processor Information for the first 56 processors : - Max Mhz: 2195, Current Mhz: 2195, Mhz Limit: 2195 - -Memory: 4k page, system-wide physical 65072M (9750M free) -TotalPageFile size 97840M (AvailPageFile size 449M) -current process WorkingSet (physical memory assigned to process): 8899M, peak: 15280M -current process commit charge ("private bytes"): 13739M, peak: 16500M - -vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.1+11-jvmci-b01) for windows-amd64 JRE (23.0.1+11-jvmci-b01), built on 2024-10-01T10:34:46Z with MS VC++ 17.6 (VS2022) - -END. diff --git a/hs_err_pid28220.mdmp b/hs_err_pid28220.mdmp deleted file mode 100644 index e69de29..0000000 diff --git a/hs_err_pid29580.log b/hs_err_pid29580.log deleted file mode 100644 index 1fdc7ac..0000000 --- a/hs_err_pid29580.log +++ /dev/null @@ -1,2180 +0,0 @@ -# -# There is insufficient memory for the Java Runtime Environment to continue. -# Native memory allocation (mmap) failed to map 1342177280 bytes. Error detail: G1 virtual space -# Possible reasons: -# The system is out of physical RAM or swap space -# This process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap -# Possible solutions: -# Reduce memory load on the system -# Increase physical memory or swap space -# Check if swap backing store is full -# Decrease Java heap size (-Xmx/-Xms) -# Decrease number of Java threads -# Decrease Java thread stack sizes (-Xss) -# Set larger code cache with -XX:ReservedCodeCacheSize= -# JVM is running with Zero Based Compressed Oops mode in which the Java heap is -# placed in the first 32GB address space. The Java Heap base address is the -# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress -# to set the Java Heap base and to place the Java Heap above 32GB virtual address. -# This output file may be truncated or incomplete. -# -# Out of Memory Error (os_windows.cpp:3703), pid=29580, tid=72900 -# -# JRE version: Java(TM) SE Runtime Environment Oracle GraalVM 23.0.1+11.1 (23.0.1+11) (build 23.0.1+11-jvmci-b01) -# Java VM: Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 23.0.1+11.1 (23.0.1+11-jvmci-b01, mixed mode, sharing, tiered, jvmci, jvmci compiler, compressed oops, compressed class ptrs, g1 gc, windows-amd64) -# Core dump will be written. Default location: C:\KNEļ\coding\java\KLALB\hs_err_pid29580.mdmp -# - ---------------- S U M M A R Y ------------ - -Command Line: -XX:ThreadPriorityPolicy=1 -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCIProduct -XX:-UnlockExperimentalVMOptions --add-exports=java.base/jdk.internal.misc=jdk.graal.compiler -XX:+ShowCodeDetailsInExceptionMessages -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:41761 -javaagent:C:\Program Files\eclipse\configuration\org.eclipse.osgi\837\0\.cp\lib\javaagent-shaded.jar --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED --add-exports=java.base/jdk.internal.foreign=ALL-UNNAMED --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED --add-opens=java.base/jdk.internal.foreign=ALL-UNNAMED org.kne.cloud.network.monitor.TimestampMonitor - -Host: Intel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz, 56 cores, 63G, Windows Server 2022 , 64 bit Build 20348 (10.0.20348.1726) -Time: Wed Oct 29 17:48:51 2025 Windows Server 2022 , 64 bit Build 20348 (10.0.20348.1726) elapsed time: 22.587800 seconds (0d 0h 0m 22s) - ---------------- T H R E A D --------------- - -Current thread (0x000001b9cb596120): VMThread "VM Thread" [id=72900, stack(0x000000b5df600000,0x000000b5df700000) (1024K)] - -Stack: [0x000000b5df600000,0x000000b5df700000] -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -V [jvm.dll+0x6e08b9] (no source info available) -V [jvm.dll+0x87dc83] (no source info available) -V [jvm.dll+0x88010e] (no source info available) -V [jvm.dll+0x8807e3] (no source info available) -V [jvm.dll+0x27aee6] (no source info available) -V [jvm.dll+0x6dd1c5] (no source info available) -V [jvm.dll+0x6d104a] (no source info available) -V [jvm.dll+0x35b3ea] (no source info available) -V [jvm.dll+0x3637f6] (no source info available) -V [jvm.dll+0x34fd5e] (no source info available) -V [jvm.dll+0x34fff8] (no source info available) -V [jvm.dll+0x3289cc] (no source info available) -V [jvm.dll+0x328a5a] (no source info available) -V [jvm.dll+0x374c92] (no source info available) -V [jvm.dll+0x373392] (no source info available) -V [jvm.dll+0x3281a7] (no source info available) -V [jvm.dll+0x372b44] (no source info available) -V [jvm.dll+0x886720] (no source info available) -V [jvm.dll+0x887a47] (no source info available) -V [jvm.dll+0x887f78] (no source info available) -V [jvm.dll+0x888213] (no source info available) -V [jvm.dll+0x824f8b] (no source info available) -V [jvm.dll+0x6df065] (no source info available) -C [ucrtbase.dll+0x26b4c] (no source info available) -C [KERNEL32.DLL+0x14de0] (no source info available) -C [ntdll.dll+0x7e3db] (no source info available) - -VM_Operation (0x000000b5e09ff010): G1CollectForAllocation, mode: safepoint, requested by thread 0x000001ba1197c280 - - ---------------- P R O C E S S --------------- - -Threads class SMR info: -_java_thread_list=0x000001ba111c0230, length=72, elements={ -0x000001b99bf22130, 0x000001ba110f1fa0, 0x000001ba110f2cc0, 0x000001ba110f4250, -0x000001ba110f4f70, 0x000001ba110feb20, 0x000001ba110ff6b0, 0x000001ba11105a80, -0x000001ba11106660, 0x000001ba1122a150, 0x000001ba11350750, 0x000001ba11353630, -0x000001ba11353cc0, 0x000001ba119727a0, 0x000001ba1197c280, 0x000001ba11f36060, -0x000001ba11f3a6e0, 0x000001ba11f3b160, 0x000001ba11f3b7d0, 0x000001ba11f3c250, -0x000001ba11f3e8d0, 0x000001ba1600bc10, 0x000001ba160144f0, 0x000001ba16015f30, -0x000001ba160172e0, 0x000001ba160158a0, 0x000001ba160165c0, 0x000001ba16016c50, -0x000001ba16017970, 0x000001ba16014b80, 0x000001ba16015210, 0x000001ba16033910, -0x000001ba16036070, 0x000001ba16031840, 0x000001ba16037420, 0x000001ba16037ab0, -0x000001ba16038140, 0x000001ba16033fa0, 0x000001ba16034630, 0x000001ba16034cc0, -0x000001ba160387d0, 0x000001ba16035350, 0x000001ba160359e0, 0x000001ba16032bf0, -0x000001ba16036700, 0x000001ba16036d90, 0x000001ba16038e60, 0x000001ba16032560, -0x000001ba16031ed0, 0x000001ba16033280, 0x000001ba1605b500, 0x000001ba1605c220, -0x000001ba16055920, 0x000001ba16056640, 0x000001ba16057360, 0x000001ba1605c8b0, -0x000001ba16059ac0, 0x000001ba16058080, 0x000001ba1605a150, 0x000001ba160579f0, -0x000001ba16058710, 0x000001ba16058da0, 0x000001ba16055fb0, 0x000001ba1605cf40, -0x000001ba1605bb90, 0x000001ba16059430, 0x000001ba16056cd0, 0x000001ba1605a7e0, -0x000001ba1605ae70, 0x000001ba1609f9b0, 0x000001ba112526c0, 0x000001ba160bc010 -} - -Java Threads: ( => current thread ) - 0x000001b99bf22130 JavaThread "main" [_thread_blocked, id=54460, stack(0x000000b5def00000,0x000000b5df000000) (1024K)] - 0x000001ba110f1fa0 JavaThread "Reference Handler" daemon [_thread_blocked, id=57340, stack(0x000000b5df700000,0x000000b5df800000) (1024K)] - 0x000001ba110f2cc0 JavaThread "Finalizer" daemon [_thread_blocked, id=55428, stack(0x000000b5df800000,0x000000b5df900000) (1024K)] - 0x000001ba110f4250 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=75132, stack(0x000000b5df900000,0x000000b5dfa00000) (1024K)] - 0x000001ba110f4f70 JavaThread "Attach Listener" daemon [_thread_blocked, id=63796, stack(0x000000b5dfa00000,0x000000b5dfb00000) (1024K)] - 0x000001ba110feb20 JavaThread "Service Thread" daemon [_thread_blocked, id=24004, stack(0x000000b5dfb00000,0x000000b5dfc00000) (1024K)] - 0x000001ba110ff6b0 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=30432, stack(0x000000b5dfc00000,0x000000b5dfd00000) (1024K)] - 0x000001ba11105a80 JavaThread "JVMCI-native CompilerThread0" daemon [_thread_blocked, id=87956, stack(0x000000b5dfd00000,0x000000b5dfe00000) (1024K)] - 0x000001ba11106660 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=83916, stack(0x000000b5dfe00000,0x000000b5dff00000) (1024K)] - 0x000001ba1122a150 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=76620, stack(0x000000b5dff00000,0x000000b5e0000000) (1024K)] - 0x000001ba11350750 JavaThread "JDWP Transport Listener: dt_socket" daemon [_thread_blocked, id=80668, stack(0x000000b5e0400000,0x000000b5e0500000) (1024K)] - 0x000001ba11353630 JavaThread "JDWP Event Helper Thread" daemon [_thread_blocked, id=21180, stack(0x000000b5e0500000,0x000000b5e0600000) (1024K)] - 0x000001ba11353cc0 JavaThread "JDWP Command Reader" daemon [_thread_blocked, id=47664, stack(0x000000b5e0600000,0x000000b5e0700000) (1024K)] - 0x000001ba119727a0 JavaThread "Notification Thread" daemon [_thread_blocked, id=43352, stack(0x000000b5e0800000,0x000000b5e0900000) (1024K)] - 0x000001ba1197c280 JavaThread "Thread-0" [_thread_blocked, id=64216, stack(0x000000b5e0900000,0x000000b5e0a00000) (1024K)] - 0x000001ba11f36060 JavaThread "ForkJoinPool.commonPool-worker-1" daemon [_thread_blocked, id=93584, stack(0x000000b5e2d00000,0x000000b5e2e00000) (1024K)] - 0x000001ba11f3a6e0 JavaThread "ForkJoinPool.commonPool-worker-3" daemon [_thread_blocked, id=67764, stack(0x000000b5e2e00000,0x000000b5e2f00000) (1024K)] - 0x000001ba11f3b160 JavaThread "ForkJoinPool.commonPool-worker-2" daemon [_thread_blocked, id=81516, stack(0x000000b5e2f00000,0x000000b5e3000000) (1024K)] - 0x000001ba11f3b7d0 JavaThread "ForkJoinPool.commonPool-worker-4" daemon [_thread_blocked, id=70716, stack(0x000000b5e3000000,0x000000b5e3100000) (1024K)] - 0x000001ba11f3c250 JavaThread "ForkJoinPool.commonPool-worker-5" daemon [_thread_blocked, id=27588, stack(0x000000b5e3100000,0x000000b5e3200000) (1024K)] - 0x000001ba11f3e8d0 JavaThread "ForkJoinPool.commonPool-worker-8" daemon [_thread_blocked, id=61168, stack(0x000000b5e3200000,0x000000b5e3300000) (1024K)] - 0x000001ba1600bc10 JavaThread "ForkJoinPool.commonPool-worker-11" daemon [_thread_blocked, id=58356, stack(0x000000b5e3300000,0x000000b5e3400000) (1024K)] - 0x000001ba160144f0 JavaThread "ForkJoinPool.commonPool-worker-9" daemon [_thread_blocked, id=71064, stack(0x000000b5e3400000,0x000000b5e3500000) (1024K)] - 0x000001ba16015f30 JavaThread "ForkJoinPool.commonPool-worker-13" daemon [_thread_blocked, id=43464, stack(0x000000b5e3500000,0x000000b5e3600000) (1024K)] - 0x000001ba160172e0 JavaThread "ForkJoinPool.commonPool-worker-7" daemon [_thread_blocked, id=28884, stack(0x000000b5e3600000,0x000000b5e3700000) (1024K)] - 0x000001ba160158a0 JavaThread "ForkJoinPool.commonPool-worker-12" daemon [_thread_blocked, id=49888, stack(0x000000b5e3700000,0x000000b5e3800000) (1024K)] - 0x000001ba160165c0 JavaThread "ForkJoinPool.commonPool-worker-18" daemon [_thread_blocked, id=37780, stack(0x000000b5e3800000,0x000000b5e3900000) (1024K)] - 0x000001ba16016c50 JavaThread "ForkJoinPool.commonPool-worker-10" daemon [_thread_blocked, id=53716, stack(0x000000b5e3900000,0x000000b5e3a00000) (1024K)] - 0x000001ba16017970 JavaThread "ForkJoinPool.commonPool-worker-15" daemon [_thread_blocked, id=76068, stack(0x000000b5e3a00000,0x000000b5e3b00000) (1024K)] - 0x000001ba16014b80 JavaThread "ForkJoinPool.commonPool-worker-24" daemon [_thread_blocked, id=93268, stack(0x000000b5e3b00000,0x000000b5e3c00000) (1024K)] - 0x000001ba16015210 JavaThread "ForkJoinPool.commonPool-worker-16" daemon [_thread_blocked, id=68488, stack(0x000000b5e3c00000,0x000000b5e3d00000) (1024K)] - 0x000001ba16033910 JavaThread "ForkJoinPool.commonPool-worker-29" daemon [_thread_blocked, id=49852, stack(0x000000b5e3d00000,0x000000b5e3e00000) (1024K)] - 0x000001ba16036070 JavaThread "ForkJoinPool.commonPool-worker-31" daemon [_thread_blocked, id=27388, stack(0x000000b5e3e00000,0x000000b5e3f00000) (1024K)] - 0x000001ba16031840 JavaThread "ForkJoinPool.commonPool-worker-19" daemon [_thread_blocked, id=48988, stack(0x000000b5e3f00000,0x000000b5e4000000) (1024K)] - 0x000001ba16037420 JavaThread "ForkJoinPool.commonPool-worker-20" daemon [_thread_blocked, id=57904, stack(0x000000b5e4000000,0x000000b5e4100000) (1024K)] - 0x000001ba16037ab0 JavaThread "ForkJoinPool.commonPool-worker-36" daemon [_thread_blocked, id=52000, stack(0x000000b5e4100000,0x000000b5e4200000) (1024K)] - 0x000001ba16038140 JavaThread "ForkJoinPool.commonPool-worker-22" daemon [_thread_blocked, id=29656, stack(0x000000b5e4200000,0x000000b5e4300000) (1024K)] - 0x000001ba16033fa0 JavaThread "ForkJoinPool.commonPool-worker-23" daemon [_thread_blocked, id=41672, stack(0x000000b5e4300000,0x000000b5e4400000) (1024K)] - 0x000001ba16034630 JavaThread "ForkJoinPool.commonPool-worker-25" daemon [_thread_blocked, id=4056, stack(0x000000b5e4400000,0x000000b5e4500000) (1024K)] - 0x000001ba16034cc0 JavaThread "ForkJoinPool.commonPool-worker-14" daemon [_thread_blocked, id=14124, stack(0x000000b5e4500000,0x000000b5e4600000) (1024K)] - 0x000001ba160387d0 JavaThread "ForkJoinPool.commonPool-worker-26" daemon [_thread_blocked, id=40516, stack(0x000000b5e4600000,0x000000b5e4700000) (1024K)] - 0x000001ba16035350 JavaThread "ForkJoinPool.commonPool-worker-27" daemon [_thread_blocked, id=57308, stack(0x000000b5e4700000,0x000000b5e4800000) (1024K)] - 0x000001ba160359e0 JavaThread "ForkJoinPool.commonPool-worker-28" daemon [_thread_blocked, id=83024, stack(0x000000b5e4800000,0x000000b5e4900000) (1024K)] - 0x000001ba16032bf0 JavaThread "ForkJoinPool.commonPool-worker-17" daemon [_thread_blocked, id=49064, stack(0x000000b5e4900000,0x000000b5e4a00000) (1024K)] - 0x000001ba16036700 JavaThread "ForkJoinPool.commonPool-worker-50" daemon [_thread_blocked, id=31912, stack(0x000000b5e4a00000,0x000000b5e4b00000) (1024K)] - 0x000001ba16036d90 JavaThread "ForkJoinPool.commonPool-worker-30" daemon [_thread_blocked, id=60264, stack(0x000000b5e4b00000,0x000000b5e4c00000) (1024K)] - 0x000001ba16038e60 JavaThread "ForkJoinPool.commonPool-worker-6" daemon [_thread_blocked, id=48304, stack(0x000000b5e4d00000,0x000000b5e4e00000) (1024K)] - 0x000001ba16032560 JavaThread "ForkJoinPool.commonPool-worker-32" daemon [_thread_blocked, id=44312, stack(0x000000b5e4e00000,0x000000b5e4f00000) (1024K)] - 0x000001ba16031ed0 JavaThread "ForkJoinPool.commonPool-worker-33" daemon [_thread_blocked, id=79240, stack(0x000000b5e4f00000,0x000000b5e5000000) (1024K)] - 0x000001ba16033280 JavaThread "ForkJoinPool.commonPool-worker-34" daemon [_thread_blocked, id=29476, stack(0x000000b5e5000000,0x000000b5e5100000) (1024K)] - 0x000001ba1605b500 JavaThread "ForkJoinPool.commonPool-worker-35" daemon [_thread_blocked, id=78008, stack(0x000000b5e5100000,0x000000b5e5200000) (1024K)] - 0x000001ba1605c220 JavaThread "ForkJoinPool.commonPool-worker-21" daemon [_thread_blocked, id=52228, stack(0x000000b5e5200000,0x000000b5e5300000) (1024K)] - 0x000001ba16055920 JavaThread "ForkJoinPool.commonPool-worker-38" daemon [_thread_blocked, id=93044, stack(0x000000b5e5300000,0x000000b5e5400000) (1024K)] - 0x000001ba16056640 JavaThread "ForkJoinPool.commonPool-worker-37" daemon [_thread_blocked, id=54944, stack(0x000000b5e5400000,0x000000b5e5500000) (1024K)] - 0x000001ba16057360 JavaThread "ForkJoinPool.commonPool-worker-39" daemon [_thread_blocked, id=63812, stack(0x000000b5e5500000,0x000000b5e5600000) (1024K)] - 0x000001ba1605c8b0 JavaThread "ForkJoinPool.commonPool-worker-40" daemon [_thread_blocked, id=63748, stack(0x000000b5e5600000,0x000000b5e5700000) (1024K)] - 0x000001ba16059ac0 JavaThread "ForkJoinPool.commonPool-worker-42" daemon [_thread_blocked, id=8784, stack(0x000000b5e5700000,0x000000b5e5800000) (1024K)] - 0x000001ba16058080 JavaThread "ForkJoinPool.commonPool-worker-41" daemon [_thread_blocked, id=36868, stack(0x000000b5e5800000,0x000000b5e5900000) (1024K)] - 0x000001ba1605a150 JavaThread "ForkJoinPool.commonPool-worker-44" daemon [_thread_blocked, id=84036, stack(0x000000b5e5900000,0x000000b5e5a00000) (1024K)] - 0x000001ba160579f0 JavaThread "ForkJoinPool.commonPool-worker-43" daemon [_thread_blocked, id=80660, stack(0x000000b5e5a00000,0x000000b5e5b00000) (1024K)] - 0x000001ba16058710 JavaThread "ForkJoinPool.commonPool-worker-45" daemon [_thread_blocked, id=91912, stack(0x000000b5e5b00000,0x000000b5e5c00000) (1024K)] - 0x000001ba16058da0 JavaThread "ForkJoinPool.commonPool-worker-46" daemon [_thread_blocked, id=29188, stack(0x000000b5e5c00000,0x000000b5e5d00000) (1024K)] - 0x000001ba16055fb0 JavaThread "ForkJoinPool.commonPool-worker-47" daemon [_thread_blocked, id=93952, stack(0x000000b5e5d00000,0x000000b5e5e00000) (1024K)] - 0x000001ba1605cf40 JavaThread "ForkJoinPool.commonPool-worker-48" daemon [_thread_blocked, id=50208, stack(0x000000b5e5e00000,0x000000b5e5f00000) (1024K)] - 0x000001ba1605bb90 JavaThread "ForkJoinPool.commonPool-worker-49" daemon [_thread_blocked, id=44072, stack(0x000000b5e5f00000,0x000000b5e6000000) (1024K)] - 0x000001ba16059430 JavaThread "ForkJoinPool.commonPool-worker-51" daemon [_thread_blocked, id=77024, stack(0x000000b5e6000000,0x000000b5e6100000) (1024K)] - 0x000001ba16056cd0 JavaThread "ForkJoinPool.commonPool-worker-52" daemon [_thread_blocked, id=52496, stack(0x000000b5e6100000,0x000000b5e6200000) (1024K)] - 0x000001ba1605a7e0 JavaThread "ForkJoinPool.commonPool-worker-53" daemon [_thread_blocked, id=82056, stack(0x000000b5e0100000,0x000000b5e0200000) (1024K)] - 0x000001ba1605ae70 JavaThread "ForkJoinPool.commonPool-worker-54" daemon [_thread_blocked, id=86192, stack(0x000000b5e0300000,0x000000b5e0400000) (1024K)] - 0x000001ba1609f9b0 JavaThread "ForkJoinPool.commonPool-worker-55" daemon [_thread_blocked, id=54852, stack(0x000000b5e6200000,0x000000b5e6300000) (1024K)] - 0x000001ba112526c0 JavaThread "JVMCI-native CompilerThread1" daemon [_thread_blocked, id=64944, stack(0x000000b5e0000000,0x000000b5e0100000) (1024K)] - 0x000001ba160bc010 JavaThread "JVMCI-native CompilerThread2" daemon [_thread_blocked, id=56356, stack(0x000000b5e4c00000,0x000000b5e4d00000) (1024K)] -Total: 72 - -Other Threads: -=>0x000001b9cb596120 VMThread "VM Thread" [id=72900, stack(0x000000b5df600000,0x000000b5df700000) (1024K)] - 0x000001b99bf189a0 WatcherThread "VM Periodic Task Thread" [id=52004, stack(0x000000b5df500000,0x000000b5df600000) (1024K)] - 0x000001b99bfd6690 WorkerThread "GC Thread#0" [id=31736, stack(0x000000b5df000000,0x000000b5df100000) (1024K)] - 0x000001ba119b5f30 WorkerThread "GC Thread#1" [id=67008, stack(0x000000b5e0b00000,0x000000b5e0c00000) (1024K)] - 0x000001ba119b62e0 WorkerThread "GC Thread#2" [id=62460, stack(0x000000b5e0c00000,0x000000b5e0d00000) (1024K)] - 0x000001ba119b6690 WorkerThread "GC Thread#3" [id=20660, stack(0x000000b5e0d00000,0x000000b5e0e00000) (1024K)] - 0x000001ba119bceb0 WorkerThread "GC Thread#4" [id=31448, stack(0x000000b5e0e00000,0x000000b5e0f00000) (1024K)] - 0x000001ba119d8740 WorkerThread "GC Thread#5" [id=64096, stack(0x000000b5e0f00000,0x000000b5e1000000) (1024K)] - 0x000001ba119d7fe0 WorkerThread "GC Thread#6" [id=88240, stack(0x000000b5e1000000,0x000000b5e1100000) (1024K)] - 0x000001ba119d6d70 WorkerThread "GC Thread#7" [id=71768, stack(0x000000b5e1100000,0x000000b5e1200000) (1024K)] - 0x000001ba119d74d0 WorkerThread "GC Thread#8" [id=84400, stack(0x000000b5e1200000,0x000000b5e1300000) (1024K)] - 0x000001ba119d7120 WorkerThread "GC Thread#9" [id=75452, stack(0x000000b5e1300000,0x000000b5e1400000) (1024K)] - 0x000001ba119d7880 WorkerThread "GC Thread#10" [id=47684, stack(0x000000b5e1400000,0x000000b5e1500000) (1024K)] - 0x000001ba119d7c30 WorkerThread "GC Thread#11" [id=28796, stack(0x000000b5e1500000,0x000000b5e1600000) (1024K)] - 0x000001ba119d8390 WorkerThread "GC Thread#12" [id=90812, stack(0x000000b5e1600000,0x000000b5e1700000) (1024K)] - 0x000001ba119e3d90 WorkerThread "GC Thread#13" [id=42776, stack(0x000000b5e1700000,0x000000b5e1800000) (1024K)] - 0x000001ba119e4140 WorkerThread "GC Thread#14" [id=51832, stack(0x000000b5e1800000,0x000000b5e1900000) (1024K)] - 0x000001ba119e39e0 WorkerThread "GC Thread#15" [id=78080, stack(0x000000b5e1900000,0x000000b5e1a00000) (1024K)] - 0x000001ba119e1500 WorkerThread "GC Thread#16" [id=50816, stack(0x000000b5e1a00000,0x000000b5e1b00000) (1024K)] - 0x000001ba119e18b0 WorkerThread "GC Thread#17" [id=66652, stack(0x000000b5e1b00000,0x000000b5e1c00000) (1024K)] - 0x000001ba119e2770 WorkerThread "GC Thread#18" [id=77744, stack(0x000000b5e1c00000,0x000000b5e1d00000) (1024K)] - 0x000001ba119e3630 WorkerThread "GC Thread#19" [id=42524, stack(0x000000b5e1d00000,0x000000b5e1e00000) (1024K)] - 0x000001ba119e2b20 WorkerThread "GC Thread#20" [id=60636, stack(0x000000b5e1e00000,0x000000b5e1f00000) (1024K)] - 0x000001ba119e1c60 WorkerThread "GC Thread#21" [id=68456, stack(0x000000b5e1f00000,0x000000b5e2000000) (1024K)] - 0x000001ba119e1150 WorkerThread "GC Thread#22" [id=90020, stack(0x000000b5e2000000,0x000000b5e2100000) (1024K)] - 0x000001ba119e0da0 WorkerThread "GC Thread#23" [id=22764, stack(0x000000b5e2100000,0x000000b5e2200000) (1024K)] - 0x000001ba119e2010 WorkerThread "GC Thread#24" [id=54612, stack(0x000000b5e0200000,0x000000b5e0300000) (1024K)] - 0x000001ba119e23c0 WorkerThread "GC Thread#25" [id=32028, stack(0x000000b5e0700000,0x000000b5e0800000) (1024K)] - 0x000001ba119e2ed0 WorkerThread "GC Thread#26" [id=56052, stack(0x000000b5e0a00000,0x000000b5e0b00000) (1024K)] - 0x000001ba119e3280 WorkerThread "GC Thread#27" [id=79376, stack(0x000000b5e2200000,0x000000b5e2300000) (1024K)] - 0x000001ba119e44f0 WorkerThread "GC Thread#28" [id=5004, stack(0x000000b5e2300000,0x000000b5e2400000) (1024K)] - 0x000001ba119e48a0 WorkerThread "GC Thread#29" [id=50656, stack(0x000000b5e2400000,0x000000b5e2500000) (1024K)] - 0x000001ba11c10620 WorkerThread "GC Thread#30" [id=70244, stack(0x000000b5e2500000,0x000000b5e2600000) (1024K)] - 0x000001ba11c11130 WorkerThread "GC Thread#31" [id=24704, stack(0x000000b5e2600000,0x000000b5e2700000) (1024K)] - 0x000001ba11c10270 WorkerThread "GC Thread#32" [id=56124, stack(0x000000b5e2700000,0x000000b5e2800000) (1024K)] - 0x000001ba11c0e140 WorkerThread "GC Thread#33" [id=90212, stack(0x000000b5e2800000,0x000000b5e2900000) (1024K)] - 0x000001ba11c109d0 WorkerThread "GC Thread#34" [id=62832, stack(0x000000b5e2900000,0x000000b5e2a00000) (1024K)] - 0x000001ba11c114e0 WorkerThread "GC Thread#35" [id=53896, stack(0x000000b5e2a00000,0x000000b5e2b00000) (1024K)] - 0x000001ba11c10d80 WorkerThread "GC Thread#36" [id=61916, stack(0x000000b5e2b00000,0x000000b5e2c00000) (1024K)] - 0x000001ba11c11890 WorkerThread "GC Thread#37" [id=42708, stack(0x000000b5e2c00000,0x000000b5e2d00000) (1024K)] - 0x000001b9cb422010 ConcurrentGCThread "G1 Main Marker" [id=43824, stack(0x000000b5df100000,0x000000b5df200000) (1024K)] - 0x000001b9cb422a20 WorkerThread "G1 Conc#0" [id=78376, stack(0x000000b5df200000,0x000000b5df300000) (1024K)] - 0x000001b9cb522360 ConcurrentGCThread "G1 Refine#0" [id=84900, stack(0x000000b5df300000,0x000000b5df400000) (1024K)] - 0x000001ba162426a0 ConcurrentGCThread "G1 Refine#1" [id=33244, stack(0x000000b5e6700000,0x000000b5e6800000) (1024K)] - 0x000001ba162764f0 ConcurrentGCThread "G1 Refine#2" [id=7712, stack(0x000000b5e6800000,0x000000b5e6900000) (1024K)] - 0x000001b9cb522de0 ConcurrentGCThread "G1 Service" [id=70900, stack(0x000000b5df400000,0x000000b5df500000) (1024K)] -Total: 46 - -Threads with active compile tasks: -Total: 0 - -VM state: at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event]) -[0x00007ffdace33910] Threads_lock - owner thread: 0x000001b9cb596120 -[0x00007ffdace33a10] Heap_lock - owner thread: 0x000001ba1197c280 - -Heap address: 0x0000000407000000, size: 16272 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x000001b9d0000000-0x000001b9d0d80000-0x000001b9d0d80000), size 14155776, SharedBaseAddress: 0x000001b9d0000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x000001b9d1000000-0x000001ba11000000, reserved size: 1073741824 -Narrow klass base: 0x000001b9d0000000, Narrow klass shift: 0, Narrow klass range: 0x41000000 - -GC Precious Log: - CardTable entry size: 512 - Card Set container configuration: InlinePtr #cards 4 size 8 Array Of Cards #cards 64 size 144 Howl #buckets 8 coarsen threshold 14745 Howl Bitmap #cards 2048 size 272 coarsen threshold 1843 Card regions per heap region 1 cards per card region 16384 - CPUs: 56 total, 56 available - Memory: 65072M - Large Page Support: Disabled - NUMA Support: Disabled - Compressed Oops: Enabled (Zero based) - Heap Region Size: 8M - Heap Min Capacity: 8M - Heap Initial Capacity: 1G - Heap Max Capacity: 16272M - Pre-touch: Disabled - Parallel Workers: 38 - Concurrent Workers: 10 - Concurrent Refinement Workers: 38 - Periodic GC: Disabled - -Heap: - garbage-first heap total reserved 16662528K, committed 11599872K, used 4341461K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 9 young (73728K), 9 survivors (73728K) - Metaspace used 3019K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K - -Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, TAMS=top-at-mark-start, PB=parsable bottom -| 0|0x0000000407000000, 0x0000000407800000, 0x0000000407800000|100%| O| |TAMS 0x0000000407000000| PB 0x0000000407000000| Untracked | 0 -| 1|0x0000000407800000, 0x0000000408000000, 0x0000000408000000|100%| O| |TAMS 0x0000000407800000| PB 0x0000000407800000| Untracked | 0 -| 2|0x0000000408000000, 0x0000000408800000, 0x0000000408800000|100%| O| |TAMS 0x0000000408000000| PB 0x0000000408000000| Untracked | 0 -| 3|0x0000000408800000, 0x0000000409000000, 0x0000000409000000|100%| O| |TAMS 0x0000000408800000| PB 0x0000000408800000| Untracked | 0 -| 4|0x0000000409000000, 0x0000000409800000, 0x0000000409800000|100%| O| |TAMS 0x0000000409000000| PB 0x0000000409000000| Untracked | 0 -| 5|0x0000000409800000, 0x000000040a000000, 0x000000040a000000|100%| O| |TAMS 0x0000000409800000| PB 0x0000000409800000| Untracked | 0 -| 6|0x000000040a000000, 0x000000040a800000, 0x000000040a800000|100%|HS| |TAMS 0x000000040a000000| PB 0x000000040a000000| Complete | 0 -| 7|0x000000040a800000, 0x000000040b000000, 0x000000040b000000|100%| O| |TAMS 0x000000040a800000| PB 0x000000040a800000| Untracked | 0 -| 8|0x000000040b000000, 0x000000040b800000, 0x000000040b800000|100%| O| |TAMS 0x000000040b000000| PB 0x000000040b000000| Untracked | 0 -| 9|0x000000040b800000, 0x000000040c000000, 0x000000040c000000|100%| O| |TAMS 0x000000040b800000| PB 0x000000040b800000| Untracked | 0 -| 10|0x000000040c000000, 0x000000040c800000, 0x000000040c800000|100%| O| |TAMS 0x000000040c000000| PB 0x000000040c000000| Untracked | 0 -| 11|0x000000040c800000, 0x000000040d000000, 0x000000040d000000|100%| O| |TAMS 0x000000040c800000| PB 0x000000040c800000| Untracked | 0 -| 12|0x000000040d000000, 0x000000040d800000, 0x000000040d800000|100%| O| |TAMS 0x000000040d000000| PB 0x000000040d000000| Untracked | 0 -| 13|0x000000040d800000, 0x000000040e000000, 0x000000040e000000|100%| O| |TAMS 0x000000040d800000| PB 0x000000040d800000| Untracked | 0 -| 14|0x000000040e000000, 0x000000040e800000, 0x000000040e800000|100%| O| |TAMS 0x000000040e000000| PB 0x000000040e000000| Untracked | 0 -| 15|0x000000040e800000, 0x000000040f000000, 0x000000040f000000|100%|HS| |TAMS 0x000000040e800000| PB 0x000000040e800000| Complete | 0 -| 16|0x000000040f000000, 0x000000040f800000, 0x000000040f800000|100%|HC| |TAMS 0x000000040f000000| PB 0x000000040f000000| Complete | 0 -| 17|0x000000040f800000, 0x0000000410000000, 0x0000000410000000|100%| O| |TAMS 0x000000040f800000| PB 0x000000040f800000| Untracked | 0 -| 18|0x0000000410000000, 0x0000000410800000, 0x0000000410800000|100%| O| |TAMS 0x0000000410000000| PB 0x0000000410000000| Untracked | 0 -| 19|0x0000000410800000, 0x0000000411000000, 0x0000000411000000|100%| O| |TAMS 0x0000000410800000| PB 0x0000000410800000| Untracked | 0 -| 20|0x0000000411000000, 0x0000000411800000, 0x0000000411800000|100%| O| |TAMS 0x0000000411000000| PB 0x0000000411000000| Untracked | 0 -| 21|0x0000000411800000, 0x0000000412000000, 0x0000000412000000|100%| O| |TAMS 0x0000000411800000| PB 0x0000000411800000| Untracked | 0 -| 22|0x0000000412000000, 0x0000000412800000, 0x0000000412800000|100%| O| |TAMS 0x0000000412000000| PB 0x0000000412000000| Untracked | 0 -| 23|0x0000000412800000, 0x0000000413000000, 0x0000000413000000|100%| O| |TAMS 0x0000000412800000| PB 0x0000000412800000| Untracked | 0 -| 24|0x0000000413000000, 0x0000000413800000, 0x0000000413800000|100%| O| |TAMS 0x0000000413000000| PB 0x0000000413000000| Untracked | 0 -| 25|0x0000000413800000, 0x0000000414000000, 0x0000000414000000|100%| O| |TAMS 0x0000000413800000| PB 0x0000000413800000| Untracked | 0 -| 26|0x0000000414000000, 0x0000000414800000, 0x0000000414800000|100%| O| |TAMS 0x0000000414000000| PB 0x0000000414000000| Untracked | 0 -| 27|0x0000000414800000, 0x0000000415000000, 0x0000000415000000|100%| O| |TAMS 0x0000000414800000| PB 0x0000000414800000| Untracked | 0 -| 28|0x0000000415000000, 0x0000000415800000, 0x0000000415800000|100%| O| |TAMS 0x0000000415000000| PB 0x0000000415000000| Untracked | 0 -| 29|0x0000000415800000, 0x0000000416000000, 0x0000000416000000|100%| O| |TAMS 0x0000000415800000| PB 0x0000000415800000| Untracked | 0 -| 30|0x0000000416000000, 0x0000000416800000, 0x0000000416800000|100%| O| |TAMS 0x0000000416000000| PB 0x0000000416000000| Untracked | 0 -| 31|0x0000000416800000, 0x0000000417000000, 0x0000000417000000|100%| O| |TAMS 0x0000000416800000| PB 0x0000000416800000| Untracked | 0 -| 32|0x0000000417000000, 0x0000000417800000, 0x0000000417800000|100%|HS| |TAMS 0x0000000417000000| PB 0x0000000417000000| Complete | 0 -| 33|0x0000000417800000, 0x0000000418000000, 0x0000000418000000|100%|HC| |TAMS 0x0000000417800000| PB 0x0000000417800000| Complete | 0 -| 34|0x0000000418000000, 0x0000000418800000, 0x0000000418800000|100%|HC| |TAMS 0x0000000418000000| PB 0x0000000418000000| Complete | 0 -| 35|0x0000000418800000, 0x0000000419000000, 0x0000000419000000|100%| O| |TAMS 0x0000000418800000| PB 0x0000000418800000| Untracked | 0 -| 36|0x0000000419000000, 0x0000000419800000, 0x0000000419800000|100%| O| |TAMS 0x0000000419000000| PB 0x0000000419000000| Untracked | 0 -| 37|0x0000000419800000, 0x000000041a000000, 0x000000041a000000|100%| O| |TAMS 0x0000000419800000| PB 0x0000000419800000| Untracked | 0 -| 38|0x000000041a000000, 0x000000041a800000, 0x000000041a800000|100%| O| |TAMS 0x000000041a000000| PB 0x000000041a000000| Untracked | 0 -| 39|0x000000041a800000, 0x000000041b000000, 0x000000041b000000|100%| O| |TAMS 0x000000041a800000| PB 0x000000041a800000| Untracked | 0 -| 40|0x000000041b000000, 0x000000041b800000, 0x000000041b800000|100%| O| |TAMS 0x000000041b000000| PB 0x000000041b000000| Untracked | 0 -| 41|0x000000041b800000, 0x000000041c000000, 0x000000041c000000|100%| O| |TAMS 0x000000041b800000| PB 0x000000041b800000| Untracked | 0 -| 42|0x000000041c000000, 0x000000041c800000, 0x000000041c800000|100%| O| |TAMS 0x000000041c000000| PB 0x000000041c000000| Untracked | 0 -| 43|0x000000041c800000, 0x000000041d000000, 0x000000041d000000|100%| O| |TAMS 0x000000041c800000| PB 0x000000041c800000| Untracked | 0 -| 44|0x000000041d000000, 0x000000041d800000, 0x000000041d800000|100%| O| |TAMS 0x000000041d000000| PB 0x000000041d000000| Untracked | 0 -| 45|0x000000041d800000, 0x000000041e000000, 0x000000041e000000|100%| O| |TAMS 0x000000041d800000| PB 0x000000041d800000| Untracked | 0 -| 46|0x000000041e000000, 0x000000041e800000, 0x000000041e800000|100%| O| |TAMS 0x000000041e000000| PB 0x000000041e000000| Untracked | 0 -| 47|0x000000041e800000, 0x000000041f000000, 0x000000041f000000|100%| O| |TAMS 0x000000041e800000| PB 0x000000041e800000| Untracked | 0 -| 48|0x000000041f000000, 0x000000041f800000, 0x000000041f800000|100%| O| |TAMS 0x000000041f000000| PB 0x000000041f000000| Untracked | 0 -| 49|0x000000041f800000, 0x0000000420000000, 0x0000000420000000|100%| O| |TAMS 0x000000041f800000| PB 0x000000041f800000| Untracked | 0 -| 50|0x0000000420000000, 0x0000000420800000, 0x0000000420800000|100%| O| |TAMS 0x0000000420000000| PB 0x0000000420000000| Untracked | 0 -| 51|0x0000000420800000, 0x0000000421000000, 0x0000000421000000|100%| O| |TAMS 0x0000000420800000| PB 0x0000000420800000| Untracked | 0 -| 52|0x0000000421000000, 0x0000000421800000, 0x0000000421800000|100%| O| |TAMS 0x0000000421000000| PB 0x0000000421000000| Untracked | 0 -| 53|0x0000000421800000, 0x0000000422000000, 0x0000000422000000|100%| O| |TAMS 0x0000000421800000| PB 0x0000000421800000| Untracked | 0 -| 54|0x0000000422000000, 0x0000000422800000, 0x0000000422800000|100%| O| |TAMS 0x0000000422000000| PB 0x0000000422000000| Untracked | 0 -| 55|0x0000000422800000, 0x0000000423000000, 0x0000000423000000|100%| O| |TAMS 0x0000000422800000| PB 0x0000000422800000| Untracked | 0 -| 56|0x0000000423000000, 0x0000000423800000, 0x0000000423800000|100%| O| |TAMS 0x0000000423000000| PB 0x0000000423000000| Untracked | 0 -| 57|0x0000000423800000, 0x0000000424000000, 0x0000000424000000|100%| O| |TAMS 0x0000000423800000| PB 0x0000000423800000| Untracked | 0 -| 58|0x0000000424000000, 0x0000000424800000, 0x0000000424800000|100%| O| |TAMS 0x0000000424000000| PB 0x0000000424000000| Untracked | 0 -| 59|0x0000000424800000, 0x0000000425000000, 0x0000000425000000|100%| O| |TAMS 0x0000000424800000| PB 0x0000000424800000| Untracked | 0 -| 60|0x0000000425000000, 0x0000000425800000, 0x0000000425800000|100%| O| |TAMS 0x0000000425000000| PB 0x0000000425000000| Untracked | 0 -| 61|0x0000000425800000, 0x0000000426000000, 0x0000000426000000|100%| O| |TAMS 0x0000000425800000| PB 0x0000000425800000| Untracked | 0 -| 62|0x0000000426000000, 0x0000000426800000, 0x0000000426800000|100%| O| |TAMS 0x0000000426000000| PB 0x0000000426000000| Untracked | 0 -| 63|0x0000000426800000, 0x0000000427000000, 0x0000000427000000|100%| O| |TAMS 0x0000000426800000| PB 0x0000000426800000| Untracked | 0 -| 64|0x0000000427000000, 0x0000000427800000, 0x0000000427800000|100%| O| |TAMS 0x0000000427000000| PB 0x0000000427000000| Untracked | 0 -| 65|0x0000000427800000, 0x0000000428000000, 0x0000000428000000|100%| O| |TAMS 0x0000000427800000| PB 0x0000000427800000| Untracked | 0 -| 66|0x0000000428000000, 0x0000000428800000, 0x0000000428800000|100%| O| |TAMS 0x0000000428000000| PB 0x0000000428000000| Untracked | 0 -| 67|0x0000000428800000, 0x0000000429000000, 0x0000000429000000|100%| O| |TAMS 0x0000000428800000| PB 0x0000000428800000| Untracked | 0 -| 68|0x0000000429000000, 0x0000000429800000, 0x0000000429800000|100%| O| |TAMS 0x0000000429000000| PB 0x0000000429000000| Untracked | 0 -| 69|0x0000000429800000, 0x000000042a000000, 0x000000042a000000|100%| O| |TAMS 0x0000000429800000| PB 0x0000000429800000| Untracked | 0 -| 70|0x000000042a000000, 0x000000042a800000, 0x000000042a800000|100%|HS| |TAMS 0x000000042a000000| PB 0x000000042a000000| Complete | 0 -| 71|0x000000042a800000, 0x000000042b000000, 0x000000042b000000|100%|HC| |TAMS 0x000000042a800000| PB 0x000000042a800000| Complete | 0 -| 72|0x000000042b000000, 0x000000042b800000, 0x000000042b800000|100%|HC| |TAMS 0x000000042b000000| PB 0x000000042b000000| Complete | 0 -| 73|0x000000042b800000, 0x000000042c000000, 0x000000042c000000|100%|HC| |TAMS 0x000000042b800000| PB 0x000000042b800000| Complete | 0 -| 74|0x000000042c000000, 0x000000042c800000, 0x000000042c800000|100%|HC| |TAMS 0x000000042c000000| PB 0x000000042c000000| Complete | 0 -| 75|0x000000042c800000, 0x000000042d000000, 0x000000042d000000|100%| O| |TAMS 0x000000042c800000| PB 0x000000042c800000| Untracked | 0 -| 76|0x000000042d000000, 0x000000042d800000, 0x000000042d800000|100%| O| |TAMS 0x000000042d000000| PB 0x000000042d000000| Untracked | 0 -| 77|0x000000042d800000, 0x000000042e000000, 0x000000042e000000|100%| O| |TAMS 0x000000042d800000| PB 0x000000042d800000| Untracked | 0 -| 78|0x000000042e000000, 0x000000042e800000, 0x000000042e800000|100%| O| |TAMS 0x000000042e000000| PB 0x000000042e000000| Untracked | 0 -| 79|0x000000042e800000, 0x000000042f000000, 0x000000042f000000|100%| O| |TAMS 0x000000042e800000| PB 0x000000042e800000| Untracked | 0 -| 80|0x000000042f000000, 0x000000042f800000, 0x000000042f800000|100%| O| |TAMS 0x000000042f000000| PB 0x000000042f000000| Untracked | 0 -| 81|0x000000042f800000, 0x0000000430000000, 0x0000000430000000|100%| O| |TAMS 0x000000042f800000| PB 0x000000042f800000| Untracked | 0 -| 82|0x0000000430000000, 0x0000000430800000, 0x0000000430800000|100%| O| |TAMS 0x0000000430000000| PB 0x0000000430000000| Untracked | 0 -| 83|0x0000000430800000, 0x0000000431000000, 0x0000000431000000|100%| O| |TAMS 0x0000000430800000| PB 0x0000000430800000| Untracked | 0 -| 84|0x0000000431000000, 0x0000000431800000, 0x0000000431800000|100%| O| |TAMS 0x0000000431000000| PB 0x0000000431000000| Untracked | 0 -| 85|0x0000000431800000, 0x0000000432000000, 0x0000000432000000|100%| O| |TAMS 0x0000000431800000| PB 0x0000000431800000| Untracked | 0 -| 86|0x0000000432000000, 0x0000000432800000, 0x0000000432800000|100%| O| |TAMS 0x0000000432000000| PB 0x0000000432000000| Untracked | 0 -| 87|0x0000000432800000, 0x0000000433000000, 0x0000000433000000|100%| O| |TAMS 0x0000000432800000| PB 0x0000000432800000| Untracked | 0 -| 88|0x0000000433000000, 0x0000000433800000, 0x0000000433800000|100%| O| |TAMS 0x0000000433000000| PB 0x0000000433000000| Untracked | 0 -| 89|0x0000000433800000, 0x0000000434000000, 0x0000000434000000|100%| O| |TAMS 0x0000000433800000| PB 0x0000000433800000| Untracked | 0 -| 90|0x0000000434000000, 0x0000000434800000, 0x0000000434800000|100%| O| |TAMS 0x0000000434000000| PB 0x0000000434000000| Untracked | 0 -| 91|0x0000000434800000, 0x0000000435000000, 0x0000000435000000|100%| O| |TAMS 0x0000000434800000| PB 0x0000000434800000| Untracked | 0 -| 92|0x0000000435000000, 0x0000000435800000, 0x0000000435800000|100%| O| |TAMS 0x0000000435000000| PB 0x0000000435000000| Untracked | 0 -| 93|0x0000000435800000, 0x0000000436000000, 0x0000000436000000|100%| O| |TAMS 0x0000000435800000| PB 0x0000000435800000| Untracked | 0 -| 94|0x0000000436000000, 0x0000000436800000, 0x0000000436800000|100%| O| |TAMS 0x0000000436000000| PB 0x0000000436000000| Untracked | 0 -| 95|0x0000000436800000, 0x0000000437000000, 0x0000000437000000|100%| O| |TAMS 0x0000000436800000| PB 0x0000000436800000| Untracked | 0 -| 96|0x0000000437000000, 0x0000000437800000, 0x0000000437800000|100%| O| |TAMS 0x0000000437000000| PB 0x0000000437000000| Untracked | 0 -| 97|0x0000000437800000, 0x0000000438000000, 0x0000000438000000|100%| O| |TAMS 0x0000000437800000| PB 0x0000000437800000| Untracked | 0 -| 98|0x0000000438000000, 0x0000000438800000, 0x0000000438800000|100%| O| |TAMS 0x0000000438000000| PB 0x0000000438000000| Untracked | 0 -| 99|0x0000000438800000, 0x0000000439000000, 0x0000000439000000|100%| O| |TAMS 0x0000000438800000| PB 0x0000000438800000| Untracked | 0 -| 100|0x0000000439000000, 0x0000000439800000, 0x0000000439800000|100%| O| |TAMS 0x0000000439000000| PB 0x0000000439000000| Untracked | 0 -| 101|0x0000000439800000, 0x000000043a000000, 0x000000043a000000|100%| O| |TAMS 0x0000000439800000| PB 0x0000000439800000| Untracked | 0 -| 102|0x000000043a000000, 0x000000043a800000, 0x000000043a800000|100%| O| |TAMS 0x000000043a000000| PB 0x000000043a000000| Untracked | 0 -| 103|0x000000043a800000, 0x000000043b000000, 0x000000043b000000|100%| O| |TAMS 0x000000043a800000| PB 0x000000043a800000| Untracked | 0 -| 104|0x000000043b000000, 0x000000043b800000, 0x000000043b800000|100%| O| |TAMS 0x000000043b000000| PB 0x000000043b000000| Untracked | 0 -| 105|0x000000043b800000, 0x000000043c000000, 0x000000043c000000|100%| O| |TAMS 0x000000043b800000| PB 0x000000043b800000| Untracked | 0 -| 106|0x000000043c000000, 0x000000043c800000, 0x000000043c800000|100%| O| |TAMS 0x000000043c000000| PB 0x000000043c000000| Untracked | 0 -| 107|0x000000043c800000, 0x000000043d000000, 0x000000043d000000|100%| O| |TAMS 0x000000043c800000| PB 0x000000043c800000| Untracked | 0 -| 108|0x000000043d000000, 0x000000043d800000, 0x000000043d800000|100%| O| |TAMS 0x000000043d000000| PB 0x000000043d000000| Untracked | 0 -| 109|0x000000043d800000, 0x000000043e000000, 0x000000043e000000|100%| O| |TAMS 0x000000043d800000| PB 0x000000043d800000| Untracked | 0 -| 110|0x000000043e000000, 0x000000043e800000, 0x000000043e800000|100%| O| |TAMS 0x000000043e000000| PB 0x000000043e000000| Untracked | 0 -| 111|0x000000043e800000, 0x000000043f000000, 0x000000043f000000|100%| O| |TAMS 0x000000043e800000| PB 0x000000043e800000| Untracked | 0 -| 112|0x000000043f000000, 0x000000043f800000, 0x000000043f800000|100%| O| |TAMS 0x000000043f000000| PB 0x000000043f000000| Untracked | 0 -| 113|0x000000043f800000, 0x0000000440000000, 0x0000000440000000|100%| O| |TAMS 0x000000043f800000| PB 0x000000043f800000| Untracked | 0 -| 114|0x0000000440000000, 0x0000000440800000, 0x0000000440800000|100%| O| |TAMS 0x0000000440000000| PB 0x0000000440000000| Untracked | 0 -| 115|0x0000000440800000, 0x0000000441000000, 0x0000000441000000|100%| O| |TAMS 0x0000000440800000| PB 0x0000000440800000| Untracked | 0 -| 116|0x0000000441000000, 0x0000000441800000, 0x0000000441800000|100%| O| |TAMS 0x0000000441000000| PB 0x0000000441000000| Untracked | 0 -| 117|0x0000000441800000, 0x0000000442000000, 0x0000000442000000|100%| O| |TAMS 0x0000000441800000| PB 0x0000000441800000| Untracked | 0 -| 118|0x0000000442000000, 0x0000000442800000, 0x0000000442800000|100%| O| |TAMS 0x0000000442000000| PB 0x0000000442000000| Untracked | 0 -| 119|0x0000000442800000, 0x0000000443000000, 0x0000000443000000|100%| O| |TAMS 0x0000000442800000| PB 0x0000000442800000| Untracked | 0 -| 120|0x0000000443000000, 0x0000000443800000, 0x0000000443800000|100%| O| |TAMS 0x0000000443000000| PB 0x0000000443000000| Untracked | 0 -| 121|0x0000000443800000, 0x0000000444000000, 0x0000000444000000|100%| O| |TAMS 0x0000000443800000| PB 0x0000000443800000| Untracked | 0 -| 122|0x0000000444000000, 0x0000000444800000, 0x0000000444800000|100%| O| |TAMS 0x0000000444000000| PB 0x0000000444000000| Untracked | 0 -| 123|0x0000000444800000, 0x0000000445000000, 0x0000000445000000|100%| O| |TAMS 0x0000000444800000| PB 0x0000000444800000| Untracked | 0 -| 124|0x0000000445000000, 0x0000000445800000, 0x0000000445800000|100%| O| |TAMS 0x0000000445000000| PB 0x0000000445000000| Untracked | 0 -| 125|0x0000000445800000, 0x0000000446000000, 0x0000000446000000|100%| O| |TAMS 0x0000000445800000| PB 0x0000000445800000| Untracked | 0 -| 126|0x0000000446000000, 0x0000000446800000, 0x0000000446800000|100%| O| |TAMS 0x0000000446000000| PB 0x0000000446000000| Untracked | 0 -| 127|0x0000000446800000, 0x0000000447000000, 0x0000000447000000|100%| O| |TAMS 0x0000000446800000| PB 0x0000000446800000| Untracked | 0 -| 128|0x0000000447000000, 0x0000000447800000, 0x0000000447800000|100%| O| |TAMS 0x0000000447000000| PB 0x0000000447000000| Untracked | 0 -| 129|0x0000000447800000, 0x0000000448000000, 0x0000000448000000|100%|HS| |TAMS 0x0000000447800000| PB 0x0000000447800000| Complete | 0 -| 130|0x0000000448000000, 0x0000000448800000, 0x0000000448800000|100%|HC| |TAMS 0x0000000448000000| PB 0x0000000448000000| Complete | 0 -| 131|0x0000000448800000, 0x0000000449000000, 0x0000000449000000|100%|HC| |TAMS 0x0000000448800000| PB 0x0000000448800000| Complete | 0 -| 132|0x0000000449000000, 0x0000000449800000, 0x0000000449800000|100%|HC| |TAMS 0x0000000449000000| PB 0x0000000449000000| Complete | 0 -| 133|0x0000000449800000, 0x000000044a000000, 0x000000044a000000|100%|HC| |TAMS 0x0000000449800000| PB 0x0000000449800000| Complete | 0 -| 134|0x000000044a000000, 0x000000044a800000, 0x000000044a800000|100%|HC| |TAMS 0x000000044a000000| PB 0x000000044a000000| Complete | 0 -| 135|0x000000044a800000, 0x000000044b000000, 0x000000044b000000|100%|HC| |TAMS 0x000000044a800000| PB 0x000000044a800000| Complete | 0 -| 136|0x000000044b000000, 0x000000044b800000, 0x000000044b800000|100%|HC| |TAMS 0x000000044b000000| PB 0x000000044b000000| Complete | 0 -| 137|0x000000044b800000, 0x000000044c000000, 0x000000044c000000|100%|HC| |TAMS 0x000000044b800000| PB 0x000000044b800000| Complete | 0 -| 138|0x000000044c000000, 0x000000044c800000, 0x000000044c800000|100%| O| |TAMS 0x000000044c000000| PB 0x000000044c000000| Untracked | 0 -| 139|0x000000044c800000, 0x000000044d000000, 0x000000044d000000|100%| O| |TAMS 0x000000044c800000| PB 0x000000044c800000| Untracked | 0 -| 140|0x000000044d000000, 0x000000044d800000, 0x000000044d800000|100%| O| |TAMS 0x000000044d000000| PB 0x000000044d000000| Untracked | 0 -| 141|0x000000044d800000, 0x000000044e000000, 0x000000044e000000|100%| O| |TAMS 0x000000044d800000| PB 0x000000044d800000| Untracked | 0 -| 142|0x000000044e000000, 0x000000044e800000, 0x000000044e800000|100%| O| |TAMS 0x000000044e000000| PB 0x000000044e000000| Untracked | 0 -| 143|0x000000044e800000, 0x000000044f000000, 0x000000044f000000|100%| O| |TAMS 0x000000044e800000| PB 0x000000044e800000| Untracked | 0 -| 144|0x000000044f000000, 0x000000044f800000, 0x000000044f800000|100%| O| |TAMS 0x000000044f000000| PB 0x000000044f000000| Untracked | 0 -| 145|0x000000044f800000, 0x0000000450000000, 0x0000000450000000|100%| O| |TAMS 0x000000044f800000| PB 0x000000044f800000| Untracked | 0 -| 146|0x0000000450000000, 0x0000000450800000, 0x0000000450800000|100%| O| |TAMS 0x0000000450000000| PB 0x0000000450000000| Untracked | 0 -| 147|0x0000000450800000, 0x0000000451000000, 0x0000000451000000|100%| O| |TAMS 0x0000000450800000| PB 0x0000000450800000| Untracked | 0 -| 148|0x0000000451000000, 0x0000000451800000, 0x0000000451800000|100%| O| |TAMS 0x0000000451000000| PB 0x0000000451000000| Untracked | 0 -| 149|0x0000000451800000, 0x0000000452000000, 0x0000000452000000|100%| O| |TAMS 0x0000000451800000| PB 0x0000000451800000| Untracked | 0 -| 150|0x0000000452000000, 0x0000000452800000, 0x0000000452800000|100%| O| |TAMS 0x0000000452000000| PB 0x0000000452000000| Untracked | 0 -| 151|0x0000000452800000, 0x0000000453000000, 0x0000000453000000|100%| O| |TAMS 0x0000000452800000| PB 0x0000000452800000| Untracked | 0 -| 152|0x0000000453000000, 0x0000000453800000, 0x0000000453800000|100%| O| |TAMS 0x0000000453000000| PB 0x0000000453000000| Untracked | 0 -| 153|0x0000000453800000, 0x0000000454000000, 0x0000000454000000|100%| O| |TAMS 0x0000000453800000| PB 0x0000000453800000| Untracked | 0 -| 154|0x0000000454000000, 0x0000000454800000, 0x0000000454800000|100%| O| |TAMS 0x0000000454000000| PB 0x0000000454000000| Untracked | 0 -| 155|0x0000000454800000, 0x0000000455000000, 0x0000000455000000|100%| O| |TAMS 0x0000000454800000| PB 0x0000000454800000| Untracked | 0 -| 156|0x0000000455000000, 0x0000000455800000, 0x0000000455800000|100%| O| |TAMS 0x0000000455000000| PB 0x0000000455000000| Untracked | 0 -| 157|0x0000000455800000, 0x0000000456000000, 0x0000000456000000|100%| O| |TAMS 0x0000000455800000| PB 0x0000000455800000| Untracked | 0 -| 158|0x0000000456000000, 0x0000000456800000, 0x0000000456800000|100%| O| |TAMS 0x0000000456000000| PB 0x0000000456000000| Untracked | 0 -| 159|0x0000000456800000, 0x0000000457000000, 0x0000000457000000|100%| O| |TAMS 0x0000000456800000| PB 0x0000000456800000| Untracked | 0 -| 160|0x0000000457000000, 0x0000000457800000, 0x0000000457800000|100%| O| |TAMS 0x0000000457000000| PB 0x0000000457000000| Untracked | 0 -| 161|0x0000000457800000, 0x0000000458000000, 0x0000000458000000|100%| O| |TAMS 0x0000000457800000| PB 0x0000000457800000| Untracked | 0 -| 162|0x0000000458000000, 0x0000000458800000, 0x0000000458800000|100%| O| |TAMS 0x0000000458000000| PB 0x0000000458000000| Untracked | 0 -| 163|0x0000000458800000, 0x0000000459000000, 0x0000000459000000|100%| O| |TAMS 0x0000000458800000| PB 0x0000000458800000| Untracked | 0 -| 164|0x0000000459000000, 0x0000000459800000, 0x0000000459800000|100%| O| |TAMS 0x0000000459000000| PB 0x0000000459000000| Untracked | 0 -| 165|0x0000000459800000, 0x000000045a000000, 0x000000045a000000|100%| O| |TAMS 0x0000000459800000| PB 0x0000000459800000| Untracked | 0 -| 166|0x000000045a000000, 0x000000045a800000, 0x000000045a800000|100%| O| |TAMS 0x000000045a000000| PB 0x000000045a000000| Untracked | 0 -| 167|0x000000045a800000, 0x000000045b000000, 0x000000045b000000|100%| O| |TAMS 0x000000045a800000| PB 0x000000045a800000| Untracked | 0 -| 168|0x000000045b000000, 0x000000045b800000, 0x000000045b800000|100%| O| |TAMS 0x000000045b000000| PB 0x000000045b000000| Untracked | 0 -| 169|0x000000045b800000, 0x000000045c000000, 0x000000045c000000|100%| O| |TAMS 0x000000045b800000| PB 0x000000045b800000| Untracked | 0 -| 170|0x000000045c000000, 0x000000045c800000, 0x000000045c800000|100%| O| |TAMS 0x000000045c000000| PB 0x000000045c000000| Untracked | 0 -| 171|0x000000045c800000, 0x000000045d000000, 0x000000045d000000|100%| O| |TAMS 0x000000045c800000| PB 0x000000045c800000| Untracked | 0 -| 172|0x000000045d000000, 0x000000045d800000, 0x000000045d800000|100%| O| |TAMS 0x000000045d000000| PB 0x000000045d000000| Untracked | 0 -| 173|0x000000045d800000, 0x000000045e000000, 0x000000045e000000|100%| O| |TAMS 0x000000045d800000| PB 0x000000045d800000| Untracked | 0 -| 174|0x000000045e000000, 0x000000045e800000, 0x000000045e800000|100%| O| |TAMS 0x000000045e000000| PB 0x000000045e000000| Untracked | 0 -| 175|0x000000045e800000, 0x000000045f000000, 0x000000045f000000|100%| O| |TAMS 0x000000045e800000| PB 0x000000045e800000| Untracked | 0 -| 176|0x000000045f000000, 0x000000045f800000, 0x000000045f800000|100%| O| |TAMS 0x000000045f000000| PB 0x000000045f000000| Untracked | 0 -| 177|0x000000045f800000, 0x0000000460000000, 0x0000000460000000|100%| O| |TAMS 0x000000045f800000| PB 0x000000045f800000| Untracked | 0 -| 178|0x0000000460000000, 0x0000000460800000, 0x0000000460800000|100%| O| |TAMS 0x0000000460000000| PB 0x0000000460000000| Untracked | 0 -| 179|0x0000000460800000, 0x0000000461000000, 0x0000000461000000|100%| O| |TAMS 0x0000000460800000| PB 0x0000000460800000| Untracked | 0 -| 180|0x0000000461000000, 0x0000000461800000, 0x0000000461800000|100%| O| |TAMS 0x0000000461000000| PB 0x0000000461000000| Untracked | 0 -| 181|0x0000000461800000, 0x0000000462000000, 0x0000000462000000|100%| O| |TAMS 0x0000000461800000| PB 0x0000000461800000| Untracked | 0 -| 182|0x0000000462000000, 0x0000000462800000, 0x0000000462800000|100%| O| |TAMS 0x0000000462000000| PB 0x0000000462000000| Untracked | 0 -| 183|0x0000000462800000, 0x0000000463000000, 0x0000000463000000|100%| O| |TAMS 0x0000000462800000| PB 0x0000000462800000| Untracked | 0 -| 184|0x0000000463000000, 0x0000000463800000, 0x0000000463800000|100%| O| |TAMS 0x0000000463000000| PB 0x0000000463000000| Untracked | 0 -| 185|0x0000000463800000, 0x0000000464000000, 0x0000000464000000|100%| O| |TAMS 0x0000000463800000| PB 0x0000000463800000| Untracked | 0 -| 186|0x0000000464000000, 0x0000000464800000, 0x0000000464800000|100%| O| |TAMS 0x0000000464000000| PB 0x0000000464000000| Untracked | 0 -| 187|0x0000000464800000, 0x0000000465000000, 0x0000000465000000|100%| O| |TAMS 0x0000000464800000| PB 0x0000000464800000| Untracked | 0 -| 188|0x0000000465000000, 0x0000000465800000, 0x0000000465800000|100%| O| |TAMS 0x0000000465000000| PB 0x0000000465000000| Untracked | 0 -| 189|0x0000000465800000, 0x0000000466000000, 0x0000000466000000|100%| O| |TAMS 0x0000000465800000| PB 0x0000000465800000| Untracked | 0 -| 190|0x0000000466000000, 0x0000000466800000, 0x0000000466800000|100%| O| |TAMS 0x0000000466000000| PB 0x0000000466000000| Untracked | 0 -| 191|0x0000000466800000, 0x0000000467000000, 0x0000000467000000|100%| O| |TAMS 0x0000000466800000| PB 0x0000000466800000| Untracked | 0 -| 192|0x0000000467000000, 0x0000000467800000, 0x0000000467800000|100%| O| |TAMS 0x0000000467000000| PB 0x0000000467000000| Untracked | 0 -| 193|0x0000000467800000, 0x0000000468000000, 0x0000000468000000|100%| O| |TAMS 0x0000000467800000| PB 0x0000000467800000| Untracked | 0 -| 194|0x0000000468000000, 0x0000000468800000, 0x0000000468800000|100%| O| |TAMS 0x0000000468000000| PB 0x0000000468000000| Untracked | 0 -| 195|0x0000000468800000, 0x0000000469000000, 0x0000000469000000|100%| O| |TAMS 0x0000000468800000| PB 0x0000000468800000| Untracked | 0 -| 196|0x0000000469000000, 0x0000000469800000, 0x0000000469800000|100%| O| |TAMS 0x0000000469000000| PB 0x0000000469000000| Untracked | 0 -| 197|0x0000000469800000, 0x000000046a000000, 0x000000046a000000|100%| O| |TAMS 0x0000000469800000| PB 0x0000000469800000| Untracked | 0 -| 198|0x000000046a000000, 0x000000046a800000, 0x000000046a800000|100%| O| |TAMS 0x000000046a000000| PB 0x000000046a000000| Untracked | 0 -| 199|0x000000046a800000, 0x000000046b000000, 0x000000046b000000|100%| O| |TAMS 0x000000046a800000| PB 0x000000046a800000| Untracked | 0 -| 200|0x000000046b000000, 0x000000046b800000, 0x000000046b800000|100%| O| |TAMS 0x000000046b000000| PB 0x000000046b000000| Untracked | 0 -| 201|0x000000046b800000, 0x000000046c000000, 0x000000046c000000|100%| O| |TAMS 0x000000046b800000| PB 0x000000046b800000| Untracked | 0 -| 202|0x000000046c000000, 0x000000046c800000, 0x000000046c800000|100%| O| |TAMS 0x000000046c000000| PB 0x000000046c000000| Untracked | 0 -| 203|0x000000046c800000, 0x000000046d000000, 0x000000046d000000|100%| O| |TAMS 0x000000046c800000| PB 0x000000046c800000| Untracked | 0 -| 204|0x000000046d000000, 0x000000046d800000, 0x000000046d800000|100%| O| |TAMS 0x000000046d000000| PB 0x000000046d000000| Untracked | 0 -| 205|0x000000046d800000, 0x000000046e000000, 0x000000046e000000|100%| O| |TAMS 0x000000046d800000| PB 0x000000046d800000| Untracked | 0 -| 206|0x000000046e000000, 0x000000046e800000, 0x000000046e800000|100%| O| |TAMS 0x000000046e000000| PB 0x000000046e000000| Untracked | 0 -| 207|0x000000046e800000, 0x000000046f000000, 0x000000046f000000|100%| O| |TAMS 0x000000046e800000| PB 0x000000046e800000| Untracked | 0 -| 208|0x000000046f000000, 0x000000046f800000, 0x000000046f800000|100%| O| |TAMS 0x000000046f000000| PB 0x000000046f000000| Untracked | 0 -| 209|0x000000046f800000, 0x0000000470000000, 0x0000000470000000|100%| O| |TAMS 0x000000046f800000| PB 0x000000046f800000| Untracked | 0 -| 210|0x0000000470000000, 0x0000000470800000, 0x0000000470800000|100%| O| |TAMS 0x0000000470000000| PB 0x0000000470000000| Untracked | 0 -| 211|0x0000000470800000, 0x0000000471000000, 0x0000000471000000|100%| O| |TAMS 0x0000000470800000| PB 0x0000000470800000| Untracked | 0 -| 212|0x0000000471000000, 0x0000000471800000, 0x0000000471800000|100%| O| |TAMS 0x0000000471000000| PB 0x0000000471000000| Untracked | 0 -| 213|0x0000000471800000, 0x0000000472000000, 0x0000000472000000|100%| O| |TAMS 0x0000000471800000| PB 0x0000000471800000| Untracked | 0 -| 214|0x0000000472000000, 0x0000000472800000, 0x0000000472800000|100%| O| |TAMS 0x0000000472000000| PB 0x0000000472000000| Untracked | 0 -| 215|0x0000000472800000, 0x0000000473000000, 0x0000000473000000|100%| O| |TAMS 0x0000000472800000| PB 0x0000000472800000| Untracked | 0 -| 216|0x0000000473000000, 0x0000000473800000, 0x0000000473800000|100%| O| |TAMS 0x0000000473000000| PB 0x0000000473000000| Untracked | 0 -| 217|0x0000000473800000, 0x0000000474000000, 0x0000000474000000|100%| O| |TAMS 0x0000000473800000| PB 0x0000000473800000| Untracked | 0 -| 218|0x0000000474000000, 0x0000000474800000, 0x0000000474800000|100%| O| |TAMS 0x0000000474000000| PB 0x0000000474000000| Untracked | 0 -| 219|0x0000000474800000, 0x0000000475000000, 0x0000000475000000|100%| O| |TAMS 0x0000000474800000| PB 0x0000000474800000| Untracked | 0 -| 220|0x0000000475000000, 0x0000000475800000, 0x0000000475800000|100%| O| |TAMS 0x0000000475000000| PB 0x0000000475000000| Untracked | 0 -| 221|0x0000000475800000, 0x0000000476000000, 0x0000000476000000|100%| O| |TAMS 0x0000000475800000| PB 0x0000000475800000| Untracked | 0 -| 222|0x0000000476000000, 0x0000000476800000, 0x0000000476800000|100%| O| |TAMS 0x0000000476000000| PB 0x0000000476000000| Untracked | 0 -| 223|0x0000000476800000, 0x0000000477000000, 0x0000000477000000|100%| O| |TAMS 0x0000000476800000| PB 0x0000000476800000| Untracked | 0 -| 224|0x0000000477000000, 0x0000000477800000, 0x0000000477800000|100%| O| |TAMS 0x0000000477000000| PB 0x0000000477000000| Untracked | 0 -| 225|0x0000000477800000, 0x0000000478000000, 0x0000000478000000|100%| O| |TAMS 0x0000000477800000| PB 0x0000000477800000| Untracked | 0 -| 226|0x0000000478000000, 0x0000000478800000, 0x0000000478800000|100%| O| |TAMS 0x0000000478000000| PB 0x0000000478000000| Untracked | 0 -| 227|0x0000000478800000, 0x0000000479000000, 0x0000000479000000|100%| O| |TAMS 0x0000000478800000| PB 0x0000000478800000| Untracked | 0 -| 228|0x0000000479000000, 0x0000000479800000, 0x0000000479800000|100%| O| |TAMS 0x0000000479000000| PB 0x0000000479000000| Untracked | 0 -| 229|0x0000000479800000, 0x000000047a000000, 0x000000047a000000|100%| O| |TAMS 0x0000000479800000| PB 0x0000000479800000| Untracked | 0 -| 230|0x000000047a000000, 0x000000047a800000, 0x000000047a800000|100%| O| |TAMS 0x000000047a000000| PB 0x000000047a000000| Untracked | 0 -| 231|0x000000047a800000, 0x000000047b000000, 0x000000047b000000|100%| O| |TAMS 0x000000047a800000| PB 0x000000047a800000| Untracked | 0 -| 232|0x000000047b000000, 0x000000047b800000, 0x000000047b800000|100%| O| |TAMS 0x000000047b000000| PB 0x000000047b000000| Untracked | 0 -| 233|0x000000047b800000, 0x000000047c000000, 0x000000047c000000|100%| O| |TAMS 0x000000047b800000| PB 0x000000047b800000| Untracked | 0 -| 234|0x000000047c000000, 0x000000047c800000, 0x000000047c800000|100%| O| |TAMS 0x000000047c000000| PB 0x000000047c000000| Untracked | 0 -| 235|0x000000047c800000, 0x000000047d000000, 0x000000047d000000|100%| O| |TAMS 0x000000047c800000| PB 0x000000047c800000| Untracked | 0 -| 236|0x000000047d000000, 0x000000047d800000, 0x000000047d800000|100%| O| |TAMS 0x000000047d000000| PB 0x000000047d000000| Untracked | 0 -| 237|0x000000047d800000, 0x000000047e000000, 0x000000047e000000|100%| O| |TAMS 0x000000047d800000| PB 0x000000047d800000| Untracked | 0 -| 238|0x000000047e000000, 0x000000047e800000, 0x000000047e800000|100%| O| |TAMS 0x000000047e000000| PB 0x000000047e000000| Untracked | 0 -| 239|0x000000047e800000, 0x000000047f000000, 0x000000047f000000|100%| O| |TAMS 0x000000047e800000| PB 0x000000047e800000| Untracked | 0 -| 240|0x000000047f000000, 0x000000047f800000, 0x000000047f800000|100%| O| |TAMS 0x000000047f000000| PB 0x000000047f000000| Untracked | 0 -| 241|0x000000047f800000, 0x0000000480000000, 0x0000000480000000|100%| O| |TAMS 0x000000047f800000| PB 0x000000047f800000| Untracked | 0 -| 242|0x0000000480000000, 0x0000000480800000, 0x0000000480800000|100%| O| |TAMS 0x0000000480000000| PB 0x0000000480000000| Untracked | 0 -| 243|0x0000000480800000, 0x0000000481000000, 0x0000000481000000|100%| O| |TAMS 0x0000000480800000| PB 0x0000000480800000| Untracked | 0 -| 244|0x0000000481000000, 0x0000000481800000, 0x0000000481800000|100%| O| |TAMS 0x0000000481000000| PB 0x0000000481000000| Untracked | 0 -| 245|0x0000000481800000, 0x0000000482000000, 0x0000000482000000|100%| O| |TAMS 0x0000000481800000| PB 0x0000000481800000| Untracked | 0 -| 246|0x0000000482000000, 0x0000000482800000, 0x0000000482800000|100%| O| |TAMS 0x0000000482000000| PB 0x0000000482000000| Untracked | 0 -| 247|0x0000000482800000, 0x0000000483000000, 0x0000000483000000|100%| O| |TAMS 0x0000000482800000| PB 0x0000000482800000| Untracked | 0 -| 248|0x0000000483000000, 0x0000000483800000, 0x0000000483800000|100%| O| |TAMS 0x0000000483000000| PB 0x0000000483000000| Untracked | 0 -| 249|0x0000000483800000, 0x0000000484000000, 0x0000000484000000|100%| O| |TAMS 0x0000000483800000| PB 0x0000000483800000| Untracked | 0 -| 250|0x0000000484000000, 0x0000000484800000, 0x0000000484800000|100%| O| |TAMS 0x0000000484000000| PB 0x0000000484000000| Untracked | 0 -| 251|0x0000000484800000, 0x0000000485000000, 0x0000000485000000|100%| O| |TAMS 0x0000000484800000| PB 0x0000000484800000| Untracked | 0 -| 252|0x0000000485000000, 0x0000000485800000, 0x0000000485800000|100%| O| |TAMS 0x0000000485000000| PB 0x0000000485000000| Untracked | 0 -| 253|0x0000000485800000, 0x0000000486000000, 0x0000000486000000|100%| O| |TAMS 0x0000000485800000| PB 0x0000000485800000| Untracked | 0 -| 254|0x0000000486000000, 0x0000000486800000, 0x0000000486800000|100%| O| |TAMS 0x0000000486000000| PB 0x0000000486000000| Untracked | 0 -| 255|0x0000000486800000, 0x0000000487000000, 0x0000000487000000|100%| O| |TAMS 0x0000000486800000| PB 0x0000000486800000| Untracked | 0 -| 256|0x0000000487000000, 0x0000000487800000, 0x0000000487800000|100%| O| |TAMS 0x0000000487000000| PB 0x0000000487000000| Untracked | 0 -| 257|0x0000000487800000, 0x0000000488000000, 0x0000000488000000|100%| O| |TAMS 0x0000000487800000| PB 0x0000000487800000| Untracked | 0 -| 258|0x0000000488000000, 0x0000000488800000, 0x0000000488800000|100%| O| |TAMS 0x0000000488000000| PB 0x0000000488000000| Untracked | 0 -| 259|0x0000000488800000, 0x0000000489000000, 0x0000000489000000|100%| O| |TAMS 0x0000000488800000| PB 0x0000000488800000| Untracked | 0 -| 260|0x0000000489000000, 0x0000000489800000, 0x0000000489800000|100%| O| |TAMS 0x0000000489000000| PB 0x0000000489000000| Untracked | 0 -| 261|0x0000000489800000, 0x000000048a000000, 0x000000048a000000|100%| O| |TAMS 0x0000000489800000| PB 0x0000000489800000| Untracked | 0 -| 262|0x000000048a000000, 0x000000048a800000, 0x000000048a800000|100%|HS| |TAMS 0x000000048a000000| PB 0x000000048a000000| Complete | 0 -| 263|0x000000048a800000, 0x000000048b000000, 0x000000048b000000|100%|HC| |TAMS 0x000000048a800000| PB 0x000000048a800000| Complete | 0 -| 264|0x000000048b000000, 0x000000048b800000, 0x000000048b800000|100%|HC| |TAMS 0x000000048b000000| PB 0x000000048b000000| Complete | 0 -| 265|0x000000048b800000, 0x000000048c000000, 0x000000048c000000|100%|HC| |TAMS 0x000000048b800000| PB 0x000000048b800000| Complete | 0 -| 266|0x000000048c000000, 0x000000048c800000, 0x000000048c800000|100%|HC| |TAMS 0x000000048c000000| PB 0x000000048c000000| Complete | 0 -| 267|0x000000048c800000, 0x000000048d000000, 0x000000048d000000|100%|HC| |TAMS 0x000000048c800000| PB 0x000000048c800000| Complete | 0 -| 268|0x000000048d000000, 0x000000048d800000, 0x000000048d800000|100%|HC| |TAMS 0x000000048d000000| PB 0x000000048d000000| Complete | 0 -| 269|0x000000048d800000, 0x000000048e000000, 0x000000048e000000|100%|HC| |TAMS 0x000000048d800000| PB 0x000000048d800000| Complete | 0 -| 270|0x000000048e000000, 0x000000048e800000, 0x000000048e800000|100%|HC| |TAMS 0x000000048e000000| PB 0x000000048e000000| Complete | 0 -| 271|0x000000048e800000, 0x000000048f000000, 0x000000048f000000|100%|HC| |TAMS 0x000000048e800000| PB 0x000000048e800000| Complete | 0 -| 272|0x000000048f000000, 0x000000048f800000, 0x000000048f800000|100%|HC| |TAMS 0x000000048f000000| PB 0x000000048f000000| Complete | 0 -| 273|0x000000048f800000, 0x0000000490000000, 0x0000000490000000|100%|HC| |TAMS 0x000000048f800000| PB 0x000000048f800000| Complete | 0 -| 274|0x0000000490000000, 0x0000000490800000, 0x0000000490800000|100%|HC| |TAMS 0x0000000490000000| PB 0x0000000490000000| Complete | 0 -| 275|0x0000000490800000, 0x0000000491000000, 0x0000000491000000|100%|HC| |TAMS 0x0000000490800000| PB 0x0000000490800000| Complete | 0 -| 276|0x0000000491000000, 0x0000000491800000, 0x0000000491800000|100%|HC| |TAMS 0x0000000491000000| PB 0x0000000491000000| Complete | 0 -| 277|0x0000000491800000, 0x0000000492000000, 0x0000000492000000|100%|HC| |TAMS 0x0000000491800000| PB 0x0000000491800000| Complete | 0 -| 278|0x0000000492000000, 0x0000000492800000, 0x0000000492800000|100%|HC| |TAMS 0x0000000492000000| PB 0x0000000492000000| Complete | 0 -| 279|0x0000000492800000, 0x0000000493000000, 0x0000000493000000|100%| O| |TAMS 0x0000000492800000| PB 0x0000000492800000| Untracked | 0 -| 280|0x0000000493000000, 0x0000000493800000, 0x0000000493800000|100%| O| |TAMS 0x0000000493000000| PB 0x0000000493000000| Untracked | 0 -| 281|0x0000000493800000, 0x0000000494000000, 0x0000000494000000|100%| O| |TAMS 0x0000000493800000| PB 0x0000000493800000| Untracked | 0 -| 282|0x0000000494000000, 0x0000000494800000, 0x0000000494800000|100%| O| |TAMS 0x0000000494000000| PB 0x0000000494000000| Untracked | 0 -| 283|0x0000000494800000, 0x0000000495000000, 0x0000000495000000|100%| O| |TAMS 0x0000000494800000| PB 0x0000000494800000| Untracked | 0 -| 284|0x0000000495000000, 0x0000000495800000, 0x0000000495800000|100%| O| |TAMS 0x0000000495000000| PB 0x0000000495000000| Untracked | 0 -| 285|0x0000000495800000, 0x0000000496000000, 0x0000000496000000|100%| O| |TAMS 0x0000000495800000| PB 0x0000000495800000| Untracked | 0 -| 286|0x0000000496000000, 0x0000000496800000, 0x0000000496800000|100%| O| |TAMS 0x0000000496000000| PB 0x0000000496000000| Untracked | 0 -| 287|0x0000000496800000, 0x0000000497000000, 0x0000000497000000|100%| O| |TAMS 0x0000000496800000| PB 0x0000000496800000| Untracked | 0 -| 288|0x0000000497000000, 0x0000000497800000, 0x0000000497800000|100%| O| |TAMS 0x0000000497000000| PB 0x0000000497000000| Untracked | 0 -| 289|0x0000000497800000, 0x0000000498000000, 0x0000000498000000|100%| O| |TAMS 0x0000000497800000| PB 0x0000000497800000| Untracked | 0 -| 290|0x0000000498000000, 0x0000000498800000, 0x0000000498800000|100%| O| |TAMS 0x0000000498000000| PB 0x0000000498000000| Untracked | 0 -| 291|0x0000000498800000, 0x0000000499000000, 0x0000000499000000|100%| O| |TAMS 0x0000000498800000| PB 0x0000000498800000| Untracked | 0 -| 292|0x0000000499000000, 0x0000000499800000, 0x0000000499800000|100%| O| |TAMS 0x0000000499000000| PB 0x0000000499000000| Untracked | 0 -| 293|0x0000000499800000, 0x000000049a000000, 0x000000049a000000|100%| O| |TAMS 0x0000000499800000| PB 0x0000000499800000| Untracked | 0 -| 294|0x000000049a000000, 0x000000049a800000, 0x000000049a800000|100%| O| |TAMS 0x000000049a000000| PB 0x000000049a000000| Untracked | 0 -| 295|0x000000049a800000, 0x000000049b000000, 0x000000049b000000|100%| O| |TAMS 0x000000049a800000| PB 0x000000049a800000| Untracked | 0 -| 296|0x000000049b000000, 0x000000049b800000, 0x000000049b800000|100%| O| |TAMS 0x000000049b000000| PB 0x000000049b000000| Untracked | 0 -| 297|0x000000049b800000, 0x000000049c000000, 0x000000049c000000|100%| O| |TAMS 0x000000049b800000| PB 0x000000049b800000| Untracked | 0 -| 298|0x000000049c000000, 0x000000049c800000, 0x000000049c800000|100%| O| |TAMS 0x000000049c000000| PB 0x000000049c000000| Untracked | 0 -| 299|0x000000049c800000, 0x000000049d000000, 0x000000049d000000|100%| O| |TAMS 0x000000049c800000| PB 0x000000049c800000| Untracked | 0 -| 300|0x000000049d000000, 0x000000049d800000, 0x000000049d800000|100%| O| |TAMS 0x000000049d000000| PB 0x000000049d000000| Untracked | 0 -| 301|0x000000049d800000, 0x000000049e000000, 0x000000049e000000|100%| O| |TAMS 0x000000049d800000| PB 0x000000049d800000| Untracked | 0 -| 302|0x000000049e000000, 0x000000049e800000, 0x000000049e800000|100%| O| |TAMS 0x000000049e000000| PB 0x000000049e000000| Untracked | 0 -| 303|0x000000049e800000, 0x000000049f000000, 0x000000049f000000|100%| O| |TAMS 0x000000049e800000| PB 0x000000049e800000| Untracked | 0 -| 304|0x000000049f000000, 0x000000049f800000, 0x000000049f800000|100%| O| |TAMS 0x000000049f000000| PB 0x000000049f000000| Untracked | 0 -| 305|0x000000049f800000, 0x00000004a0000000, 0x00000004a0000000|100%| O| |TAMS 0x000000049f800000| PB 0x000000049f800000| Untracked | 0 -| 306|0x00000004a0000000, 0x00000004a0800000, 0x00000004a0800000|100%| O| |TAMS 0x00000004a0000000| PB 0x00000004a0000000| Untracked | 0 -| 307|0x00000004a0800000, 0x00000004a1000000, 0x00000004a1000000|100%| O| |TAMS 0x00000004a0800000| PB 0x00000004a0800000| Untracked | 0 -| 308|0x00000004a1000000, 0x00000004a1800000, 0x00000004a1800000|100%| O| |TAMS 0x00000004a1000000| PB 0x00000004a1000000| Untracked | 0 -| 309|0x00000004a1800000, 0x00000004a2000000, 0x00000004a2000000|100%| O| |TAMS 0x00000004a1800000| PB 0x00000004a1800000| Untracked | 0 -| 310|0x00000004a2000000, 0x00000004a2800000, 0x00000004a2800000|100%| O| |TAMS 0x00000004a2000000| PB 0x00000004a2000000| Untracked | 0 -| 311|0x00000004a2800000, 0x00000004a3000000, 0x00000004a3000000|100%| O| |TAMS 0x00000004a2800000| PB 0x00000004a2800000| Untracked | 0 -| 312|0x00000004a3000000, 0x00000004a3800000, 0x00000004a3800000|100%| O| |TAMS 0x00000004a3000000| PB 0x00000004a3000000| Untracked | 0 -| 313|0x00000004a3800000, 0x00000004a4000000, 0x00000004a4000000|100%| O| |TAMS 0x00000004a3800000| PB 0x00000004a3800000| Untracked | 0 -| 314|0x00000004a4000000, 0x00000004a4800000, 0x00000004a4800000|100%| O| |TAMS 0x00000004a4000000| PB 0x00000004a4000000| Untracked | 0 -| 315|0x00000004a4800000, 0x00000004a5000000, 0x00000004a5000000|100%| O| |TAMS 0x00000004a4800000| PB 0x00000004a4800000| Untracked | 0 -| 316|0x00000004a5000000, 0x00000004a5800000, 0x00000004a5800000|100%| O| |TAMS 0x00000004a5000000| PB 0x00000004a5000000| Untracked | 0 -| 317|0x00000004a5800000, 0x00000004a6000000, 0x00000004a6000000|100%| O| |TAMS 0x00000004a5800000| PB 0x00000004a5800000| Untracked | 0 -| 318|0x00000004a6000000, 0x00000004a6800000, 0x00000004a6800000|100%| O| |TAMS 0x00000004a6000000| PB 0x00000004a6000000| Untracked | 0 -| 319|0x00000004a6800000, 0x00000004a7000000, 0x00000004a7000000|100%| O| |TAMS 0x00000004a6800000| PB 0x00000004a6800000| Untracked | 0 -| 320|0x00000004a7000000, 0x00000004a7800000, 0x00000004a7800000|100%| O| |TAMS 0x00000004a7000000| PB 0x00000004a7000000| Untracked | 0 -| 321|0x00000004a7800000, 0x00000004a8000000, 0x00000004a8000000|100%| O| |TAMS 0x00000004a7800000| PB 0x00000004a7800000| Untracked | 0 -| 322|0x00000004a8000000, 0x00000004a8800000, 0x00000004a8800000|100%| O| |TAMS 0x00000004a8000000| PB 0x00000004a8000000| Untracked | 0 -| 323|0x00000004a8800000, 0x00000004a9000000, 0x00000004a9000000|100%| O| |TAMS 0x00000004a8800000| PB 0x00000004a8800000| Untracked | 0 -| 324|0x00000004a9000000, 0x00000004a9800000, 0x00000004a9800000|100%| O| |TAMS 0x00000004a9000000| PB 0x00000004a9000000| Untracked | 0 -| 325|0x00000004a9800000, 0x00000004aa000000, 0x00000004aa000000|100%| O| |TAMS 0x00000004a9800000| PB 0x00000004a9800000| Untracked | 0 -| 326|0x00000004aa000000, 0x00000004aa800000, 0x00000004aa800000|100%| O| |TAMS 0x00000004aa000000| PB 0x00000004aa000000| Untracked | 0 -| 327|0x00000004aa800000, 0x00000004ab000000, 0x00000004ab000000|100%| O| |TAMS 0x00000004aa800000| PB 0x00000004aa800000| Untracked | 0 -| 328|0x00000004ab000000, 0x00000004ab800000, 0x00000004ab800000|100%| O| |TAMS 0x00000004ab000000| PB 0x00000004ab000000| Untracked | 0 -| 329|0x00000004ab800000, 0x00000004ac000000, 0x00000004ac000000|100%| O| |TAMS 0x00000004ab800000| PB 0x00000004ab800000| Untracked | 0 -| 330|0x00000004ac000000, 0x00000004ac800000, 0x00000004ac800000|100%| O| |TAMS 0x00000004ac000000| PB 0x00000004ac000000| Untracked | 0 -| 331|0x00000004ac800000, 0x00000004ad000000, 0x00000004ad000000|100%| O| |TAMS 0x00000004ac800000| PB 0x00000004ac800000| Untracked | 0 -| 332|0x00000004ad000000, 0x00000004ad800000, 0x00000004ad800000|100%| O| |TAMS 0x00000004ad000000| PB 0x00000004ad000000| Untracked | 0 -| 333|0x00000004ad800000, 0x00000004ae000000, 0x00000004ae000000|100%| O| |TAMS 0x00000004ad800000| PB 0x00000004ad800000| Untracked | 0 -| 334|0x00000004ae000000, 0x00000004ae800000, 0x00000004ae800000|100%| O| |TAMS 0x00000004ae000000| PB 0x00000004ae000000| Untracked | 0 -| 335|0x00000004ae800000, 0x00000004af000000, 0x00000004af000000|100%| O| |TAMS 0x00000004ae800000| PB 0x00000004ae800000| Untracked | 0 -| 336|0x00000004af000000, 0x00000004af800000, 0x00000004af800000|100%| O| |TAMS 0x00000004af000000| PB 0x00000004af000000| Untracked | 0 -| 337|0x00000004af800000, 0x00000004b0000000, 0x00000004b0000000|100%| O| |TAMS 0x00000004af800000| PB 0x00000004af800000| Untracked | 0 -| 338|0x00000004b0000000, 0x00000004b0800000, 0x00000004b0800000|100%| O| |TAMS 0x00000004b0000000| PB 0x00000004b0000000| Untracked | 0 -| 339|0x00000004b0800000, 0x00000004b1000000, 0x00000004b1000000|100%| O| |TAMS 0x00000004b0800000| PB 0x00000004b0800000| Untracked | 0 -| 340|0x00000004b1000000, 0x00000004b1800000, 0x00000004b1800000|100%| O| |TAMS 0x00000004b1000000| PB 0x00000004b1000000| Untracked | 0 -| 341|0x00000004b1800000, 0x00000004b2000000, 0x00000004b2000000|100%| O| |TAMS 0x00000004b1800000| PB 0x00000004b1800000| Untracked | 0 -| 342|0x00000004b2000000, 0x00000004b2800000, 0x00000004b2800000|100%| O| |TAMS 0x00000004b2000000| PB 0x00000004b2000000| Untracked | 0 -| 343|0x00000004b2800000, 0x00000004b3000000, 0x00000004b3000000|100%| O| |TAMS 0x00000004b2800000| PB 0x00000004b2800000| Untracked | 0 -| 344|0x00000004b3000000, 0x00000004b3800000, 0x00000004b3800000|100%| O| |TAMS 0x00000004b3000000| PB 0x00000004b3000000| Untracked | 0 -| 345|0x00000004b3800000, 0x00000004b4000000, 0x00000004b4000000|100%| O| |TAMS 0x00000004b3800000| PB 0x00000004b3800000| Untracked | 0 -| 346|0x00000004b4000000, 0x00000004b4800000, 0x00000004b4800000|100%| O| |TAMS 0x00000004b4000000| PB 0x00000004b4000000| Untracked | 0 -| 347|0x00000004b4800000, 0x00000004b5000000, 0x00000004b5000000|100%| O| |TAMS 0x00000004b4800000| PB 0x00000004b4800000| Untracked | 0 -| 348|0x00000004b5000000, 0x00000004b5800000, 0x00000004b5800000|100%| O| |TAMS 0x00000004b5000000| PB 0x00000004b5000000| Untracked | 0 -| 349|0x00000004b5800000, 0x00000004b6000000, 0x00000004b6000000|100%| O| |TAMS 0x00000004b5800000| PB 0x00000004b5800000| Untracked | 0 -| 350|0x00000004b6000000, 0x00000004b6800000, 0x00000004b6800000|100%| O| |TAMS 0x00000004b6000000| PB 0x00000004b6000000| Untracked | 0 -| 351|0x00000004b6800000, 0x00000004b7000000, 0x00000004b7000000|100%| O| |TAMS 0x00000004b6800000| PB 0x00000004b6800000| Untracked | 0 -| 352|0x00000004b7000000, 0x00000004b7800000, 0x00000004b7800000|100%| O| |TAMS 0x00000004b7000000| PB 0x00000004b7000000| Untracked | 0 -| 353|0x00000004b7800000, 0x00000004b8000000, 0x00000004b8000000|100%| O| |TAMS 0x00000004b7800000| PB 0x00000004b7800000| Untracked | 0 -| 354|0x00000004b8000000, 0x00000004b8800000, 0x00000004b8800000|100%| O| |TAMS 0x00000004b8000000| PB 0x00000004b8000000| Untracked | 0 -| 355|0x00000004b8800000, 0x00000004b9000000, 0x00000004b9000000|100%| O| |TAMS 0x00000004b8800000| PB 0x00000004b8800000| Untracked | 0 -| 356|0x00000004b9000000, 0x00000004b9800000, 0x00000004b9800000|100%| O| |TAMS 0x00000004b9000000| PB 0x00000004b9000000| Untracked | 0 -| 357|0x00000004b9800000, 0x00000004ba000000, 0x00000004ba000000|100%| O| |TAMS 0x00000004b9800000| PB 0x00000004b9800000| Untracked | 0 -| 358|0x00000004ba000000, 0x00000004ba800000, 0x00000004ba800000|100%| O| |TAMS 0x00000004ba000000| PB 0x00000004ba000000| Untracked | 0 -| 359|0x00000004ba800000, 0x00000004bb000000, 0x00000004bb000000|100%| O| |TAMS 0x00000004ba800000| PB 0x00000004ba800000| Untracked | 0 -| 360|0x00000004bb000000, 0x00000004bb800000, 0x00000004bb800000|100%| O| |TAMS 0x00000004bb000000| PB 0x00000004bb000000| Untracked | 0 -| 361|0x00000004bb800000, 0x00000004bc000000, 0x00000004bc000000|100%| O| |TAMS 0x00000004bb800000| PB 0x00000004bb800000| Untracked | 0 -| 362|0x00000004bc000000, 0x00000004bc800000, 0x00000004bc800000|100%| O| |TAMS 0x00000004bc000000| PB 0x00000004bc000000| Untracked | 0 -| 363|0x00000004bc800000, 0x00000004bd000000, 0x00000004bd000000|100%| O| |TAMS 0x00000004bc800000| PB 0x00000004bc800000| Untracked | 0 -| 364|0x00000004bd000000, 0x00000004bd800000, 0x00000004bd800000|100%| O| |TAMS 0x00000004bd000000| PB 0x00000004bd000000| Untracked | 0 -| 365|0x00000004bd800000, 0x00000004be000000, 0x00000004be000000|100%| O| |TAMS 0x00000004bd800000| PB 0x00000004bd800000| Untracked | 0 -| 366|0x00000004be000000, 0x00000004be800000, 0x00000004be800000|100%| O| |TAMS 0x00000004be000000| PB 0x00000004be000000| Untracked | 0 -| 367|0x00000004be800000, 0x00000004bf000000, 0x00000004bf000000|100%| O| |TAMS 0x00000004be800000| PB 0x00000004be800000| Untracked | 0 -| 368|0x00000004bf000000, 0x00000004bf800000, 0x00000004bf800000|100%| O| |TAMS 0x00000004bf000000| PB 0x00000004bf000000| Untracked | 0 -| 369|0x00000004bf800000, 0x00000004c0000000, 0x00000004c0000000|100%| O| |TAMS 0x00000004bf800000| PB 0x00000004bf800000| Untracked | 0 -| 370|0x00000004c0000000, 0x00000004c0800000, 0x00000004c0800000|100%| O| |TAMS 0x00000004c0000000| PB 0x00000004c0000000| Untracked | 0 -| 371|0x00000004c0800000, 0x00000004c1000000, 0x00000004c1000000|100%| O| |TAMS 0x00000004c0800000| PB 0x00000004c0800000| Untracked | 0 -| 372|0x00000004c1000000, 0x00000004c1800000, 0x00000004c1800000|100%| O| |TAMS 0x00000004c1000000| PB 0x00000004c1000000| Untracked | 0 -| 373|0x00000004c1800000, 0x00000004c2000000, 0x00000004c2000000|100%| O| |TAMS 0x00000004c1800000| PB 0x00000004c1800000| Untracked | 0 -| 374|0x00000004c2000000, 0x00000004c2800000, 0x00000004c2800000|100%| O| |TAMS 0x00000004c2000000| PB 0x00000004c2000000| Untracked | 0 -| 375|0x00000004c2800000, 0x00000004c3000000, 0x00000004c3000000|100%| O| |TAMS 0x00000004c2800000| PB 0x00000004c2800000| Untracked | 0 -| 376|0x00000004c3000000, 0x00000004c3800000, 0x00000004c3800000|100%| O| |TAMS 0x00000004c3000000| PB 0x00000004c3000000| Untracked | 0 -| 377|0x00000004c3800000, 0x00000004c4000000, 0x00000004c4000000|100%| O| |TAMS 0x00000004c3800000| PB 0x00000004c3800000| Untracked | 0 -| 378|0x00000004c4000000, 0x00000004c4800000, 0x00000004c4800000|100%| O| |TAMS 0x00000004c4000000| PB 0x00000004c4000000| Untracked | 0 -| 379|0x00000004c4800000, 0x00000004c5000000, 0x00000004c5000000|100%| O| |TAMS 0x00000004c4800000| PB 0x00000004c4800000| Untracked | 0 -| 380|0x00000004c5000000, 0x00000004c5800000, 0x00000004c5800000|100%| O| |TAMS 0x00000004c5000000| PB 0x00000004c5000000| Untracked | 0 -| 381|0x00000004c5800000, 0x00000004c6000000, 0x00000004c6000000|100%| O| |TAMS 0x00000004c5800000| PB 0x00000004c5800000| Untracked | 0 -| 382|0x00000004c6000000, 0x00000004c6800000, 0x00000004c6800000|100%| O| |TAMS 0x00000004c6000000| PB 0x00000004c6000000| Untracked | 0 -| 383|0x00000004c6800000, 0x00000004c7000000, 0x00000004c7000000|100%| O| |TAMS 0x00000004c6800000| PB 0x00000004c6800000| Untracked | 0 -| 384|0x00000004c7000000, 0x00000004c7800000, 0x00000004c7800000|100%| O| |TAMS 0x00000004c7000000| PB 0x00000004c7000000| Untracked | 0 -| 385|0x00000004c7800000, 0x00000004c8000000, 0x00000004c8000000|100%| O| |TAMS 0x00000004c7800000| PB 0x00000004c7800000| Untracked | 0 -| 386|0x00000004c8000000, 0x00000004c8800000, 0x00000004c8800000|100%| O| |TAMS 0x00000004c8000000| PB 0x00000004c8000000| Untracked | 0 -| 387|0x00000004c8800000, 0x00000004c9000000, 0x00000004c9000000|100%| O| |TAMS 0x00000004c8800000| PB 0x00000004c8800000| Untracked | 0 -| 388|0x00000004c9000000, 0x00000004c9800000, 0x00000004c9800000|100%| O| |TAMS 0x00000004c9000000| PB 0x00000004c9000000| Untracked | 0 -| 389|0x00000004c9800000, 0x00000004ca000000, 0x00000004ca000000|100%| O| |TAMS 0x00000004c9800000| PB 0x00000004c9800000| Untracked | 0 -| 390|0x00000004ca000000, 0x00000004ca800000, 0x00000004ca800000|100%| O| |TAMS 0x00000004ca000000| PB 0x00000004ca000000| Untracked | 0 -| 391|0x00000004ca800000, 0x00000004cb000000, 0x00000004cb000000|100%| O| |TAMS 0x00000004ca800000| PB 0x00000004ca800000| Untracked | 0 -| 392|0x00000004cb000000, 0x00000004cb800000, 0x00000004cb800000|100%| O| |TAMS 0x00000004cb000000| PB 0x00000004cb000000| Untracked | 0 -| 393|0x00000004cb800000, 0x00000004cc000000, 0x00000004cc000000|100%| O| |TAMS 0x00000004cb800000| PB 0x00000004cb800000| Untracked | 0 -| 394|0x00000004cc000000, 0x00000004cc800000, 0x00000004cc800000|100%| O| |TAMS 0x00000004cc000000| PB 0x00000004cc000000| Untracked | 0 -| 395|0x00000004cc800000, 0x00000004cd000000, 0x00000004cd000000|100%| O| |TAMS 0x00000004cc800000| PB 0x00000004cc800000| Untracked | 0 -| 396|0x00000004cd000000, 0x00000004cd800000, 0x00000004cd800000|100%| O| |TAMS 0x00000004cd000000| PB 0x00000004cd000000| Untracked | 0 -| 397|0x00000004cd800000, 0x00000004ce000000, 0x00000004ce000000|100%| O| |TAMS 0x00000004cd800000| PB 0x00000004cd800000| Untracked | 0 -| 398|0x00000004ce000000, 0x00000004ce800000, 0x00000004ce800000|100%| O| |TAMS 0x00000004ce000000| PB 0x00000004ce000000| Untracked | 0 -| 399|0x00000004ce800000, 0x00000004cf000000, 0x00000004cf000000|100%| O| |TAMS 0x00000004ce800000| PB 0x00000004ce800000| Untracked | 0 -| 400|0x00000004cf000000, 0x00000004cf800000, 0x00000004cf800000|100%| O| |TAMS 0x00000004cf000000| PB 0x00000004cf000000| Untracked | 0 -| 401|0x00000004cf800000, 0x00000004d0000000, 0x00000004d0000000|100%| O| |TAMS 0x00000004cf800000| PB 0x00000004cf800000| Untracked | 0 -| 402|0x00000004d0000000, 0x00000004d0800000, 0x00000004d0800000|100%| O| |TAMS 0x00000004d0000000| PB 0x00000004d0000000| Untracked | 0 -| 403|0x00000004d0800000, 0x00000004d1000000, 0x00000004d1000000|100%| O| |TAMS 0x00000004d0800000| PB 0x00000004d0800000| Untracked | 0 -| 404|0x00000004d1000000, 0x00000004d1800000, 0x00000004d1800000|100%| O| |TAMS 0x00000004d1000000| PB 0x00000004d1000000| Untracked | 0 -| 405|0x00000004d1800000, 0x00000004d2000000, 0x00000004d2000000|100%| O| |TAMS 0x00000004d1800000| PB 0x00000004d1800000| Untracked | 0 -| 406|0x00000004d2000000, 0x00000004d2800000, 0x00000004d2800000|100%| O| |TAMS 0x00000004d2000000| PB 0x00000004d2000000| Untracked | 0 -| 407|0x00000004d2800000, 0x00000004d3000000, 0x00000004d3000000|100%| O| |TAMS 0x00000004d2800000| PB 0x00000004d2800000| Untracked | 0 -| 408|0x00000004d3000000, 0x00000004d3800000, 0x00000004d3800000|100%| O| |TAMS 0x00000004d3000000| PB 0x00000004d3000000| Untracked | 0 -| 409|0x00000004d3800000, 0x00000004d4000000, 0x00000004d4000000|100%| O| |TAMS 0x00000004d3800000| PB 0x00000004d3800000| Untracked | 0 -| 410|0x00000004d4000000, 0x00000004d4800000, 0x00000004d4800000|100%| O| |TAMS 0x00000004d4000000| PB 0x00000004d4000000| Untracked | 0 -| 411|0x00000004d4800000, 0x00000004d5000000, 0x00000004d5000000|100%| O| |TAMS 0x00000004d4800000| PB 0x00000004d4800000| Untracked | 0 -| 412|0x00000004d5000000, 0x00000004d5800000, 0x00000004d5800000|100%| O| |TAMS 0x00000004d5000000| PB 0x00000004d5000000| Untracked | 0 -| 413|0x00000004d5800000, 0x00000004d6000000, 0x00000004d6000000|100%| O| |TAMS 0x00000004d5800000| PB 0x00000004d5800000| Untracked | 0 -| 414|0x00000004d6000000, 0x00000004d6800000, 0x00000004d6800000|100%| O| |TAMS 0x00000004d6000000| PB 0x00000004d6000000| Untracked | 0 -| 415|0x00000004d6800000, 0x00000004d7000000, 0x00000004d7000000|100%| O| |TAMS 0x00000004d6800000| PB 0x00000004d6800000| Untracked | 0 -| 416|0x00000004d7000000, 0x00000004d7800000, 0x00000004d7800000|100%| O| |TAMS 0x00000004d7000000| PB 0x00000004d7000000| Untracked | 0 -| 417|0x00000004d7800000, 0x00000004d8000000, 0x00000004d8000000|100%| O| |TAMS 0x00000004d7800000| PB 0x00000004d7800000| Untracked | 0 -| 418|0x00000004d8000000, 0x00000004d8800000, 0x00000004d8800000|100%| O| |TAMS 0x00000004d8000000| PB 0x00000004d8000000| Untracked | 0 -| 419|0x00000004d8800000, 0x00000004d9000000, 0x00000004d9000000|100%| O| |TAMS 0x00000004d8800000| PB 0x00000004d8800000| Untracked | 0 -| 420|0x00000004d9000000, 0x00000004d9800000, 0x00000004d9800000|100%| O| |TAMS 0x00000004d9000000| PB 0x00000004d9000000| Untracked | 0 -| 421|0x00000004d9800000, 0x00000004da000000, 0x00000004da000000|100%| O| |TAMS 0x00000004d9800000| PB 0x00000004d9800000| Untracked | 0 -| 422|0x00000004da000000, 0x00000004da800000, 0x00000004da800000|100%| O| |TAMS 0x00000004da000000| PB 0x00000004da000000| Untracked | 0 -| 423|0x00000004da800000, 0x00000004db000000, 0x00000004db000000|100%| O| |TAMS 0x00000004da800000| PB 0x00000004da800000| Untracked | 0 -| 424|0x00000004db000000, 0x00000004db800000, 0x00000004db800000|100%| O| |TAMS 0x00000004db000000| PB 0x00000004db000000| Untracked | 0 -| 425|0x00000004db800000, 0x00000004dc000000, 0x00000004dc000000|100%| O| |TAMS 0x00000004db800000| PB 0x00000004db800000| Untracked | 0 -| 426|0x00000004dc000000, 0x00000004dc800000, 0x00000004dc800000|100%| O| |TAMS 0x00000004dc000000| PB 0x00000004dc000000| Untracked | 0 -| 427|0x00000004dc800000, 0x00000004dd000000, 0x00000004dd000000|100%| O| |TAMS 0x00000004dc800000| PB 0x00000004dc800000| Untracked | 0 -| 428|0x00000004dd000000, 0x00000004dd800000, 0x00000004dd800000|100%| O| |TAMS 0x00000004dd000000| PB 0x00000004dd000000| Untracked | 0 -| 429|0x00000004dd800000, 0x00000004de000000, 0x00000004de000000|100%| O| |TAMS 0x00000004dd800000| PB 0x00000004dd800000| Untracked | 0 -| 430|0x00000004de000000, 0x00000004de800000, 0x00000004de800000|100%| O| |TAMS 0x00000004de000000| PB 0x00000004de000000| Untracked | 0 -| 431|0x00000004de800000, 0x00000004df000000, 0x00000004df000000|100%| O| |TAMS 0x00000004de800000| PB 0x00000004de800000| Untracked | 0 -| 432|0x00000004df000000, 0x00000004df800000, 0x00000004df800000|100%| O| |TAMS 0x00000004df000000| PB 0x00000004df000000| Untracked | 0 -| 433|0x00000004df800000, 0x00000004e0000000, 0x00000004e0000000|100%| O| |TAMS 0x00000004df800000| PB 0x00000004df800000| Untracked | 0 -| 434|0x00000004e0000000, 0x00000004e0800000, 0x00000004e0800000|100%| O| |TAMS 0x00000004e0000000| PB 0x00000004e0000000| Untracked | 0 -| 435|0x00000004e0800000, 0x00000004e1000000, 0x00000004e1000000|100%| O| |TAMS 0x00000004e0800000| PB 0x00000004e0800000| Untracked | 0 -| 436|0x00000004e1000000, 0x00000004e1800000, 0x00000004e1800000|100%| O| |TAMS 0x00000004e1000000| PB 0x00000004e1000000| Untracked | 0 -| 437|0x00000004e1800000, 0x00000004e2000000, 0x00000004e2000000|100%| O| |TAMS 0x00000004e1800000| PB 0x00000004e1800000| Untracked | 0 -| 438|0x00000004e2000000, 0x00000004e2800000, 0x00000004e2800000|100%| O| |TAMS 0x00000004e2000000| PB 0x00000004e2000000| Untracked | 0 -| 439|0x00000004e2800000, 0x00000004e3000000, 0x00000004e3000000|100%| O| |TAMS 0x00000004e2800000| PB 0x00000004e2800000| Untracked | 0 -| 440|0x00000004e3000000, 0x00000004e3800000, 0x00000004e3800000|100%| O| |TAMS 0x00000004e3000000| PB 0x00000004e3000000| Untracked | 0 -| 441|0x00000004e3800000, 0x00000004e4000000, 0x00000004e4000000|100%| O| |TAMS 0x00000004e3800000| PB 0x00000004e3800000| Untracked | 0 -| 442|0x00000004e4000000, 0x00000004e4800000, 0x00000004e4800000|100%| O| |TAMS 0x00000004e4000000| PB 0x00000004e4000000| Untracked | 0 -| 443|0x00000004e4800000, 0x00000004e5000000, 0x00000004e5000000|100%| O| |TAMS 0x00000004e4800000| PB 0x00000004e4800000| Untracked | 0 -| 444|0x00000004e5000000, 0x00000004e5800000, 0x00000004e5800000|100%| O| |TAMS 0x00000004e5000000| PB 0x00000004e5000000| Untracked | 0 -| 445|0x00000004e5800000, 0x00000004e6000000, 0x00000004e6000000|100%| O| |TAMS 0x00000004e5800000| PB 0x00000004e5800000| Untracked | 0 -| 446|0x00000004e6000000, 0x00000004e6800000, 0x00000004e6800000|100%| O| |TAMS 0x00000004e6000000| PB 0x00000004e6000000| Untracked | 0 -| 447|0x00000004e6800000, 0x00000004e7000000, 0x00000004e7000000|100%| O| |TAMS 0x00000004e6800000| PB 0x00000004e6800000| Untracked | 0 -| 448|0x00000004e7000000, 0x00000004e7800000, 0x00000004e7800000|100%| O| |TAMS 0x00000004e7000000| PB 0x00000004e7000000| Untracked | 0 -| 449|0x00000004e7800000, 0x00000004e8000000, 0x00000004e8000000|100%| O| |TAMS 0x00000004e7800000| PB 0x00000004e7800000| Untracked | 0 -| 450|0x00000004e8000000, 0x00000004e8800000, 0x00000004e8800000|100%| O| |TAMS 0x00000004e8000000| PB 0x00000004e8000000| Untracked | 0 -| 451|0x00000004e8800000, 0x00000004e9000000, 0x00000004e9000000|100%| O| |TAMS 0x00000004e8800000| PB 0x00000004e8800000| Untracked | 0 -| 452|0x00000004e9000000, 0x00000004e9800000, 0x00000004e9800000|100%| O| |TAMS 0x00000004e9000000| PB 0x00000004e9000000| Untracked | 0 -| 453|0x00000004e9800000, 0x00000004ea000000, 0x00000004ea000000|100%| O| |TAMS 0x00000004e9800000| PB 0x00000004e9800000| Untracked | 0 -| 454|0x00000004ea000000, 0x00000004ea800000, 0x00000004ea800000|100%| O| |TAMS 0x00000004ea000000| PB 0x00000004ea000000| Untracked | 0 -| 455|0x00000004ea800000, 0x00000004eb000000, 0x00000004eb000000|100%| O| |TAMS 0x00000004ea800000| PB 0x00000004ea800000| Untracked | 0 -| 456|0x00000004eb000000, 0x00000004eb800000, 0x00000004eb800000|100%| O| |TAMS 0x00000004eb000000| PB 0x00000004eb000000| Untracked | 0 -| 457|0x00000004eb800000, 0x00000004ec000000, 0x00000004ec000000|100%| O| |TAMS 0x00000004eb800000| PB 0x00000004eb800000| Untracked | 0 -| 458|0x00000004ec000000, 0x00000004ec800000, 0x00000004ec800000|100%| O| |TAMS 0x00000004ec000000| PB 0x00000004ec000000| Untracked | 0 -| 459|0x00000004ec800000, 0x00000004ed000000, 0x00000004ed000000|100%| O| |TAMS 0x00000004ec800000| PB 0x00000004ec800000| Untracked | 0 -| 460|0x00000004ed000000, 0x00000004ed800000, 0x00000004ed800000|100%| O| |TAMS 0x00000004ed000000| PB 0x00000004ed000000| Untracked | 0 -| 461|0x00000004ed800000, 0x00000004ee000000, 0x00000004ee000000|100%| O| |TAMS 0x00000004ed800000| PB 0x00000004ed800000| Untracked | 0 -| 462|0x00000004ee000000, 0x00000004ee800000, 0x00000004ee800000|100%| O| |TAMS 0x00000004ee000000| PB 0x00000004ee000000| Untracked | 0 -| 463|0x00000004ee800000, 0x00000004ef000000, 0x00000004ef000000|100%| O| |TAMS 0x00000004ee800000| PB 0x00000004ee800000| Untracked | 0 -| 464|0x00000004ef000000, 0x00000004ef800000, 0x00000004ef800000|100%| O| |TAMS 0x00000004ef000000| PB 0x00000004ef000000| Untracked | 0 -| 465|0x00000004ef800000, 0x00000004f0000000, 0x00000004f0000000|100%| O| |TAMS 0x00000004ef800000| PB 0x00000004ef800000| Untracked | 0 -| 466|0x00000004f0000000, 0x00000004f0800000, 0x00000004f0800000|100%| O| |TAMS 0x00000004f0000000| PB 0x00000004f0000000| Untracked | 0 -| 467|0x00000004f0800000, 0x00000004f1000000, 0x00000004f1000000|100%| O| |TAMS 0x00000004f0800000| PB 0x00000004f0800000| Untracked | 0 -| 468|0x00000004f1000000, 0x00000004f1800000, 0x00000004f1800000|100%| O| |TAMS 0x00000004f1000000| PB 0x00000004f1000000| Untracked | 0 -| 469|0x00000004f1800000, 0x00000004f2000000, 0x00000004f2000000|100%| O| |TAMS 0x00000004f1800000| PB 0x00000004f1800000| Untracked | 0 -| 470|0x00000004f2000000, 0x00000004f2800000, 0x00000004f2800000|100%| O| |TAMS 0x00000004f2000000| PB 0x00000004f2000000| Untracked | 0 -| 471|0x00000004f2800000, 0x00000004f3000000, 0x00000004f3000000|100%| O| |TAMS 0x00000004f2800000| PB 0x00000004f2800000| Untracked | 0 -| 472|0x00000004f3000000, 0x00000004f3800000, 0x00000004f3800000|100%| O| |TAMS 0x00000004f3000000| PB 0x00000004f3000000| Untracked | 0 -| 473|0x00000004f3800000, 0x00000004f4000000, 0x00000004f4000000|100%| O| |TAMS 0x00000004f3800000| PB 0x00000004f3800000| Untracked | 0 -| 474|0x00000004f4000000, 0x00000004f4800000, 0x00000004f4800000|100%| O| |TAMS 0x00000004f4000000| PB 0x00000004f4000000| Untracked | 0 -| 475|0x00000004f4800000, 0x00000004f5000000, 0x00000004f5000000|100%| O| |TAMS 0x00000004f4800000| PB 0x00000004f4800000| Untracked | 0 -| 476|0x00000004f5000000, 0x00000004f5800000, 0x00000004f5800000|100%| O| |TAMS 0x00000004f5000000| PB 0x00000004f5000000| Untracked | 0 -| 477|0x00000004f5800000, 0x00000004f6000000, 0x00000004f6000000|100%| O| |TAMS 0x00000004f5800000| PB 0x00000004f5800000| Untracked | 0 -| 478|0x00000004f6000000, 0x00000004f6800000, 0x00000004f6800000|100%| O| |TAMS 0x00000004f6000000| PB 0x00000004f6000000| Untracked | 0 -| 479|0x00000004f6800000, 0x00000004f7000000, 0x00000004f7000000|100%| O| |TAMS 0x00000004f6800000| PB 0x00000004f6800000| Untracked | 0 -| 480|0x00000004f7000000, 0x00000004f7800000, 0x00000004f7800000|100%| O| |TAMS 0x00000004f7000000| PB 0x00000004f7000000| Untracked | 0 -| 481|0x00000004f7800000, 0x00000004f8000000, 0x00000004f8000000|100%| O| |TAMS 0x00000004f7800000| PB 0x00000004f7800000| Untracked | 0 -| 482|0x00000004f8000000, 0x00000004f8800000, 0x00000004f8800000|100%| O| |TAMS 0x00000004f8000000| PB 0x00000004f8000000| Untracked | 0 -| 483|0x00000004f8800000, 0x00000004f9000000, 0x00000004f9000000|100%| O| |TAMS 0x00000004f8800000| PB 0x00000004f8800000| Untracked | 0 -| 484|0x00000004f9000000, 0x00000004f9800000, 0x00000004f9800000|100%| O| |TAMS 0x00000004f9000000| PB 0x00000004f9000000| Untracked | 0 -| 485|0x00000004f9800000, 0x00000004fa000000, 0x00000004fa000000|100%| O| |TAMS 0x00000004f9800000| PB 0x00000004f9800000| Untracked | 0 -| 486|0x00000004fa000000, 0x00000004fa800000, 0x00000004fa800000|100%| O| |TAMS 0x00000004fa000000| PB 0x00000004fa000000| Untracked | 0 -| 487|0x00000004fa800000, 0x00000004fb000000, 0x00000004fb000000|100%| O| |TAMS 0x00000004fa800000| PB 0x00000004fa800000| Untracked | 0 -| 488|0x00000004fb000000, 0x00000004fb800000, 0x00000004fb800000|100%| O| |TAMS 0x00000004fb000000| PB 0x00000004fb000000| Untracked | 0 -| 489|0x00000004fb800000, 0x00000004fc000000, 0x00000004fc000000|100%| O| |TAMS 0x00000004fb800000| PB 0x00000004fb800000| Untracked | 0 -| 490|0x00000004fc000000, 0x00000004fc800000, 0x00000004fc800000|100%| O| |TAMS 0x00000004fc000000| PB 0x00000004fc000000| Untracked | 0 -| 491|0x00000004fc800000, 0x00000004fd000000, 0x00000004fd000000|100%| O| |TAMS 0x00000004fc800000| PB 0x00000004fc800000| Untracked | 0 -| 492|0x00000004fd000000, 0x00000004fd800000, 0x00000004fd800000|100%| O| |TAMS 0x00000004fd000000| PB 0x00000004fd000000| Untracked | 0 -| 493|0x00000004fd800000, 0x00000004fe000000, 0x00000004fe000000|100%| O| |TAMS 0x00000004fd800000| PB 0x00000004fd800000| Untracked | 0 -| 494|0x00000004fe000000, 0x00000004fe800000, 0x00000004fe800000|100%| O| |TAMS 0x00000004fe000000| PB 0x00000004fe000000| Untracked | 0 -| 495|0x00000004fe800000, 0x00000004ff000000, 0x00000004ff000000|100%| O| |TAMS 0x00000004fe800000| PB 0x00000004fe800000| Untracked | 0 -| 496|0x00000004ff000000, 0x00000004ff800000, 0x00000004ff800000|100%| O| |TAMS 0x00000004ff000000| PB 0x00000004ff000000| Untracked | 0 -| 497|0x00000004ff800000, 0x0000000500000000, 0x0000000500000000|100%| O| |TAMS 0x00000004ff800000| PB 0x00000004ff800000| Untracked | 0 -| 498|0x0000000500000000, 0x0000000500800000, 0x0000000500800000|100%| O| |TAMS 0x0000000500000000| PB 0x0000000500000000| Untracked | 0 -| 499|0x0000000500800000, 0x0000000501000000, 0x0000000501000000|100%| O| |TAMS 0x0000000500800000| PB 0x0000000500800000| Untracked | 0 -| 500|0x0000000501000000, 0x0000000501800000, 0x0000000501800000|100%| O| |TAMS 0x0000000501000000| PB 0x0000000501000000| Untracked | 0 -| 501|0x0000000501800000, 0x0000000502000000, 0x0000000502000000|100%| O| |TAMS 0x0000000501800000| PB 0x0000000501800000| Untracked | 0 -| 502|0x0000000502000000, 0x0000000502800000, 0x0000000502800000|100%| O| |TAMS 0x0000000502000000| PB 0x0000000502000000| Untracked | 0 -| 503|0x0000000502800000, 0x0000000503000000, 0x0000000503000000|100%| O| |TAMS 0x0000000502800000| PB 0x0000000502800000| Untracked | 0 -| 504|0x0000000503000000, 0x0000000503800000, 0x0000000503800000|100%| O| |TAMS 0x0000000503000000| PB 0x0000000503000000| Untracked | 0 -| 505|0x0000000503800000, 0x0000000504000000, 0x0000000504000000|100%| O| |TAMS 0x0000000503800000| PB 0x0000000503800000| Untracked | 0 -| 506|0x0000000504000000, 0x0000000504800000, 0x0000000504800000|100%| O| |TAMS 0x0000000504000000| PB 0x0000000504000000| Untracked | 0 -| 507|0x0000000504800000, 0x0000000505000000, 0x0000000505000000|100%| O| |TAMS 0x0000000504800000| PB 0x0000000504800000| Untracked | 0 -| 508|0x0000000505000000, 0x0000000505800000, 0x0000000505800000|100%| O| |TAMS 0x0000000505000000| PB 0x0000000505000000| Untracked | 0 -| 509|0x0000000505800000, 0x0000000506000000, 0x0000000506000000|100%| O| |TAMS 0x0000000505800000| PB 0x0000000505800000| Untracked | 0 -| 510|0x0000000506000000, 0x0000000506800000, 0x0000000506800000|100%| O| |TAMS 0x0000000506000000| PB 0x0000000506000000| Untracked | 0 -| 511|0x0000000506800000, 0x0000000507000000, 0x0000000507000000|100%| O| |TAMS 0x0000000506800000| PB 0x0000000506800000| Untracked | 0 -| 512|0x0000000507000000, 0x0000000507800000, 0x0000000507800000|100%| O| |TAMS 0x0000000507000000| PB 0x0000000507000000| Untracked | 0 -| 513|0x0000000507800000, 0x0000000508000000, 0x0000000508000000|100%| O| |TAMS 0x0000000507800000| PB 0x0000000507800000| Untracked | 0 -| 514|0x0000000508000000, 0x0000000508800000, 0x0000000508800000|100%| O| |TAMS 0x0000000508000000| PB 0x0000000508000000| Untracked | 0 -| 515|0x0000000508800000, 0x0000000509000000, 0x0000000509000000|100%| O| |TAMS 0x0000000508800000| PB 0x0000000508800000| Untracked | 0 -| 516|0x0000000509000000, 0x0000000509800000, 0x0000000509800000|100%| O| |TAMS 0x0000000509000000| PB 0x0000000509000000| Untracked | 0 -| 517|0x0000000509800000, 0x000000050a000000, 0x000000050a000000|100%| O| |TAMS 0x0000000509800000| PB 0x0000000509800000| Untracked | 0 -| 518|0x000000050a000000, 0x000000050a800000, 0x000000050a800000|100%| O| |TAMS 0x000000050a000000| PB 0x000000050a000000| Untracked | 0 -| 519|0x000000050a800000, 0x000000050b000000, 0x000000050b000000|100%| O| |TAMS 0x000000050a800000| PB 0x000000050a800000| Untracked | 0 -| 520|0x000000050b000000, 0x000000050b7b5480, 0x000000050b800000| 96%| O| |TAMS 0x000000050b000000| PB 0x000000050b000000| Untracked | 0 -| 521|0x000000050b800000, 0x000000050b800000, 0x000000050c000000| 0%| F| |TAMS 0x000000050b800000| PB 0x000000050b800000| Untracked | 0 -| 522|0x000000050c000000, 0x000000050c000000, 0x000000050c800000| 0%| F| |TAMS 0x000000050c000000| PB 0x000000050c000000| Untracked | 0 -| 523|0x000000050c800000, 0x000000050c800000, 0x000000050d000000| 0%| F| |TAMS 0x000000050c800000| PB 0x000000050c800000| Untracked | 0 -| 524|0x000000050d000000, 0x000000050d000000, 0x000000050d800000| 0%| F| |TAMS 0x000000050d000000| PB 0x000000050d000000| Untracked | 0 -| 525|0x000000050d800000, 0x000000050d800000, 0x000000050e000000| 0%| F| |TAMS 0x000000050d800000| PB 0x000000050d800000| Untracked | 0 -| 526|0x000000050e000000, 0x000000050e000000, 0x000000050e800000| 0%| F| |TAMS 0x000000050e000000| PB 0x000000050e000000| Untracked | 0 -| 527|0x000000050e800000, 0x000000050e800000, 0x000000050f000000| 0%| F| |TAMS 0x000000050e800000| PB 0x000000050e800000| Untracked | 0 -| 528|0x000000050f000000, 0x000000050f000000, 0x000000050f800000| 0%| F| |TAMS 0x000000050f000000| PB 0x000000050f000000| Untracked | 0 -| 529|0x000000050f800000, 0x000000050f800000, 0x0000000510000000| 0%| F| |TAMS 0x000000050f800000| PB 0x000000050f800000| Untracked | 0 -| 530|0x0000000510000000, 0x0000000510000000, 0x0000000510800000| 0%| F| |TAMS 0x0000000510000000| PB 0x0000000510000000| Untracked | 0 -| 531|0x0000000510800000, 0x0000000510800000, 0x0000000511000000| 0%| F| |TAMS 0x0000000510800000| PB 0x0000000510800000| Untracked | 0 -| 532|0x0000000511000000, 0x0000000511000000, 0x0000000511800000| 0%| F| |TAMS 0x0000000511000000| PB 0x0000000511000000| Untracked | 0 -| 533|0x0000000511800000, 0x0000000511800000, 0x0000000512000000| 0%| F| |TAMS 0x0000000511800000| PB 0x0000000511800000| Untracked | 0 -| 534|0x0000000512000000, 0x0000000512000000, 0x0000000512800000| 0%| F| |TAMS 0x0000000512000000| PB 0x0000000512000000| Untracked | 0 -| 535|0x0000000512800000, 0x0000000512800000, 0x0000000513000000| 0%| F| |TAMS 0x0000000512800000| PB 0x0000000512800000| Untracked | 0 -| 536|0x0000000513000000, 0x0000000513000000, 0x0000000513800000| 0%| F| |TAMS 0x0000000513000000| PB 0x0000000513000000| Untracked | 0 -| 537|0x0000000513800000, 0x0000000513800000, 0x0000000514000000| 0%| F| |TAMS 0x0000000513800000| PB 0x0000000513800000| Untracked | 0 -| 538|0x0000000514000000, 0x0000000514000000, 0x0000000514800000| 0%| F| |TAMS 0x0000000514000000| PB 0x0000000514000000| Untracked | 0 -| 539|0x0000000514800000, 0x0000000514800000, 0x0000000515000000| 0%| F| |TAMS 0x0000000514800000| PB 0x0000000514800000| Untracked | 0 -| 540|0x0000000515000000, 0x0000000515000000, 0x0000000515800000| 0%| F| |TAMS 0x0000000515000000| PB 0x0000000515000000| Untracked | 0 -| 541|0x0000000515800000, 0x0000000515800000, 0x0000000516000000| 0%| F| |TAMS 0x0000000515800000| PB 0x0000000515800000| Untracked | 0 -| 542|0x0000000516000000, 0x0000000516000000, 0x0000000516800000| 0%| F| |TAMS 0x0000000516000000| PB 0x0000000516000000| Untracked | 0 -| 543|0x0000000516800000, 0x0000000516800000, 0x0000000517000000| 0%| F| |TAMS 0x0000000516800000| PB 0x0000000516800000| Untracked | 0 -| 544|0x0000000517000000, 0x0000000517000000, 0x0000000517800000| 0%| F| |TAMS 0x0000000517000000| PB 0x0000000517000000| Untracked | 0 -| 545|0x0000000517800000, 0x0000000517800000, 0x0000000518000000| 0%| F| |TAMS 0x0000000517800000| PB 0x0000000517800000| Untracked | 0 -| 546|0x0000000518000000, 0x0000000518000000, 0x0000000518800000| 0%| F| |TAMS 0x0000000518000000| PB 0x0000000518000000| Untracked | 0 -| 547|0x0000000518800000, 0x0000000518800000, 0x0000000519000000| 0%| F| |TAMS 0x0000000518800000| PB 0x0000000518800000| Untracked | 0 -| 548|0x0000000519000000, 0x0000000519000000, 0x0000000519800000| 0%| F| |TAMS 0x0000000519000000| PB 0x0000000519000000| Untracked | 0 -| 549|0x0000000519800000, 0x0000000519800000, 0x000000051a000000| 0%| F| |TAMS 0x0000000519800000| PB 0x0000000519800000| Untracked | 0 -| 550|0x000000051a000000, 0x000000051a000000, 0x000000051a800000| 0%| F| |TAMS 0x000000051a000000| PB 0x000000051a000000| Untracked | 0 -| 551|0x000000051a800000, 0x000000051a800000, 0x000000051b000000| 0%| F| |TAMS 0x000000051a800000| PB 0x000000051a800000| Untracked | 0 -| 552|0x000000051b000000, 0x000000051b000000, 0x000000051b800000| 0%| F| |TAMS 0x000000051b000000| PB 0x000000051b000000| Untracked | 0 -| 553|0x000000051b800000, 0x000000051b800000, 0x000000051c000000| 0%| F| |TAMS 0x000000051b800000| PB 0x000000051b800000| Untracked | 0 -| 554|0x000000051c000000, 0x000000051c000000, 0x000000051c800000| 0%| F| |TAMS 0x000000051c000000| PB 0x000000051c000000| Untracked | 0 -| 555|0x000000051c800000, 0x000000051c800000, 0x000000051d000000| 0%| F| |TAMS 0x000000051c800000| PB 0x000000051c800000| Untracked | 0 -| 556|0x000000051d000000, 0x000000051d000000, 0x000000051d800000| 0%| F| |TAMS 0x000000051d000000| PB 0x000000051d000000| Untracked | 0 -| 557|0x000000051d800000, 0x000000051d800000, 0x000000051e000000| 0%| F| |TAMS 0x000000051d800000| PB 0x000000051d800000| Untracked | 0 -| 558|0x000000051e000000, 0x000000051e000000, 0x000000051e800000| 0%| F| |TAMS 0x000000051e000000| PB 0x000000051e000000| Untracked | 0 -| 559|0x000000051e800000, 0x000000051e800000, 0x000000051f000000| 0%| F| |TAMS 0x000000051e800000| PB 0x000000051e800000| Untracked | 0 -| 560|0x000000051f000000, 0x000000051f000000, 0x000000051f800000| 0%| F| |TAMS 0x000000051f000000| PB 0x000000051f000000| Untracked | 0 -| 561|0x000000051f800000, 0x000000051f800000, 0x0000000520000000| 0%| F| |TAMS 0x000000051f800000| PB 0x000000051f800000| Untracked | 0 -| 562|0x0000000520000000, 0x0000000520000000, 0x0000000520800000| 0%| F| |TAMS 0x0000000520000000| PB 0x0000000520000000| Untracked | 0 -| 563|0x0000000520800000, 0x0000000520800000, 0x0000000521000000| 0%| F| |TAMS 0x0000000520800000| PB 0x0000000520800000| Untracked | 0 -| 564|0x0000000521000000, 0x0000000521000000, 0x0000000521800000| 0%| F| |TAMS 0x0000000521000000| PB 0x0000000521000000| Untracked | 0 -| 565|0x0000000521800000, 0x0000000521800000, 0x0000000522000000| 0%| F| |TAMS 0x0000000521800000| PB 0x0000000521800000| Untracked | 0 -| 566|0x0000000522000000, 0x0000000522000000, 0x0000000522800000| 0%| F| |TAMS 0x0000000522000000| PB 0x0000000522000000| Untracked | 0 -| 567|0x0000000522800000, 0x0000000522800000, 0x0000000523000000| 0%| F| |TAMS 0x0000000522800000| PB 0x0000000522800000| Untracked | 0 -| 568|0x0000000523000000, 0x0000000523000000, 0x0000000523800000| 0%| F| |TAMS 0x0000000523000000| PB 0x0000000523000000| Untracked | 0 -| 569|0x0000000523800000, 0x0000000523800000, 0x0000000524000000| 0%| F| |TAMS 0x0000000523800000| PB 0x0000000523800000| Untracked | 0 -| 570|0x0000000524000000, 0x0000000524000000, 0x0000000524800000| 0%| F| |TAMS 0x0000000524000000| PB 0x0000000524000000| Untracked | 0 -| 571|0x0000000524800000, 0x0000000524800000, 0x0000000525000000| 0%| F| |TAMS 0x0000000524800000| PB 0x0000000524800000| Untracked | 0 -| 572|0x0000000525000000, 0x0000000525000000, 0x0000000525800000| 0%| F| |TAMS 0x0000000525000000| PB 0x0000000525000000| Untracked | 0 -| 573|0x0000000525800000, 0x0000000525800000, 0x0000000526000000| 0%| F| |TAMS 0x0000000525800000| PB 0x0000000525800000| Untracked | 0 -| 574|0x0000000526000000, 0x0000000526000000, 0x0000000526800000| 0%| F| |TAMS 0x0000000526000000| PB 0x0000000526000000| Untracked | 0 -| 575|0x0000000526800000, 0x0000000526800000, 0x0000000527000000| 0%| F| |TAMS 0x0000000526800000| PB 0x0000000526800000| Untracked | 0 -| 576|0x0000000527000000, 0x0000000527000000, 0x0000000527800000| 0%| F| |TAMS 0x0000000527000000| PB 0x0000000527000000| Untracked | 0 -| 577|0x0000000527800000, 0x0000000527800000, 0x0000000528000000| 0%| F| |TAMS 0x0000000527800000| PB 0x0000000527800000| Untracked | 0 -| 578|0x0000000528000000, 0x0000000528000000, 0x0000000528800000| 0%| F| |TAMS 0x0000000528000000| PB 0x0000000528000000| Untracked | 0 -| 579|0x0000000528800000, 0x0000000528800000, 0x0000000529000000| 0%| F| |TAMS 0x0000000528800000| PB 0x0000000528800000| Untracked | 0 -| 580|0x0000000529000000, 0x0000000529000000, 0x0000000529800000| 0%| F| |TAMS 0x0000000529000000| PB 0x0000000529000000| Untracked | 0 -| 581|0x0000000529800000, 0x0000000529800000, 0x000000052a000000| 0%| F| |TAMS 0x0000000529800000| PB 0x0000000529800000| Untracked | 0 -| 582|0x000000052a000000, 0x000000052a000000, 0x000000052a800000| 0%| F| |TAMS 0x000000052a000000| PB 0x000000052a000000| Untracked | 0 -| 583|0x000000052a800000, 0x000000052a800000, 0x000000052b000000| 0%| F| |TAMS 0x000000052a800000| PB 0x000000052a800000| Untracked | 0 -| 584|0x000000052b000000, 0x000000052b000000, 0x000000052b800000| 0%| F| |TAMS 0x000000052b000000| PB 0x000000052b000000| Untracked | 0 -| 585|0x000000052b800000, 0x000000052b800000, 0x000000052c000000| 0%| F| |TAMS 0x000000052b800000| PB 0x000000052b800000| Untracked | 0 -| 586|0x000000052c000000, 0x000000052c000000, 0x000000052c800000| 0%| F| |TAMS 0x000000052c000000| PB 0x000000052c000000| Untracked | 0 -| 587|0x000000052c800000, 0x000000052c800000, 0x000000052d000000| 0%| F| |TAMS 0x000000052c800000| PB 0x000000052c800000| Untracked | 0 -| 588|0x000000052d000000, 0x000000052d000000, 0x000000052d800000| 0%| F| |TAMS 0x000000052d000000| PB 0x000000052d000000| Untracked | 0 -| 589|0x000000052d800000, 0x000000052d800000, 0x000000052e000000| 0%| F| |TAMS 0x000000052d800000| PB 0x000000052d800000| Untracked | 0 -| 590|0x000000052e000000, 0x000000052e000000, 0x000000052e800000| 0%| F| |TAMS 0x000000052e000000| PB 0x000000052e000000| Untracked | 0 -| 591|0x000000052e800000, 0x000000052e800000, 0x000000052f000000| 0%| F| |TAMS 0x000000052e800000| PB 0x000000052e800000| Untracked | 0 -| 592|0x000000052f000000, 0x000000052f000000, 0x000000052f800000| 0%| F| |TAMS 0x000000052f000000| PB 0x000000052f000000| Untracked | 0 -| 593|0x000000052f800000, 0x000000052f800000, 0x0000000530000000| 0%| F| |TAMS 0x000000052f800000| PB 0x000000052f800000| Untracked | 0 -| 594|0x0000000530000000, 0x0000000530000000, 0x0000000530800000| 0%| F| |TAMS 0x0000000530000000| PB 0x0000000530000000| Untracked | 0 -| 595|0x0000000530800000, 0x0000000530800000, 0x0000000531000000| 0%| F| |TAMS 0x0000000530800000| PB 0x0000000530800000| Untracked | 0 -| 596|0x0000000531000000, 0x0000000531000000, 0x0000000531800000| 0%| F| |TAMS 0x0000000531000000| PB 0x0000000531000000| Untracked | 0 -| 597|0x0000000531800000, 0x0000000531800000, 0x0000000532000000| 0%| F| |TAMS 0x0000000531800000| PB 0x0000000531800000| Untracked | 0 -| 598|0x0000000532000000, 0x0000000532000000, 0x0000000532800000| 0%| F| |TAMS 0x0000000532000000| PB 0x0000000532000000| Untracked | 0 -| 599|0x0000000532800000, 0x0000000532800000, 0x0000000533000000| 0%| F| |TAMS 0x0000000532800000| PB 0x0000000532800000| Untracked | 0 -| 600|0x0000000533000000, 0x0000000533000000, 0x0000000533800000| 0%| F| |TAMS 0x0000000533000000| PB 0x0000000533000000| Untracked | 0 -| 601|0x0000000533800000, 0x0000000533800000, 0x0000000534000000| 0%| F| |TAMS 0x0000000533800000| PB 0x0000000533800000| Untracked | 0 -| 602|0x0000000534000000, 0x0000000534000000, 0x0000000534800000| 0%| F| |TAMS 0x0000000534000000| PB 0x0000000534000000| Untracked | 0 -| 603|0x0000000534800000, 0x0000000534800000, 0x0000000535000000| 0%| F| |TAMS 0x0000000534800000| PB 0x0000000534800000| Untracked | 0 -| 604|0x0000000535000000, 0x0000000535000000, 0x0000000535800000| 0%| F| |TAMS 0x0000000535000000| PB 0x0000000535000000| Untracked | 0 -| 605|0x0000000535800000, 0x0000000535800000, 0x0000000536000000| 0%| F| |TAMS 0x0000000535800000| PB 0x0000000535800000| Untracked | 0 -| 606|0x0000000536000000, 0x0000000536000000, 0x0000000536800000| 0%| F| |TAMS 0x0000000536000000| PB 0x0000000536000000| Untracked | 0 -| 607|0x0000000536800000, 0x0000000536800000, 0x0000000537000000| 0%| F| |TAMS 0x0000000536800000| PB 0x0000000536800000| Untracked | 0 -| 608|0x0000000537000000, 0x0000000537000000, 0x0000000537800000| 0%| F| |TAMS 0x0000000537000000| PB 0x0000000537000000| Untracked | 0 -| 609|0x0000000537800000, 0x0000000537800000, 0x0000000538000000| 0%| F| |TAMS 0x0000000537800000| PB 0x0000000537800000| Untracked | 0 -| 610|0x0000000538000000, 0x0000000538000000, 0x0000000538800000| 0%| F| |TAMS 0x0000000538000000| PB 0x0000000538000000| Untracked | 0 -| 611|0x0000000538800000, 0x0000000538800000, 0x0000000539000000| 0%| F| |TAMS 0x0000000538800000| PB 0x0000000538800000| Untracked | 0 -| 612|0x0000000539000000, 0x0000000539000000, 0x0000000539800000| 0%| F| |TAMS 0x0000000539000000| PB 0x0000000539000000| Untracked | 0 -| 613|0x0000000539800000, 0x0000000539800000, 0x000000053a000000| 0%| F| |TAMS 0x0000000539800000| PB 0x0000000539800000| Untracked | 0 -| 614|0x000000053a000000, 0x000000053a000000, 0x000000053a800000| 0%| F| |TAMS 0x000000053a000000| PB 0x000000053a000000| Untracked | 0 -| 615|0x000000053a800000, 0x000000053a800000, 0x000000053b000000| 0%| F| |TAMS 0x000000053a800000| PB 0x000000053a800000| Untracked | 0 -| 616|0x000000053b000000, 0x000000053b000000, 0x000000053b800000| 0%| F| |TAMS 0x000000053b000000| PB 0x000000053b000000| Untracked | 0 -| 617|0x000000053b800000, 0x000000053b800000, 0x000000053c000000| 0%| F| |TAMS 0x000000053b800000| PB 0x000000053b800000| Untracked | 0 -| 618|0x000000053c000000, 0x000000053c000000, 0x000000053c800000| 0%| F| |TAMS 0x000000053c000000| PB 0x000000053c000000| Untracked | 0 -| 619|0x000000053c800000, 0x000000053c800000, 0x000000053d000000| 0%| F| |TAMS 0x000000053c800000| PB 0x000000053c800000| Untracked | 0 -| 620|0x000000053d000000, 0x000000053d000000, 0x000000053d800000| 0%| F| |TAMS 0x000000053d000000| PB 0x000000053d000000| Untracked | 0 -| 621|0x000000053d800000, 0x000000053d800000, 0x000000053e000000| 0%| F| |TAMS 0x000000053d800000| PB 0x000000053d800000| Untracked | 0 -| 622|0x000000053e000000, 0x000000053e000000, 0x000000053e800000| 0%| F| |TAMS 0x000000053e000000| PB 0x000000053e000000| Untracked | 0 -| 623|0x000000053e800000, 0x000000053e800000, 0x000000053f000000| 0%| F| |TAMS 0x000000053e800000| PB 0x000000053e800000| Untracked | 0 -| 624|0x000000053f000000, 0x000000053f000000, 0x000000053f800000| 0%| F| |TAMS 0x000000053f000000| PB 0x000000053f000000| Untracked | 0 -| 625|0x000000053f800000, 0x000000053f800000, 0x0000000540000000| 0%| F| |TAMS 0x000000053f800000| PB 0x000000053f800000| Untracked | 0 -| 626|0x0000000540000000, 0x0000000540000000, 0x0000000540800000| 0%| F| |TAMS 0x0000000540000000| PB 0x0000000540000000| Untracked | 0 -| 627|0x0000000540800000, 0x0000000540800000, 0x0000000541000000| 0%| F| |TAMS 0x0000000540800000| PB 0x0000000540800000| Untracked | 0 -| 628|0x0000000541000000, 0x0000000541000000, 0x0000000541800000| 0%| F| |TAMS 0x0000000541000000| PB 0x0000000541000000| Untracked | 0 -| 629|0x0000000541800000, 0x0000000541800000, 0x0000000542000000| 0%| F| |TAMS 0x0000000541800000| PB 0x0000000541800000| Untracked | 0 -| 630|0x0000000542000000, 0x0000000542000000, 0x0000000542800000| 0%| F| |TAMS 0x0000000542000000| PB 0x0000000542000000| Untracked | 0 -| 631|0x0000000542800000, 0x0000000542800000, 0x0000000543000000| 0%| F| |TAMS 0x0000000542800000| PB 0x0000000542800000| Untracked | 0 -| 632|0x0000000543000000, 0x0000000543000000, 0x0000000543800000| 0%| F| |TAMS 0x0000000543000000| PB 0x0000000543000000| Untracked | 0 -| 633|0x0000000543800000, 0x0000000543800000, 0x0000000544000000| 0%| F| |TAMS 0x0000000543800000| PB 0x0000000543800000| Untracked | 0 -| 634|0x0000000544000000, 0x0000000544000000, 0x0000000544800000| 0%| F| |TAMS 0x0000000544000000| PB 0x0000000544000000| Untracked | 0 -| 635|0x0000000544800000, 0x0000000544800000, 0x0000000545000000| 0%| F| |TAMS 0x0000000544800000| PB 0x0000000544800000| Untracked | 0 -| 636|0x0000000545000000, 0x0000000545000000, 0x0000000545800000| 0%| F| |TAMS 0x0000000545000000| PB 0x0000000545000000| Untracked | 0 -| 637|0x0000000545800000, 0x0000000545800000, 0x0000000546000000| 0%| F| |TAMS 0x0000000545800000| PB 0x0000000545800000| Untracked | 0 -| 638|0x0000000546000000, 0x0000000546000000, 0x0000000546800000| 0%| F| |TAMS 0x0000000546000000| PB 0x0000000546000000| Untracked | 0 -| 639|0x0000000546800000, 0x0000000546800000, 0x0000000547000000| 0%| F| |TAMS 0x0000000546800000| PB 0x0000000546800000| Untracked | 0 -| 640|0x0000000547000000, 0x0000000547000000, 0x0000000547800000| 0%| F| |TAMS 0x0000000547000000| PB 0x0000000547000000| Untracked | 0 -| 641|0x0000000547800000, 0x0000000547800000, 0x0000000548000000| 0%| F| |TAMS 0x0000000547800000| PB 0x0000000547800000| Untracked | 0 -| 642|0x0000000548000000, 0x0000000548000000, 0x0000000548800000| 0%| F| |TAMS 0x0000000548000000| PB 0x0000000548000000| Untracked | 0 -| 643|0x0000000548800000, 0x0000000548800000, 0x0000000549000000| 0%| F| |TAMS 0x0000000548800000| PB 0x0000000548800000| Untracked | 0 -| 644|0x0000000549000000, 0x0000000549000000, 0x0000000549800000| 0%| F| |TAMS 0x0000000549000000| PB 0x0000000549000000| Untracked | 0 -| 645|0x0000000549800000, 0x0000000549800000, 0x000000054a000000| 0%| F| |TAMS 0x0000000549800000| PB 0x0000000549800000| Untracked | 0 -| 646|0x000000054a000000, 0x000000054a000000, 0x000000054a800000| 0%| F| |TAMS 0x000000054a000000| PB 0x000000054a000000| Untracked | 0 -| 647|0x000000054a800000, 0x000000054a800000, 0x000000054b000000| 0%| F| |TAMS 0x000000054a800000| PB 0x000000054a800000| Untracked | 0 -| 648|0x000000054b000000, 0x000000054b000000, 0x000000054b800000| 0%| F| |TAMS 0x000000054b000000| PB 0x000000054b000000| Untracked | 0 -| 649|0x000000054b800000, 0x000000054b800000, 0x000000054c000000| 0%| F| |TAMS 0x000000054b800000| PB 0x000000054b800000| Untracked | 0 -| 650|0x000000054c000000, 0x000000054c000000, 0x000000054c800000| 0%| F| |TAMS 0x000000054c000000| PB 0x000000054c000000| Untracked | 0 -| 651|0x000000054c800000, 0x000000054c800000, 0x000000054d000000| 0%| F| |TAMS 0x000000054c800000| PB 0x000000054c800000| Untracked | 0 -| 652|0x000000054d000000, 0x000000054d000000, 0x000000054d800000| 0%| F| |TAMS 0x000000054d000000| PB 0x000000054d000000| Untracked | 0 -| 653|0x000000054d800000, 0x000000054d800000, 0x000000054e000000| 0%| F| |TAMS 0x000000054d800000| PB 0x000000054d800000| Untracked | 0 -| 654|0x000000054e000000, 0x000000054e000000, 0x000000054e800000| 0%| F| |TAMS 0x000000054e000000| PB 0x000000054e000000| Untracked | 0 -| 655|0x000000054e800000, 0x000000054e800000, 0x000000054f000000| 0%| F| |TAMS 0x000000054e800000| PB 0x000000054e800000| Untracked | 0 -| 656|0x000000054f000000, 0x000000054f000000, 0x000000054f800000| 0%| F| |TAMS 0x000000054f000000| PB 0x000000054f000000| Untracked | 0 -| 657|0x000000054f800000, 0x000000054f800000, 0x0000000550000000| 0%| F| |TAMS 0x000000054f800000| PB 0x000000054f800000| Untracked | 0 -| 658|0x0000000550000000, 0x0000000550000000, 0x0000000550800000| 0%| F| |TAMS 0x0000000550000000| PB 0x0000000550000000| Untracked | 0 -| 659|0x0000000550800000, 0x0000000550800000, 0x0000000551000000| 0%| F| |TAMS 0x0000000550800000| PB 0x0000000550800000| Untracked | 0 -| 660|0x0000000551000000, 0x0000000551000000, 0x0000000551800000| 0%| F| |TAMS 0x0000000551000000| PB 0x0000000551000000| Untracked | 0 -| 661|0x0000000551800000, 0x0000000551800000, 0x0000000552000000| 0%| F| |TAMS 0x0000000551800000| PB 0x0000000551800000| Untracked | 0 -| 662|0x0000000552000000, 0x0000000552000000, 0x0000000552800000| 0%| F| |TAMS 0x0000000552000000| PB 0x0000000552000000| Untracked | 0 -| 663|0x0000000552800000, 0x0000000552800000, 0x0000000553000000| 0%| F| |TAMS 0x0000000552800000| PB 0x0000000552800000| Untracked | 0 -| 664|0x0000000553000000, 0x0000000553000000, 0x0000000553800000| 0%| F| |TAMS 0x0000000553000000| PB 0x0000000553000000| Untracked | 0 -| 665|0x0000000553800000, 0x0000000553800000, 0x0000000554000000| 0%| F| |TAMS 0x0000000553800000| PB 0x0000000553800000| Untracked | 0 -| 666|0x0000000554000000, 0x0000000554000000, 0x0000000554800000| 0%| F| |TAMS 0x0000000554000000| PB 0x0000000554000000| Untracked | 0 -| 667|0x0000000554800000, 0x0000000554800000, 0x0000000555000000| 0%| F| |TAMS 0x0000000554800000| PB 0x0000000554800000| Untracked | 0 -| 668|0x0000000555000000, 0x0000000555000000, 0x0000000555800000| 0%| F| |TAMS 0x0000000555000000| PB 0x0000000555000000| Untracked | 0 -| 669|0x0000000555800000, 0x0000000555800000, 0x0000000556000000| 0%| F| |TAMS 0x0000000555800000| PB 0x0000000555800000| Untracked | 0 -| 670|0x0000000556000000, 0x0000000556000000, 0x0000000556800000| 0%| F| |TAMS 0x0000000556000000| PB 0x0000000556000000| Untracked | 0 -| 671|0x0000000556800000, 0x0000000556800000, 0x0000000557000000| 0%| F| |TAMS 0x0000000556800000| PB 0x0000000556800000| Untracked | 0 -| 672|0x0000000557000000, 0x0000000557000000, 0x0000000557800000| 0%| F| |TAMS 0x0000000557000000| PB 0x0000000557000000| Untracked | 0 -| 673|0x0000000557800000, 0x0000000557800000, 0x0000000558000000| 0%| F| |TAMS 0x0000000557800000| PB 0x0000000557800000| Untracked | 0 -| 674|0x0000000558000000, 0x0000000558000000, 0x0000000558800000| 0%| F| |TAMS 0x0000000558000000| PB 0x0000000558000000| Untracked | 0 -| 675|0x0000000558800000, 0x0000000558800000, 0x0000000559000000| 0%| F| |TAMS 0x0000000558800000| PB 0x0000000558800000| Untracked | 0 -| 676|0x0000000559000000, 0x0000000559000000, 0x0000000559800000| 0%| F| |TAMS 0x0000000559000000| PB 0x0000000559000000| Untracked | 0 -| 677|0x0000000559800000, 0x0000000559800000, 0x000000055a000000| 0%| F| |TAMS 0x0000000559800000| PB 0x0000000559800000| Untracked | 0 -| 678|0x000000055a000000, 0x000000055a000000, 0x000000055a800000| 0%| F| |TAMS 0x000000055a000000| PB 0x000000055a000000| Untracked | 0 -| 679|0x000000055a800000, 0x000000055a800000, 0x000000055b000000| 0%| F| |TAMS 0x000000055a800000| PB 0x000000055a800000| Untracked | 0 -| 680|0x000000055b000000, 0x000000055b000000, 0x000000055b800000| 0%| F| |TAMS 0x000000055b000000| PB 0x000000055b000000| Untracked | 0 -| 681|0x000000055b800000, 0x000000055b800000, 0x000000055c000000| 0%| F| |TAMS 0x000000055b800000| PB 0x000000055b800000| Untracked | 0 -| 682|0x000000055c000000, 0x000000055c000000, 0x000000055c800000| 0%| F| |TAMS 0x000000055c000000| PB 0x000000055c000000| Untracked | 0 -| 683|0x000000055c800000, 0x000000055c800000, 0x000000055d000000| 0%| F| |TAMS 0x000000055c800000| PB 0x000000055c800000| Untracked | 0 -| 684|0x000000055d000000, 0x000000055d000000, 0x000000055d800000| 0%| F| |TAMS 0x000000055d000000| PB 0x000000055d000000| Untracked | 0 -| 685|0x000000055d800000, 0x000000055d800000, 0x000000055e000000| 0%| F| |TAMS 0x000000055d800000| PB 0x000000055d800000| Untracked | 0 -| 686|0x000000055e000000, 0x000000055e000000, 0x000000055e800000| 0%| F| |TAMS 0x000000055e000000| PB 0x000000055e000000| Untracked | 0 -| 687|0x000000055e800000, 0x000000055e800000, 0x000000055f000000| 0%| F| |TAMS 0x000000055e800000| PB 0x000000055e800000| Untracked | 0 -| 688|0x000000055f000000, 0x000000055f000000, 0x000000055f800000| 0%| F| |TAMS 0x000000055f000000| PB 0x000000055f000000| Untracked | 0 -| 689|0x000000055f800000, 0x000000055f800000, 0x0000000560000000| 0%| F| |TAMS 0x000000055f800000| PB 0x000000055f800000| Untracked | 0 -| 690|0x0000000560000000, 0x0000000560000000, 0x0000000560800000| 0%| F| |TAMS 0x0000000560000000| PB 0x0000000560000000| Untracked | 0 -| 691|0x0000000560800000, 0x0000000560800000, 0x0000000561000000| 0%| F| |TAMS 0x0000000560800000| PB 0x0000000560800000| Untracked | 0 -| 692|0x0000000561000000, 0x0000000561000000, 0x0000000561800000| 0%| F| |TAMS 0x0000000561000000| PB 0x0000000561000000| Untracked | 0 -| 693|0x0000000561800000, 0x0000000561800000, 0x0000000562000000| 0%| F| |TAMS 0x0000000561800000| PB 0x0000000561800000| Untracked | 0 -| 694|0x0000000562000000, 0x0000000562000000, 0x0000000562800000| 0%| F| |TAMS 0x0000000562000000| PB 0x0000000562000000| Untracked | 0 -| 695|0x0000000562800000, 0x0000000562800000, 0x0000000563000000| 0%| F| |TAMS 0x0000000562800000| PB 0x0000000562800000| Untracked | 0 -| 696|0x0000000563000000, 0x0000000563000000, 0x0000000563800000| 0%| F| |TAMS 0x0000000563000000| PB 0x0000000563000000| Untracked | 0 -| 697|0x0000000563800000, 0x0000000563800000, 0x0000000564000000| 0%| F| |TAMS 0x0000000563800000| PB 0x0000000563800000| Untracked | 0 -| 698|0x0000000564000000, 0x0000000564000000, 0x0000000564800000| 0%| F| |TAMS 0x0000000564000000| PB 0x0000000564000000| Untracked | 0 -| 699|0x0000000564800000, 0x0000000564800000, 0x0000000565000000| 0%| F| |TAMS 0x0000000564800000| PB 0x0000000564800000| Untracked | 0 -| 700|0x0000000565000000, 0x0000000565000000, 0x0000000565800000| 0%| F| |TAMS 0x0000000565000000| PB 0x0000000565000000| Untracked | 0 -| 701|0x0000000565800000, 0x0000000565800000, 0x0000000566000000| 0%| F| |TAMS 0x0000000565800000| PB 0x0000000565800000| Untracked | 0 -| 702|0x0000000566000000, 0x0000000566000000, 0x0000000566800000| 0%| F| |TAMS 0x0000000566000000| PB 0x0000000566000000| Untracked | 0 -| 703|0x0000000566800000, 0x0000000566800000, 0x0000000567000000| 0%| F| |TAMS 0x0000000566800000| PB 0x0000000566800000| Untracked | 0 -| 704|0x0000000567000000, 0x0000000567000000, 0x0000000567800000| 0%| F| |TAMS 0x0000000567000000| PB 0x0000000567000000| Untracked | 0 -| 705|0x0000000567800000, 0x0000000567800000, 0x0000000568000000| 0%| F| |TAMS 0x0000000567800000| PB 0x0000000567800000| Untracked | 0 -| 706|0x0000000568000000, 0x0000000568000000, 0x0000000568800000| 0%| F| |TAMS 0x0000000568000000| PB 0x0000000568000000| Untracked | 0 -| 707|0x0000000568800000, 0x0000000568800000, 0x0000000569000000| 0%| F| |TAMS 0x0000000568800000| PB 0x0000000568800000| Untracked | 0 -| 708|0x0000000569000000, 0x0000000569000000, 0x0000000569800000| 0%| F| |TAMS 0x0000000569000000| PB 0x0000000569000000| Untracked | 0 -| 709|0x0000000569800000, 0x0000000569800000, 0x000000056a000000| 0%| F| |TAMS 0x0000000569800000| PB 0x0000000569800000| Untracked | 0 -| 710|0x000000056a000000, 0x000000056a000000, 0x000000056a800000| 0%| F| |TAMS 0x000000056a000000| PB 0x000000056a000000| Untracked | 0 -| 711|0x000000056a800000, 0x000000056a800000, 0x000000056b000000| 0%| F| |TAMS 0x000000056a800000| PB 0x000000056a800000| Untracked | 0 -| 712|0x000000056b000000, 0x000000056b000000, 0x000000056b800000| 0%| F| |TAMS 0x000000056b000000| PB 0x000000056b000000| Untracked | 0 -| 713|0x000000056b800000, 0x000000056b800000, 0x000000056c000000| 0%| F| |TAMS 0x000000056b800000| PB 0x000000056b800000| Untracked | 0 -| 714|0x000000056c000000, 0x000000056c000000, 0x000000056c800000| 0%| F| |TAMS 0x000000056c000000| PB 0x000000056c000000| Untracked | 0 -| 715|0x000000056c800000, 0x000000056c800000, 0x000000056d000000| 0%| F| |TAMS 0x000000056c800000| PB 0x000000056c800000| Untracked | 0 -| 716|0x000000056d000000, 0x000000056d000000, 0x000000056d800000| 0%| F| |TAMS 0x000000056d000000| PB 0x000000056d000000| Untracked | 0 -| 717|0x000000056d800000, 0x000000056d800000, 0x000000056e000000| 0%| F| |TAMS 0x000000056d800000| PB 0x000000056d800000| Untracked | 0 -| 718|0x000000056e000000, 0x000000056e000000, 0x000000056e800000| 0%| F| |TAMS 0x000000056e000000| PB 0x000000056e000000| Untracked | 0 -| 719|0x000000056e800000, 0x000000056e800000, 0x000000056f000000| 0%| F| |TAMS 0x000000056e800000| PB 0x000000056e800000| Untracked | 0 -| 720|0x000000056f000000, 0x000000056f000000, 0x000000056f800000| 0%| F| |TAMS 0x000000056f000000| PB 0x000000056f000000| Untracked | 0 -| 721|0x000000056f800000, 0x000000056f800000, 0x0000000570000000| 0%| F| |TAMS 0x000000056f800000| PB 0x000000056f800000| Untracked | 0 -| 722|0x0000000570000000, 0x0000000570000000, 0x0000000570800000| 0%| F| |TAMS 0x0000000570000000| PB 0x0000000570000000| Untracked | 0 -| 723|0x0000000570800000, 0x0000000570800000, 0x0000000571000000| 0%| F| |TAMS 0x0000000570800000| PB 0x0000000570800000| Untracked | 0 -| 724|0x0000000571000000, 0x0000000571000000, 0x0000000571800000| 0%| F| |TAMS 0x0000000571000000| PB 0x0000000571000000| Untracked | 0 -| 725|0x0000000571800000, 0x0000000571800000, 0x0000000572000000| 0%| F| |TAMS 0x0000000571800000| PB 0x0000000571800000| Untracked | 0 -| 726|0x0000000572000000, 0x0000000572000000, 0x0000000572800000| 0%| F| |TAMS 0x0000000572000000| PB 0x0000000572000000| Untracked | 0 -| 727|0x0000000572800000, 0x0000000572800000, 0x0000000573000000| 0%| F| |TAMS 0x0000000572800000| PB 0x0000000572800000| Untracked | 0 -| 728|0x0000000573000000, 0x0000000573000000, 0x0000000573800000| 0%| F| |TAMS 0x0000000573000000| PB 0x0000000573000000| Untracked | 0 -| 729|0x0000000573800000, 0x0000000573800000, 0x0000000574000000| 0%| F| |TAMS 0x0000000573800000| PB 0x0000000573800000| Untracked | 0 -| 730|0x0000000574000000, 0x0000000574000000, 0x0000000574800000| 0%| F| |TAMS 0x0000000574000000| PB 0x0000000574000000| Untracked | 0 -| 731|0x0000000574800000, 0x0000000574800000, 0x0000000575000000| 0%| F| |TAMS 0x0000000574800000| PB 0x0000000574800000| Untracked | 0 -| 732|0x0000000575000000, 0x0000000575000000, 0x0000000575800000| 0%| F| |TAMS 0x0000000575000000| PB 0x0000000575000000| Untracked | 0 -| 733|0x0000000575800000, 0x0000000575800000, 0x0000000576000000| 0%| F| |TAMS 0x0000000575800000| PB 0x0000000575800000| Untracked | 0 -| 734|0x0000000576000000, 0x0000000576000000, 0x0000000576800000| 0%| F| |TAMS 0x0000000576000000| PB 0x0000000576000000| Untracked | 0 -| 735|0x0000000576800000, 0x0000000576800000, 0x0000000577000000| 0%| F| |TAMS 0x0000000576800000| PB 0x0000000576800000| Untracked | 0 -| 736|0x0000000577000000, 0x0000000577000000, 0x0000000577800000| 0%| F| |TAMS 0x0000000577000000| PB 0x0000000577000000| Untracked | 0 -| 737|0x0000000577800000, 0x0000000577800000, 0x0000000578000000| 0%| F| |TAMS 0x0000000577800000| PB 0x0000000577800000| Untracked | 0 -| 738|0x0000000578000000, 0x0000000578000000, 0x0000000578800000| 0%| F| |TAMS 0x0000000578000000| PB 0x0000000578000000| Untracked | 0 -| 739|0x0000000578800000, 0x0000000578800000, 0x0000000579000000| 0%| F| |TAMS 0x0000000578800000| PB 0x0000000578800000| Untracked | 0 -| 740|0x0000000579000000, 0x0000000579000000, 0x0000000579800000| 0%| F| |TAMS 0x0000000579000000| PB 0x0000000579000000| Untracked | 0 -| 741|0x0000000579800000, 0x0000000579800000, 0x000000057a000000| 0%| F| |TAMS 0x0000000579800000| PB 0x0000000579800000| Untracked | 0 -| 742|0x000000057a000000, 0x000000057a000000, 0x000000057a800000| 0%| F| |TAMS 0x000000057a000000| PB 0x000000057a000000| Untracked | 0 -| 743|0x000000057a800000, 0x000000057a800000, 0x000000057b000000| 0%| F| |TAMS 0x000000057a800000| PB 0x000000057a800000| Untracked | 0 -| 744|0x000000057b000000, 0x000000057b000000, 0x000000057b800000| 0%| F| |TAMS 0x000000057b000000| PB 0x000000057b000000| Untracked | 0 -| 745|0x000000057b800000, 0x000000057b800000, 0x000000057c000000| 0%| F| |TAMS 0x000000057b800000| PB 0x000000057b800000| Untracked | 0 -| 746|0x000000057c000000, 0x000000057c000000, 0x000000057c800000| 0%| F| |TAMS 0x000000057c000000| PB 0x000000057c000000| Untracked | 0 -| 747|0x000000057c800000, 0x000000057c800000, 0x000000057d000000| 0%| F| |TAMS 0x000000057c800000| PB 0x000000057c800000| Untracked | 0 -| 748|0x000000057d000000, 0x000000057d000000, 0x000000057d800000| 0%| F| |TAMS 0x000000057d000000| PB 0x000000057d000000| Untracked | 0 -| 749|0x000000057d800000, 0x000000057d800000, 0x000000057e000000| 0%| F| |TAMS 0x000000057d800000| PB 0x000000057d800000| Untracked | 0 -| 750|0x000000057e000000, 0x000000057e000000, 0x000000057e800000| 0%| F| |TAMS 0x000000057e000000| PB 0x000000057e000000| Untracked | 0 -| 751|0x000000057e800000, 0x000000057e800000, 0x000000057f000000| 0%| F| |TAMS 0x000000057e800000| PB 0x000000057e800000| Untracked | 0 -| 752|0x000000057f000000, 0x000000057f000000, 0x000000057f800000| 0%| F| |TAMS 0x000000057f000000| PB 0x000000057f000000| Untracked | 0 -| 753|0x000000057f800000, 0x000000057f800000, 0x0000000580000000| 0%| F| |TAMS 0x000000057f800000| PB 0x000000057f800000| Untracked | 0 -| 754|0x0000000580000000, 0x0000000580000000, 0x0000000580800000| 0%| F| |TAMS 0x0000000580000000| PB 0x0000000580000000| Untracked | 0 -| 755|0x0000000580800000, 0x0000000580800000, 0x0000000581000000| 0%| F| |TAMS 0x0000000580800000| PB 0x0000000580800000| Untracked | 0 -| 756|0x0000000581000000, 0x0000000581000000, 0x0000000581800000| 0%| F| |TAMS 0x0000000581000000| PB 0x0000000581000000| Untracked | 0 -| 757|0x0000000581800000, 0x0000000581800000, 0x0000000582000000| 0%| F| |TAMS 0x0000000581800000| PB 0x0000000581800000| Untracked | 0 -| 758|0x0000000582000000, 0x0000000582000000, 0x0000000582800000| 0%| F| |TAMS 0x0000000582000000| PB 0x0000000582000000| Untracked | 0 -| 759|0x0000000582800000, 0x0000000582800000, 0x0000000583000000| 0%| F| |TAMS 0x0000000582800000| PB 0x0000000582800000| Untracked | 0 -| 760|0x0000000583000000, 0x0000000583000000, 0x0000000583800000| 0%| F| |TAMS 0x0000000583000000| PB 0x0000000583000000| Untracked | 0 -| 761|0x0000000583800000, 0x0000000583800000, 0x0000000584000000| 0%| F| |TAMS 0x0000000583800000| PB 0x0000000583800000| Untracked | 0 -| 762|0x0000000584000000, 0x0000000584000000, 0x0000000584800000| 0%| F| |TAMS 0x0000000584000000| PB 0x0000000584000000| Untracked | 0 -| 763|0x0000000584800000, 0x0000000584800000, 0x0000000585000000| 0%| F| |TAMS 0x0000000584800000| PB 0x0000000584800000| Untracked | 0 -| 764|0x0000000585000000, 0x0000000585000000, 0x0000000585800000| 0%| F| |TAMS 0x0000000585000000| PB 0x0000000585000000| Untracked | 0 -| 765|0x0000000585800000, 0x0000000585800000, 0x0000000586000000| 0%| F| |TAMS 0x0000000585800000| PB 0x0000000585800000| Untracked | 0 -| 766|0x0000000586000000, 0x0000000586000000, 0x0000000586800000| 0%| F| |TAMS 0x0000000586000000| PB 0x0000000586000000| Untracked | 0 -| 767|0x0000000586800000, 0x0000000586800000, 0x0000000587000000| 0%| F| |TAMS 0x0000000586800000| PB 0x0000000586800000| Untracked | 0 -| 768|0x0000000587000000, 0x0000000587000000, 0x0000000587800000| 0%| F| |TAMS 0x0000000587000000| PB 0x0000000587000000| Untracked | 0 -| 769|0x0000000587800000, 0x0000000587800000, 0x0000000588000000| 0%| F| |TAMS 0x0000000587800000| PB 0x0000000587800000| Untracked | 0 -| 770|0x0000000588000000, 0x0000000588000000, 0x0000000588800000| 0%| F| |TAMS 0x0000000588000000| PB 0x0000000588000000| Untracked | 0 -| 771|0x0000000588800000, 0x0000000588800000, 0x0000000589000000| 0%| F| |TAMS 0x0000000588800000| PB 0x0000000588800000| Untracked | 0 -| 772|0x0000000589000000, 0x0000000589000000, 0x0000000589800000| 0%| F| |TAMS 0x0000000589000000| PB 0x0000000589000000| Untracked | 0 -| 773|0x0000000589800000, 0x0000000589800000, 0x000000058a000000| 0%| F| |TAMS 0x0000000589800000| PB 0x0000000589800000| Untracked | 0 -| 774|0x000000058a000000, 0x000000058a000000, 0x000000058a800000| 0%| F| |TAMS 0x000000058a000000| PB 0x000000058a000000| Untracked | 0 -| 775|0x000000058a800000, 0x000000058a800000, 0x000000058b000000| 0%| F| |TAMS 0x000000058a800000| PB 0x000000058a800000| Untracked | 0 -| 776|0x000000058b000000, 0x000000058b000000, 0x000000058b800000| 0%| F| |TAMS 0x000000058b000000| PB 0x000000058b000000| Untracked | 0 -| 777|0x000000058b800000, 0x000000058b800000, 0x000000058c000000| 0%| F| |TAMS 0x000000058b800000| PB 0x000000058b800000| Untracked | 0 -| 778|0x000000058c000000, 0x000000058c000000, 0x000000058c800000| 0%| F| |TAMS 0x000000058c000000| PB 0x000000058c000000| Untracked | 0 -| 779|0x000000058c800000, 0x000000058c800000, 0x000000058d000000| 0%| F| |TAMS 0x000000058c800000| PB 0x000000058c800000| Untracked | 0 -| 780|0x000000058d000000, 0x000000058d000000, 0x000000058d800000| 0%| F| |TAMS 0x000000058d000000| PB 0x000000058d000000| Untracked | 0 -| 781|0x000000058d800000, 0x000000058d800000, 0x000000058e000000| 0%| F| |TAMS 0x000000058d800000| PB 0x000000058d800000| Untracked | 0 -| 782|0x000000058e000000, 0x000000058e000000, 0x000000058e800000| 0%| F| |TAMS 0x000000058e000000| PB 0x000000058e000000| Untracked | 0 -| 783|0x000000058e800000, 0x000000058e800000, 0x000000058f000000| 0%| F| |TAMS 0x000000058e800000| PB 0x000000058e800000| Untracked | 0 -| 784|0x000000058f000000, 0x000000058f000000, 0x000000058f800000| 0%| F| |TAMS 0x000000058f000000| PB 0x000000058f000000| Untracked | 0 -| 785|0x000000058f800000, 0x000000058f800000, 0x0000000590000000| 0%| F| |TAMS 0x000000058f800000| PB 0x000000058f800000| Untracked | 0 -| 786|0x0000000590000000, 0x0000000590000000, 0x0000000590800000| 0%| F| |TAMS 0x0000000590000000| PB 0x0000000590000000| Untracked | 0 -| 787|0x0000000590800000, 0x0000000590800000, 0x0000000591000000| 0%| F| |TAMS 0x0000000590800000| PB 0x0000000590800000| Untracked | 0 -| 788|0x0000000591000000, 0x0000000591000000, 0x0000000591800000| 0%| F| |TAMS 0x0000000591000000| PB 0x0000000591000000| Untracked | 0 -| 789|0x0000000591800000, 0x0000000591800000, 0x0000000592000000| 0%| F| |TAMS 0x0000000591800000| PB 0x0000000591800000| Untracked | 0 -| 790|0x0000000592000000, 0x0000000592000000, 0x0000000592800000| 0%| F| |TAMS 0x0000000592000000| PB 0x0000000592000000| Untracked | 0 -| 791|0x0000000592800000, 0x0000000592800000, 0x0000000593000000| 0%| F| |TAMS 0x0000000592800000| PB 0x0000000592800000| Untracked | 0 -| 792|0x0000000593000000, 0x0000000593000000, 0x0000000593800000| 0%| F| |TAMS 0x0000000593000000| PB 0x0000000593000000| Untracked | 0 -| 793|0x0000000593800000, 0x0000000593800000, 0x0000000594000000| 0%| F| |TAMS 0x0000000593800000| PB 0x0000000593800000| Untracked | 0 -| 794|0x0000000594000000, 0x0000000594000000, 0x0000000594800000| 0%| F| |TAMS 0x0000000594000000| PB 0x0000000594000000| Untracked | 0 -| 795|0x0000000594800000, 0x0000000594800000, 0x0000000595000000| 0%| F| |TAMS 0x0000000594800000| PB 0x0000000594800000| Untracked | 0 -| 796|0x0000000595000000, 0x0000000595000000, 0x0000000595800000| 0%| F| |TAMS 0x0000000595000000| PB 0x0000000595000000| Untracked | 0 -| 797|0x0000000595800000, 0x0000000595800000, 0x0000000596000000| 0%| F| |TAMS 0x0000000595800000| PB 0x0000000595800000| Untracked | 0 -| 798|0x0000000596000000, 0x0000000596000000, 0x0000000596800000| 0%| F| |TAMS 0x0000000596000000| PB 0x0000000596000000| Untracked | 0 -| 799|0x0000000596800000, 0x0000000596800000, 0x0000000597000000| 0%| F| |TAMS 0x0000000596800000| PB 0x0000000596800000| Untracked | 0 -| 800|0x0000000597000000, 0x0000000597000000, 0x0000000597800000| 0%| F| |TAMS 0x0000000597000000| PB 0x0000000597000000| Untracked | 0 -| 801|0x0000000597800000, 0x0000000597800000, 0x0000000598000000| 0%| F| |TAMS 0x0000000597800000| PB 0x0000000597800000| Untracked | 0 -| 802|0x0000000598000000, 0x0000000598000000, 0x0000000598800000| 0%| F| |TAMS 0x0000000598000000| PB 0x0000000598000000| Untracked | 0 -| 803|0x0000000598800000, 0x0000000598800000, 0x0000000599000000| 0%| F| |TAMS 0x0000000598800000| PB 0x0000000598800000| Untracked | 0 -| 804|0x0000000599000000, 0x0000000599000000, 0x0000000599800000| 0%| F| |TAMS 0x0000000599000000| PB 0x0000000599000000| Untracked | 0 -| 805|0x0000000599800000, 0x0000000599800000, 0x000000059a000000| 0%| F| |TAMS 0x0000000599800000| PB 0x0000000599800000| Untracked | 0 -| 806|0x000000059a000000, 0x000000059a000000, 0x000000059a800000| 0%| F| |TAMS 0x000000059a000000| PB 0x000000059a000000| Untracked | 0 -| 807|0x000000059a800000, 0x000000059a800000, 0x000000059b000000| 0%| F| |TAMS 0x000000059a800000| PB 0x000000059a800000| Untracked | 0 -| 808|0x000000059b000000, 0x000000059b000000, 0x000000059b800000| 0%| F| |TAMS 0x000000059b000000| PB 0x000000059b000000| Untracked | 0 -| 809|0x000000059b800000, 0x000000059b800000, 0x000000059c000000| 0%| F| |TAMS 0x000000059b800000| PB 0x000000059b800000| Untracked | 0 -| 810|0x000000059c000000, 0x000000059c000000, 0x000000059c800000| 0%| F| |TAMS 0x000000059c000000| PB 0x000000059c000000| Untracked | 0 -| 811|0x000000059c800000, 0x000000059c800000, 0x000000059d000000| 0%| F| |TAMS 0x000000059c800000| PB 0x000000059c800000| Untracked | 0 -| 812|0x000000059d000000, 0x000000059d000000, 0x000000059d800000| 0%| F| |TAMS 0x000000059d000000| PB 0x000000059d000000| Untracked | 0 -| 813|0x000000059d800000, 0x000000059d800000, 0x000000059e000000| 0%| F| |TAMS 0x000000059d800000| PB 0x000000059d800000| Untracked | 0 -| 814|0x000000059e000000, 0x000000059e000000, 0x000000059e800000| 0%| F| |TAMS 0x000000059e000000| PB 0x000000059e000000| Untracked | 0 -| 815|0x000000059e800000, 0x000000059e800000, 0x000000059f000000| 0%| F| |TAMS 0x000000059e800000| PB 0x000000059e800000| Untracked | 0 -| 816|0x000000059f000000, 0x000000059f000000, 0x000000059f800000| 0%| F| |TAMS 0x000000059f000000| PB 0x000000059f000000| Untracked | 0 -| 817|0x000000059f800000, 0x000000059f800000, 0x00000005a0000000| 0%| F| |TAMS 0x000000059f800000| PB 0x000000059f800000| Untracked | 0 -| 818|0x00000005a0000000, 0x00000005a0000000, 0x00000005a0800000| 0%| F| |TAMS 0x00000005a0000000| PB 0x00000005a0000000| Untracked | 0 -| 819|0x00000005a0800000, 0x00000005a0800000, 0x00000005a1000000| 0%| F| |TAMS 0x00000005a0800000| PB 0x00000005a0800000| Untracked | 0 -| 820|0x00000005a1000000, 0x00000005a1000000, 0x00000005a1800000| 0%| F| |TAMS 0x00000005a1000000| PB 0x00000005a1000000| Untracked | 0 -| 821|0x00000005a1800000, 0x00000005a1800000, 0x00000005a2000000| 0%| F| |TAMS 0x00000005a1800000| PB 0x00000005a1800000| Untracked | 0 -| 822|0x00000005a2000000, 0x00000005a2000000, 0x00000005a2800000| 0%| F| |TAMS 0x00000005a2000000| PB 0x00000005a2000000| Untracked | 0 -| 823|0x00000005a2800000, 0x00000005a2800000, 0x00000005a3000000| 0%| F| |TAMS 0x00000005a2800000| PB 0x00000005a2800000| Untracked | 0 -| 824|0x00000005a3000000, 0x00000005a3000000, 0x00000005a3800000| 0%| F| |TAMS 0x00000005a3000000| PB 0x00000005a3000000| Untracked | 0 -| 825|0x00000005a3800000, 0x00000005a3800000, 0x00000005a4000000| 0%| F| |TAMS 0x00000005a3800000| PB 0x00000005a3800000| Untracked | 0 -| 826|0x00000005a4000000, 0x00000005a4000000, 0x00000005a4800000| 0%| F| |TAMS 0x00000005a4000000| PB 0x00000005a4000000| Untracked | 0 -| 827|0x00000005a4800000, 0x00000005a4800000, 0x00000005a5000000| 0%| F| |TAMS 0x00000005a4800000| PB 0x00000005a4800000| Untracked | 0 -| 828|0x00000005a5000000, 0x00000005a5000000, 0x00000005a5800000| 0%| F| |TAMS 0x00000005a5000000| PB 0x00000005a5000000| Untracked | 0 -| 829|0x00000005a5800000, 0x00000005a5800000, 0x00000005a6000000| 0%| F| |TAMS 0x00000005a5800000| PB 0x00000005a5800000| Untracked | 0 -| 830|0x00000005a6000000, 0x00000005a6000000, 0x00000005a6800000| 0%| F| |TAMS 0x00000005a6000000| PB 0x00000005a6000000| Untracked | 0 -| 831|0x00000005a6800000, 0x00000005a6800000, 0x00000005a7000000| 0%| F| |TAMS 0x00000005a6800000| PB 0x00000005a6800000| Untracked | 0 -| 832|0x00000005a7000000, 0x00000005a7000000, 0x00000005a7800000| 0%| F| |TAMS 0x00000005a7000000| PB 0x00000005a7000000| Untracked | 0 -| 833|0x00000005a7800000, 0x00000005a7800000, 0x00000005a8000000| 0%| F| |TAMS 0x00000005a7800000| PB 0x00000005a7800000| Untracked | 0 -| 834|0x00000005a8000000, 0x00000005a8000000, 0x00000005a8800000| 0%| F| |TAMS 0x00000005a8000000| PB 0x00000005a8000000| Untracked | 0 -| 835|0x00000005a8800000, 0x00000005a8800000, 0x00000005a9000000| 0%| F| |TAMS 0x00000005a8800000| PB 0x00000005a8800000| Untracked | 0 -| 836|0x00000005a9000000, 0x00000005a9000000, 0x00000005a9800000| 0%| F| |TAMS 0x00000005a9000000| PB 0x00000005a9000000| Untracked | 0 -| 837|0x00000005a9800000, 0x00000005a9800000, 0x00000005aa000000| 0%| F| |TAMS 0x00000005a9800000| PB 0x00000005a9800000| Untracked | 0 -| 838|0x00000005aa000000, 0x00000005aa000000, 0x00000005aa800000| 0%| F| |TAMS 0x00000005aa000000| PB 0x00000005aa000000| Untracked | 0 -| 839|0x00000005aa800000, 0x00000005aa800000, 0x00000005ab000000| 0%| F| |TAMS 0x00000005aa800000| PB 0x00000005aa800000| Untracked | 0 -| 840|0x00000005ab000000, 0x00000005ab000000, 0x00000005ab800000| 0%| F| |TAMS 0x00000005ab000000| PB 0x00000005ab000000| Untracked | 0 -| 841|0x00000005ab800000, 0x00000005ab800000, 0x00000005ac000000| 0%| F| |TAMS 0x00000005ab800000| PB 0x00000005ab800000| Untracked | 0 -| 842|0x00000005ac000000, 0x00000005ac000000, 0x00000005ac800000| 0%| F| |TAMS 0x00000005ac000000| PB 0x00000005ac000000| Untracked | 0 -| 843|0x00000005ac800000, 0x00000005ac800000, 0x00000005ad000000| 0%| F| |TAMS 0x00000005ac800000| PB 0x00000005ac800000| Untracked | 0 -| 844|0x00000005ad000000, 0x00000005ad000000, 0x00000005ad800000| 0%| F| |TAMS 0x00000005ad000000| PB 0x00000005ad000000| Untracked | 0 -| 845|0x00000005ad800000, 0x00000005ad800000, 0x00000005ae000000| 0%| F| |TAMS 0x00000005ad800000| PB 0x00000005ad800000| Untracked | 0 -| 846|0x00000005ae000000, 0x00000005ae000000, 0x00000005ae800000| 0%| F| |TAMS 0x00000005ae000000| PB 0x00000005ae000000| Untracked | 0 -| 847|0x00000005ae800000, 0x00000005ae800000, 0x00000005af000000| 0%| F| |TAMS 0x00000005ae800000| PB 0x00000005ae800000| Untracked | 0 -| 848|0x00000005af000000, 0x00000005af000000, 0x00000005af800000| 0%| F| |TAMS 0x00000005af000000| PB 0x00000005af000000| Untracked | 0 -| 849|0x00000005af800000, 0x00000005af800000, 0x00000005b0000000| 0%| F| |TAMS 0x00000005af800000| PB 0x00000005af800000| Untracked | 0 -| 850|0x00000005b0000000, 0x00000005b0000000, 0x00000005b0800000| 0%| F| |TAMS 0x00000005b0000000| PB 0x00000005b0000000| Untracked | 0 -| 851|0x00000005b0800000, 0x00000005b0800000, 0x00000005b1000000| 0%| F| |TAMS 0x00000005b0800000| PB 0x00000005b0800000| Untracked | 0 -| 852|0x00000005b1000000, 0x00000005b1000000, 0x00000005b1800000| 0%| F| |TAMS 0x00000005b1000000| PB 0x00000005b1000000| Untracked | 0 -| 853|0x00000005b1800000, 0x00000005b1800000, 0x00000005b2000000| 0%| F| |TAMS 0x00000005b1800000| PB 0x00000005b1800000| Untracked | 0 -| 854|0x00000005b2000000, 0x00000005b2000000, 0x00000005b2800000| 0%| F| |TAMS 0x00000005b2000000| PB 0x00000005b2000000| Untracked | 0 -| 855|0x00000005b2800000, 0x00000005b2800000, 0x00000005b3000000| 0%| F| |TAMS 0x00000005b2800000| PB 0x00000005b2800000| Untracked | 0 -| 856|0x00000005b3000000, 0x00000005b3000000, 0x00000005b3800000| 0%| F| |TAMS 0x00000005b3000000| PB 0x00000005b3000000| Untracked | 0 -| 857|0x00000005b3800000, 0x00000005b3800000, 0x00000005b4000000| 0%| F| |TAMS 0x00000005b3800000| PB 0x00000005b3800000| Untracked | 0 -| 858|0x00000005b4000000, 0x00000005b4000000, 0x00000005b4800000| 0%| F| |TAMS 0x00000005b4000000| PB 0x00000005b4000000| Untracked | 0 -| 859|0x00000005b4800000, 0x00000005b4800000, 0x00000005b5000000| 0%| F| |TAMS 0x00000005b4800000| PB 0x00000005b4800000| Untracked | 0 -| 860|0x00000005b5000000, 0x00000005b5000000, 0x00000005b5800000| 0%| F| |TAMS 0x00000005b5000000| PB 0x00000005b5000000| Untracked | 0 -| 861|0x00000005b5800000, 0x00000005b5800000, 0x00000005b6000000| 0%| F| |TAMS 0x00000005b5800000| PB 0x00000005b5800000| Untracked | 0 -| 862|0x00000005b6000000, 0x00000005b6000000, 0x00000005b6800000| 0%| F| |TAMS 0x00000005b6000000| PB 0x00000005b6000000| Untracked | 0 -| 863|0x00000005b6800000, 0x00000005b6800000, 0x00000005b7000000| 0%| F| |TAMS 0x00000005b6800000| PB 0x00000005b6800000| Untracked | 0 -| 864|0x00000005b7000000, 0x00000005b7000000, 0x00000005b7800000| 0%| F| |TAMS 0x00000005b7000000| PB 0x00000005b7000000| Untracked | 0 -| 865|0x00000005b7800000, 0x00000005b7800000, 0x00000005b8000000| 0%| F| |TAMS 0x00000005b7800000| PB 0x00000005b7800000| Untracked | 0 -| 866|0x00000005b8000000, 0x00000005b8000000, 0x00000005b8800000| 0%| F| |TAMS 0x00000005b8000000| PB 0x00000005b8000000| Untracked | 0 -| 867|0x00000005b8800000, 0x00000005b8800000, 0x00000005b9000000| 0%| F| |TAMS 0x00000005b8800000| PB 0x00000005b8800000| Untracked | 0 -| 868|0x00000005b9000000, 0x00000005b9000000, 0x00000005b9800000| 0%| F| |TAMS 0x00000005b9000000| PB 0x00000005b9000000| Untracked | 0 -| 869|0x00000005b9800000, 0x00000005b9800000, 0x00000005ba000000| 0%| F| |TAMS 0x00000005b9800000| PB 0x00000005b9800000| Untracked | 0 -| 870|0x00000005ba000000, 0x00000005ba000000, 0x00000005ba800000| 0%| F| |TAMS 0x00000005ba000000| PB 0x00000005ba000000| Untracked | 0 -| 871|0x00000005ba800000, 0x00000005ba800000, 0x00000005bb000000| 0%| F| |TAMS 0x00000005ba800000| PB 0x00000005ba800000| Untracked | 0 -| 872|0x00000005bb000000, 0x00000005bb000000, 0x00000005bb800000| 0%| F| |TAMS 0x00000005bb000000| PB 0x00000005bb000000| Untracked | 0 -| 873|0x00000005bb800000, 0x00000005bb800000, 0x00000005bc000000| 0%| F| |TAMS 0x00000005bb800000| PB 0x00000005bb800000| Untracked | 0 -| 874|0x00000005bc000000, 0x00000005bc000000, 0x00000005bc800000| 0%| F| |TAMS 0x00000005bc000000| PB 0x00000005bc000000| Untracked | 0 -| 875|0x00000005bc800000, 0x00000005bc800000, 0x00000005bd000000| 0%| F| |TAMS 0x00000005bc800000| PB 0x00000005bc800000| Untracked | 0 -| 876|0x00000005bd000000, 0x00000005bd000000, 0x00000005bd800000| 0%| F| |TAMS 0x00000005bd000000| PB 0x00000005bd000000| Untracked | 0 -| 877|0x00000005bd800000, 0x00000005bd800000, 0x00000005be000000| 0%| F| |TAMS 0x00000005bd800000| PB 0x00000005bd800000| Untracked | 0 -| 878|0x00000005be000000, 0x00000005be000000, 0x00000005be800000| 0%| F| |TAMS 0x00000005be000000| PB 0x00000005be000000| Untracked | 0 -| 879|0x00000005be800000, 0x00000005be800000, 0x00000005bf000000| 0%| F| |TAMS 0x00000005be800000| PB 0x00000005be800000| Untracked | 0 -| 880|0x00000005bf000000, 0x00000005bf000000, 0x00000005bf800000| 0%| F| |TAMS 0x00000005bf000000| PB 0x00000005bf000000| Untracked | 0 -| 881|0x00000005bf800000, 0x00000005bf800000, 0x00000005c0000000| 0%| F| |TAMS 0x00000005bf800000| PB 0x00000005bf800000| Untracked | 0 -| 882|0x00000005c0000000, 0x00000005c0000000, 0x00000005c0800000| 0%| F| |TAMS 0x00000005c0000000| PB 0x00000005c0000000| Untracked | 0 -| 883|0x00000005c0800000, 0x00000005c0800000, 0x00000005c1000000| 0%| F| |TAMS 0x00000005c0800000| PB 0x00000005c0800000| Untracked | 0 -| 884|0x00000005c1000000, 0x00000005c1000000, 0x00000005c1800000| 0%| F| |TAMS 0x00000005c1000000| PB 0x00000005c1000000| Untracked | 0 -| 885|0x00000005c1800000, 0x00000005c1800000, 0x00000005c2000000| 0%| F| |TAMS 0x00000005c1800000| PB 0x00000005c1800000| Untracked | 0 -| 886|0x00000005c2000000, 0x00000005c2000000, 0x00000005c2800000| 0%| F| |TAMS 0x00000005c2000000| PB 0x00000005c2000000| Untracked | 0 -| 887|0x00000005c2800000, 0x00000005c2800000, 0x00000005c3000000| 0%| F| |TAMS 0x00000005c2800000| PB 0x00000005c2800000| Untracked | 0 -| 888|0x00000005c3000000, 0x00000005c3000000, 0x00000005c3800000| 0%| F| |TAMS 0x00000005c3000000| PB 0x00000005c3000000| Untracked | 0 -| 889|0x00000005c3800000, 0x00000005c3800000, 0x00000005c4000000| 0%| F| |TAMS 0x00000005c3800000| PB 0x00000005c3800000| Untracked | 0 -| 890|0x00000005c4000000, 0x00000005c4000000, 0x00000005c4800000| 0%| F| |TAMS 0x00000005c4000000| PB 0x00000005c4000000| Untracked | 0 -| 891|0x00000005c4800000, 0x00000005c4800000, 0x00000005c5000000| 0%| F| |TAMS 0x00000005c4800000| PB 0x00000005c4800000| Untracked | 0 -| 892|0x00000005c5000000, 0x00000005c5000000, 0x00000005c5800000| 0%| F| |TAMS 0x00000005c5000000| PB 0x00000005c5000000| Untracked | 0 -| 893|0x00000005c5800000, 0x00000005c5800000, 0x00000005c6000000| 0%| F| |TAMS 0x00000005c5800000| PB 0x00000005c5800000| Untracked | 0 -| 894|0x00000005c6000000, 0x00000005c6000000, 0x00000005c6800000| 0%| F| |TAMS 0x00000005c6000000| PB 0x00000005c6000000| Untracked | 0 -| 895|0x00000005c6800000, 0x00000005c6800000, 0x00000005c7000000| 0%| F| |TAMS 0x00000005c6800000| PB 0x00000005c6800000| Untracked | 0 -| 896|0x00000005c7000000, 0x00000005c7000000, 0x00000005c7800000| 0%| F| |TAMS 0x00000005c7000000| PB 0x00000005c7000000| Untracked | 0 -| 897|0x00000005c7800000, 0x00000005c7800000, 0x00000005c8000000| 0%| F| |TAMS 0x00000005c7800000| PB 0x00000005c7800000| Untracked | 0 -| 898|0x00000005c8000000, 0x00000005c8000000, 0x00000005c8800000| 0%| F| |TAMS 0x00000005c8000000| PB 0x00000005c8000000| Untracked | 0 -| 899|0x00000005c8800000, 0x00000005c8800000, 0x00000005c9000000| 0%| F| |TAMS 0x00000005c8800000| PB 0x00000005c8800000| Untracked | 0 -| 900|0x00000005c9000000, 0x00000005c9000000, 0x00000005c9800000| 0%| F| |TAMS 0x00000005c9000000| PB 0x00000005c9000000| Untracked | 0 -| 901|0x00000005c9800000, 0x00000005c9800000, 0x00000005ca000000| 0%| F| |TAMS 0x00000005c9800000| PB 0x00000005c9800000| Untracked | 0 -| 902|0x00000005ca000000, 0x00000005ca000000, 0x00000005ca800000| 0%| F| |TAMS 0x00000005ca000000| PB 0x00000005ca000000| Untracked | 0 -| 903|0x00000005ca800000, 0x00000005ca800000, 0x00000005cb000000| 0%| F| |TAMS 0x00000005ca800000| PB 0x00000005ca800000| Untracked | 0 -| 904|0x00000005cb000000, 0x00000005cb000000, 0x00000005cb800000| 0%| F| |TAMS 0x00000005cb000000| PB 0x00000005cb000000| Untracked | 0 -| 905|0x00000005cb800000, 0x00000005cb800000, 0x00000005cc000000| 0%| F| |TAMS 0x00000005cb800000| PB 0x00000005cb800000| Untracked | 0 -| 906|0x00000005cc000000, 0x00000005cc000000, 0x00000005cc800000| 0%| F| |TAMS 0x00000005cc000000| PB 0x00000005cc000000| Untracked | 0 -| 907|0x00000005cc800000, 0x00000005cc800000, 0x00000005cd000000| 0%| F| |TAMS 0x00000005cc800000| PB 0x00000005cc800000| Untracked | 0 -| 908|0x00000005cd000000, 0x00000005cd000000, 0x00000005cd800000| 0%| F| |TAMS 0x00000005cd000000| PB 0x00000005cd000000| Untracked | 0 -| 909|0x00000005cd800000, 0x00000005cd800000, 0x00000005ce000000| 0%| F| |TAMS 0x00000005cd800000| PB 0x00000005cd800000| Untracked | 0 -| 910|0x00000005ce000000, 0x00000005ce000000, 0x00000005ce800000| 0%| F| |TAMS 0x00000005ce000000| PB 0x00000005ce000000| Untracked | 0 -| 911|0x00000005ce800000, 0x00000005ce800000, 0x00000005cf000000| 0%| F| |TAMS 0x00000005ce800000| PB 0x00000005ce800000| Untracked | 0 -| 912|0x00000005cf000000, 0x00000005cf000000, 0x00000005cf800000| 0%| F| |TAMS 0x00000005cf000000| PB 0x00000005cf000000| Untracked | 0 -| 913|0x00000005cf800000, 0x00000005cf800000, 0x00000005d0000000| 0%| F| |TAMS 0x00000005cf800000| PB 0x00000005cf800000| Untracked | 0 -| 914|0x00000005d0000000, 0x00000005d0000000, 0x00000005d0800000| 0%| F| |TAMS 0x00000005d0000000| PB 0x00000005d0000000| Untracked | 0 -| 915|0x00000005d0800000, 0x00000005d0800000, 0x00000005d1000000| 0%| F| |TAMS 0x00000005d0800000| PB 0x00000005d0800000| Untracked | 0 -| 916|0x00000005d1000000, 0x00000005d1000000, 0x00000005d1800000| 0%| F| |TAMS 0x00000005d1000000| PB 0x00000005d1000000| Untracked | 0 -| 917|0x00000005d1800000, 0x00000005d1800000, 0x00000005d2000000| 0%| F| |TAMS 0x00000005d1800000| PB 0x00000005d1800000| Untracked | 0 -| 918|0x00000005d2000000, 0x00000005d2000000, 0x00000005d2800000| 0%| F| |TAMS 0x00000005d2000000| PB 0x00000005d2000000| Untracked | 0 -| 919|0x00000005d2800000, 0x00000005d2800000, 0x00000005d3000000| 0%| F| |TAMS 0x00000005d2800000| PB 0x00000005d2800000| Untracked | 0 -| 920|0x00000005d3000000, 0x00000005d3000000, 0x00000005d3800000| 0%| F| |TAMS 0x00000005d3000000| PB 0x00000005d3000000| Untracked | 0 -| 921|0x00000005d3800000, 0x00000005d3800000, 0x00000005d4000000| 0%| F| |TAMS 0x00000005d3800000| PB 0x00000005d3800000| Untracked | 0 -| 922|0x00000005d4000000, 0x00000005d4000000, 0x00000005d4800000| 0%| F| |TAMS 0x00000005d4000000| PB 0x00000005d4000000| Untracked | 0 -| 923|0x00000005d4800000, 0x00000005d4800000, 0x00000005d5000000| 0%| F| |TAMS 0x00000005d4800000| PB 0x00000005d4800000| Untracked | 0 -| 924|0x00000005d5000000, 0x00000005d5000000, 0x00000005d5800000| 0%| F| |TAMS 0x00000005d5000000| PB 0x00000005d5000000| Untracked | 0 -| 925|0x00000005d5800000, 0x00000005d5800000, 0x00000005d6000000| 0%| F| |TAMS 0x00000005d5800000| PB 0x00000005d5800000| Untracked | 0 -| 926|0x00000005d6000000, 0x00000005d6000000, 0x00000005d6800000| 0%| F| |TAMS 0x00000005d6000000| PB 0x00000005d6000000| Untracked | 0 -| 927|0x00000005d6800000, 0x00000005d6800000, 0x00000005d7000000| 0%| F| |TAMS 0x00000005d6800000| PB 0x00000005d6800000| Untracked | 0 -| 928|0x00000005d7000000, 0x00000005d7000000, 0x00000005d7800000| 0%| F| |TAMS 0x00000005d7000000| PB 0x00000005d7000000| Untracked | 0 -| 929|0x00000005d7800000, 0x00000005d7800000, 0x00000005d8000000| 0%| F| |TAMS 0x00000005d7800000| PB 0x00000005d7800000| Untracked | 0 -| 930|0x00000005d8000000, 0x00000005d8000000, 0x00000005d8800000| 0%| F| |TAMS 0x00000005d8000000| PB 0x00000005d8000000| Untracked | 0 -| 931|0x00000005d8800000, 0x00000005d8800000, 0x00000005d9000000| 0%| F| |TAMS 0x00000005d8800000| PB 0x00000005d8800000| Untracked | 0 -| 932|0x00000005d9000000, 0x00000005d9000000, 0x00000005d9800000| 0%| F| |TAMS 0x00000005d9000000| PB 0x00000005d9000000| Untracked | 0 -| 933|0x00000005d9800000, 0x00000005d9800000, 0x00000005da000000| 0%| F| |TAMS 0x00000005d9800000| PB 0x00000005d9800000| Untracked | 0 -| 934|0x00000005da000000, 0x00000005da000000, 0x00000005da800000| 0%| F| |TAMS 0x00000005da000000| PB 0x00000005da000000| Untracked | 0 -| 935|0x00000005da800000, 0x00000005da800000, 0x00000005db000000| 0%| F| |TAMS 0x00000005da800000| PB 0x00000005da800000| Untracked | 0 -| 936|0x00000005db000000, 0x00000005db000000, 0x00000005db800000| 0%| F| |TAMS 0x00000005db000000| PB 0x00000005db000000| Untracked | 0 -| 937|0x00000005db800000, 0x00000005db800000, 0x00000005dc000000| 0%| F| |TAMS 0x00000005db800000| PB 0x00000005db800000| Untracked | 0 -| 938|0x00000005dc000000, 0x00000005dc000000, 0x00000005dc800000| 0%| F| |TAMS 0x00000005dc000000| PB 0x00000005dc000000| Untracked | 0 -| 939|0x00000005dc800000, 0x00000005dc800000, 0x00000005dd000000| 0%| F| |TAMS 0x00000005dc800000| PB 0x00000005dc800000| Untracked | 0 -| 940|0x00000005dd000000, 0x00000005dd000000, 0x00000005dd800000| 0%| F| |TAMS 0x00000005dd000000| PB 0x00000005dd000000| Untracked | 0 -| 941|0x00000005dd800000, 0x00000005dd800000, 0x00000005de000000| 0%| F| |TAMS 0x00000005dd800000| PB 0x00000005dd800000| Untracked | 0 -| 942|0x00000005de000000, 0x00000005de000000, 0x00000005de800000| 0%| F| |TAMS 0x00000005de000000| PB 0x00000005de000000| Untracked | 0 -| 943|0x00000005de800000, 0x00000005de800000, 0x00000005df000000| 0%| F| |TAMS 0x00000005de800000| PB 0x00000005de800000| Untracked | 0 -| 944|0x00000005df000000, 0x00000005df000000, 0x00000005df800000| 0%| F| |TAMS 0x00000005df000000| PB 0x00000005df000000| Untracked | 0 -| 945|0x00000005df800000, 0x00000005df800000, 0x00000005e0000000| 0%| F| |TAMS 0x00000005df800000| PB 0x00000005df800000| Untracked | 0 -| 946|0x00000005e0000000, 0x00000005e0000000, 0x00000005e0800000| 0%| F| |TAMS 0x00000005e0000000| PB 0x00000005e0000000| Untracked | 0 -| 947|0x00000005e0800000, 0x00000005e0800000, 0x00000005e1000000| 0%| F| |TAMS 0x00000005e0800000| PB 0x00000005e0800000| Untracked | 0 -| 948|0x00000005e1000000, 0x00000005e1000000, 0x00000005e1800000| 0%| F| |TAMS 0x00000005e1000000| PB 0x00000005e1000000| Untracked | 0 -| 949|0x00000005e1800000, 0x00000005e1800000, 0x00000005e2000000| 0%| F| |TAMS 0x00000005e1800000| PB 0x00000005e1800000| Untracked | 0 -| 950|0x00000005e2000000, 0x00000005e2000000, 0x00000005e2800000| 0%| F| |TAMS 0x00000005e2000000| PB 0x00000005e2000000| Untracked | 0 -| 951|0x00000005e2800000, 0x00000005e2800000, 0x00000005e3000000| 0%| F| |TAMS 0x00000005e2800000| PB 0x00000005e2800000| Untracked | 0 -| 952|0x00000005e3000000, 0x00000005e3000000, 0x00000005e3800000| 0%| F| |TAMS 0x00000005e3000000| PB 0x00000005e3000000| Untracked | 0 -| 953|0x00000005e3800000, 0x00000005e3800000, 0x00000005e4000000| 0%| F| |TAMS 0x00000005e3800000| PB 0x00000005e3800000| Untracked | 0 -| 954|0x00000005e4000000, 0x00000005e4000000, 0x00000005e4800000| 0%| F| |TAMS 0x00000005e4000000| PB 0x00000005e4000000| Untracked | 0 -| 955|0x00000005e4800000, 0x00000005e4800000, 0x00000005e5000000| 0%| F| |TAMS 0x00000005e4800000| PB 0x00000005e4800000| Untracked | 0 -| 956|0x00000005e5000000, 0x00000005e5000000, 0x00000005e5800000| 0%| F| |TAMS 0x00000005e5000000| PB 0x00000005e5000000| Untracked | 0 -| 957|0x00000005e5800000, 0x00000005e5800000, 0x00000005e6000000| 0%| F| |TAMS 0x00000005e5800000| PB 0x00000005e5800000| Untracked | 0 -| 958|0x00000005e6000000, 0x00000005e6000000, 0x00000005e6800000| 0%| F| |TAMS 0x00000005e6000000| PB 0x00000005e6000000| Untracked | 0 -| 959|0x00000005e6800000, 0x00000005e6800000, 0x00000005e7000000| 0%| F| |TAMS 0x00000005e6800000| PB 0x00000005e6800000| Untracked | 0 -| 960|0x00000005e7000000, 0x00000005e7000000, 0x00000005e7800000| 0%| F| |TAMS 0x00000005e7000000| PB 0x00000005e7000000| Untracked | 0 -| 961|0x00000005e7800000, 0x00000005e7800000, 0x00000005e8000000| 0%| F| |TAMS 0x00000005e7800000| PB 0x00000005e7800000| Untracked | 0 -| 962|0x00000005e8000000, 0x00000005e8000000, 0x00000005e8800000| 0%| F| |TAMS 0x00000005e8000000| PB 0x00000005e8000000| Untracked | 0 -| 963|0x00000005e8800000, 0x00000005e8800000, 0x00000005e9000000| 0%| F| |TAMS 0x00000005e8800000| PB 0x00000005e8800000| Untracked | 0 -| 964|0x00000005e9000000, 0x00000005e9000000, 0x00000005e9800000| 0%| F| |TAMS 0x00000005e9000000| PB 0x00000005e9000000| Untracked | 0 -| 965|0x00000005e9800000, 0x00000005e9800000, 0x00000005ea000000| 0%| F| |TAMS 0x00000005e9800000| PB 0x00000005e9800000| Untracked | 0 -| 966|0x00000005ea000000, 0x00000005ea000000, 0x00000005ea800000| 0%| F| |TAMS 0x00000005ea000000| PB 0x00000005ea000000| Untracked | 0 -| 967|0x00000005ea800000, 0x00000005ea800000, 0x00000005eb000000| 0%| F| |TAMS 0x00000005ea800000| PB 0x00000005ea800000| Untracked | 0 -| 968|0x00000005eb000000, 0x00000005eb000000, 0x00000005eb800000| 0%| F| |TAMS 0x00000005eb000000| PB 0x00000005eb000000| Untracked | 0 -| 969|0x00000005eb800000, 0x00000005eb800000, 0x00000005ec000000| 0%| F| |TAMS 0x00000005eb800000| PB 0x00000005eb800000| Untracked | 0 -| 970|0x00000005ec000000, 0x00000005ec000000, 0x00000005ec800000| 0%| F| |TAMS 0x00000005ec000000| PB 0x00000005ec000000| Untracked | 0 -| 971|0x00000005ec800000, 0x00000005ec800000, 0x00000005ed000000| 0%| F| |TAMS 0x00000005ec800000| PB 0x00000005ec800000| Untracked | 0 -| 972|0x00000005ed000000, 0x00000005ed000000, 0x00000005ed800000| 0%| F| |TAMS 0x00000005ed000000| PB 0x00000005ed000000| Untracked | 0 -| 973|0x00000005ed800000, 0x00000005ed800000, 0x00000005ee000000| 0%| F| |TAMS 0x00000005ed800000| PB 0x00000005ed800000| Untracked | 0 -| 974|0x00000005ee000000, 0x00000005ee000000, 0x00000005ee800000| 0%| F| |TAMS 0x00000005ee000000| PB 0x00000005ee000000| Untracked | 0 -| 975|0x00000005ee800000, 0x00000005ee800000, 0x00000005ef000000| 0%| F| |TAMS 0x00000005ee800000| PB 0x00000005ee800000| Untracked | 0 -| 976|0x00000005ef000000, 0x00000005ef000000, 0x00000005ef800000| 0%| F| |TAMS 0x00000005ef000000| PB 0x00000005ef000000| Untracked | 0 -| 977|0x00000005ef800000, 0x00000005ef800000, 0x00000005f0000000| 0%| F| |TAMS 0x00000005ef800000| PB 0x00000005ef800000| Untracked | 0 -| 978|0x00000005f0000000, 0x00000005f0000000, 0x00000005f0800000| 0%| F| |TAMS 0x00000005f0000000| PB 0x00000005f0000000| Untracked | 0 -| 979|0x00000005f0800000, 0x00000005f0800000, 0x00000005f1000000| 0%| F| |TAMS 0x00000005f0800000| PB 0x00000005f0800000| Untracked | 0 -| 980|0x00000005f1000000, 0x00000005f1000000, 0x00000005f1800000| 0%| F| |TAMS 0x00000005f1000000| PB 0x00000005f1000000| Untracked | 0 -| 981|0x00000005f1800000, 0x00000005f1800000, 0x00000005f2000000| 0%| F| |TAMS 0x00000005f1800000| PB 0x00000005f1800000| Untracked | 0 -| 982|0x00000005f2000000, 0x00000005f2000000, 0x00000005f2800000| 0%| F| |TAMS 0x00000005f2000000| PB 0x00000005f2000000| Untracked | 0 -| 983|0x00000005f2800000, 0x00000005f2800000, 0x00000005f3000000| 0%| F| |TAMS 0x00000005f2800000| PB 0x00000005f2800000| Untracked | 0 -| 984|0x00000005f3000000, 0x00000005f3000000, 0x00000005f3800000| 0%| F| |TAMS 0x00000005f3000000| PB 0x00000005f3000000| Untracked | 0 -| 985|0x00000005f3800000, 0x00000005f3800000, 0x00000005f4000000| 0%| F| |TAMS 0x00000005f3800000| PB 0x00000005f3800000| Untracked | 0 -| 986|0x00000005f4000000, 0x00000005f4000000, 0x00000005f4800000| 0%| F| |TAMS 0x00000005f4000000| PB 0x00000005f4000000| Untracked | 0 -| 987|0x00000005f4800000, 0x00000005f4800000, 0x00000005f5000000| 0%| F| |TAMS 0x00000005f4800000| PB 0x00000005f4800000| Untracked | 0 -| 988|0x00000005f5000000, 0x00000005f5000000, 0x00000005f5800000| 0%| F| |TAMS 0x00000005f5000000| PB 0x00000005f5000000| Untracked | 0 -| 989|0x00000005f5800000, 0x00000005f5800000, 0x00000005f6000000| 0%| F| |TAMS 0x00000005f5800000| PB 0x00000005f5800000| Untracked | 0 -| 990|0x00000005f6000000, 0x00000005f6000000, 0x00000005f6800000| 0%| F| |TAMS 0x00000005f6000000| PB 0x00000005f6000000| Untracked | 0 -| 991|0x00000005f6800000, 0x00000005f6800000, 0x00000005f7000000| 0%| F| |TAMS 0x00000005f6800000| PB 0x00000005f6800000| Untracked | 0 -| 992|0x00000005f7000000, 0x00000005f7000000, 0x00000005f7800000| 0%| F| |TAMS 0x00000005f7000000| PB 0x00000005f7000000| Untracked | 0 -| 993|0x00000005f7800000, 0x00000005f7800000, 0x00000005f8000000| 0%| F| |TAMS 0x00000005f7800000| PB 0x00000005f7800000| Untracked | 0 -| 994|0x00000005f8000000, 0x00000005f8000000, 0x00000005f8800000| 0%| F| |TAMS 0x00000005f8000000| PB 0x00000005f8000000| Untracked | 0 -| 995|0x00000005f8800000, 0x00000005f8800000, 0x00000005f9000000| 0%| F| |TAMS 0x00000005f8800000| PB 0x00000005f8800000| Untracked | 0 -| 996|0x00000005f9000000, 0x00000005f9000000, 0x00000005f9800000| 0%| F| |TAMS 0x00000005f9000000| PB 0x00000005f9000000| Untracked | 0 -| 997|0x00000005f9800000, 0x00000005f9800000, 0x00000005fa000000| 0%| F| |TAMS 0x00000005f9800000| PB 0x00000005f9800000| Untracked | 0 -| 998|0x00000005fa000000, 0x00000005fa000000, 0x00000005fa800000| 0%| F| |TAMS 0x00000005fa000000| PB 0x00000005fa000000| Untracked | 0 -| 999|0x00000005fa800000, 0x00000005fa800000, 0x00000005fb000000| 0%| F| |TAMS 0x00000005fa800000| PB 0x00000005fa800000| Untracked | 0 -|1000|0x00000005fb000000, 0x00000005fb000000, 0x00000005fb800000| 0%| F| |TAMS 0x00000005fb000000| PB 0x00000005fb000000| Untracked | 0 -|1001|0x00000005fb800000, 0x00000005fb800000, 0x00000005fc000000| 0%| F| |TAMS 0x00000005fb800000| PB 0x00000005fb800000| Untracked | 0 -|1002|0x00000005fc000000, 0x00000005fc000000, 0x00000005fc800000| 0%| F| |TAMS 0x00000005fc000000| PB 0x00000005fc000000| Untracked | 0 -|1003|0x00000005fc800000, 0x00000005fc800000, 0x00000005fd000000| 0%| F| |TAMS 0x00000005fc800000| PB 0x00000005fc800000| Untracked | 0 -|1004|0x00000005fd000000, 0x00000005fd000000, 0x00000005fd800000| 0%| F| |TAMS 0x00000005fd000000| PB 0x00000005fd000000| Untracked | 0 -|1005|0x00000005fd800000, 0x00000005fd800000, 0x00000005fe000000| 0%| F| |TAMS 0x00000005fd800000| PB 0x00000005fd800000| Untracked | 0 -|1006|0x00000005fe000000, 0x00000005fe000000, 0x00000005fe800000| 0%| F| |TAMS 0x00000005fe000000| PB 0x00000005fe000000| Untracked | 0 -|1007|0x00000005fe800000, 0x00000005fe800000, 0x00000005ff000000| 0%| F| |TAMS 0x00000005fe800000| PB 0x00000005fe800000| Untracked | 0 -|1008|0x00000005ff000000, 0x00000005ff000000, 0x00000005ff800000| 0%| F| |TAMS 0x00000005ff000000| PB 0x00000005ff000000| Untracked | 0 -|1009|0x00000005ff800000, 0x00000005ff800000, 0x0000000600000000| 0%| F| |TAMS 0x00000005ff800000| PB 0x00000005ff800000| Untracked | 0 -|1010|0x0000000600000000, 0x0000000600000000, 0x0000000600800000| 0%| F| |TAMS 0x0000000600000000| PB 0x0000000600000000| Untracked | 0 -|1011|0x0000000600800000, 0x0000000600800000, 0x0000000601000000| 0%| F| |TAMS 0x0000000600800000| PB 0x0000000600800000| Untracked | 0 -|1012|0x0000000601000000, 0x0000000601000000, 0x0000000601800000| 0%| F| |TAMS 0x0000000601000000| PB 0x0000000601000000| Untracked | 0 -|1013|0x0000000601800000, 0x0000000601800000, 0x0000000602000000| 0%| F| |TAMS 0x0000000601800000| PB 0x0000000601800000| Untracked | 0 -|1014|0x0000000602000000, 0x0000000602000000, 0x0000000602800000| 0%| F| |TAMS 0x0000000602000000| PB 0x0000000602000000| Untracked | 0 -|1015|0x0000000602800000, 0x0000000602800000, 0x0000000603000000| 0%| F| |TAMS 0x0000000602800000| PB 0x0000000602800000| Untracked | 0 -|1016|0x0000000603000000, 0x0000000603000000, 0x0000000603800000| 0%| F| |TAMS 0x0000000603000000| PB 0x0000000603000000| Untracked | 0 -|1017|0x0000000603800000, 0x0000000603800000, 0x0000000604000000| 0%| F| |TAMS 0x0000000603800000| PB 0x0000000603800000| Untracked | 0 -|1018|0x0000000604000000, 0x0000000604000000, 0x0000000604800000| 0%| F| |TAMS 0x0000000604000000| PB 0x0000000604000000| Untracked | 0 -|1019|0x0000000604800000, 0x0000000604800000, 0x0000000605000000| 0%| F| |TAMS 0x0000000604800000| PB 0x0000000604800000| Untracked | 0 -|1020|0x0000000605000000, 0x0000000605000000, 0x0000000605800000| 0%| F| |TAMS 0x0000000605000000| PB 0x0000000605000000| Untracked | 0 -|1021|0x0000000605800000, 0x0000000605800000, 0x0000000606000000| 0%| F| |TAMS 0x0000000605800000| PB 0x0000000605800000| Untracked | 0 -|1022|0x0000000606000000, 0x0000000606000000, 0x0000000606800000| 0%| F| |TAMS 0x0000000606000000| PB 0x0000000606000000| Untracked | 0 -|1023|0x0000000606800000, 0x0000000606800000, 0x0000000607000000| 0%| F| |TAMS 0x0000000606800000| PB 0x0000000606800000| Untracked | 0 -|1024|0x0000000607000000, 0x0000000607000000, 0x0000000607800000| 0%| F| |TAMS 0x0000000607000000| PB 0x0000000607000000| Untracked | 0 -|1025|0x0000000607800000, 0x0000000607800000, 0x0000000608000000| 0%| F| |TAMS 0x0000000607800000| PB 0x0000000607800000| Untracked | 0 -|1026|0x0000000608000000, 0x0000000608000000, 0x0000000608800000| 0%| F| |TAMS 0x0000000608000000| PB 0x0000000608000000| Untracked | 0 -|1027|0x0000000608800000, 0x0000000608800000, 0x0000000609000000| 0%| F| |TAMS 0x0000000608800000| PB 0x0000000608800000| Untracked | 0 -|1028|0x0000000609000000, 0x0000000609000000, 0x0000000609800000| 0%| F| |TAMS 0x0000000609000000| PB 0x0000000609000000| Untracked | 0 -|1029|0x0000000609800000, 0x0000000609800000, 0x000000060a000000| 0%| F| |TAMS 0x0000000609800000| PB 0x0000000609800000| Untracked | 0 -|1030|0x000000060a000000, 0x000000060a000000, 0x000000060a800000| 0%| F| |TAMS 0x000000060a000000| PB 0x000000060a000000| Untracked | 0 -|1031|0x000000060a800000, 0x000000060a800000, 0x000000060b000000| 0%| F| |TAMS 0x000000060a800000| PB 0x000000060a800000| Untracked | 0 -|1032|0x000000060b000000, 0x000000060b000000, 0x000000060b800000| 0%| F| |TAMS 0x000000060b000000| PB 0x000000060b000000| Untracked | 0 -|1033|0x000000060b800000, 0x000000060b800000, 0x000000060c000000| 0%| F| |TAMS 0x000000060b800000| PB 0x000000060b800000| Untracked | 0 -|1034|0x000000060c000000, 0x000000060c000000, 0x000000060c800000| 0%| F| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 -|1035|0x000000060c800000, 0x000000060c800000, 0x000000060d000000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 -|1036|0x000000060d000000, 0x000000060d000000, 0x000000060d800000| 0%| F| |TAMS 0x000000060d000000| PB 0x000000060d000000| Untracked | 0 -|1037|0x000000060d800000, 0x000000060d800000, 0x000000060e000000| 0%| F| |TAMS 0x000000060d800000| PB 0x000000060d800000| Untracked | 0 -|1038|0x000000060e000000, 0x000000060e000000, 0x000000060e800000| 0%| F| |TAMS 0x000000060e000000| PB 0x000000060e000000| Untracked | 0 -|1039|0x000000060e800000, 0x000000060e800000, 0x000000060f000000| 0%| F| |TAMS 0x000000060e800000| PB 0x000000060e800000| Untracked | 0 -|1040|0x000000060f000000, 0x000000060f000000, 0x000000060f800000| 0%| F| |TAMS 0x000000060f000000| PB 0x000000060f000000| Untracked | 0 -|1041|0x000000060f800000, 0x000000060f800000, 0x0000000610000000| 0%| F| |TAMS 0x000000060f800000| PB 0x000000060f800000| Untracked | 0 -|1042|0x0000000610000000, 0x0000000610000000, 0x0000000610800000| 0%| F| |TAMS 0x0000000610000000| PB 0x0000000610000000| Untracked | 0 -|1043|0x0000000610800000, 0x0000000610800000, 0x0000000611000000| 0%| F| |TAMS 0x0000000610800000| PB 0x0000000610800000| Untracked | 0 -|1044|0x0000000611000000, 0x0000000611000000, 0x0000000611800000| 0%| F| |TAMS 0x0000000611000000| PB 0x0000000611000000| Untracked | 0 -|1045|0x0000000611800000, 0x0000000611800000, 0x0000000612000000| 0%| F| |TAMS 0x0000000611800000| PB 0x0000000611800000| Untracked | 0 -|1046|0x0000000612000000, 0x0000000612000000, 0x0000000612800000| 0%| F| |TAMS 0x0000000612000000| PB 0x0000000612000000| Untracked | 0 -|1047|0x0000000612800000, 0x0000000612800000, 0x0000000613000000| 0%| F| |TAMS 0x0000000612800000| PB 0x0000000612800000| Untracked | 0 -|1048|0x0000000613000000, 0x0000000613000000, 0x0000000613800000| 0%| F| |TAMS 0x0000000613000000| PB 0x0000000613000000| Untracked | 0 -|1049|0x0000000613800000, 0x0000000613800000, 0x0000000614000000| 0%| F| |TAMS 0x0000000613800000| PB 0x0000000613800000| Untracked | 0 -|1050|0x0000000614000000, 0x0000000614000000, 0x0000000614800000| 0%| F| |TAMS 0x0000000614000000| PB 0x0000000614000000| Untracked | 0 -|1051|0x0000000614800000, 0x0000000614800000, 0x0000000615000000| 0%| F| |TAMS 0x0000000614800000| PB 0x0000000614800000| Untracked | 0 -|1052|0x0000000615000000, 0x0000000615000000, 0x0000000615800000| 0%| F| |TAMS 0x0000000615000000| PB 0x0000000615000000| Untracked | 0 -|1053|0x0000000615800000, 0x0000000615800000, 0x0000000616000000| 0%| F| |TAMS 0x0000000615800000| PB 0x0000000615800000| Untracked | 0 -|1054|0x0000000616000000, 0x0000000616000000, 0x0000000616800000| 0%| F| |TAMS 0x0000000616000000| PB 0x0000000616000000| Untracked | 0 -|1055|0x0000000616800000, 0x0000000616800000, 0x0000000617000000| 0%| F| |TAMS 0x0000000616800000| PB 0x0000000616800000| Untracked | 0 -|1056|0x0000000617000000, 0x0000000617000000, 0x0000000617800000| 0%| F| |TAMS 0x0000000617000000| PB 0x0000000617000000| Untracked | 0 -|1057|0x0000000617800000, 0x0000000617800000, 0x0000000618000000| 0%| F| |TAMS 0x0000000617800000| PB 0x0000000617800000| Untracked | 0 -|1058|0x0000000618000000, 0x0000000618000000, 0x0000000618800000| 0%| F| |TAMS 0x0000000618000000| PB 0x0000000618000000| Untracked | 0 -|1059|0x0000000618800000, 0x0000000618800000, 0x0000000619000000| 0%| F| |TAMS 0x0000000618800000| PB 0x0000000618800000| Untracked | 0 -|1060|0x0000000619000000, 0x0000000619000000, 0x0000000619800000| 0%| F| |TAMS 0x0000000619000000| PB 0x0000000619000000| Untracked | 0 -|1061|0x0000000619800000, 0x0000000619800000, 0x000000061a000000| 0%| F| |TAMS 0x0000000619800000| PB 0x0000000619800000| Untracked | 0 -|1062|0x000000061a000000, 0x000000061a000000, 0x000000061a800000| 0%| F| |TAMS 0x000000061a000000| PB 0x000000061a000000| Untracked | 0 -|1063|0x000000061a800000, 0x000000061a800000, 0x000000061b000000| 0%| F| |TAMS 0x000000061a800000| PB 0x000000061a800000| Untracked | 0 -|1064|0x000000061b000000, 0x000000061b000000, 0x000000061b800000| 0%| F| |TAMS 0x000000061b000000| PB 0x000000061b000000| Untracked | 0 -|1065|0x000000061b800000, 0x000000061b800000, 0x000000061c000000| 0%| F| |TAMS 0x000000061b800000| PB 0x000000061b800000| Untracked | 0 -|1066|0x000000061c000000, 0x000000061c000000, 0x000000061c800000| 0%| F| |TAMS 0x000000061c000000| PB 0x000000061c000000| Untracked | 0 -|1067|0x000000061c800000, 0x000000061c800000, 0x000000061d000000| 0%| F| |TAMS 0x000000061c800000| PB 0x000000061c800000| Untracked | 0 -|1068|0x000000061d000000, 0x000000061d000000, 0x000000061d800000| 0%| F| |TAMS 0x000000061d000000| PB 0x000000061d000000| Untracked | 0 -|1069|0x000000061d800000, 0x000000061d800000, 0x000000061e000000| 0%| F| |TAMS 0x000000061d800000| PB 0x000000061d800000| Untracked | 0 -|1070|0x000000061e000000, 0x000000061e000000, 0x000000061e800000| 0%| F| |TAMS 0x000000061e000000| PB 0x000000061e000000| Untracked | 0 -|1071|0x000000061e800000, 0x000000061e800000, 0x000000061f000000| 0%| F| |TAMS 0x000000061e800000| PB 0x000000061e800000| Untracked | 0 -|1072|0x000000061f000000, 0x000000061f000000, 0x000000061f800000| 0%| F| |TAMS 0x000000061f000000| PB 0x000000061f000000| Untracked | 0 -|1073|0x000000061f800000, 0x000000061f800000, 0x0000000620000000| 0%| F| |TAMS 0x000000061f800000| PB 0x000000061f800000| Untracked | 0 -|1074|0x0000000620000000, 0x0000000620000000, 0x0000000620800000| 0%| F| |TAMS 0x0000000620000000| PB 0x0000000620000000| Untracked | 0 -|1075|0x0000000620800000, 0x0000000620800000, 0x0000000621000000| 0%| F| |TAMS 0x0000000620800000| PB 0x0000000620800000| Untracked | 0 -|1076|0x0000000621000000, 0x0000000621000000, 0x0000000621800000| 0%| F| |TAMS 0x0000000621000000| PB 0x0000000621000000| Untracked | 0 -|1077|0x0000000621800000, 0x0000000621800000, 0x0000000622000000| 0%| F| |TAMS 0x0000000621800000| PB 0x0000000621800000| Untracked | 0 -|1078|0x0000000622000000, 0x0000000622000000, 0x0000000622800000| 0%| F| |TAMS 0x0000000622000000| PB 0x0000000622000000| Untracked | 0 -|1079|0x0000000622800000, 0x0000000622800000, 0x0000000623000000| 0%| F| |TAMS 0x0000000622800000| PB 0x0000000622800000| Untracked | 0 -|1080|0x0000000623000000, 0x0000000623000000, 0x0000000623800000| 0%| F| |TAMS 0x0000000623000000| PB 0x0000000623000000| Untracked | 0 -|1081|0x0000000623800000, 0x0000000623800000, 0x0000000624000000| 0%| F| |TAMS 0x0000000623800000| PB 0x0000000623800000| Untracked | 0 -|1082|0x0000000624000000, 0x0000000624000000, 0x0000000624800000| 0%| F| |TAMS 0x0000000624000000| PB 0x0000000624000000| Untracked | 0 -|1083|0x0000000624800000, 0x0000000624800000, 0x0000000625000000| 0%| F| |TAMS 0x0000000624800000| PB 0x0000000624800000| Untracked | 0 -|1084|0x0000000625000000, 0x0000000625000000, 0x0000000625800000| 0%| F| |TAMS 0x0000000625000000| PB 0x0000000625000000| Untracked | 0 -|1085|0x0000000625800000, 0x0000000625800000, 0x0000000626000000| 0%| F| |TAMS 0x0000000625800000| PB 0x0000000625800000| Untracked | 0 -|1086|0x0000000626000000, 0x0000000626000000, 0x0000000626800000| 0%| F| |TAMS 0x0000000626000000| PB 0x0000000626000000| Untracked | 0 -|1087|0x0000000626800000, 0x0000000626800000, 0x0000000627000000| 0%| F| |TAMS 0x0000000626800000| PB 0x0000000626800000| Untracked | 0 -|1088|0x0000000627000000, 0x0000000627000000, 0x0000000627800000| 0%| F| |TAMS 0x0000000627000000| PB 0x0000000627000000| Untracked | 0 -|1089|0x0000000627800000, 0x0000000627800000, 0x0000000628000000| 0%| F| |TAMS 0x0000000627800000| PB 0x0000000627800000| Untracked | 0 -|1090|0x0000000628000000, 0x0000000628000000, 0x0000000628800000| 0%| F| |TAMS 0x0000000628000000| PB 0x0000000628000000| Untracked | 0 -|1091|0x0000000628800000, 0x0000000628800000, 0x0000000629000000| 0%| F| |TAMS 0x0000000628800000| PB 0x0000000628800000| Untracked | 0 -|1092|0x0000000629000000, 0x0000000629000000, 0x0000000629800000| 0%| F| |TAMS 0x0000000629000000| PB 0x0000000629000000| Untracked | 0 -|1093|0x0000000629800000, 0x0000000629800000, 0x000000062a000000| 0%| F| |TAMS 0x0000000629800000| PB 0x0000000629800000| Untracked | 0 -|1094|0x000000062a000000, 0x000000062a000000, 0x000000062a800000| 0%| F| |TAMS 0x000000062a000000| PB 0x000000062a000000| Untracked | 0 -|1095|0x000000062a800000, 0x000000062a800000, 0x000000062b000000| 0%| F| |TAMS 0x000000062a800000| PB 0x000000062a800000| Untracked | 0 -|1096|0x000000062b000000, 0x000000062b000000, 0x000000062b800000| 0%| F| |TAMS 0x000000062b000000| PB 0x000000062b000000| Untracked | 0 -|1097|0x000000062b800000, 0x000000062b800000, 0x000000062c000000| 0%| F| |TAMS 0x000000062b800000| PB 0x000000062b800000| Untracked | 0 -|1098|0x000000062c000000, 0x000000062c000000, 0x000000062c800000| 0%| F| |TAMS 0x000000062c000000| PB 0x000000062c000000| Untracked | 0 -|1099|0x000000062c800000, 0x000000062c800000, 0x000000062d000000| 0%| F| |TAMS 0x000000062c800000| PB 0x000000062c800000| Untracked | 0 -|1100|0x000000062d000000, 0x000000062d000000, 0x000000062d800000| 0%| F| |TAMS 0x000000062d000000| PB 0x000000062d000000| Untracked | 0 -|1101|0x000000062d800000, 0x000000062d800000, 0x000000062e000000| 0%| F| |TAMS 0x000000062d800000| PB 0x000000062d800000| Untracked | 0 -|1102|0x000000062e000000, 0x000000062e000000, 0x000000062e800000| 0%| F| |TAMS 0x000000062e000000| PB 0x000000062e000000| Untracked | 0 -|1103|0x000000062e800000, 0x000000062e800000, 0x000000062f000000| 0%| F| |TAMS 0x000000062e800000| PB 0x000000062e800000| Untracked | 0 -|1104|0x000000062f000000, 0x000000062f000000, 0x000000062f800000| 0%| F| |TAMS 0x000000062f000000| PB 0x000000062f000000| Untracked | 0 -|1105|0x000000062f800000, 0x000000062f800000, 0x0000000630000000| 0%| F| |TAMS 0x000000062f800000| PB 0x000000062f800000| Untracked | 0 -|1106|0x0000000630000000, 0x0000000630000000, 0x0000000630800000| 0%| F| |TAMS 0x0000000630000000| PB 0x0000000630000000| Untracked | 0 -|1107|0x0000000630800000, 0x0000000630800000, 0x0000000631000000| 0%| F| |TAMS 0x0000000630800000| PB 0x0000000630800000| Untracked | 0 -|1108|0x0000000631000000, 0x0000000631000000, 0x0000000631800000| 0%| F| |TAMS 0x0000000631000000| PB 0x0000000631000000| Untracked | 0 -|1109|0x0000000631800000, 0x0000000631800000, 0x0000000632000000| 0%| F| |TAMS 0x0000000631800000| PB 0x0000000631800000| Untracked | 0 -|1110|0x0000000632000000, 0x0000000632000000, 0x0000000632800000| 0%| F| |TAMS 0x0000000632000000| PB 0x0000000632000000| Untracked | 0 -|1111|0x0000000632800000, 0x0000000632800000, 0x0000000633000000| 0%| F| |TAMS 0x0000000632800000| PB 0x0000000632800000| Untracked | 0 -|1112|0x0000000633000000, 0x0000000633000000, 0x0000000633800000| 0%| F| |TAMS 0x0000000633000000| PB 0x0000000633000000| Untracked | 0 -|1113|0x0000000633800000, 0x0000000633800000, 0x0000000634000000| 0%| F| |TAMS 0x0000000633800000| PB 0x0000000633800000| Untracked | 0 -|1114|0x0000000634000000, 0x0000000634000000, 0x0000000634800000| 0%| F| |TAMS 0x0000000634000000| PB 0x0000000634000000| Untracked | 0 -|1115|0x0000000634800000, 0x0000000634800000, 0x0000000635000000| 0%| F| |TAMS 0x0000000634800000| PB 0x0000000634800000| Untracked | 0 -|1116|0x0000000635000000, 0x0000000635000000, 0x0000000635800000| 0%| F| |TAMS 0x0000000635000000| PB 0x0000000635000000| Untracked | 0 -|1117|0x0000000635800000, 0x0000000635800000, 0x0000000636000000| 0%| F| |TAMS 0x0000000635800000| PB 0x0000000635800000| Untracked | 0 -|1118|0x0000000636000000, 0x0000000636000000, 0x0000000636800000| 0%| F| |TAMS 0x0000000636000000| PB 0x0000000636000000| Untracked | 0 -|1119|0x0000000636800000, 0x0000000636800000, 0x0000000637000000| 0%| F| |TAMS 0x0000000636800000| PB 0x0000000636800000| Untracked | 0 -|1120|0x0000000637000000, 0x0000000637000000, 0x0000000637800000| 0%| F| |TAMS 0x0000000637000000| PB 0x0000000637000000| Untracked | 0 -|1121|0x0000000637800000, 0x0000000637800000, 0x0000000638000000| 0%| F| |TAMS 0x0000000637800000| PB 0x0000000637800000| Untracked | 0 -|1122|0x0000000638000000, 0x0000000638000000, 0x0000000638800000| 0%| F| |TAMS 0x0000000638000000| PB 0x0000000638000000| Untracked | 0 -|1123|0x0000000638800000, 0x0000000638800000, 0x0000000639000000| 0%| F| |TAMS 0x0000000638800000| PB 0x0000000638800000| Untracked | 0 -|1124|0x0000000639000000, 0x0000000639000000, 0x0000000639800000| 0%| F| |TAMS 0x0000000639000000| PB 0x0000000639000000| Untracked | 0 -|1125|0x0000000639800000, 0x0000000639800000, 0x000000063a000000| 0%| F| |TAMS 0x0000000639800000| PB 0x0000000639800000| Untracked | 0 -|1126|0x000000063a000000, 0x000000063a000000, 0x000000063a800000| 0%| F| |TAMS 0x000000063a000000| PB 0x000000063a000000| Untracked | 0 -|1127|0x000000063a800000, 0x000000063a800000, 0x000000063b000000| 0%| F| |TAMS 0x000000063a800000| PB 0x000000063a800000| Untracked | 0 -|1128|0x000000063b000000, 0x000000063b000000, 0x000000063b800000| 0%| F| |TAMS 0x000000063b000000| PB 0x000000063b000000| Untracked | 0 -|1129|0x000000063b800000, 0x000000063b800000, 0x000000063c000000| 0%| F| |TAMS 0x000000063b800000| PB 0x000000063b800000| Untracked | 0 -|1130|0x000000063c000000, 0x000000063c000000, 0x000000063c800000| 0%| F| |TAMS 0x000000063c000000| PB 0x000000063c000000| Untracked | 0 -|1131|0x000000063c800000, 0x000000063c800000, 0x000000063d000000| 0%| F| |TAMS 0x000000063c800000| PB 0x000000063c800000| Untracked | 0 -|1132|0x000000063d000000, 0x000000063d000000, 0x000000063d800000| 0%| F| |TAMS 0x000000063d000000| PB 0x000000063d000000| Untracked | 0 -|1133|0x000000063d800000, 0x000000063d800000, 0x000000063e000000| 0%| F| |TAMS 0x000000063d800000| PB 0x000000063d800000| Untracked | 0 -|1134|0x000000063e000000, 0x000000063e000000, 0x000000063e800000| 0%| F| |TAMS 0x000000063e000000| PB 0x000000063e000000| Untracked | 0 -|1135|0x000000063e800000, 0x000000063e800000, 0x000000063f000000| 0%| F| |TAMS 0x000000063e800000| PB 0x000000063e800000| Untracked | 0 -|1136|0x000000063f000000, 0x000000063f000000, 0x000000063f800000| 0%| F| |TAMS 0x000000063f000000| PB 0x000000063f000000| Untracked | 0 -|1137|0x000000063f800000, 0x000000063f800000, 0x0000000640000000| 0%| F| |TAMS 0x000000063f800000| PB 0x000000063f800000| Untracked | 0 -|1138|0x0000000640000000, 0x0000000640000000, 0x0000000640800000| 0%| F| |TAMS 0x0000000640000000| PB 0x0000000640000000| Untracked | 0 -|1139|0x0000000640800000, 0x0000000640800000, 0x0000000641000000| 0%| F| |TAMS 0x0000000640800000| PB 0x0000000640800000| Untracked | 0 -|1140|0x0000000641000000, 0x0000000641000000, 0x0000000641800000| 0%| F| |TAMS 0x0000000641000000| PB 0x0000000641000000| Untracked | 0 -|1141|0x0000000641800000, 0x0000000641800000, 0x0000000642000000| 0%| F| |TAMS 0x0000000641800000| PB 0x0000000641800000| Untracked | 0 -|1142|0x0000000642000000, 0x0000000642000000, 0x0000000642800000| 0%| F| |TAMS 0x0000000642000000| PB 0x0000000642000000| Untracked | 0 -|1143|0x0000000642800000, 0x0000000642800000, 0x0000000643000000| 0%| F| |TAMS 0x0000000642800000| PB 0x0000000642800000| Untracked | 0 -|1144|0x0000000643000000, 0x0000000643000000, 0x0000000643800000| 0%| F| |TAMS 0x0000000643000000| PB 0x0000000643000000| Untracked | 0 -|1145|0x0000000643800000, 0x0000000643800000, 0x0000000644000000| 0%| F| |TAMS 0x0000000643800000| PB 0x0000000643800000| Untracked | 0 -|1146|0x0000000644000000, 0x0000000644000000, 0x0000000644800000| 0%| F| |TAMS 0x0000000644000000| PB 0x0000000644000000| Untracked | 0 -|1147|0x0000000644800000, 0x0000000644800000, 0x0000000645000000| 0%| F| |TAMS 0x0000000644800000| PB 0x0000000644800000| Untracked | 0 -|1148|0x0000000645000000, 0x0000000645000000, 0x0000000645800000| 0%| F| |TAMS 0x0000000645000000| PB 0x0000000645000000| Untracked | 0 -|1149|0x0000000645800000, 0x0000000645800000, 0x0000000646000000| 0%| F| |TAMS 0x0000000645800000| PB 0x0000000645800000| Untracked | 0 -|1150|0x0000000646000000, 0x0000000646000000, 0x0000000646800000| 0%| F| |TAMS 0x0000000646000000| PB 0x0000000646000000| Untracked | 0 -|1151|0x0000000646800000, 0x0000000646800000, 0x0000000647000000| 0%| F| |TAMS 0x0000000646800000| PB 0x0000000646800000| Untracked | 0 -|1152|0x0000000647000000, 0x0000000647000000, 0x0000000647800000| 0%| F| |TAMS 0x0000000647000000| PB 0x0000000647000000| Untracked | 0 -|1153|0x0000000647800000, 0x0000000647800000, 0x0000000648000000| 0%| F| |TAMS 0x0000000647800000| PB 0x0000000647800000| Untracked | 0 -|1154|0x0000000648000000, 0x0000000648000000, 0x0000000648800000| 0%| F| |TAMS 0x0000000648000000| PB 0x0000000648000000| Untracked | 0 -|1155|0x0000000648800000, 0x0000000648800000, 0x0000000649000000| 0%| F| |TAMS 0x0000000648800000| PB 0x0000000648800000| Untracked | 0 -|1156|0x0000000649000000, 0x0000000649000000, 0x0000000649800000| 0%| F| |TAMS 0x0000000649000000| PB 0x0000000649000000| Untracked | 0 -|1157|0x0000000649800000, 0x0000000649800000, 0x000000064a000000| 0%| F| |TAMS 0x0000000649800000| PB 0x0000000649800000| Untracked | 0 -|1158|0x000000064a000000, 0x000000064a000000, 0x000000064a800000| 0%| F| |TAMS 0x000000064a000000| PB 0x000000064a000000| Untracked | 0 -|1159|0x000000064a800000, 0x000000064a800000, 0x000000064b000000| 0%| F| |TAMS 0x000000064a800000| PB 0x000000064a800000| Untracked | 0 -|1160|0x000000064b000000, 0x000000064b000000, 0x000000064b800000| 0%| F| |TAMS 0x000000064b000000| PB 0x000000064b000000| Untracked | 0 -|1161|0x000000064b800000, 0x000000064b800000, 0x000000064c000000| 0%| F| |TAMS 0x000000064b800000| PB 0x000000064b800000| Untracked | 0 -|1162|0x000000064c000000, 0x000000064c000000, 0x000000064c800000| 0%| F| |TAMS 0x000000064c000000| PB 0x000000064c000000| Untracked | 0 -|1163|0x000000064c800000, 0x000000064c800000, 0x000000064d000000| 0%| F| |TAMS 0x000000064c800000| PB 0x000000064c800000| Untracked | 0 -|1164|0x000000064d000000, 0x000000064d000000, 0x000000064d800000| 0%| F| |TAMS 0x000000064d000000| PB 0x000000064d000000| Untracked | 0 -|1165|0x000000064d800000, 0x000000064d800000, 0x000000064e000000| 0%| F| |TAMS 0x000000064d800000| PB 0x000000064d800000| Untracked | 0 -|1166|0x000000064e000000, 0x000000064e000000, 0x000000064e800000| 0%| F| |TAMS 0x000000064e000000| PB 0x000000064e000000| Untracked | 0 -|1167|0x000000064e800000, 0x000000064e800000, 0x000000064f000000| 0%| F| |TAMS 0x000000064e800000| PB 0x000000064e800000| Untracked | 0 -|1168|0x000000064f000000, 0x000000064f000000, 0x000000064f800000| 0%| F| |TAMS 0x000000064f000000| PB 0x000000064f000000| Untracked | 0 -|1169|0x000000064f800000, 0x000000064f800000, 0x0000000650000000| 0%| F| |TAMS 0x000000064f800000| PB 0x000000064f800000| Untracked | 0 -|1170|0x0000000650000000, 0x0000000650000000, 0x0000000650800000| 0%| F| |TAMS 0x0000000650000000| PB 0x0000000650000000| Untracked | 0 -|1171|0x0000000650800000, 0x0000000650800000, 0x0000000651000000| 0%| F| |TAMS 0x0000000650800000| PB 0x0000000650800000| Untracked | 0 -|1172|0x0000000651000000, 0x0000000651000000, 0x0000000651800000| 0%| F| |TAMS 0x0000000651000000| PB 0x0000000651000000| Untracked | 0 -|1173|0x0000000651800000, 0x0000000651800000, 0x0000000652000000| 0%| F| |TAMS 0x0000000651800000| PB 0x0000000651800000| Untracked | 0 -|1174|0x0000000652000000, 0x0000000652000000, 0x0000000652800000| 0%| F| |TAMS 0x0000000652000000| PB 0x0000000652000000| Untracked | 0 -|1175|0x0000000652800000, 0x0000000652800000, 0x0000000653000000| 0%| F| |TAMS 0x0000000652800000| PB 0x0000000652800000| Untracked | 0 -|1176|0x0000000653000000, 0x0000000653000000, 0x0000000653800000| 0%| F| |TAMS 0x0000000653000000| PB 0x0000000653000000| Untracked | 0 -|1177|0x0000000653800000, 0x0000000653800000, 0x0000000654000000| 0%| F| |TAMS 0x0000000653800000| PB 0x0000000653800000| Untracked | 0 -|1178|0x0000000654000000, 0x0000000654000000, 0x0000000654800000| 0%| F| |TAMS 0x0000000654000000| PB 0x0000000654000000| Untracked | 0 -|1179|0x0000000654800000, 0x0000000654800000, 0x0000000655000000| 0%| F| |TAMS 0x0000000654800000| PB 0x0000000654800000| Untracked | 0 -|1180|0x0000000655000000, 0x0000000655000000, 0x0000000655800000| 0%| F| |TAMS 0x0000000655000000| PB 0x0000000655000000| Untracked | 0 -|1181|0x0000000655800000, 0x0000000655800000, 0x0000000656000000| 0%| F| |TAMS 0x0000000655800000| PB 0x0000000655800000| Untracked | 0 -|1182|0x0000000656000000, 0x0000000656000000, 0x0000000656800000| 0%| F| |TAMS 0x0000000656000000| PB 0x0000000656000000| Untracked | 0 -|1183|0x0000000656800000, 0x0000000656800000, 0x0000000657000000| 0%| F| |TAMS 0x0000000656800000| PB 0x0000000656800000| Untracked | 0 -|1184|0x0000000657000000, 0x0000000657000000, 0x0000000657800000| 0%| F| |TAMS 0x0000000657000000| PB 0x0000000657000000| Untracked | 0 -|1185|0x0000000657800000, 0x0000000657800000, 0x0000000658000000| 0%| F| |TAMS 0x0000000657800000| PB 0x0000000657800000| Untracked | 0 -|1186|0x0000000658000000, 0x0000000658000000, 0x0000000658800000| 0%| F| |TAMS 0x0000000658000000| PB 0x0000000658000000| Untracked | 0 -|1187|0x0000000658800000, 0x0000000658800000, 0x0000000659000000| 0%| F| |TAMS 0x0000000658800000| PB 0x0000000658800000| Untracked | 0 -|1188|0x0000000659000000, 0x0000000659000000, 0x0000000659800000| 0%| F| |TAMS 0x0000000659000000| PB 0x0000000659000000| Untracked | 0 -|1189|0x0000000659800000, 0x0000000659800000, 0x000000065a000000| 0%| F| |TAMS 0x0000000659800000| PB 0x0000000659800000| Untracked | 0 -|1190|0x000000065a000000, 0x000000065a000000, 0x000000065a800000| 0%| F| |TAMS 0x000000065a000000| PB 0x000000065a000000| Untracked | 0 -|1191|0x000000065a800000, 0x000000065a800000, 0x000000065b000000| 0%| F| |TAMS 0x000000065a800000| PB 0x000000065a800000| Untracked | 0 -|1192|0x000000065b000000, 0x000000065b000000, 0x000000065b800000| 0%| F| |TAMS 0x000000065b000000| PB 0x000000065b000000| Untracked | 0 -|1193|0x000000065b800000, 0x000000065b800000, 0x000000065c000000| 0%| F| |TAMS 0x000000065b800000| PB 0x000000065b800000| Untracked | 0 -|1194|0x000000065c000000, 0x000000065c000000, 0x000000065c800000| 0%| F| |TAMS 0x000000065c000000| PB 0x000000065c000000| Untracked | 0 -|1195|0x000000065c800000, 0x000000065c800000, 0x000000065d000000| 0%| F| |TAMS 0x000000065c800000| PB 0x000000065c800000| Untracked | 0 -|1196|0x000000065d000000, 0x000000065d000000, 0x000000065d800000| 0%| F| |TAMS 0x000000065d000000| PB 0x000000065d000000| Untracked | 0 -|1197|0x000000065d800000, 0x000000065d800000, 0x000000065e000000| 0%| F| |TAMS 0x000000065d800000| PB 0x000000065d800000| Untracked | 0 -|1198|0x000000065e000000, 0x000000065e000000, 0x000000065e800000| 0%| F| |TAMS 0x000000065e000000| PB 0x000000065e000000| Untracked | 0 -|1199|0x000000065e800000, 0x000000065e800000, 0x000000065f000000| 0%| F| |TAMS 0x000000065e800000| PB 0x000000065e800000| Untracked | 0 -|1200|0x000000065f000000, 0x000000065f000000, 0x000000065f800000| 0%| F| |TAMS 0x000000065f000000| PB 0x000000065f000000| Untracked | 0 -|1201|0x000000065f800000, 0x000000065f800000, 0x0000000660000000| 0%| F| |TAMS 0x000000065f800000| PB 0x000000065f800000| Untracked | 0 -|1202|0x0000000660000000, 0x0000000660000000, 0x0000000660800000| 0%| F| |TAMS 0x0000000660000000| PB 0x0000000660000000| Untracked | 0 -|1203|0x0000000660800000, 0x0000000660800000, 0x0000000661000000| 0%| F| |TAMS 0x0000000660800000| PB 0x0000000660800000| Untracked | 0 -|1204|0x0000000661000000, 0x0000000661000000, 0x0000000661800000| 0%| F| |TAMS 0x0000000661000000| PB 0x0000000661000000| Untracked | 0 -|1205|0x0000000661800000, 0x0000000661800000, 0x0000000662000000| 0%| F| |TAMS 0x0000000661800000| PB 0x0000000661800000| Untracked | 0 -|1206|0x0000000662000000, 0x0000000662000000, 0x0000000662800000| 0%| F| |TAMS 0x0000000662000000| PB 0x0000000662000000| Untracked | 0 -|1207|0x0000000662800000, 0x0000000662800000, 0x0000000663000000| 0%| F| |TAMS 0x0000000662800000| PB 0x0000000662800000| Untracked | 0 -|1208|0x0000000663000000, 0x0000000663000000, 0x0000000663800000| 0%| F| |TAMS 0x0000000663000000| PB 0x0000000663000000| Untracked | 0 -|1209|0x0000000663800000, 0x0000000663800000, 0x0000000664000000| 0%| F| |TAMS 0x0000000663800000| PB 0x0000000663800000| Untracked | 0 -|1210|0x0000000664000000, 0x0000000664000000, 0x0000000664800000| 0%| F| |TAMS 0x0000000664000000| PB 0x0000000664000000| Untracked | 0 -|1211|0x0000000664800000, 0x0000000664800000, 0x0000000665000000| 0%| F| |TAMS 0x0000000664800000| PB 0x0000000664800000| Untracked | 0 -|1212|0x0000000665000000, 0x0000000665000000, 0x0000000665800000| 0%| F| |TAMS 0x0000000665000000| PB 0x0000000665000000| Untracked | 0 -|1213|0x0000000665800000, 0x0000000665800000, 0x0000000666000000| 0%| F| |TAMS 0x0000000665800000| PB 0x0000000665800000| Untracked | 0 -|1214|0x0000000666000000, 0x0000000666000000, 0x0000000666800000| 0%| F| |TAMS 0x0000000666000000| PB 0x0000000666000000| Untracked | 0 -|1215|0x0000000666800000, 0x0000000666800000, 0x0000000667000000| 0%| F| |TAMS 0x0000000666800000| PB 0x0000000666800000| Untracked | 0 -|1216|0x0000000667000000, 0x0000000667000000, 0x0000000667800000| 0%| F| |TAMS 0x0000000667000000| PB 0x0000000667000000| Untracked | 0 -|1217|0x0000000667800000, 0x0000000667800000, 0x0000000668000000| 0%| F| |TAMS 0x0000000667800000| PB 0x0000000667800000| Untracked | 0 -|1218|0x0000000668000000, 0x0000000668000000, 0x0000000668800000| 0%| F| |TAMS 0x0000000668000000| PB 0x0000000668000000| Untracked | 0 -|1219|0x0000000668800000, 0x0000000668800000, 0x0000000669000000| 0%| F| |TAMS 0x0000000668800000| PB 0x0000000668800000| Untracked | 0 -|1220|0x0000000669000000, 0x0000000669000000, 0x0000000669800000| 0%| F| |TAMS 0x0000000669000000| PB 0x0000000669000000| Untracked | 0 -|1221|0x0000000669800000, 0x0000000669800000, 0x000000066a000000| 0%| F| |TAMS 0x0000000669800000| PB 0x0000000669800000| Untracked | 0 -|1222|0x000000066a000000, 0x000000066a000000, 0x000000066a800000| 0%| F| |TAMS 0x000000066a000000| PB 0x000000066a000000| Untracked | 0 -|1223|0x000000066a800000, 0x000000066a800000, 0x000000066b000000| 0%| F| |TAMS 0x000000066a800000| PB 0x000000066a800000| Untracked | 0 -|1224|0x000000066b000000, 0x000000066b000000, 0x000000066b800000| 0%| F| |TAMS 0x000000066b000000| PB 0x000000066b000000| Untracked | 0 -|1225|0x000000066b800000, 0x000000066b800000, 0x000000066c000000| 0%| F| |TAMS 0x000000066b800000| PB 0x000000066b800000| Untracked | 0 -|1226|0x000000066c000000, 0x000000066c000000, 0x000000066c800000| 0%| F| |TAMS 0x000000066c000000| PB 0x000000066c000000| Untracked | 0 -|1227|0x000000066c800000, 0x000000066c800000, 0x000000066d000000| 0%| F| |TAMS 0x000000066c800000| PB 0x000000066c800000| Untracked | 0 -|1228|0x000000066d000000, 0x000000066d000000, 0x000000066d800000| 0%| F| |TAMS 0x000000066d000000| PB 0x000000066d000000| Untracked | 0 -|1229|0x000000066d800000, 0x000000066d800000, 0x000000066e000000| 0%| F| |TAMS 0x000000066d800000| PB 0x000000066d800000| Untracked | 0 -|1230|0x000000066e000000, 0x000000066e000000, 0x000000066e800000| 0%| F| |TAMS 0x000000066e000000| PB 0x000000066e000000| Untracked | 0 -|1231|0x000000066e800000, 0x000000066e800000, 0x000000066f000000| 0%| F| |TAMS 0x000000066e800000| PB 0x000000066e800000| Untracked | 0 -|1232|0x000000066f000000, 0x000000066f000000, 0x000000066f800000| 0%| F| |TAMS 0x000000066f000000| PB 0x000000066f000000| Untracked | 0 -|1233|0x000000066f800000, 0x000000066f800000, 0x0000000670000000| 0%| F| |TAMS 0x000000066f800000| PB 0x000000066f800000| Untracked | 0 -|1234|0x0000000670000000, 0x0000000670000000, 0x0000000670800000| 0%| F| |TAMS 0x0000000670000000| PB 0x0000000670000000| Untracked | 0 -|1235|0x0000000670800000, 0x0000000670800000, 0x0000000671000000| 0%| F| |TAMS 0x0000000670800000| PB 0x0000000670800000| Untracked | 0 -|1236|0x0000000671000000, 0x0000000671000000, 0x0000000671800000| 0%| F| |TAMS 0x0000000671000000| PB 0x0000000671000000| Untracked | 0 -|1237|0x0000000671800000, 0x0000000671800000, 0x0000000672000000| 0%| F| |TAMS 0x0000000671800000| PB 0x0000000671800000| Untracked | 0 -|1238|0x0000000672000000, 0x0000000672000000, 0x0000000672800000| 0%| F| |TAMS 0x0000000672000000| PB 0x0000000672000000| Untracked | 0 -|1239|0x0000000672800000, 0x0000000672800000, 0x0000000673000000| 0%| F| |TAMS 0x0000000672800000| PB 0x0000000672800000| Untracked | 0 -|1240|0x0000000673000000, 0x0000000673000000, 0x0000000673800000| 0%| F| |TAMS 0x0000000673000000| PB 0x0000000673000000| Untracked | 0 -|1241|0x0000000673800000, 0x0000000673800000, 0x0000000674000000| 0%| F| |TAMS 0x0000000673800000| PB 0x0000000673800000| Untracked | 0 -|1242|0x0000000674000000, 0x0000000674000000, 0x0000000674800000| 0%| F| |TAMS 0x0000000674000000| PB 0x0000000674000000| Untracked | 0 -|1243|0x0000000674800000, 0x0000000674800000, 0x0000000675000000| 0%| F| |TAMS 0x0000000674800000| PB 0x0000000674800000| Untracked | 0 -|1244|0x0000000675000000, 0x0000000675000000, 0x0000000675800000| 0%| F| |TAMS 0x0000000675000000| PB 0x0000000675000000| Untracked | 0 -|1245|0x0000000675800000, 0x0000000675800000, 0x0000000676000000| 0%| F| |TAMS 0x0000000675800000| PB 0x0000000675800000| Untracked | 0 -|1246|0x0000000676000000, 0x0000000676000000, 0x0000000676800000| 0%| F| |TAMS 0x0000000676000000| PB 0x0000000676000000| Untracked | 0 -|1247|0x0000000676800000, 0x0000000676800000, 0x0000000677000000| 0%| F| |TAMS 0x0000000676800000| PB 0x0000000676800000| Untracked | 0 -|1248|0x0000000677000000, 0x0000000677000000, 0x0000000677800000| 0%| F| |TAMS 0x0000000677000000| PB 0x0000000677000000| Untracked | 0 -|1249|0x0000000677800000, 0x0000000677800000, 0x0000000678000000| 0%| F| |TAMS 0x0000000677800000| PB 0x0000000677800000| Untracked | 0 -|1250|0x0000000678000000, 0x0000000678000000, 0x0000000678800000| 0%| F| |TAMS 0x0000000678000000| PB 0x0000000678000000| Untracked | 0 -|1251|0x0000000678800000, 0x0000000678800000, 0x0000000679000000| 0%| F| |TAMS 0x0000000678800000| PB 0x0000000678800000| Untracked | 0 -|1252|0x0000000679000000, 0x0000000679000000, 0x0000000679800000| 0%| F| |TAMS 0x0000000679000000| PB 0x0000000679000000| Untracked | 0 -|1253|0x0000000679800000, 0x0000000679800000, 0x000000067a000000| 0%| F| |TAMS 0x0000000679800000| PB 0x0000000679800000| Untracked | 0 -|1254|0x000000067a000000, 0x000000067a000000, 0x000000067a800000| 0%| F| |TAMS 0x000000067a000000| PB 0x000000067a000000| Untracked | 0 -|1255|0x000000067a800000, 0x000000067a800000, 0x000000067b000000| 0%| F| |TAMS 0x000000067a800000| PB 0x000000067a800000| Untracked | 0 -|1256|0x000000067b000000, 0x000000067b000000, 0x000000067b800000| 0%| F| |TAMS 0x000000067b000000| PB 0x000000067b000000| Untracked | 0 -|1257|0x000000067b800000, 0x000000067b800000, 0x000000067c000000| 0%| F| |TAMS 0x000000067b800000| PB 0x000000067b800000| Untracked | 0 -|1258|0x000000067c000000, 0x000000067c000000, 0x000000067c800000| 0%| F| |TAMS 0x000000067c000000| PB 0x000000067c000000| Untracked | 0 -|1259|0x000000067c800000, 0x000000067c800000, 0x000000067d000000| 0%| F| |TAMS 0x000000067c800000| PB 0x000000067c800000| Untracked | 0 -|1260|0x000000067d000000, 0x000000067d000000, 0x000000067d800000| 0%| F| |TAMS 0x000000067d000000| PB 0x000000067d000000| Untracked | 0 -|1261|0x000000067d800000, 0x000000067d800000, 0x000000067e000000| 0%| F| |TAMS 0x000000067d800000| PB 0x000000067d800000| Untracked | 0 -|1262|0x000000067e000000, 0x000000067e000000, 0x000000067e800000| 0%| F| |TAMS 0x000000067e000000| PB 0x000000067e000000| Untracked | 0 -|1263|0x000000067e800000, 0x000000067e800000, 0x000000067f000000| 0%| F| |TAMS 0x000000067e800000| PB 0x000000067e800000| Untracked | 0 -|1264|0x000000067f000000, 0x000000067f000000, 0x000000067f800000| 0%| F| |TAMS 0x000000067f000000| PB 0x000000067f000000| Untracked | 0 -|1265|0x000000067f800000, 0x000000067f800000, 0x0000000680000000| 0%| F| |TAMS 0x000000067f800000| PB 0x000000067f800000| Untracked | 0 -|1266|0x0000000680000000, 0x0000000680000000, 0x0000000680800000| 0%| F| |TAMS 0x0000000680000000| PB 0x0000000680000000| Untracked | 0 -|1267|0x0000000680800000, 0x0000000680800000, 0x0000000681000000| 0%| F| |TAMS 0x0000000680800000| PB 0x0000000680800000| Untracked | 0 -|1268|0x0000000681000000, 0x0000000681000000, 0x0000000681800000| 0%| F| |TAMS 0x0000000681000000| PB 0x0000000681000000| Untracked | 0 -|1269|0x0000000681800000, 0x0000000681800000, 0x0000000682000000| 0%| F| |TAMS 0x0000000681800000| PB 0x0000000681800000| Untracked | 0 -|1270|0x0000000682000000, 0x0000000682000000, 0x0000000682800000| 0%| F| |TAMS 0x0000000682000000| PB 0x0000000682000000| Untracked | 0 -|1271|0x0000000682800000, 0x0000000682800000, 0x0000000683000000| 0%| F| |TAMS 0x0000000682800000| PB 0x0000000682800000| Untracked | 0 -|1272|0x0000000683000000, 0x0000000683000000, 0x0000000683800000| 0%| F| |TAMS 0x0000000683000000| PB 0x0000000683000000| Untracked | 0 -|1273|0x0000000683800000, 0x0000000683800000, 0x0000000684000000| 0%| F| |TAMS 0x0000000683800000| PB 0x0000000683800000| Untracked | 0 -|1274|0x0000000684000000, 0x0000000684000000, 0x0000000684800000| 0%| F| |TAMS 0x0000000684000000| PB 0x0000000684000000| Untracked | 0 -|1275|0x0000000684800000, 0x0000000684800000, 0x0000000685000000| 0%| F| |TAMS 0x0000000684800000| PB 0x0000000684800000| Untracked | 0 -|1276|0x0000000685000000, 0x0000000685000000, 0x0000000685800000| 0%| F| |TAMS 0x0000000685000000| PB 0x0000000685000000| Untracked | 0 -|1277|0x0000000685800000, 0x0000000685800000, 0x0000000686000000| 0%| F| |TAMS 0x0000000685800000| PB 0x0000000685800000| Untracked | 0 -|1278|0x0000000686000000, 0x0000000686000000, 0x0000000686800000| 0%| F| |TAMS 0x0000000686000000| PB 0x0000000686000000| Untracked | 0 -|1279|0x0000000686800000, 0x0000000686800000, 0x0000000687000000| 0%| F| |TAMS 0x0000000686800000| PB 0x0000000686800000| Untracked | 0 -|1280|0x0000000687000000, 0x0000000687000000, 0x0000000687800000| 0%| F| |TAMS 0x0000000687000000| PB 0x0000000687000000| Untracked | 0 -|1281|0x0000000687800000, 0x0000000687800000, 0x0000000688000000| 0%| F| |TAMS 0x0000000687800000| PB 0x0000000687800000| Untracked | 0 -|1282|0x0000000688000000, 0x0000000688000000, 0x0000000688800000| 0%| F| |TAMS 0x0000000688000000| PB 0x0000000688000000| Untracked | 0 -|1283|0x0000000688800000, 0x0000000688800000, 0x0000000689000000| 0%| F| |TAMS 0x0000000688800000| PB 0x0000000688800000| Untracked | 0 -|1284|0x0000000689000000, 0x0000000689000000, 0x0000000689800000| 0%| F| |TAMS 0x0000000689000000| PB 0x0000000689000000| Untracked | 0 -|1285|0x0000000689800000, 0x0000000689800000, 0x000000068a000000| 0%| F| |TAMS 0x0000000689800000| PB 0x0000000689800000| Untracked | 0 -|1286|0x000000068a000000, 0x000000068a000000, 0x000000068a800000| 0%| F| |TAMS 0x000000068a000000| PB 0x000000068a000000| Untracked | 0 -|1287|0x000000068a800000, 0x000000068a800000, 0x000000068b000000| 0%| F| |TAMS 0x000000068a800000| PB 0x000000068a800000| Untracked | 0 -|1288|0x000000068b000000, 0x000000068b000000, 0x000000068b800000| 0%| F| |TAMS 0x000000068b000000| PB 0x000000068b000000| Untracked | 0 -|1289|0x000000068b800000, 0x000000068b800000, 0x000000068c000000| 0%| F| |TAMS 0x000000068b800000| PB 0x000000068b800000| Untracked | 0 -|1290|0x000000068c000000, 0x000000068c000000, 0x000000068c800000| 0%| F| |TAMS 0x000000068c000000| PB 0x000000068c000000| Untracked | 0 -|1291|0x000000068c800000, 0x000000068c800000, 0x000000068d000000| 0%| F| |TAMS 0x000000068c800000| PB 0x000000068c800000| Untracked | 0 -|1292|0x000000068d000000, 0x000000068d000000, 0x000000068d800000| 0%| F| |TAMS 0x000000068d000000| PB 0x000000068d000000| Untracked | 0 -|1293|0x000000068d800000, 0x000000068d800000, 0x000000068e000000| 0%| F| |TAMS 0x000000068d800000| PB 0x000000068d800000| Untracked | 0 -|1294|0x000000068e000000, 0x000000068e000000, 0x000000068e800000| 0%| F| |TAMS 0x000000068e000000| PB 0x000000068e000000| Untracked | 0 -|1295|0x000000068e800000, 0x000000068e800000, 0x000000068f000000| 0%| F| |TAMS 0x000000068e800000| PB 0x000000068e800000| Untracked | 0 -|1296|0x000000068f000000, 0x000000068f000000, 0x000000068f800000| 0%| F| |TAMS 0x000000068f000000| PB 0x000000068f000000| Untracked | 0 -|1297|0x000000068f800000, 0x000000068f800000, 0x0000000690000000| 0%| F| |TAMS 0x000000068f800000| PB 0x000000068f800000| Untracked | 0 -|1298|0x0000000690000000, 0x0000000690000000, 0x0000000690800000| 0%| F| |TAMS 0x0000000690000000| PB 0x0000000690000000| Untracked | 0 -|1299|0x0000000690800000, 0x0000000690800000, 0x0000000691000000| 0%| F| |TAMS 0x0000000690800000| PB 0x0000000690800000| Untracked | 0 -|1300|0x0000000691000000, 0x0000000691000000, 0x0000000691800000| 0%| F| |TAMS 0x0000000691000000| PB 0x0000000691000000| Untracked | 0 -|1301|0x0000000691800000, 0x0000000691800000, 0x0000000692000000| 0%| F| |TAMS 0x0000000691800000| PB 0x0000000691800000| Untracked | 0 -|1302|0x0000000692000000, 0x0000000692000000, 0x0000000692800000| 0%| F| |TAMS 0x0000000692000000| PB 0x0000000692000000| Untracked | 0 -|1303|0x0000000692800000, 0x0000000692800000, 0x0000000693000000| 0%| F| |TAMS 0x0000000692800000| PB 0x0000000692800000| Untracked | 0 -|1304|0x0000000693000000, 0x0000000693000000, 0x0000000693800000| 0%| F| |TAMS 0x0000000693000000| PB 0x0000000693000000| Untracked | 0 -|1305|0x0000000693800000, 0x0000000693800000, 0x0000000694000000| 0%| F| |TAMS 0x0000000693800000| PB 0x0000000693800000| Untracked | 0 -|1306|0x0000000694000000, 0x0000000694000000, 0x0000000694800000| 0%| F| |TAMS 0x0000000694000000| PB 0x0000000694000000| Untracked | 0 -|1307|0x0000000694800000, 0x0000000694800000, 0x0000000695000000| 0%| F| |TAMS 0x0000000694800000| PB 0x0000000694800000| Untracked | 0 -|1308|0x0000000695000000, 0x0000000695000000, 0x0000000695800000| 0%| F| |TAMS 0x0000000695000000| PB 0x0000000695000000| Untracked | 0 -|1309|0x0000000695800000, 0x0000000695800000, 0x0000000696000000| 0%| F| |TAMS 0x0000000695800000| PB 0x0000000695800000| Untracked | 0 -|1310|0x0000000696000000, 0x0000000696000000, 0x0000000696800000| 0%| F| |TAMS 0x0000000696000000| PB 0x0000000696000000| Untracked | 0 -|1311|0x0000000696800000, 0x0000000696800000, 0x0000000697000000| 0%| F| |TAMS 0x0000000696800000| PB 0x0000000696800000| Untracked | 0 -|1312|0x0000000697000000, 0x0000000697000000, 0x0000000697800000| 0%| F| |TAMS 0x0000000697000000| PB 0x0000000697000000| Untracked | 0 -|1313|0x0000000697800000, 0x0000000697800000, 0x0000000698000000| 0%| F| |TAMS 0x0000000697800000| PB 0x0000000697800000| Untracked | 0 -|1314|0x0000000698000000, 0x0000000698000000, 0x0000000698800000| 0%| F| |TAMS 0x0000000698000000| PB 0x0000000698000000| Untracked | 0 -|1315|0x0000000698800000, 0x0000000698800000, 0x0000000699000000| 0%| F| |TAMS 0x0000000698800000| PB 0x0000000698800000| Untracked | 0 -|1316|0x0000000699000000, 0x0000000699000000, 0x0000000699800000| 0%| F| |TAMS 0x0000000699000000| PB 0x0000000699000000| Untracked | 0 -|1317|0x0000000699800000, 0x0000000699800000, 0x000000069a000000| 0%| F| |TAMS 0x0000000699800000| PB 0x0000000699800000| Untracked | 0 -|1318|0x000000069a000000, 0x000000069a000000, 0x000000069a800000| 0%| F| |TAMS 0x000000069a000000| PB 0x000000069a000000| Untracked | 0 -|1319|0x000000069a800000, 0x000000069a800000, 0x000000069b000000| 0%| F| |TAMS 0x000000069a800000| PB 0x000000069a800000| Untracked | 0 -|1320|0x000000069b000000, 0x000000069b000000, 0x000000069b800000| 0%| F| |TAMS 0x000000069b000000| PB 0x000000069b000000| Untracked | 0 -|1321|0x000000069b800000, 0x000000069b800000, 0x000000069c000000| 0%| F| |TAMS 0x000000069b800000| PB 0x000000069b800000| Untracked | 0 -|1322|0x000000069c000000, 0x000000069c000000, 0x000000069c800000| 0%| F| |TAMS 0x000000069c000000| PB 0x000000069c000000| Untracked | 0 -|1323|0x000000069c800000, 0x000000069c800000, 0x000000069d000000| 0%| F| |TAMS 0x000000069c800000| PB 0x000000069c800000| Untracked | 0 -|1324|0x000000069d000000, 0x000000069d000000, 0x000000069d800000| 0%| F| |TAMS 0x000000069d000000| PB 0x000000069d000000| Untracked | 0 -|1325|0x000000069d800000, 0x000000069d800000, 0x000000069e000000| 0%| F| |TAMS 0x000000069d800000| PB 0x000000069d800000| Untracked | 0 -|1326|0x000000069e000000, 0x000000069e000000, 0x000000069e800000| 0%| F| |TAMS 0x000000069e000000| PB 0x000000069e000000| Untracked | 0 -|1327|0x000000069e800000, 0x000000069e800000, 0x000000069f000000| 0%| F| |TAMS 0x000000069e800000| PB 0x000000069e800000| Untracked | 0 -|1328|0x000000069f000000, 0x000000069f000000, 0x000000069f800000| 0%| F| |TAMS 0x000000069f000000| PB 0x000000069f000000| Untracked | 0 -|1329|0x000000069f800000, 0x000000069f800000, 0x00000006a0000000| 0%| F| |TAMS 0x000000069f800000| PB 0x000000069f800000| Untracked | 0 -|1330|0x00000006a0000000, 0x00000006a0000000, 0x00000006a0800000| 0%| F| |TAMS 0x00000006a0000000| PB 0x00000006a0000000| Untracked | 0 -|1331|0x00000006a0800000, 0x00000006a0800000, 0x00000006a1000000| 0%| F| |TAMS 0x00000006a0800000| PB 0x00000006a0800000| Untracked | 0 -|1332|0x00000006a1000000, 0x00000006a1000000, 0x00000006a1800000| 0%| F| |TAMS 0x00000006a1000000| PB 0x00000006a1000000| Untracked | 0 -|1333|0x00000006a1800000, 0x00000006a1800000, 0x00000006a2000000| 0%| F| |TAMS 0x00000006a1800000| PB 0x00000006a1800000| Untracked | 0 -|1334|0x00000006a2000000, 0x00000006a2000000, 0x00000006a2800000| 0%| F| |TAMS 0x00000006a2000000| PB 0x00000006a2000000| Untracked | 0 -|1335|0x00000006a2800000, 0x00000006a2800000, 0x00000006a3000000| 0%| F| |TAMS 0x00000006a2800000| PB 0x00000006a2800000| Untracked | 0 -|1336|0x00000006a3000000, 0x00000006a3000000, 0x00000006a3800000| 0%| F| |TAMS 0x00000006a3000000| PB 0x00000006a3000000| Untracked | 0 -|1337|0x00000006a3800000, 0x00000006a3800000, 0x00000006a4000000| 0%| F| |TAMS 0x00000006a3800000| PB 0x00000006a3800000| Untracked | 0 -|1338|0x00000006a4000000, 0x00000006a4000000, 0x00000006a4800000| 0%| F| |TAMS 0x00000006a4000000| PB 0x00000006a4000000| Untracked | 0 -|1339|0x00000006a4800000, 0x00000006a4800000, 0x00000006a5000000| 0%| F| |TAMS 0x00000006a4800000| PB 0x00000006a4800000| Untracked | 0 -|1340|0x00000006a5000000, 0x00000006a5000000, 0x00000006a5800000| 0%| F| |TAMS 0x00000006a5000000| PB 0x00000006a5000000| Untracked | 0 -|1341|0x00000006a5800000, 0x00000006a5800000, 0x00000006a6000000| 0%| F| |TAMS 0x00000006a5800000| PB 0x00000006a5800000| Untracked | 0 -|1342|0x00000006a6000000, 0x00000006a6000000, 0x00000006a6800000| 0%| F| |TAMS 0x00000006a6000000| PB 0x00000006a6000000| Untracked | 0 -|1343|0x00000006a6800000, 0x00000006a6800000, 0x00000006a7000000| 0%| F| |TAMS 0x00000006a6800000| PB 0x00000006a6800000| Untracked | 0 -|1344|0x00000006a7000000, 0x00000006a7000000, 0x00000006a7800000| 0%| F| |TAMS 0x00000006a7000000| PB 0x00000006a7000000| Untracked | 0 -|1345|0x00000006a7800000, 0x00000006a8000000, 0x00000006a8000000|100%| S|CS|TAMS 0x00000006a7800000| PB 0x00000006a7800000| Complete | 0 -|1346|0x00000006a8000000, 0x00000006a8800000, 0x00000006a8800000|100%| S|CS|TAMS 0x00000006a8000000| PB 0x00000006a8000000| Complete | 0 -|1347|0x00000006a8800000, 0x00000006a9000000, 0x00000006a9000000|100%| S|CS|TAMS 0x00000006a8800000| PB 0x00000006a8800000| Complete | 0 -|1348|0x00000006a9000000, 0x00000006a9800000, 0x00000006a9800000|100%| S|CS|TAMS 0x00000006a9000000| PB 0x00000006a9000000| Complete | 0 -|1349|0x00000006a9800000, 0x00000006aa000000, 0x00000006aa000000|100%| S|CS|TAMS 0x00000006a9800000| PB 0x00000006a9800000| Complete | 0 -|1350|0x00000006aa000000, 0x00000006aa800000, 0x00000006aa800000|100%| S|CS|TAMS 0x00000006aa000000| PB 0x00000006aa000000| Complete | 0 -|1351|0x00000006aa800000, 0x00000006ab000000, 0x00000006ab000000|100%| S|CS|TAMS 0x00000006aa800000| PB 0x00000006aa800000| Complete | 0 -|1352|0x00000006ab000000, 0x00000006ab800000, 0x00000006ab800000|100%| S|CS|TAMS 0x00000006ab000000| PB 0x00000006ab000000| Complete | 0 -|1353|0x00000006ab800000, 0x00000006ac000000, 0x00000006ac000000|100%| S|CS|TAMS 0x00000006ab800000| PB 0x00000006ab800000| Complete | 0 -|1354|0x00000006ac000000, 0x00000006ac000000, 0x00000006ac800000| 0%| F| |TAMS 0x00000006ac000000| PB 0x00000006ac000000| Untracked | 0 -|1355|0x00000006ac800000, 0x00000006ac800000, 0x00000006ad000000| 0%| F| |TAMS 0x00000006ac800000| PB 0x00000006ac800000| Untracked | 0 -|1356|0x00000006ad000000, 0x00000006ad000000, 0x00000006ad800000| 0%| F| |TAMS 0x00000006ad000000| PB 0x00000006ad000000| Untracked | 0 -|1357|0x00000006ad800000, 0x00000006ad800000, 0x00000006ae000000| 0%| F| |TAMS 0x00000006ad800000| PB 0x00000006ad800000| Untracked | 0 -|1358|0x00000006ae000000, 0x00000006ae000000, 0x00000006ae800000| 0%| F| |TAMS 0x00000006ae000000| PB 0x00000006ae000000| Untracked | 0 -|1359|0x00000006ae800000, 0x00000006ae800000, 0x00000006af000000| 0%| F| |TAMS 0x00000006ae800000| PB 0x00000006ae800000| Untracked | 0 -|1360|0x00000006af000000, 0x00000006af000000, 0x00000006af800000| 0%| F| |TAMS 0x00000006af000000| PB 0x00000006af000000| Untracked | 0 -|1361|0x00000006af800000, 0x00000006af800000, 0x00000006b0000000| 0%| F| |TAMS 0x00000006af800000| PB 0x00000006af800000| Untracked | 0 -|1362|0x00000006b0000000, 0x00000006b0000000, 0x00000006b0800000| 0%| F| |TAMS 0x00000006b0000000| PB 0x00000006b0000000| Untracked | 0 -|1363|0x00000006b0800000, 0x00000006b0800000, 0x00000006b1000000| 0%| F| |TAMS 0x00000006b0800000| PB 0x00000006b0800000| Untracked | 0 -|1364|0x00000006b1000000, 0x00000006b1000000, 0x00000006b1800000| 0%| F| |TAMS 0x00000006b1000000| PB 0x00000006b1000000| Untracked | 0 -|1365|0x00000006b1800000, 0x00000006b1800000, 0x00000006b2000000| 0%| F| |TAMS 0x00000006b1800000| PB 0x00000006b1800000| Untracked | 0 -|1366|0x00000006b2000000, 0x00000006b2000000, 0x00000006b2800000| 0%| F| |TAMS 0x00000006b2000000| PB 0x00000006b2000000| Untracked | 0 -|1367|0x00000006b2800000, 0x00000006b2800000, 0x00000006b3000000| 0%| F| |TAMS 0x00000006b2800000| PB 0x00000006b2800000| Untracked | 0 -|1368|0x00000006b3000000, 0x00000006b3000000, 0x00000006b3800000| 0%| F| |TAMS 0x00000006b3000000| PB 0x00000006b3000000| Untracked | 0 -|1369|0x00000006b3800000, 0x00000006b3800000, 0x00000006b4000000| 0%| F| |TAMS 0x00000006b3800000| PB 0x00000006b3800000| Untracked | 0 -|1370|0x00000006b4000000, 0x00000006b4000000, 0x00000006b4800000| 0%| F| |TAMS 0x00000006b4000000| PB 0x00000006b4000000| Untracked | 0 -|1371|0x00000006b4800000, 0x00000006b4800000, 0x00000006b5000000| 0%| F| |TAMS 0x00000006b4800000| PB 0x00000006b4800000| Untracked | 0 -|1372|0x00000006b5000000, 0x00000006b5000000, 0x00000006b5800000| 0%| F| |TAMS 0x00000006b5000000| PB 0x00000006b5000000| Untracked | 0 -|1373|0x00000006b5800000, 0x00000006b5800000, 0x00000006b6000000| 0%| F| |TAMS 0x00000006b5800000| PB 0x00000006b5800000| Untracked | 0 -|1374|0x00000006b6000000, 0x00000006b6000000, 0x00000006b6800000| 0%| F| |TAMS 0x00000006b6000000| PB 0x00000006b6000000| Untracked | 0 -|1375|0x00000006b6800000, 0x00000006b6800000, 0x00000006b7000000| 0%| F| |TAMS 0x00000006b6800000| PB 0x00000006b6800000| Untracked | 0 -|1376|0x00000006b7000000, 0x00000006b7000000, 0x00000006b7800000| 0%| F| |TAMS 0x00000006b7000000| PB 0x00000006b7000000| Untracked | 0 -|1377|0x00000006b7800000, 0x00000006b7800000, 0x00000006b8000000| 0%| F| |TAMS 0x00000006b7800000| PB 0x00000006b7800000| Untracked | 0 -|1378|0x00000006b8000000, 0x00000006b8000000, 0x00000006b8800000| 0%| F| |TAMS 0x00000006b8000000| PB 0x00000006b8000000| Untracked | 0 -|1379|0x00000006b8800000, 0x00000006b8800000, 0x00000006b9000000| 0%| F| |TAMS 0x00000006b8800000| PB 0x00000006b8800000| Untracked | 0 -|1380|0x00000006b9000000, 0x00000006b9000000, 0x00000006b9800000| 0%| F| |TAMS 0x00000006b9000000| PB 0x00000006b9000000| Untracked | 0 -|1381|0x00000006b9800000, 0x00000006b9800000, 0x00000006ba000000| 0%| F| |TAMS 0x00000006b9800000| PB 0x00000006b9800000| Untracked | 0 -|1382|0x00000006ba000000, 0x00000006ba000000, 0x00000006ba800000| 0%| F| |TAMS 0x00000006ba000000| PB 0x00000006ba000000| Untracked | 0 -|1383|0x00000006ba800000, 0x00000006ba800000, 0x00000006bb000000| 0%| F| |TAMS 0x00000006ba800000| PB 0x00000006ba800000| Untracked | 0 -|1384|0x00000006bb000000, 0x00000006bb000000, 0x00000006bb800000| 0%| F| |TAMS 0x00000006bb000000| PB 0x00000006bb000000| Untracked | 0 -|1385|0x00000006bb800000, 0x00000006bb800000, 0x00000006bc000000| 0%| F| |TAMS 0x00000006bb800000| PB 0x00000006bb800000| Untracked | 0 -|1386|0x00000006bc000000, 0x00000006bc000000, 0x00000006bc800000| 0%| F| |TAMS 0x00000006bc000000| PB 0x00000006bc000000| Untracked | 0 -|1387|0x00000006bc800000, 0x00000006bc800000, 0x00000006bd000000| 0%| F| |TAMS 0x00000006bc800000| PB 0x00000006bc800000| Untracked | 0 -|1388|0x00000006bd000000, 0x00000006bd000000, 0x00000006bd800000| 0%| F| |TAMS 0x00000006bd000000| PB 0x00000006bd000000| Untracked | 0 -|1389|0x00000006bd800000, 0x00000006bd800000, 0x00000006be000000| 0%| F| |TAMS 0x00000006bd800000| PB 0x00000006bd800000| Untracked | 0 -|1390|0x00000006be000000, 0x00000006be000000, 0x00000006be800000| 0%| F| |TAMS 0x00000006be000000| PB 0x00000006be000000| Untracked | 0 -|1391|0x00000006be800000, 0x00000006be800000, 0x00000006bf000000| 0%| F| |TAMS 0x00000006be800000| PB 0x00000006be800000| Untracked | 0 -|1392|0x00000006bf000000, 0x00000006bf000000, 0x00000006bf800000| 0%| F| |TAMS 0x00000006bf000000| PB 0x00000006bf000000| Untracked | 0 -|1393|0x00000006bf800000, 0x00000006bf800000, 0x00000006c0000000| 0%| F| |TAMS 0x00000006bf800000| PB 0x00000006bf800000| Untracked | 0 -|1394|0x00000006c0000000, 0x00000006c0000000, 0x00000006c0800000| 0%| F| |TAMS 0x00000006c0000000| PB 0x00000006c0000000| Untracked | 0 -|1395|0x00000006c0800000, 0x00000006c0800000, 0x00000006c1000000| 0%| F| |TAMS 0x00000006c0800000| PB 0x00000006c0800000| Untracked | 0 -|1396|0x00000006c1000000, 0x00000006c1000000, 0x00000006c1800000| 0%| F| |TAMS 0x00000006c1000000| PB 0x00000006c1000000| Untracked | 0 -|1397|0x00000006c1800000, 0x00000006c1800000, 0x00000006c2000000| 0%| F| |TAMS 0x00000006c1800000| PB 0x00000006c1800000| Untracked | 0 -|1398|0x00000006c2000000, 0x00000006c2000000, 0x00000006c2800000| 0%| F| |TAMS 0x00000006c2000000| PB 0x00000006c2000000| Untracked | 0 -|1399|0x00000006c2800000, 0x00000006c2800000, 0x00000006c3000000| 0%| F| |TAMS 0x00000006c2800000| PB 0x00000006c2800000| Untracked | 0 -|1400|0x00000006c3000000, 0x00000006c3000000, 0x00000006c3800000| 0%| F| |TAMS 0x00000006c3000000| PB 0x00000006c3000000| Untracked | 0 -|1401|0x00000006c3800000, 0x00000006c3800000, 0x00000006c4000000| 0%| F| |TAMS 0x00000006c3800000| PB 0x00000006c3800000| Untracked | 0 -|1402|0x00000006c4000000, 0x00000006c4000000, 0x00000006c4800000| 0%| F| |TAMS 0x00000006c4000000| PB 0x00000006c4000000| Untracked | 0 -|1403|0x00000006c4800000, 0x00000006c4800000, 0x00000006c5000000| 0%| F| |TAMS 0x00000006c4800000| PB 0x00000006c4800000| Untracked | 0 -|1404|0x00000006c5000000, 0x00000006c5000000, 0x00000006c5800000| 0%| F| |TAMS 0x00000006c5000000| PB 0x00000006c5000000| Untracked | 0 -|1405|0x00000006c5800000, 0x00000006c5800000, 0x00000006c6000000| 0%| F| |TAMS 0x00000006c5800000| PB 0x00000006c5800000| Untracked | 0 -|1406|0x00000006c6000000, 0x00000006c6000000, 0x00000006c6800000| 0%| F| |TAMS 0x00000006c6000000| PB 0x00000006c6000000| Untracked | 0 -|1407|0x00000006c6800000, 0x00000006c6800000, 0x00000006c7000000| 0%| F| |TAMS 0x00000006c6800000| PB 0x00000006c6800000| Untracked | 0 -|1408|0x00000006c7000000, 0x00000006c7000000, 0x00000006c7800000| 0%| F| |TAMS 0x00000006c7000000| PB 0x00000006c7000000| Untracked | 0 -|1409|0x00000006c7800000, 0x00000006c7800000, 0x00000006c8000000| 0%| F| |TAMS 0x00000006c7800000| PB 0x00000006c7800000| Untracked | 0 -|1410|0x00000006c8000000, 0x00000006c8000000, 0x00000006c8800000| 0%| F| |TAMS 0x00000006c8000000| PB 0x00000006c8000000| Untracked | 0 -|1411|0x00000006c8800000, 0x00000006c8800000, 0x00000006c9000000| 0%| F| |TAMS 0x00000006c8800000| PB 0x00000006c8800000| Untracked | 0 -|1412|0x00000006c9000000, 0x00000006c9000000, 0x00000006c9800000| 0%| F| |TAMS 0x00000006c9000000| PB 0x00000006c9000000| Untracked | 0 -|1413|0x00000006c9800000, 0x00000006c9800000, 0x00000006ca000000| 0%| F| |TAMS 0x00000006c9800000| PB 0x00000006c9800000| Untracked | 0 -|1414|0x00000006ca000000, 0x00000006ca000000, 0x00000006ca800000| 0%| F| |TAMS 0x00000006ca000000| PB 0x00000006ca000000| Untracked | 0 -|1415|0x00000006ca800000, 0x00000006ca800000, 0x00000006cb000000| 0%| F| |TAMS 0x00000006ca800000| PB 0x00000006ca800000| Untracked | 0 - -Card table byte_map: [0x000001b9b9340000,0x000001b9bb310000] _byte_map_base: 0x000001b9b7308000 - -Marking Bits: (CMBitMap*) 0x000001b9cb3df9a0 - Bits: [0x000001b9bb310000, 0x000001b9cb150000) - -Polling page: 0x000001b999ce0000 - -Metaspace: - -Usage: - Non-class: 2.67 MB used. - Class: 283.77 KB used. - Both: 2.95 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 2.75 MB ( 4%) committed, 1 nodes. - Class space: 1.00 GB reserved, 384.00 KB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 3.12 MB ( <1%) committed. - -Chunk freelists: - Non-Class: 11.83 MB - Class: 15.60 MB - Both: 27.43 MB - -MaxMetaspaceSize: unlimited -CompressedClassSpaceSize: 1.00 GB -Initial GC threshold: 21.00 MB -Current GC threshold: 21.00 MB -CDS: on - - commit_granule_bytes: 65536. - - commit_granule_words: 8192. - - virtual_space_node_default_size: 8388608. - - enlarge_chunks_in_place: 1. - - use_allocation_guard: 0. - - -Internal statistics: - -num_allocs_failed_limit: 0. -num_arena_births: 36. -num_arena_deaths: 0. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 50. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 0. -num_chunks_taken_from_freelist: 51. -num_chunk_merges: 0. -num_chunk_splits: 33. -num_chunks_enlarged: 20. -num_inconsistent_stats: 0. - -CodeHeap 'non-profiled nmethods': size=117248Kb used=559Kb max_used=559Kb free=116688Kb - bounds [0x000001b9addc0000, 0x000001b9ae030000, 0x000001b9b5040000] -CodeHeap 'profiled nmethods': size=117184Kb used=943Kb max_used=943Kb free=116240Kb - bounds [0x000001b9a6040000, 0x000001b9a62b0000, 0x000001b9ad2b0000] -CodeHeap 'non-nmethods': size=11328Kb used=1427Kb max_used=3160Kb free=9900Kb - bounds [0x000001b9ad2b0000, 0x000001b9ad5d0000, 0x000001b9addc0000] -CodeCache: size=245760Kb, used=2929Kb, max_used=4662Kb, free=242828Kb - total_blobs=1285, nmethods=821, adapters=376, full_count=0 -Compilation: enabled, stopped_count=0, restarted_count=0 - -JVMCI Events (20 events): -Event: 17.806 Thread 0x000001ba112526c0 done waiting for JavaVM references initialization in JVMCI runtime 2 -Event: 17.806 Thread 0x000001ba112526c0 initialized JVMCI runtime 2 -Event: 18.871 Thread 0x000001ba160bc010 detaching from JVMCI runtime 1: releasing idle compiler thread (0 other threads still attached) -Event: 18.871 Thread 0x000001ba160bc010 shutting down HotSpotJVMCIRuntime for JVMCI runtime 1 -Event: 18.871 Thread 0x000001ba160bc010 shut down JVMCI runtime 1 -Event: 18.874 Thread 0x000001ba160bc010 destroyed JavaVM[13]@0x000001ca17a1bd38 for JVMCI runtime 1 -Event: 18.874 Thread 0x000001ba160bc010 releasing handles for JVMCI runtime 1: oop handles=98, metadata handles={total=155, live=146, blocks=6} -Event: 18.874 Thread 0x000001ba160bc010 detached from JVMCI runtime 1 -Event: 18.887 Thread 0x000001ba112526c0 detaching from JVMCI runtime 2: releasing idle compiler thread (0 other threads still attached) -Event: 18.887 Thread 0x000001ba112526c0 shutting down HotSpotJVMCIRuntime for JVMCI runtime 2 -Event: 18.888 Thread 0x000001ba112526c0 shut down JVMCI runtime 2 -Event: 18.892 Thread 0x000001ba112526c0 destroyed JavaVM[14]@0x000001c217a1bd38 for JVMCI runtime 2 -Event: 18.892 Thread 0x000001ba112526c0 releasing handles for JVMCI runtime 2: oop handles=71, metadata handles={total=128, live=120, blocks=8} -Event: 18.892 Thread 0x000001ba112526c0 detached from JVMCI runtime 2 -Event: 19.189 Thread 0x000001ba11105a80 detaching from JVMCI runtime 3: releasing idle compiler thread (0 other threads still attached) -Event: 19.189 Thread 0x000001ba11105a80 shutting down HotSpotJVMCIRuntime for JVMCI runtime 3 -Event: 19.189 Thread 0x000001ba11105a80 shut down JVMCI runtime 3 -Event: 19.197 Thread 0x000001ba11105a80 destroyed JavaVM[12]@0x000001ba17a1bd38 for JVMCI runtime 3 -Event: 19.197 Thread 0x000001ba11105a80 releasing handles for JVMCI runtime 3: oop handles=57, metadata handles={total=224, live=211, blocks=7} -Event: 19.197 Thread 0x000001ba11105a80 detached from JVMCI runtime 3 - -Compilation events (20 events): -Event: 17.769 Thread 0x000001ba11106660 nmethod 816% 0x000001b9a612a688 code [0x000001b9a612a7e0, 0x000001b9a612ab18] -Event: 17.769 Thread 0x000001ba11106660 811 3 java.util.concurrent.ThreadLocalRandom::getProbe (13 bytes) -Event: 17.769 Thread 0x000001ba11106660 nmethod 811 0x000001b9a612ab88 code [0x000001b9a612aca0, 0x000001b9a612adb0] -Event: 17.771 Thread 0x000001ba11106660 817 3 org.kne.cloud.network.monitor.TimestampMonitor::recordPacket (119 bytes) -Event: 17.771 Thread 0x000001ba11106660 nmethod 817 0x000001b9a612ae88 code [0x000001b9a612b0a0, 0x000001b9a612bbc0] -Event: 17.797 Thread 0x000001ba11105a80 nmethod 812 0x000001b9ade37888 code [0x000001b9ade37980, 0x000001b9ade37b90] -Event: 17.797 Thread 0x000001ba11105a80 820 ! 4 java.util.concurrent.ConcurrentHashMap::putVal (432 bytes) -Event: 17.797 Thread 0x000001ba112526c0 818 4 java.util.concurrent.ConcurrentHashMap::addCount (280 bytes) -Event: 17.797 Thread 0x000001ba160bc010 819 4 org.kne.cloud.network.monitor.TimestampMonitor::recordPacket (119 bytes) -Event: 17.838 Thread 0x000001ba11105a80 nmethod 820 0x000001b9ade37c08 code [0x000001b9ade37da0, 0x000001b9ade38e40] -Event: 17.838 Thread 0x000001ba11105a80 813 4 java.util.concurrent.ConcurrentHashMap::spread (10 bytes) -Event: 17.840 Thread 0x000001ba11105a80 nmethod 813 0x000001b9ade38f08 code [0x000001b9ade39000, 0x000001b9ade39070] -Event: 17.840 Thread 0x000001ba11105a80 814 4 org.kne.cloud.network.monitor.TimestampMonitor$TimestampMonitorKey::hashCode (25 bytes) -Event: 17.842 Thread 0x000001ba11105a80 nmethod 814 0x000001b9ade39208 code [0x000001b9ade39300, 0x000001b9ade39420] -Event: 17.842 Thread 0x000001ba11105a80 821 % 4 org.kne.cloud.network.monitor.TimestampMonitor::lambda$8 @ 0 (18 bytes) -Event: 17.867 Thread 0x000001ba160bc010 nmethod 819 0x000001b9ade39508 code [0x000001b9ade39740, 0x000001b9ade3b290] -Event: 17.868 Thread 0x000001ba160bc010 815 4 java.lang.Long::hashCode (8 bytes) -Event: 17.870 Thread 0x000001ba160bc010 nmethod 815 0x000001b9ade3b408 code [0x000001b9ade3b500, 0x000001b9ade3b590] -Event: 17.888 Thread 0x000001ba112526c0 nmethod 818 0x000001b9ade3b708 code [0x000001b9ade3b900, 0x000001b9ade3dad8] -Event: 18.183 Thread 0x000001ba11105a80 nmethod 821% 0x000001b9ade3dc08 code [0x000001b9ade3e9e0, 0x000001b9ade4baf8] - -GC Heap History (20 events): -Event: 7.310 GC heap after -{Heap after GC invocations=12 (full 0): - garbage-first heap total reserved 16662528K, committed 6340608K, used 1094795K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 5 young (40960K), 5 survivors (40960K) - Metaspace used 3018K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 9.227 GC heap before -{Heap before GC invocations=12 (full 0): - garbage-first heap total reserved 16662528K, committed 6340608K, used 1438859K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 38 young (311296K), 5 survivors (40960K) - Metaspace used 3018K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 9.478 GC heap after -{Heap after GC invocations=13 (full 0): - garbage-first heap total reserved 16662528K, committed 9633792K, used 1359872K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 5 young (40960K), 5 survivors (40960K) - Metaspace used 3018K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 10.494 GC heap before -{Heap before GC invocations=13 (full 0): - garbage-first heap total reserved 16662528K, committed 9633792K, used 1794048K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 58 young (475136K), 5 survivors (40960K) - Metaspace used 3018K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 10.829 GC heap after -{Heap after GC invocations=14 (full 0): - garbage-first heap total reserved 16662528K, committed 9633792K, used 1653724K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 8 young (65536K), 8 survivors (65536K) - Metaspace used 3018K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 11.413 GC heap before -{Heap before GC invocations=14 (full 0): - garbage-first heap total reserved 16662528K, committed 9633792K, used 2063324K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 58 young (475136K), 8 survivors (65536K) - Metaspace used 3018K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 11.717 GC heap after -{Heap after GC invocations=15 (full 0): - garbage-first heap total reserved 16662528K, committed 9633792K, used 1932225K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 8 young (65536K), 8 survivors (65536K) - Metaspace used 3018K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 12.260 GC heap before -{Heap before GC invocations=15 (full 0): - garbage-first heap total reserved 16662528K, committed 9633792K, used 2341825K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 58 young (475136K), 8 survivors (65536K) - Metaspace used 3018K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 12.501 GC heap after -{Heap after GC invocations=16 (full 0): - garbage-first heap total reserved 16662528K, committed 9633792K, used 2211407K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 8 young (65536K), 8 survivors (65536K) - Metaspace used 3018K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 16.862 GC heap before -{Heap before GC invocations=16 (full 0): - garbage-first heap total reserved 16662528K, committed 9633792K, used 2760271K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 58 young (475136K), 8 survivors (65536K) - Metaspace used 3018K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 17.160 GC heap after -{Heap after GC invocations=17 (full 0): - garbage-first heap total reserved 16662528K, committed 11599872K, used 2652625K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 8 young (65536K), 8 survivors (65536K) - Metaspace used 3018K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 18.284 GC heap before -{Heap before GC invocations=17 (full 0): - garbage-first heap total reserved 16662528K, committed 11599872K, used 3160529K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 70 young (573440K), 8 survivors (65536K) - Metaspace used 3019K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 18.575 GC heap after -{Heap after GC invocations=18 (full 0): - garbage-first heap total reserved 16662528K, committed 11599872K, used 2998272K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 9 young (73728K), 9 survivors (73728K) - Metaspace used 3019K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 19.499 GC heap before -{Heap before GC invocations=18 (full 0): - garbage-first heap total reserved 16662528K, committed 11599872K, used 3497984K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 70 young (573440K), 9 survivors (73728K) - Metaspace used 3019K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 19.812 GC heap after -{Heap after GC invocations=19 (full 0): - garbage-first heap total reserved 16662528K, committed 11599872K, used 3340337K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 9 young (73728K), 9 survivors (73728K) - Metaspace used 3019K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 20.618 GC heap before -{Heap before GC invocations=19 (full 0): - garbage-first heap total reserved 16662528K, committed 11599872K, used 3840049K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 70 young (573440K), 9 survivors (73728K) - Metaspace used 3019K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 20.887 GC heap after -{Heap after GC invocations=20 (full 0): - garbage-first heap total reserved 16662528K, committed 11599872K, used 3678208K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 9 young (73728K), 9 survivors (73728K) - Metaspace used 3019K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 21.550 GC heap before -{Heap before GC invocations=20 (full 0): - garbage-first heap total reserved 16662528K, committed 11599872K, used 4177920K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 70 young (573440K), 9 survivors (73728K) - Metaspace used 3019K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 21.760 GC heap after -{Heap after GC invocations=21 (full 0): - garbage-first heap total reserved 16662528K, committed 11599872K, used 4012216K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 9 young (73728K), 9 survivors (73728K) - Metaspace used 3019K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} -Event: 22.342 GC heap before -{Heap before GC invocations=21 (full 0): - garbage-first heap total reserved 16662528K, committed 11599872K, used 4511928K [0x0000000407000000, 0x0000000800000000) - region size 8192K, 70 young (573440K), 9 survivors (73728K) - Metaspace used 3019K, committed 3200K, reserved 1114112K - class space used 283K, committed 384K, reserved 1048576K -} - -Dll operation events (9 events): -Event: 0.010 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\java.dll -Event: 0.098 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jsvml.dll -Event: 0.100 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jvmcicompiler.dll -Event: 0.216 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\zip.dll -Event: 0.220 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\instrument.dll -Event: 0.225 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\net.dll -Event: 0.226 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\nio.dll -Event: 0.232 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\zip.dll -Event: 0.695 Loaded shared library C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jimage.dll - -Deoptimization events (20 events): -Event: 6.004 Thread 0x000001ba1197c280 DEOPT PACKING pc=0x000001b9a612726f sp=0x000000b5e09ff630 -Event: 6.004 Thread 0x000001ba1197c280 DEOPT UNPACKING pc=0x000001b9ad3049a3 sp=0x000000b5e09feb28 mode 0 -Event: 17.764 Thread 0x000001ba1197c280 Uncommon trap: trap_request=0xffffffed fr.pc=0x000001b9ade35d34 relative=0x0000000000008cf4 -Event: 17.764 Thread 0x000001ba1197c280 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x000001b9ade35d34 method=java.util.concurrent.ConcurrentHashMap.addCount(JI)V @ 4 jvmci -Event: 17.764 Thread 0x000001ba1197c280 DEOPT PACKING pc=0x000001b9ade35d34 sp=0x000000b5e09ff370 -Event: 17.764 Thread 0x000001ba1197c280 DEOPT UNPACKING pc=0x000001b9ad3049a3 sp=0x000000b5e09fe7f8 mode 3 -Event: 17.764 Thread 0x000001ba1197c280 Uncommon trap: trap_request=0xffffffed fr.pc=0x000001b9addecc85 relative=0x0000000000000e45 -Event: 17.764 Thread 0x000001ba1197c280 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x000001b9addecc85 method=java.util.concurrent.ConcurrentHashMap.addCount(JI)V @ 4 jvmci -Event: 17.764 Thread 0x000001ba1197c280 DEOPT PACKING pc=0x000001b9addecc85 sp=0x000000b5e09ff510 -Event: 17.764 Thread 0x000001ba1197c280 DEOPT UNPACKING pc=0x000001b9ad3049a3 sp=0x000000b5e09fe8e0 mode 3 -Event: 17.764 Thread 0x000001ba1197c280 Uncommon trap: trap_request=0xffffffed fr.pc=0x000001b9addee9fa relative=0x00000000000012da -Event: 17.764 Thread 0x000001ba1197c280 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x000001b9addee9fa method=java.util.concurrent.ConcurrentHashMap.addCount(JI)V @ 4 jvmci -Event: 17.764 Thread 0x000001ba1197c280 DEOPT PACKING pc=0x000001b9addee9fa sp=0x000000b5e09ff3e0 -Event: 17.764 Thread 0x000001ba1197c280 DEOPT UNPACKING pc=0x000001b9ad3049a3 sp=0x000000b5e09fe8e0 mode 3 -Event: 17.770 Thread 0x000001ba1197c280 Uncommon trap: trap_request=0xffffffed fr.pc=0x000001b9addfb072 relative=0x0000000000001732 -Event: 17.770 Thread 0x000001ba1197c280 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x000001b9addfb072 method=java.util.concurrent.ConcurrentHashMap.addCount(JI)V @ 4 jvmci -Event: 17.770 Thread 0x000001ba1197c280 DEOPT PACKING pc=0x000001b9addfb072 sp=0x000000b5e09ff540 -Event: 17.770 Thread 0x000001ba1197c280 DEOPT UNPACKING pc=0x000001b9ad3049a3 sp=0x000000b5e09fe830 mode 3 -Event: 18.185 Thread 0x000001ba1197c280 DEOPT PACKING pc=0x000001b9a612aa6f sp=0x000000b5e09ff630 -Event: 18.185 Thread 0x000001ba1197c280 DEOPT UNPACKING pc=0x000001b9ad3049a3 sp=0x000000b5e09feb28 mode 0 - -Classes loaded (20 events): -Event: 4.768 Loading class java/util/stream/ReferencePipeline$5 -Event: 4.768 Loading class java/util/stream/LongPipeline$StatelessOp -Event: 4.768 Loading class java/util/stream/LongPipeline -Event: 4.768 Loading class java/util/stream/LongStream -Event: 4.768 Loading class java/util/stream/LongStream done -Event: 4.769 Loading class java/util/stream/LongPipeline done -Event: 4.769 Loading class java/util/stream/LongPipeline$StatelessOp done -Event: 4.769 Loading class java/util/stream/ReferencePipeline$5 done -Event: 4.770 Loading class java/util/function/LongBinaryOperator -Event: 4.770 Loading class java/util/function/LongBinaryOperator done -Event: 4.780 Loading class java/util/stream/ReduceOps$10 -Event: 4.780 Loading class java/util/stream/ReduceOps$10 done -Event: 4.792 Loading class java/util/stream/ReduceOps$8ReducingSink -Event: 4.792 Loading class java/util/stream/Sink$OfLong -Event: 4.792 Loading class java/util/stream/Sink$OfLong done -Event: 4.792 Loading class java/util/stream/ReduceOps$8ReducingSink done -Event: 4.792 Loading class java/util/stream/ReferencePipeline$5$1 -Event: 4.792 Loading class java/util/stream/ReferencePipeline$5$1 done -Event: 4.792 Loading class java/util/concurrent/ConcurrentHashMap$TableStack -Event: 4.792 Loading class java/util/concurrent/ConcurrentHashMap$TableStack done - -Classes unloaded (0 events): -No events - -Classes redefined (0 events): -No events - -Internal exceptions (6 events): -Event: 0.486 Thread 0x000001b99bf22130 Exception (0x0000000446fa9ed8) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 796] -Event: 0.538 Thread 0x000001b99bf22130 Exception (0x0000000446fbd270) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 796] -Event: 0.673 Thread 0x000001b99bf22130 Exception (0x00000004461931f8) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 796] -Event: 0.845 Thread 0x000001b99bf22130 Exception (0x0000000446276f68) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 796] -Event: 4.408 Thread 0x000001b99bf22130 Exception (0x0000000589a65d00) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 796] -Event: 4.697 Thread 0x000001b99bf22130 Exception (0x00000005886bdd70) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 796] - -VM Operations (20 events): -Event: 16.787 Executing VM operation: ChangeSingleStep done -Event: 16.788 Executing VM operation: ChangeSingleStep -Event: 16.788 Executing VM operation: ChangeSingleStep done -Event: 16.862 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 17.161 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 17.751 Executing VM operation: ChangeSingleStep -Event: 17.751 Executing VM operation: ChangeSingleStep done -Event: 17.760 Executing VM operation: ChangeSingleStep -Event: 17.761 Executing VM operation: ChangeSingleStep done -Event: 17.762 Executing VM operation: get/set locals -Event: 17.762 Executing VM operation: get/set locals done -Event: 18.284 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 18.575 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 19.499 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 19.812 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 20.618 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 20.887 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 21.550 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 21.760 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 22.342 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) - -Memory protections (0 events): -No events - -Nmethod flushes (0 events): -No events - -Events (20 events): -Event: 4.807 Thread 0x000001ba16035350 Thread added: 0x000001ba1605a7e0 -Event: 4.852 Thread 0x000001ba160387d0 Thread added: 0x000001ba1605ae70 -Event: 4.853 Thread 0x000001ba160359e0 Thread added: 0x000001ba1609f9b0 -Event: 4.853 Thread 0x000001ba112526c0 Thread added: 0x000001ba16051d90 -Event: 4.877 Thread 0x000001ba16051d90 Thread added: 0x000001ba160a8bd0 -Event: 4.879 Thread 0x000001ba16051d90 Thread added: 0x000001ba160a9ab0 -Event: 4.880 Thread 0x000001ba16051d90 Thread added: 0x000001ba160ac180 -Event: 5.092 Thread 0x000001ba160ac180 Thread exited: 0x000001ba160ac180 -Event: 5.117 Thread 0x000001ba160a9ab0 Thread exited: 0x000001ba160a9ab0 -Event: 5.254 Thread 0x000001ba16051d90 Thread added: 0x000001ba160bc010 -Event: 5.421 Thread 0x000001ba11105a80 Thread added: 0x000001ba11bec360 -Event: 5.422 Thread 0x000001ba11105a80 Thread added: 0x000001ba11beca20 -Event: 10.829 Thread 0x000001ba160bc010 Thread exited: 0x000001ba160bc010 -Event: 11.717 Thread 0x000001ba11bec360 Thread exited: 0x000001ba11bec360 -Event: 11.717 Thread 0x000001ba11beca20 Thread exited: 0x000001ba11beca20 -Event: 12.014 Thread 0x000001ba160a8bd0 Thread exited: 0x000001ba160a8bd0 -Event: 15.829 Thread 0x000001ba16051d90 Thread exited: 0x000001ba16051d90 -Event: 17.765 Thread 0x000001ba112526c0 Thread exited: 0x000001ba112526c0 -Event: 17.797 Thread 0x000001ba11105a80 Thread added: 0x000001ba112526c0 -Event: 17.797 Thread 0x000001ba11105a80 Thread added: 0x000001ba160bc010 - - -Dynamic libraries: -0x00007ff63b640000 - 0x00007ff63b650000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\javaw.exe -0x00007fff302e0000 - 0x00007fff304e1000 C:\Windows\SYSTEM32\ntdll.dll -0x00007fff2ef90000 - 0x00007fff2f04e000 C:\Windows\System32\KERNEL32.DLL -0x00007fff2d9a0000 - 0x00007fff2dd0e000 C:\Windows\System32\KERNELBASE.dll -0x00007fff2df20000 - 0x00007fff2e030000 C:\Windows\System32\ucrtbase.dll -0x00007fff28080000 - 0x00007fff28097000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jli.dll -0x00007fff28040000 - 0x00007fff2805b000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\VCRUNTIME140.dll -0x00007fff2e9c0000 - 0x00007fff2eb65000 C:\Windows\System32\USER32.dll -0x00007fff13dd0000 - 0x00007fff14075000 C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.20348.1_none_88d3d41d702dedea\COMCTL32.dll -0x00007fff2ddd0000 - 0x00007fff2ddf6000 C:\Windows\System32\win32u.dll -0x00007fff2e3e0000 - 0x00007fff2e40b000 C:\Windows\System32\GDI32.dll -0x00007fff2f460000 - 0x00007fff2f503000 C:\Windows\System32\msvcrt.dll -0x00007fff2de00000 - 0x00007fff2df1a000 C:\Windows\System32\gdi32full.dll -0x00007fff2d900000 - 0x00007fff2d9a0000 C:\Windows\System32\msvcp_win.dll -0x00007fff2fe80000 - 0x00007fff2feb1000 C:\Windows\System32\IMM32.DLL -0x00007fff1a850000 - 0x00007fff1a85c000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\vcruntime140_1.dll -0x00007ffefd890000 - 0x00007ffefd91e000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\msvcp140.dll -0x00007ffdac1c0000 - 0x00007ffdacf0f000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\server\jvm.dll -0x00007fff2f3b0000 - 0x00007fff2f45e000 C:\Windows\System32\ADVAPI32.dll -0x00007fff2e920000 - 0x00007fff2e9bf000 C:\Windows\System32\sechost.dll -0x00007fff2fd50000 - 0x00007fff2fe6f000 C:\Windows\System32\RPCRT4.dll -0x00007fff2f0f0000 - 0x00007fff2f161000 C:\Windows\System32\WS2_32.dll -0x00007fff2d770000 - 0x00007fff2d7bd000 C:\Windows\SYSTEM32\POWRPROF.dll -0x00007fff293d0000 - 0x00007fff293da000 C:\Windows\SYSTEM32\VERSION.dll -0x00007fff26410000 - 0x00007fff26437000 C:\Windows\SYSTEM32\WINMM.dll -0x00007fff2d750000 - 0x00007fff2d763000 C:\Windows\SYSTEM32\UMPDC.dll -0x00007fff2c1f0000 - 0x00007fff2c207000 C:\Windows\SYSTEM32\kernel.appcore.dll -0x00007fff19fd0000 - 0x00007fff19fda000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jimage.dll -0x00007fff179e0000 - 0x00007fff17bf2000 C:\Windows\SYSTEM32\DBGHELP.DLL -0x00007fff16980000 - 0x00007fff169b0000 C:\Windows\SYSTEM32\dbgcore.DLL -0x00007fff2e030000 - 0x00007fff2e0ad000 C:\Windows\System32\bcryptPrimitives.dll -0x00007ffef4bb0000 - 0x00007ffef4bec000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jdwp.dll -0x00007fff0f250000 - 0x00007fff0f25f000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\instrument.dll -0x00007fff16340000 - 0x00007fff1635e000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\java.dll -0x00007fff2f170000 - 0x00007fff2f2a5000 C:\Windows\System32\ole32.dll -0x00007fff2ff20000 - 0x00007fff30291000 C:\Windows\System32\combase.dll -0x00007fff2f570000 - 0x00007fff2fcca000 C:\Windows\System32\SHELL32.dll -0x00007fff23550000 - 0x00007fff23d96000 C:\Windows\SYSTEM32\windows.storage.dll -0x00007fff2eea0000 - 0x00007fff2ef8a000 C:\Windows\System32\SHCORE.dll -0x00007fff2fcf0000 - 0x00007fff2fd4f000 C:\Windows\System32\shlwapi.dll -0x00007fff2d7c0000 - 0x00007fff2d7e1000 C:\Windows\SYSTEM32\profapi.dll -0x00007ffee94d0000 - 0x00007ffee95a7000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jsvml.dll -0x00007ffd377e0000 - 0x00007ffd3a408000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\jvmcicompiler.dll -0x00007fff2f0e0000 - 0x00007fff2f0e8000 C:\Windows\System32\PSAPI.DLL -0x00007fff2e0b0000 - 0x00007fff2e210000 C:\Windows\System32\CRYPT32.dll -0x00007fff2ce60000 - 0x00007fff2ce8e000 C:\Windows\SYSTEM32\USERENV.dll -0x00007fff2d0d0000 - 0x00007fff2d0fe000 C:\Windows\SYSTEM32\ncrypt.dll -0x00007fff2caa0000 - 0x00007fff2cacd000 C:\Windows\SYSTEM32\IPHLPAPI.DLL -0x00007fff2cd60000 - 0x00007fff2cdc8000 C:\Windows\SYSTEM32\MSWSOCK.dll -0x00007fff2d090000 - 0x00007fff2d0c7000 C:\Windows\SYSTEM32\NTASN1.dll -0x00007fff0f240000 - 0x00007fff0f24c000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\dt_socket.dll -0x00007fff2cad0000 - 0x00007fff2cbae000 C:\Windows\SYSTEM32\DNSAPI.dll -0x00007fff2e210000 - 0x00007fff2e219000 C:\Windows\System32\NSI.dll -0x00007fff262e0000 - 0x00007fff262ea000 C:\Windows\System32\rasadhlp.dll -0x00007fff26c90000 - 0x00007fff26d12000 C:\Windows\System32\fwpuclnt.dll -0x00007fff0fc50000 - 0x00007fff0fc67000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\zip.dll -0x00007fff19fc0000 - 0x00007fff19fd0000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\net.dll -0x00007fff16320000 - 0x00007fff16336000 C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\nio.dll - -dbghelp: loaded successfully - version: 4.0.5 - missing functions: none -symbol engine: initialized successfully - sym options: 0x614 - pdb path: .;C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin;C:\Windows\SYSTEM32;C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.20348.1_none_88d3d41d702dedea;C:\Program Files\Java\graalvm-jdk-23.0.1+11.1\bin\server - -VM Arguments: -jvm_args: -XX:ThreadPriorityPolicy=1 -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCIProduct -XX:-UnlockExperimentalVMOptions --add-exports=java.base/jdk.internal.misc=jdk.graal.compiler -XX:+ShowCodeDetailsInExceptionMessages -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:41761 -javaagent:C:\Program Files\eclipse\configuration\org.eclipse.osgi\837\0\.cp\lib\javaagent-shaded.jar --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED --add-exports=java.base/jdk.internal.foreign=ALL-UNNAMED --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED --add-opens=java.base/jdk.internal.foreign=ALL-UNNAMED -java_command: org.kne.cloud.network.monitor.TimestampMonitor -java_class_path (initial): C:\KNEļ\coding\java\KLALB\bin;C:\KNEļ\coding\java\KNElib\bin;C:\KNEļ\coding\java\KLALB\lib\gson-2.1.jar;C:\KNEļ\coding\java\KLALB\lib\javassist.jar;C:\KNEļ\coding\java\KLALB\lib\ini4j.jar;C:\KNEļ\coding\java\KLALB\lib\JFreeChart1.5.2.jar;C:\KNEļ\coding\java\KLALB\lib\toml4j-0.7.1.jar;C:\KNEļ\coding\java\KLALB\lib\pcap4j-core-1.8.2.jar;C:\KNEļ\coding\java\KLALB\lib\pcap4j-packetfactory-propertiesbased-1.8.2.jar;C:\KNEļ\coding\java\KLALB\lib\pcap4j-packetfactory-static-1.8.2.jar;C:\KNEļ\coding\java\KLALB\lib\pcap4j-sample-1.8.2.jar;C:\KNEļ\coding\java\KLALB\lib\slf4j-api-2.0.9.jar;C:\KNEļ\coding\java\KLALB\lib\slf4j-api-2.0.9-javadoc.jar;C:\KNEļ\coding\java\KLALB\lib\slf4j-api-2.0.9-sources.jar;C:\KNEļ\coding\java\KLALB\lib\slf4j-api-2.0.9-tests.jar;C:\KNEļ\coding\java\KLALB\lib\disruptor-4.0.0.jar;C:\KNEļ\coding\java\KLALB\lib\disruptor-4.0.0-javadoc.jar;C:\KNEļ\coding\java\KLALB\lib\disruptor-4.0.0-sources.jar;C:\KNEļ\coding\java\KLALB\lib\JavaTUN.jar -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 15 {product} {ergonomic} - uint ConcGCThreads = 10 {product} {ergonomic} - bool EnableJVMCIProduct = true {JVMCI product} {jimage} - uint G1ConcRefinementThreads = 38 {product} {ergonomic} - size_t G1HeapRegionSize = 8388608 {product} {ergonomic} - size_t InitialHeapSize = 1073741824 {product} {ergonomic} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MarkStackSizeMax = 536870912 {product} {ergonomic} - size_t MaxHeapSize = 17062428672 {product} {ergonomic} - size_t MaxNewSize = 10234101760 {product} {ergonomic} - size_t MinHeapDeltaBytes = 8388608 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonNMethodCodeHeapSize = 11599872 {pd product} {ergonomic} - uintx NonProfiledCodeHeapSize = 120061952 {pd product} {ergonomic} - uintx ProfiledCodeHeapSize = 119996416 {pd product} {ergonomic} - uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} - bool SegmentedCodeCache = true {product} {ergonomic} - bool ShowCodeDetailsInExceptionMessages = true {manageable} {command line} - size_t SoftMaxHeapSize = 17062428672 {manageable} {ergonomic} - int ThreadPriorityPolicy = 1 {product} {jimage} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags foldmultilines=false - #1: stderr all=off uptime,level,tags foldmultilines=false - -Environment Variables: -JAVA_HOME=C:\Program Files\Java\jdk-19 -PATH=C:/Program Files/Java/graalvm-ce-java19-22.3.1/bin/server;C:/Program Files/Java/graalvm-ce-java19-22.3.1/bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\libnvvp;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\libnvvp;C:\Program Files (x86)\VMware\VMware Workstation\bin\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Java\jdk-19\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\Bandizip\;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\chocolatey\bin;C:\tools\Manim\Scripts;C:\Program Files\MiKTeX\miktex\bin\x64\;C:\Program Files\MySQL\MySQL Server 8.0\bin;C:\Program Files\dotnet\;C:\Program Files (x86)\NetSarang\Xftp 7\;C:\Program Files\010 Editor;C:\Program Files\nodejs\;C:\Program Files\Microsoft VS Code Insiders\bin;C:\Program Files\Disktrix\UltimateDefrag;C:\Program Files\Sunshine;C:\Program Files\Sunshine\tools;C:\Program Files\NVIDIA Corporation\Nsight Compute 2023.1.0\;C:\Users\Administrator\AppData\Local\Programs\Python\Python310\Scripts\;C:\Users\Administrator\AppData\Local\Programs\Python\Python310\;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;C:\Users\Administrator\AppData\Roaming\npm;C:\Program Files\eclipse; -USERNAME=Administrator -OS=Windows_NT -PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 85 Stepping 4, GenuineIntel -TMP=C:\Users\ADMINI~1\AppData\Local\Temp -TEMP=C:\Users\ADMINI~1\AppData\Local\Temp - - - - -Periodic native trim disabled - ---------------- S Y S T E M --------------- - -OS: - Windows Server 2022 , 64 bit Build 20348 (10.0.20348.1726) -OS uptime: 20 days 23:58 hours - -CPU: total 56 (initial active 56) (14 cores per cpu, 2 threads per core) family 6 model 85 stepping 4 microcode 0x2006b06, cx8, cmov, fxsr, ht, mmx, 3dnowpref, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, lzcnt, tsc, tscinvbit, avx, avx2, aes, erms, clmul, bmi1, bmi2, rtm, adx, fma, vzeroupper, clflush, clflushopt, clwb, rdtscp, f16c, pku -Processor Information for the first 56 processors : - Max Mhz: 2195, Current Mhz: 2195, Mhz Limit: 2195 - -Memory: 4k page, system-wide physical 65072M (9754M free) -TotalPageFile size 97840M (AvailPageFile size 448M) -current process WorkingSet (physical memory assigned to process): 5394M, peak: 5394M -current process commit charge ("private bytes"): 11760M, peak: 13040M - -vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.1+11-jvmci-b01) for windows-amd64 JRE (23.0.1+11-jvmci-b01), built on 2024-10-01T10:34:46Z with MS VC++ 17.6 (VS2022) - -END. diff --git a/hs_err_pid29580.mdmp b/hs_err_pid29580.mdmp deleted file mode 100644 index e69de29..0000000 diff --git a/klalb-config.json b/klalb-config.json index a67b291..52f6b3e 100644 --- a/klalb-config.json +++ b/klalb-config.json @@ -1,7 +1,7 @@ [ { "language": "ZH_CN", - "nogui": false, + "nogui": true, "VirtualAddress": "2486:1:0:0:0:0:0:8888", "VirtualASN": 2142606939373348329, "DNS": [ @@ -15,7 +15,8 @@ ], "ConnectLineTable": [ "home-ipv6.sliveridc1.cn:4565", - "home-ltipv6.sliveridc1.cn:4565" + "home-ltipv6.sliveridc1.cn:4565", + "cn-gd-gz.sliveridc1.cn:4565" ], "ntpServerTable": [ "{UDP}ntp1.aliyun.com:123", @@ -36,6 +37,15 @@ "{UDP}ntp.ntsc.ac.cn:123", "{UDP}us.ntp.org.cn:123" ], + "denyLineTableQuery": false, + "denyLineTableBroadcast": false, + "congestionAlgorithm": "BBR", + "delayUpperBound": 1.506, + "delayLowerBound": 1.25, + "nagleDelayTime": 1000000, + "linkNagleDelayTime": 1000000, + "linkConnectionsCount": 1, + "TUNName": "KLALB_SRv6", "NetworkInterfaceExcepts": [], "Type": "KLALBController" }, @@ -77,6 +87,16 @@ }, "Type": "SocketBridge" }, + { + "Listen": "{KLALB_Stream}[::0]:25565", + "Bridge": { + "DEFAULT": "SocketBridge" + }, + "Connect": { + "DEFAULT": "127.0.0.1:25566" + }, + "Type": "SocketBridge" + }, { "Listen": "0.0.0.0:25561", "Bridge": { diff --git a/lib/JavaTUN.jar b/lib/JavaTUN.jar deleted file mode 100644 index b954a82..0000000 Binary files a/lib/JavaTUN.jar and /dev/null differ diff --git a/lib/JavaTUN0.3.jar b/lib/JavaTUN0.3.jar new file mode 100644 index 0000000..6b01d7c Binary files /dev/null and b/lib/JavaTUN0.3.jar differ diff --git a/lib/KNEOptimize.jar b/lib/KNEOptimize.jar new file mode 100644 index 0000000..ca0b6ec Binary files /dev/null and b/lib/KNEOptimize.jar differ diff --git a/lib/KNElib1.0.jar b/lib/KNElib1.0.jar index 66e202d..eb9fac1 100644 Binary files a/lib/KNElib1.0.jar and b/lib/KNElib1.0.jar differ diff --git a/lib/uuid-creator-6.1.1-javadoc.jar b/lib/uuid-creator-6.1.1-javadoc.jar new file mode 100644 index 0000000..e45b88c Binary files /dev/null and b/lib/uuid-creator-6.1.1-javadoc.jar differ diff --git a/lib/uuid-creator-6.1.1-sources.jar b/lib/uuid-creator-6.1.1-sources.jar new file mode 100644 index 0000000..ad47277 Binary files /dev/null and b/lib/uuid-creator-6.1.1-sources.jar differ diff --git a/lib/uuid-creator-6.1.1.jar b/lib/uuid-creator-6.1.1.jar new file mode 100644 index 0000000..f1fba8f Binary files /dev/null and b/lib/uuid-creator-6.1.1.jar differ diff --git a/libtuntap4j.dylib b/libtuntap4j.dylib new file mode 100644 index 0000000..1566452 Binary files /dev/null and b/libtuntap4j.dylib differ diff --git a/libtuntap4j.so b/libtuntap4j.so new file mode 100644 index 0000000..7f527e6 Binary files /dev/null and b/libtuntap4j.so differ diff --git a/src/assets/dashboard.png b/src/assets/dashboard.png new file mode 100644 index 0000000..725f8e1 Binary files /dev/null and b/src/assets/dashboard.png differ diff --git a/src/klalb_en_US.properties b/src/klalb_en_US.properties index 7a7dfac..cb4314e 100644 --- a/src/klalb_en_US.properties +++ b/src/klalb_en_US.properties @@ -76,4 +76,20 @@ ntpservers=NTP server addresses nodeinfo=Node information basicinfo=Basic info overview=Overview -timerange=Time range \ No newline at end of file +timerange=Time range +error=Error +securitysettings=Security settings +delayupperbound=Delay upper bound +delaylowerbound=Delay lower bound +denyaddrquery=Deny address query +denyaddrbroadcast=Deny address broadcast +random=Random +transmitnagledelaytime=Transmit nagle delay time +linknagledelaytime=Link nagle delay time +linkconnectionscount=Link connections count +tunname=Virtual network device name +dashboard=Dashboard +backplanedelay=Backplane delay +backplanepps=Backplane PPS +uisettings=UI settings +nogui=No GUI mode \ No newline at end of file diff --git a/src/klalb_zh_CN.properties b/src/klalb_zh_CN.properties index 9219d94..7e6e745 100644 --- a/src/klalb_zh_CN.properties +++ b/src/klalb_zh_CN.properties @@ -76,4 +76,20 @@ ntpservers=NTP授时服务器地址 nodeinfo=节点信息 basicinfo=基本信息 overview=概览 -timerange=时间范围 \ No newline at end of file +timerange=时间范围 +error=错误 +securitysettings=安全设置 +delayupperbound=网络时延上限 +delaylowerbound=网络时延下限 +denyaddrquery=禁用IP地址查询 +denyaddrbroadcast=禁用IP地址广播 +random=随机 +transmitnagledelaytime=传输粘包等待时间 +linknagledelaytime=链路粘包等待时间 +linkconnectionscount=链路连接数 +tunname=虚拟网卡名称 +dashboard=仪表盘 +backplanedelay=背板处理延迟 +backplanepps=背板包转发率 +uisettings=UI设置 +nogui=无GUI模式 \ No newline at end of file diff --git a/src/org/kne/cloud/clock/HighAccuracyClock.java b/src/org/kne/cloud/clock/HighAccuracyClock.java index 3e392d6..1a68810 100644 --- a/src/org/kne/cloud/clock/HighAccuracyClock.java +++ b/src/org/kne/cloud/clock/HighAccuracyClock.java @@ -17,24 +17,26 @@ public class HighAccuracyClock { private final long initialCPUNanoTime; private final Long128 initialSystemNanoTime; - private volatile AtomicLong baseCPUNanoTime=new AtomicLong(); + private volatile long baseCPUNanoTime; private volatile Long128 baseSystemNanoTime; private volatile long frequency=1000000000;//1000015000 - + private volatile long frequency2=frequency*0xffffffffL/1000000000L; + private ReentrantLock lock=new ReentrantLock(); private static final Long128 NANOS_PER_MILLIS = Long128.valueOf(TimeUnit.MILLISECONDS.toNanos(1)); private static final Long128 NANOS_PER_SECONDS = Long128.valueOf(TimeUnit.SECONDS.toNanos(1)); + public static final HighAccuracyClock SYSTEM_CLOCK = new HighAccuracyClock(); public HighAccuracyClock() { this.initialSystemNanoTime =Long128.valueOf( System.currentTimeMillis() ).multiply(NANOS_PER_MILLIS); this.initialCPUNanoTime = System.nanoTime(); this.baseSystemNanoTime=initialSystemNanoTime; - this.baseCPUNanoTime.set(initialCPUNanoTime); + this.baseCPUNanoTime=initialCPUNanoTime; } public long getFrequency() { @@ -45,9 +47,11 @@ public class HighAccuracyClock { lock.lock(); try { long curr=System.nanoTime(); - long nanoela=curr-baseCPUNanoTime.getAndSet(curr); + long nanoela=curr-baseCPUNanoTime; + baseCPUNanoTime=curr; baseSystemNanoTime=baseSystemNanoTime.add( Long128.valueOf(nanoela).multiply(this.frequency).divide(NANOS_PER_SECONDS)); this.frequency = frequency; + this.frequency2=frequency*0xffffffffL/1000000000L; }finally { lock.unlock(); } @@ -59,6 +63,7 @@ public class HighAccuracyClock { try { compact(); this.frequency = frequency+fdelta; + this.frequency2=frequency*0xffffffffL/1000000000L; }finally { lock.unlock(); } @@ -69,7 +74,8 @@ public class HighAccuracyClock { lock.lock(); try { long curr=System.nanoTime(); - long nanoela=curr-baseCPUNanoTime.getAndSet(curr); + long nanoela=curr-baseCPUNanoTime; + baseCPUNanoTime=curr; baseSystemNanoTime=baseSystemNanoTime.add(Long128.valueOf(nanoela).multiply(this.frequency).divide(NANOS_PER_SECONDS)); }finally { lock.unlock(); @@ -80,12 +86,8 @@ public class HighAccuracyClock { * 获取从1970-01-01开始的当前时间(纳秒精度) */ public Long128 getCurrentTimeNanos() { - Long128 mul=Long128.valueOf(System.nanoTime()-baseCPUNanoTime.get()).multiply(frequency); - if(mul.getHigh()!=0) { - compact(); - mul=Long128.valueOf(System.nanoTime()-baseCPUNanoTime.get()).multiply(frequency); - } - return mul.divide(NANOS_PER_SECONDS).add(baseSystemNanoTime); + Long128 mul=Long128.valueOf(System.nanoTime()-baseCPUNanoTime).multiply(frequency2); + return mul.shiftRight(32).add(baseSystemNanoTime); } /** @@ -98,14 +100,14 @@ public class HighAccuracyClock { /** * 获取 NTPv4 128 位时间戳 */ - public BigInteger getCurrentTimeNTP128() { + public Long128 getCurrentTimeNTP128() { return NTPTimestamps.nanosToNtp128BitTimestamp(getCurrentTimeNanos()); } /** * 获取 NTPv4 64 位时间戳 */ - public BigInteger getCurrentTimeNTP64() { + public Long128 getCurrentTimeNTP64() { return NTPTimestamps.ntp128To64(getCurrentTimeNTP128()); } @@ -125,7 +127,7 @@ public class HighAccuracyClock { public void syncToTime(Long128 targetNanos) { lock.lock(); try { - baseCPUNanoTime.set( System.nanoTime()); + baseCPUNanoTime= System.nanoTime(); baseSystemNanoTime=targetNanos; }finally { lock.unlock(); @@ -152,7 +154,7 @@ public class HighAccuracyClock { } lock.lock(); try { - baseCPUNanoTime.set( System.nanoTime()); + baseCPUNanoTime=System.nanoTime(); baseSystemNanoTime=referenceClock.getCurrentTimeNanos(); }finally { lock.unlock(); @@ -163,7 +165,7 @@ public class HighAccuracyClock { * 基于NTP时间戳同步 * @param ntp128Timestamp NTP 128位时间戳 */ - public void syncToNTPTime(BigInteger ntp128Timestamp) { + public void syncToNTPTime(Long128 ntp128Timestamp) { Long128 targetNanos = NTPTimestamps.ntp128BitToNanosTimestamp(ntp128Timestamp); syncToTime(targetNanos); } @@ -226,6 +228,11 @@ public class HighAccuracyClock { Long128 nanos = getCurrentTimeNanos(); return NTPTimestamps.nanosSince1970ToString(nanos); } + + public String toString2() { + Long128 nanos = getCurrentTimeNanos(); + return NTPTimestamps.nanosSince1970ToString2(nanos); + } public long getInitialCPUNanoTime() { return initialCPUNanoTime; @@ -244,6 +251,8 @@ public class HighAccuracyClock { Thread.sleep(1000); } } + + } \ No newline at end of file diff --git a/src/org/kne/cloud/clock/NTPTimestamps.java b/src/org/kne/cloud/clock/NTPTimestamps.java index 2227a60..e89fe92 100644 --- a/src/org/kne/cloud/clock/NTPTimestamps.java +++ b/src/org/kne/cloud/clock/NTPTimestamps.java @@ -1,6 +1,5 @@ package org.kne.cloud.clock; -import java.math.BigInteger; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; @@ -12,29 +11,30 @@ import org.kne.math.Long128; public class NTPTimestamps { // 常量定义 - public static final BigInteger NANOS_PER_SECOND = BigInteger.valueOf(1_000_000_000L); - public static final BigInteger NANOS_PER_MILLIS = BigInteger.valueOf(1_000_000L); + public static final Long128 NANOS_PER_SECOND = Long128.valueOf(1_000_000_000L); + public static final Long128 NANOS_PER_MILLIS = Long128.valueOf(1_000_000L); // NTP 纪元 (1900) 和 Unix 纪元 (1970) 之间的纳秒差 - public static final BigInteger NTP_EPOCH_OFFSET_NS = BigInteger.valueOf(2208988800L) + public static final Long128 NTP_EPOCH_OFFSET_NS = Long128.valueOf(2208988800L) .multiply(NANOS_PER_SECOND); // 2^64 值,用于单位转换 - public static final BigInteger TWO_POW_64 = BigInteger.ONE.shiftLeft(64); + public static final Long128 TWO_POW_64 = Long128.ONE.shiftLeft(64); // 2^32 值,用于 64 位时间戳处理 - public static final BigInteger TWO_POW_32 = BigInteger.ONE.shiftLeft(32); + public static final Long128 TWO_POW_32 = Long128.ONE.shiftLeft(32); // 掩码常量 - public static final BigInteger MASK_32_BIT = new BigInteger("FFFFFFFF", 16); - public static final BigInteger MASK_64_BIT = new BigInteger("FFFFFFFFFFFFFFFF", 16); + public static final Long128 MASK_32_BIT = new Long128(0xFFFFFFFF); + public static final Long128 MASK_64_BIT = new Long128(0xFFFFFFFFFFFFFFFFL); // ================== 核心转换方法 ================== // 2^32 秒,约 136.192 年,一个 NTP 纪元的长度 - public static final BigInteger SECONDS_PER_ERA = BigInteger.valueOf(0x100000000L); + public static final Long128 SECONDS_PER_ERA = Long128.valueOf(0x100000000L); + private static final Long128 TWO_POW_N64_PER_NANOS = Long128.valueOf("1208925819614629"); - public static BigInteger inferNtp64To128(long remote64Bit,BigInteger local128Bit ) { - return inferNtp64To128(toUnsignedBigInteger(remote64Bit),local128Bit); + public static Long128 inferNtp64To128(long remote64Bit,Long128 local128Bit ) { + return inferNtp64To128(toUnsignedLong128(remote64Bit),local128Bit); } @@ -45,26 +45,26 @@ public class NTPTimestamps { * @param local128Bit 本地已知的 128 位 NTP 时间戳 * @return 推断出的完整 128 位 NTP 时间戳 */ - public static BigInteger inferNtp64To128(BigInteger remote64Bit,BigInteger local128Bit ) { + public static Long128 inferNtp64To128(Long128 remote64Bit,Long128 local128Bit ) { // 1. 从本地 128 位时间戳中提取纪元号和 64 位时间戳部分 - BigInteger localEra = NTPTimestamps.getEraNumber(local128Bit); - BigInteger local64Bit = NTPTimestamps.getNtp64Timestamp(local128Bit); + Long128 localEra = NTPTimestamps.getEraNumber(local128Bit); + Long128 local64Bit = NTPTimestamps.getNtp64Timestamp(local128Bit); // 3. 计算本地和远程 64 位时间戳的差异 - BigInteger difference = remote64Bit.subtract(local64Bit); + Long128 difference = remote64Bit.subtract(local64Bit); // 4. 判断纪元关系并推断远程时间戳的纪元 - BigInteger remoteEra; + Long128 remoteEra; // 如果差异很大(超过半个纪元),可能需要调整纪元 - BigInteger halfEra = BigInteger.valueOf(Long.MAX_VALUE); + Long128 halfEra = Long128.valueOf(Long.MAX_VALUE); if (difference.compareTo(halfEra) > 0) { // 远程时间戳比本地小很多,可能属于上一个纪元 - remoteEra = localEra.subtract(BigInteger.ONE); + remoteEra = localEra.subtract(Long128.ONE); } else if (difference.compareTo(halfEra.negate()) < 0) { // 远程时间戳比本地大很多,可能属于下一个纪元 - remoteEra = localEra.add(BigInteger.ONE); + remoteEra = localEra.add(Long128.ONE); } else { // 差异不大,属于同一个纪元 remoteEra = localEra; @@ -77,35 +77,36 @@ public class NTPTimestamps { * 将从1970年开始的纳秒数转换为 NTPv4 128 位时间戳 * 128位时间戳表示从1900年1月1日起经过的 2⁻⁶⁴ 秒的数量 */ - public static BigInteger nanosToNtp128BitTimestamp(Long128 nanosSince1970) { + public static Long128 nanosToNtp128BitTimestamp(Long128 nanosSince1970) { // 1. 计算从 1900 年开始的总纳秒数 - BigInteger totalNanosFrom1900 = nanosSince1970.toBigInteger().add(NTP_EPOCH_OFFSET_NS); + Long128 totalNanosFrom1900 = nanosSince1970.add(NTP_EPOCH_OFFSET_NS); // 2. 将纳秒转换为 2⁻⁶⁴ 秒单位 - return totalNanosFrom1900.multiply(TWO_POW_64).divide(NANOS_PER_SECOND); + // return totalNanosFrom1900.multiply(TWO_POW_64).divide(NANOS_PER_SECOND); + return totalNanosFrom1900.multiply(TWO_POW_N64_PER_NANOS).shiftRight(16); } /** * 从 NTPv4 128 位时间戳转换回从1970年开始的纳秒数 */ - public static Long128 ntp128BitToNanosTimestamp(BigInteger ntp128Timestamp) { + public static Long128 ntp128BitToNanosTimestamp(Long128 ntp128Timestamp) { // 1. 将 2⁻⁶⁴ 秒单位转换回纳秒 - BigInteger totalNanosFrom1900 = ntp128Timestamp.multiply(NANOS_PER_SECOND).divide(TWO_POW_64); + Long128 totalNanosFrom1900 = ntp128Timestamp.multiply(NANOS_PER_SECOND).divide(TWO_POW_64); // 2. 计算从 1970 年开始的总纳秒数 - return Long128.valueOf( totalNanosFrom1900.subtract(NTP_EPOCH_OFFSET_NS)); + return totalNanosFrom1900.subtract(NTP_EPOCH_OFFSET_NS); } - public static BigInteger nanosToNtp128BitTimeInterval(BigInteger nanos) { + public static Long128 nanosToNtp128BitTimeInterval(Long128 nanos) { // 2. 将纳秒转换为 2⁻⁶⁴ 秒单位 return nanos.multiply(TWO_POW_64).divide(NANOS_PER_SECOND); } - public static BigInteger ntp128BitToNanosInterval(BigInteger ntp128Timestamp) { + public static Long128 ntp128BitToNanosInterval(Long128 ntp128Timestamp) { // 1. 将 2⁻⁶⁴ 秒单位转换回纳秒 - BigInteger totalNanosFrom1900 = ntp128Timestamp.multiply(NANOS_PER_SECOND).divide(TWO_POW_64); + Long128 totalNanosFrom1900 = ntp128Timestamp.multiply(NANOS_PER_SECOND).divide(TWO_POW_64); return totalNanosFrom1900; } @@ -117,7 +118,7 @@ public class NTPTimestamps { * 将 NTP 128 位时间戳转换为 NTP 64 位时间戳 * 64位时间戳就是128位时间戳的中间64位 */ - public static BigInteger ntp128To64(BigInteger ntp128Timestamp) { + public static Long128 ntp128To64(Long128 ntp128Timestamp) { return ntp128Timestamp.shiftRight(32).and(MASK_64_BIT); } @@ -125,14 +126,14 @@ public class NTPTimestamps { * 将 NTP 64 位时间戳转换为 NTP 128 位时间戳 * 64位时间戳放在128位时间戳的中间64位,高32位Era和低32位分数为0 */ - public static BigInteger ntp64To128(BigInteger ntp64Timestamp) { + public static Long128 ntp64To128(Long128 ntp64Timestamp) { return ntp64Timestamp.and(MASK_64_BIT).shiftLeft(32); } /** * 将 NTP 64 位时间戳转换为 NTP 128 位时间戳(指定Era Number) */ - public static BigInteger ntp64To128(BigInteger ntp64Timestamp, BigInteger eraNumber) { + public static Long128 ntp64To128(Long128 ntp64Timestamp, Long128 eraNumber) { return eraNumber.and(MASK_32_BIT).shiftLeft(96) .or(ntp64Timestamp.and(MASK_64_BIT).shiftLeft(32)); } @@ -140,48 +141,48 @@ public class NTPTimestamps { /** * 从 NTP 128 位时间戳中提取 Era Number(高32位) */ - public static BigInteger getEraNumber(BigInteger ntp128Timestamp) { + public static Long128 getEraNumber(Long128 ntp128Timestamp) { return ntp128Timestamp.shiftRight(96).and(MASK_32_BIT); } /** * 从 NTP 128 位时间戳中提取 64 位时间戳(中间64位) */ - public static BigInteger getNtp64Timestamp(BigInteger ntp128Timestamp) { + public static Long128 getNtp64Timestamp(Long128 ntp128Timestamp) { return ntp128Timestamp.shiftRight(32).and(MASK_64_BIT); } /** * 从 NTP 128 位时间戳中提取分数部分(低32位) */ - public static BigInteger getFraction(BigInteger ntp128Timestamp) { + public static Long128 getFraction(Long128 ntp128Timestamp) { return ntp128Timestamp.and(MASK_32_BIT); } // ================== 工具方法 ================== /** - * 从毫秒和纳秒偏移构造 BigInteger 纳秒 + * 从毫秒和纳秒偏移构造 Long128 纳秒 */ public static Long128 toNanosSince1970(long unixTimeMillis, long nanosOffset) { return Long128.valueOf(unixTimeMillis) - .multiply(Long128.valueOf( NANOS_PER_MILLIS)) + .multiply( NANOS_PER_MILLIS) .add(Long128.valueOf(nanosOffset)); } /** - * 从 BigInteger 纳秒提取毫秒和纳秒偏移 + * 从 Long128 纳秒提取毫秒和纳秒偏移 */ public static long[] toMillisAndNanos(Long128 nanosSince1970) { - Long128[] millisAndNanos = nanosSince1970.divideAndRemainder(Long128.valueOf( NANOS_PER_MILLIS)); + Long128[] millisAndNanos = nanosSince1970.divideAndRemainder( NANOS_PER_MILLIS); return new long[]{millisAndNanos[0].longValue(), millisAndNanos[1].longValue()}; } /** * 计算两个 128 位时间戳之间的时间差(纳秒) */ - public static BigInteger calculateTimeDifference(BigInteger timestamp1, BigInteger timestamp2) { - BigInteger diff = timestamp2.subtract(timestamp1); + public static Long128 calculateTimeDifference(Long128 timestamp1, Long128 timestamp2) { + Long128 diff = timestamp2.subtract(timestamp1); return diff.multiply(NANOS_PER_SECOND).divide(TWO_POW_64); } @@ -190,137 +191,20 @@ public class NTPTimestamps { /** * 将 64 位 NTP 时间戳分解为秒数和分数 */ - public static BigInteger[] parseNtp64Timestamp(BigInteger ntp64Timestamp) { - BigInteger seconds = ntp64Timestamp.shiftRight(32).and(MASK_32_BIT); - BigInteger fraction = ntp64Timestamp.and(MASK_32_BIT); - return new BigInteger[]{seconds, fraction}; + public static Long128[] parseNtp64Timestamp(Long128 ntp64Timestamp) { + Long128 seconds = ntp64Timestamp.shiftRight(32).and(MASK_32_BIT); + Long128 fraction = ntp64Timestamp.and(MASK_32_BIT); + return new Long128[]{seconds, fraction}; } /** * 从秒数和分数构建 64 位 NTP 时间戳 */ - public static BigInteger buildNtp64Timestamp(BigInteger seconds, BigInteger fraction) { + public static Long128 buildNtp64Timestamp(Long128 seconds, Long128 fraction) { return seconds.and(MASK_32_BIT).shiftLeft(32).or(fraction.and(MASK_32_BIT)); } - // ================== 测试代码 ================== - - public static void main(String[] args) { - System.out.println("=== NTPv4 128位/64位时间戳转换测试 ==="); - - // 测试当前时间 - testCurrentTime(); - - // 测试 128位 ↔ 64位 转换 - test128To64Conversion(); - - // 测试 Era Number 处理 - testEraNumberHandling(); - - // 测试边界值 - testBoundaryValues(); - } - - private static void testCurrentTime() { - System.out.println("\n=== 当前时间测试 ==="); - - Long128 nanosSince1970 = toNanosSince1970(System.currentTimeMillis(), 123456); - BigInteger ntp128 = nanosToNtp128BitTimestamp(nanosSince1970); - BigInteger ntp64 = ntp128To64(ntp128); - - System.out.println("从1970年开始的纳秒数: " + nanosSince1970); - System.out.println("NTP 128-bit: 0x" + ntp128.toString(16).toUpperCase()); - System.out.println("NTP 64-bit: 0x" + ntp64.toString(16).toUpperCase()); - - // 反向转换验证 - BigInteger recovered128 = ntp64To128(ntp64); - Long128 recoveredNanos = ntp128BitToNanosTimestamp(recovered128); - - System.out.println("恢复的纳秒数: " + recoveredNanos); - System.out.println("转换正确: " + (nanosSince1970.equals(recoveredNanos) ? "✅" : "❌")); - } - - private static void test128To64Conversion() { - System.out.println("\n=== 128位 ↔ 64位 转换测试 ==="); - - // 创建一个测试用的 128 位时间戳 - BigInteger test128 = new BigInteger("EC652B7E912F00B81234567890ABCDEF", 16); - - BigInteger ntp64 = ntp128To64(test128); - BigInteger recovered128 = ntp64To128(ntp64); - - System.out.println("原始128位: 0x" + test128.toString(16).toUpperCase()); - System.out.println("转换64位: 0x" + ntp64.toString(16).toUpperCase()); - System.out.println("恢复128位: 0x" + recovered128.toString(16).toUpperCase()); - - // 验证中间64位相同 - BigInteger original64Part = getNtp64Timestamp(test128); - System.out.println("转换正确: " + (original64Part.equals(ntp64) ? "✅" : "❌")); - } - - private static void testEraNumberHandling() { - System.out.println("\n=== Era Number 处理测试 ==="); - - BigInteger ntp64 = new BigInteger("EC652B7E912F00B8", 16); - BigInteger eraNumber = new BigInteger("1", 16); // Era 1 - - BigInteger ntp128WithEra = ntp64To128(ntp64, eraNumber); - BigInteger extractedEra = getEraNumber(ntp128WithEra); - BigInteger extracted64 = getNtp64Timestamp(ntp128WithEra); - - System.out.println("设置 Era: 0x" + eraNumber.toString(16).toUpperCase()); - System.out.println("提取 Era: 0x" + extractedEra.toString(16).toUpperCase()); - System.out.println("提取 64位: 0x" + extracted64.toString(16).toUpperCase()); - System.out.println("128位值: 0x" + ntp128WithEra.toString(16).toUpperCase()); - System.out.println("Era 正确: " + (eraNumber.equals(extractedEra) ? "✅" : "❌")); - System.out.println("64位正确: " + (ntp64.equals(extracted64) ? "✅" : "❌")); - } - - private static void testBoundaryValues() { - System.out.println("\n=== 边界值测试 ==="); - - // 测试最大值 - BigInteger max64 = MASK_64_BIT; // 0xFFFFFFFFFFFFFFFF - BigInteger max128 = ntp64To128(max64); - BigInteger recovered64 = ntp128To64(max128); - - System.out.println("最大64位: 0x" + max64.toString(16).toUpperCase()); - System.out.println("转换128位: 0x" + max128.toString(16).toUpperCase()); - System.out.println("恢复64位: 0x" + recovered64.toString(16).toUpperCase()); - System.out.println("最大值转换正确: " + (max64.equals(recovered64) ? "✅" : "❌")); - - // 测试 Era Number 边界 - BigInteger maxEra = MASK_32_BIT; // 0xFFFFFFFF - BigInteger test64 = new BigInteger("1234567890ABCDEF", 16); - BigInteger ntp128MaxEra = ntp64To128(test64, maxEra); - BigInteger extractedMaxEra = getEraNumber(ntp128MaxEra); - - System.out.println("最大Era转换正确: " + (maxEra.equals(extractedMaxEra) ? "✅" : "❌")); - } - - /** - * 生成时间序列测试 - */ - public static void testTimeSeries() { - System.out.println("\n=== 时间序列测试 ==="); - - Long128 startNanos = toNanosSince1970(System.currentTimeMillis(), 0); - BigInteger start128 = nanosToNtp128BitTimestamp(startNanos); - - for (int i = 0; i < 5; i++) { - Long128 offsetNanos = Long128.valueOf(i).multiply(Long128.valueOf( NANOS_PER_SECOND).divide(Long128.valueOf(10))); - Long128 currentNanos = startNanos.add(offsetNanos); - BigInteger current128 = nanosToNtp128BitTimestamp(currentNanos); - BigInteger current64 = ntp128To64(current128); - - long[] time = toMillisAndNanos(currentNanos); - System.out.printf("时间: %d ms + %d ns -> 64位: %s -> 128位: %s%n", - time[0], time[1], - current64.toString(16).toUpperCase(), - current128.toString(16).toUpperCase()); - } - } - + // 日期时间格式化器 private static final DateTimeFormatter DEFAULT_FORMATTER = @@ -338,11 +222,19 @@ public class NTPTimestamps { DEFAULT_FORMATTER.format(dateTime), nanosPart.longValue()); } + public static String nanosSince1970ToString2(Long128 nanos) { + Long128 millis = nanos.divide(Long128.valueOf(1_000_000)); + + Instant instant = Instant.ofEpochMilli(millis.longValue()); + LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); + + return DEFAULT_FORMATTER.format(dateTime); + } /** * 将 128 位时间戳转换为可读字符串 */ - public static String ntp128ToString(BigInteger ntp128Timestamp) { + public static String ntp128ToString(Long128 ntp128Timestamp) { Long128 nanosSince1970 = ntp128BitToNanosTimestamp(ntp128Timestamp); return nanosSince1970ToString(nanosSince1970); } @@ -350,17 +242,17 @@ public class NTPTimestamps { /** * 将 64 位时间戳转换为可读字符串 */ - public static String ntp64ToString(BigInteger ntp64Timestamp) { + public static String ntp64ToString(Long128 ntp64Timestamp) { Long128 nanosSince1970 = ntp128BitToNanosTimestamp(ntp64To128( ntp64Timestamp)); return nanosSince1970ToString(nanosSince1970); } - public static BigInteger toUnsignedBigInteger(long unsignedLong) { + public static Long128 toUnsignedLong128(long unsignedLong) { if (unsignedLong >= 0) { - return BigInteger.valueOf(unsignedLong); + return Long128.valueOf(unsignedLong); } else { // 对于负数,通过添加 2^64 来转换为无符号表示 - return BigInteger.valueOf(unsignedLong & 0x7FFFFFFFFFFFFFFFL) + return Long128.valueOf(unsignedLong & 0x7FFFFFFFFFFFFFFFL) .setBit(63); } } diff --git a/src/org/kne/cloud/clock/WatchDogTimer.java b/src/org/kne/cloud/clock/WatchDogTimer.java new file mode 100644 index 0000000..e2a97db --- /dev/null +++ b/src/org/kne/cloud/clock/WatchDogTimer.java @@ -0,0 +1,19 @@ +package org.kne.cloud.clock; + +public class WatchDogTimer { + private volatile long feedtime=System.nanoTime(); + private long timeout; + public WatchDogTimer(long timeout) { + super(); + this.timeout = timeout; + } + + public void feed() { + feedtime=System.nanoTime(); + } + + public boolean isBarking() { + return(System.nanoTime()-feedtime)>timeout; + } + +} diff --git a/src/org/kne/cloud/klalb/uitool/SliderSettingItem.java b/src/org/kne/cloud/klalb/uitool/SliderSettingItem.java new file mode 100644 index 0000000..5a81ff8 --- /dev/null +++ b/src/org/kne/cloud/klalb/uitool/SliderSettingItem.java @@ -0,0 +1,51 @@ +package org.kne.cloud.klalb.uitool; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.font.TextAttribute; +import java.util.Map; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JSlider; +import javax.swing.JTextField; +import java.awt.BorderLayout; +import javax.swing.SwingConstants; +import org.kne.cloud.network.klalb.ui.UIEnv; + +public class SliderSettingItem extends SettingItem { + protected JSlider slider; + protected JLabel labelx; + + public JLabel getLabelx() { + return labelx; + } + public JSlider getSlider() { + return slider; + } + public SliderSettingItem(String text,int w,int h) { + this(text,UIEnv.getFont().deriveFont((float) 15.0),w,h); + } + /** + * @wbp.parser.constructor + */ + public SliderSettingItem(String text, Font deriveFont,int w,int h) { + super(text,deriveFont,w,h); + BorderLayout borderLayout = (BorderLayout) getPanel().getLayout(); + slider = new JSlider(); + getPanel().add(slider, BorderLayout.CENTER); + slider.setBorder(null); + slider.setOpaque(false); + slider.setBackground(new Color(0,0,0,0)); + label.setForeground(Color.GRAY); + + labelx = new JLabel(); + getPanel().add(labelx, BorderLayout.EAST); + labelx.setFont(labelx.getFont()); + labelx.setBorder(null); + labelx.setOpaque(false); + labelx.setBackground(new Color(0,0,0,0)); + labelx.setPreferredSize(new Dimension(40, h)); + } +} diff --git a/src/org/kne/cloud/klalb/uitool/TextButtonSettingItem.java b/src/org/kne/cloud/klalb/uitool/TextButtonSettingItem.java index c95dd6a..454d5ef 100644 --- a/src/org/kne/cloud/klalb/uitool/TextButtonSettingItem.java +++ b/src/org/kne/cloud/klalb/uitool/TextButtonSettingItem.java @@ -41,9 +41,9 @@ public class TextButtonSettingItem extends SettingItem { button = new JButton(); getPanel().add(button, BorderLayout.EAST); - button.setFont(button.getFont().deriveFont(Map.of(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON))); - button.setBorder(null); - button.setOpaque(false); + button.setFont(button.getFont()); + //button.setBorder(null); + //button.setOpaque(false); button.setBackground(new Color(0,0,0,0)); } } diff --git a/src/org/kne/cloud/network/BufferedArena.java b/src/org/kne/cloud/network/BufferedArena.java deleted file mode 100644 index a3a72a2..0000000 --- a/src/org/kne/cloud/network/BufferedArena.java +++ /dev/null @@ -1,177 +0,0 @@ -package org.kne.cloud.network; - -import java.lang.foreign.Arena; -import java.lang.foreign.MemorySegment; -import java.lang.foreign.MemorySegment.Scope; -import java.lang.ref.PhantomReference; -import java.lang.ref.Reference; -import java.lang.ref.ReferenceQueue; -import java.nio.ByteBuffer; -import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.atomic.AtomicReference; -import java.util.concurrent.locks.ReentrantLock; - -public class BufferedArena implements Arena{ - private static long blockSize=10*1024L*1024L; - private volatile PreAlloc buffer; - private static ReferenceQueue refq=new ReferenceQueue<>(); - private static MemorySegmentPool msp=new MemorySegmentPool(1000, blockSize,true); - - public static long getBlockSize() { - return blockSize; - } - - - - public static void setBlockSize(long blockSizex) { - blockSize = blockSizex; - } - - - - private ReentrantLock lock=new ReentrantLock(); - - private class PreAlloc{ - private MemorySegment segment; - private AtomicLong pos=new AtomicLong(0); - private AtomicLong refs=new AtomicLong(0); - public MemorySegment getSegment() { - return segment; - } - public AtomicLong getPos() { - return pos; - } - public PreAlloc(MemorySegment segment) { - super(); - this.segment = segment; - } - public long byteSize() { - return segment.byteSize(); - } - public AtomicLong getRefs() { - return refs; - } - - } - - private void allocateNew(long blockSize2) { - lock.lock(); - try { - //buffer=Arena.ofAuto().allocate(blockSize); - MemorySegment raw=msp.borrow(); - buffer=new PreAlloc(raw); - - }finally { - lock.unlock(); - } - } - - - - static { - Thread t= new Thread(()->{ - while(true) { - try { - Reference ref; - ref = refq.remove(); - if(ref!=null) { - ref.clear(); - } - } catch (InterruptedException e) { - // TODO 自动生成的 catch 块 - e.printStackTrace(); - } - } - }); - t.setDaemon(true); - t.setPriority(Thread.MAX_PRIORITY-1); - t.start(); - } - - - - public BufferedArena() { - super(); - allocateNew(blockSize); - } - - @Override - public MemorySegment allocate(long byteSize, long byteAlignment) { - if(byteSize>blockSize) - throw new IndexOutOfBoundsException("byteSize can't large than buffer block"); - long pos; - PreAlloc bufferx; - do{ - bufferx=this.buffer; - pos=bufferx.getPos().getAndAdd(byteSize); - if(pos+byteSize>bufferx.byteSize()) { - allocateNew(blockSize); - }else { - break; - } - }while(true); - bufferx.getRefs().incrementAndGet(); - MemorySegment sliced=bufferx.getSegment().asSlice(pos, byteSize); - new MemorySegmentPhantomReference(sliced, refq, bufferx, msp); - return sliced; - - } - - @Override - public Scope scope() { - return Arena.ofAuto().scope(); - } - - @Override - public void close() { - Arena.ofAuto().close(); - } - public static BufferedArena ofBuffered() { - return new BufferedArena(); - } - -private class MemorySegmentPhantomReference extends PhantomReference{ - - private static AtomicReference first=new AtomicReference<>(null); - - private AtomicReference next=new AtomicReference<>(null); - private AtomicReference prev=new AtomicReference<>(null); - - private PreAlloc father; - private MemorySegmentPool pool; - - public MemorySegmentPhantomReference(MemorySegment referent, ReferenceQueue q,PreAlloc bufferx,MemorySegmentPool pool) { - super(referent, q); - this.father=bufferx; - this.pool=pool; - insert(); - } - - private void insert() { - MemorySegmentPhantomReference refn= first.getAndSet(this); - if(refn!=null) { - next.set(refn); - refn.prev.set(this); - } - } - - private void remove() { - MemorySegmentPhantomReference prevn= prev.getAndSet(null); - MemorySegmentPhantomReference nextn=next.getAndSet(null); - if(prevn!=null) - prevn.next.set(nextn); - if(nextn!=null) - nextn.prev.set(prevn); - } - - @Override - public void clear() { - if(father.getRefs().decrementAndGet()<=0) { - if(buffer!=father) - pool.back(father.getSegment()); - } - remove(); - super.clear(); - } - } -} diff --git a/src/org/kne/cloud/network/ByteBufferAllocator.java b/src/org/kne/cloud/network/ByteBufferAllocator.java index 6fb5734..739246c 100644 --- a/src/org/kne/cloud/network/ByteBufferAllocator.java +++ b/src/org/kne/cloud/network/ByteBufferAllocator.java @@ -18,39 +18,25 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicReference; import org.kne.debug.TimeDebugger; +import org.kne.membandboost.MembandBoost; import jdk.internal.misc.Unsafe; public class ByteBufferAllocator { - static Thread t; - static { - t=new Thread(()->{ - while(true) { - System.gc(); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } - } - }); - t.setDaemon(true); - t.setPriority(Thread.MAX_PRIORITY-1); - t.start(); - } - + public ByteBufferAllocator(boolean isDirect) { } public ByteBuffer allocate(int capacity) { //if(capacity<1024) return allocateHeap(capacity); - //return allocateNative(capacity); + // return allocateNative(capacity); } //private Arena ar=BufferedArena.ofBuffered(); - private Arena ara=Arena.ofAuto(); + //private Arena ara=Arena.ofAuto(); public ByteBuffer allocateNative(int capacity) { - //return ((jdk.internal.foreign.ArenaImpl)Arena.ofAuto()).allocateNoInit(capacity,1).asByteBuffer(); + //return ((jdk.internal.foreign.ArenaImpl)ara).allocateNoInit(capacity,1).asByteBuffer(); ByteBuffer buf=Arena.ofAuto().allocate(capacity).asByteBuffer(); if(buf.capacity()!=capacity) @@ -74,64 +60,25 @@ public class ByteBufferAllocator { e.printStackTrace(); } } - - public static byte[] allocateArray(int capacity) { - if(usf!=null&&meth!=null) { - try { + public static byte[] allocateUninitializedArray(int capacity) { + if(usf!=null) { return (byte[]) usf.allocateUninitializedArray(byte.class, capacity); - } catch (Exception e) { - return new byte[capacity]; - } }else { return new byte[capacity]; } } - + public static ByteBuffer allocateHeap(int capacity) { - return ByteBuffer.wrap((byte[])allocateArray(capacity)) ; + /*if(capacity<=2048) { + return MembandBoost.allocateUninitializedHeapBufferBlocked(capacity); + }else {*/ + return MembandBoost.allocateUninitializedHeapBuffer(capacity); + //} + } + public static ByteBuffer allocateHeap0(int capacity) { + return ByteBuffer.wrap((byte[])allocateUninitializedArray(capacity)) ; } - private static class ByteBufferPhantomReference extends PhantomReference{ - - private static AtomicReference first=new AtomicReference<>(null); - - private AtomicReference next=new AtomicReference<>(null); - private AtomicReference prev=new AtomicReference<>(null); - - private ByteBuffer father; - private ByteBufferPool pool; - - public ByteBufferPhantomReference(ByteBuffer referent, ReferenceQueue q,ByteBuffer father,ByteBufferPool pool) { - super(referent, q); - this.father=father; - this.pool=pool; - insert(); - } - - private void insert() { - ByteBufferPhantomReference refn= first.getAndSet(this); - if(refn!=null) { - next.set(refn); - refn.prev.set(this); - } - } - - private void remove() { - ByteBufferPhantomReference prevn= prev.getAndSet(null); - ByteBufferPhantomReference nextn=next.getAndSet(null); - if(prevn!=null) - prevn.next.set(nextn); - if(nextn!=null) - nextn.prev.set(prevn); - } - - @Override - public void clear() { - //System.out.println("clear"); - pool.back(father); - remove(); - super.clear(); - } - } + } diff --git a/src/org/kne/cloud/network/ChannelBridge.java b/src/org/kne/cloud/network/ChannelBridge.java index 77734a6..8fbb032 100644 --- a/src/org/kne/cloud/network/ChannelBridge.java +++ b/src/org/kne/cloud/network/ChannelBridge.java @@ -83,8 +83,10 @@ public class ChannelBridge extends Task{ public void runAtNewThread() { runAtNewThread("StreamBridge thread"); } - public void runAtNewThread(String name) { - ThreadTool.makeVThreadIfSupport(name, this).start(); + public Thread runAtNewThread(String name) { + Thread t=ThreadTool.makeVThreadIfSupport(name, this); + t.start(); + return t; } } diff --git a/src/org/kne/cloud/network/DatagramServerSocket.java b/src/org/kne/cloud/network/DatagramServerSocket.java index 888d68e..f2e999a 100644 --- a/src/org/kne/cloud/network/DatagramServerSocket.java +++ b/src/org/kne/cloud/network/DatagramServerSocket.java @@ -196,7 +196,7 @@ public class DatagramServerSocket implements java.io.Closeable{ return sds; } try { - Thread.sleep(1); + Thread.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } diff --git a/src/org/kne/cloud/network/DirectBufferedArena.java b/src/org/kne/cloud/network/DirectBufferedArena.java new file mode 100644 index 0000000..9fb0fe2 --- /dev/null +++ b/src/org/kne/cloud/network/DirectBufferedArena.java @@ -0,0 +1,98 @@ +package org.kne.cloud.network; + +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.MemorySegment.Scope; +import java.lang.ref.PhantomReference; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.nio.ByteBuffer; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.locks.ReentrantLock; + +public class DirectBufferedArena implements Arena{ + private static long blockSize=1024*1024L; + private volatile PreAlloc buffer; + public static long getBlockSize() { + return blockSize; + } + + + + public static void setBlockSize(long blockSizex) { + blockSize = blockSizex; + } + + + + + private class PreAlloc{ + private MemorySegment segment; + private AtomicLong pos=new AtomicLong(0); + private AtomicLong refs=new AtomicLong(0); + public MemorySegment getSegment() { + return segment; + } + public AtomicLong getPos() { + return pos; + } + public PreAlloc(MemorySegment segment) { + super(); + this.segment = segment; + } + public long byteSize() { + return segment.byteSize(); + } + public AtomicLong getRefs() { + return refs; + } + + } + + private void allocateNew(long blockSize2) { + MemorySegment raw=MemorySegment.ofArray(ByteBufferAllocator.allocateUninitializedArray((int) blockSize2)); + buffer=new PreAlloc(raw); + + } + + + public DirectBufferedArena() { + super(); + allocateNew(blockSize); + } + + @Override + public MemorySegment allocate(long byteSize, long byteAlignment) { + if(byteSize>blockSize) + throw new IndexOutOfBoundsException("byteSize can't large than buffer block"); + long pos; + PreAlloc bufferx; + do{ + bufferx=this.buffer; + pos=bufferx.getPos().getAndAdd(byteSize); + if(pos+byteSize>bufferx.byteSize()) { + allocateNew(blockSize); + }else { + break; + } + }while(true); + bufferx.getRefs().incrementAndGet(); + MemorySegment sliced=bufferx.getSegment().asSlice(pos, byteSize); + return sliced; + + } + + @Override + public Scope scope() { + return null; + } + + @Override + public void close() { + } + public static DirectBufferedArena ofBuffered() { + return new DirectBufferedArena(); + } + +} diff --git a/src/org/kne/cloud/network/HeapBufferedArena.java b/src/org/kne/cloud/network/HeapBufferedArena.java new file mode 100644 index 0000000..c532219 --- /dev/null +++ b/src/org/kne/cloud/network/HeapBufferedArena.java @@ -0,0 +1,69 @@ +package org.kne.cloud.network; + +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.MemorySegment.Scope; +import java.lang.ref.PhantomReference; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.nio.ByteBuffer; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.locks.ReentrantLock; + +public class HeapBufferedArena implements Arena{ + private static long blockSize=32768L; + private MemorySegment segment; + private long pos=0; + + + + + public static void setBlockSize(long blockSizex) { + blockSize = blockSizex; + } + + + + + private void allocateNew(long blockSize2) { + segment=MemorySegment.ofArray(ByteBufferAllocator.allocateUninitializedArray((int) blockSize2)); + pos=0; + } + + + public HeapBufferedArena() { + super(); + allocateNew(blockSize); + } + + @Override + public MemorySegment allocate(long byteSize, long byteAlignment) { + if(byteSize>blockSize) + return MemorySegment.ofArray(ByteBufferAllocator.allocateUninitializedArray((int) byteSize)); + do{ + long newpos=pos+byteSize; + if(newpos>blockSize) { + allocateNew(blockSize); + }else { + MemorySegment ms=segment.asSlice(pos, byteSize); + pos=newpos; + return ms; + } + }while(true); + + } + + @Override + public Scope scope() { + return null; + } + + @Override + public void close() { + } + public static HeapBufferedArena ofBuffered() { + return new HeapBufferedArena(); + } + +} diff --git a/src/org/kne/cloud/network/IPMulticastDiscovery.java b/src/org/kne/cloud/network/IPMulticastDiscovery.java index a90ec9a..0b491bf 100644 --- a/src/org/kne/cloud/network/IPMulticastDiscovery.java +++ b/src/org/kne/cloud/network/IPMulticastDiscovery.java @@ -5,6 +5,7 @@ import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.DataInputStream; import java.io.DataOutputStream; +import java.io.EOFException; import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddress; @@ -20,9 +21,12 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; +import java.util.UUID; import java.util.function.Consumer; public class IPMulticastDiscovery extends Thread implements Closeable, AutoCloseable { + private static final boolean debug=false; + private MulticastSocket soc; private NetworkInterface ninterface; private volatile boolean closed = false; @@ -30,6 +34,7 @@ public class IPMulticastDiscovery extends Thread implements Closeable, AutoClose private InetSocketAddress bind; private int type; private List msas; + private UUID selfUUID; private volatile Consumer con; private long timeInterval; @@ -63,13 +68,14 @@ public class IPMulticastDiscovery extends Thread implements Closeable, AutoClose } public IPMulticastDiscovery(InetSocketAddress bind, InetSocketAddress group, NetworkInterface ninterface, - List msas,long timeInterval) throws IOException { + List msas,UUID node,long timeInterval) throws IOException { soc = new MulticastSocket(bind); soc.joinGroup(group, ninterface); this.bind = bind; this.group = group; this.ninterface = ninterface; this.msas = msas; + this.selfUUID=node; this.timeInterval=timeInterval; } @@ -100,16 +106,19 @@ public class IPMulticastDiscovery extends Thread implements Closeable, AutoClose } } if (bf) { - continue; - } ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dops = new DataOutputStream(baos); dops.writeInt(multipurposeSocketAddress.getPort()); dops.writeUTF(multipurposeSocketAddress.getType()); + dops.writeLong(selfUUID.getMostSignificantBits()); + dops.writeLong(selfUUID.getLeastSignificantBits()); dops.close(); byte[] b = baos.toByteArray(); DatagramPacket dp = new DatagramPacket(b, b.length, group); soc.send(dp); + if(debug) + System.out.println("发送广播:"+multipurposeSocketAddress+" "+group+" "+selfUUID); + } } } catch (NoRouteToHostException|UnknownHostException e) { } @@ -136,6 +145,7 @@ public class IPMulticastDiscovery extends Thread implements Closeable, AutoClose try { loop:while (!closed) { + try { byte[] b = new byte[65535]; DatagramPacket dp = new DatagramPacket(b, b.length); soc.receive(dp); @@ -143,12 +153,21 @@ public class IPMulticastDiscovery extends Thread implements Closeable, AutoClose DataInputStream dis = new DataInputStream(bis); int port = dis.readInt(); String type = dis.readUTF(); + long h=dis.readLong(); + long l=dis.readLong(); + UUID uid=new UUID(h, l); dis.close(); MultipurposeSocketAddress mpsa = new MultipurposeSocketAddress(type, dp.getAddress().getHostAddress(), port); - try { + if(debug) { + if(uid.equals(selfUUID)) { + System.out.println("丢弃广播:"+mpsa+" "+dp.getSocketAddress()+" "+uid); + continue; + }else { + System.out.println("接收广播:"+mpsa+" "+dp.getSocketAddress()+" "+uid); + } + } InetAddress mpsai=mpsa.getInetAddress(); - //System.out.println(mpsa); Enumeration ei = ninterface.getInetAddresses(); while (ei.hasMoreElements()) { InetAddress inetAddress = (InetAddress) ei.nextElement(); @@ -162,9 +181,14 @@ public class IPMulticastDiscovery extends Thread implements Closeable, AutoClose } }catch(UnknownHostException e) { + }catch(EOFException e) { + } } - } catch (IOException e) { + } catch(SocketException e) { + if(!isClosed()) + e.printStackTrace(); + }catch (IOException e) { System.out.println(bind + " " + group + " " + ninterface); e.printStackTrace(); } finally { diff --git a/src/org/kne/cloud/network/IPv6SocketAddress.java b/src/org/kne/cloud/network/IPv6SocketAddress.java new file mode 100644 index 0000000..2594e3e --- /dev/null +++ b/src/org/kne/cloud/network/IPv6SocketAddress.java @@ -0,0 +1,326 @@ +package org.kne.cloud.network; + +import java.net.Inet6Address; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.net.UnknownHostException; +import java.nio.ByteBuffer; + +import org.kne.cloud.network.ipv6.IPv6Address; + +/** + * 高性能IPv6套接字地址实现,替代Java原生的InetSocketAddress + * 大幅减少GC压力和提高网络栈性能 + */ +public final class IPv6SocketAddress { + + + private static final long serialVersionUID = 1L; + + private final IPv6Address address; + private final int port; + + // 常用常量 + public static final IPv6SocketAddress ANY = new IPv6SocketAddress(IPv6Address.UNSPECIFIED, 0); + + // 构造方法 + public IPv6SocketAddress(IPv6Address address, int port ) { + if (address == null) { + throw new IllegalArgumentException("Address cannot be null"); + } + if (port < 0 || port > 65535) { + throw new IllegalArgumentException("Port out of range: " + port); + } + this.address = address; + this.port = port; + } + + /** + * 从IPv6地址和端口创建 + */ + public static IPv6SocketAddress valueOf(IPv6Address address, int port) { + return new IPv6SocketAddress(address, port); + } + + /** + * 从两个long和端口创建(最高性能) + */ + public static IPv6SocketAddress valueOf(long high, long low, int port) { + return new IPv6SocketAddress(IPv6Address.valueOf(high, low), port); + } + + /** + * 从byte[16]和端口创建 + */ + public static IPv6SocketAddress valueOf(byte[] addressBytes, int port) { + return new IPv6SocketAddress(IPv6Address.valueOf(addressBytes), port); + } + + /** + * 从ByteBuffer创建(零拷贝友好) + */ + public static IPv6SocketAddress valueOf(ByteBuffer buffer) { + if (buffer.remaining() < 18) { // 16字节地址 + 2字节端口 + throw new IllegalArgumentException("Buffer must have at least 18 bytes remaining"); + } + + long high = buffer.getLong(); + long low = buffer.getLong(); + int port = buffer.getShort() & 0xFFFF; + + return valueOf(high, low, port); + } + + /** + * 从ByteBuffer指定位置创建 + */ + public static IPv6SocketAddress valueOf(int offset, ByteBuffer buffer) { + if (buffer.remaining() < offset + 18) { + throw new IllegalArgumentException("Buffer too small"); + } + + long high = buffer.getLong(offset); + long low = buffer.getLong(offset + 8); + int port = buffer.getShort(offset + 16) & 0xFFFF; + + return valueOf(high, low, port); + } + + /** + * 从Java InetSocketAddress转换 + */ + public static IPv6SocketAddress valueOf(InetSocketAddress inetSocketAddress) { + if (inetSocketAddress == null) { + throw new IllegalArgumentException("InetSocketAddress cannot be null"); + } + + IPv6Address addr = IPv6Address.valueOf(inetSocketAddress.getAddress()); + int port = inetSocketAddress.getPort(); + + return new IPv6SocketAddress(addr, port); + } + + /** + * 从字符串解析(格式: [ipv6]:port 或 ipv6:port) + */ + public static IPv6SocketAddress valueOf(String socketAddress) { + if (socketAddress == null || socketAddress.isEmpty()) { + throw new IllegalArgumentException("Invalid socket address string"); + } + + try { + // 处理[ipv6]:port格式 + if (socketAddress.startsWith("[")) { + int closeBracket = socketAddress.indexOf(']'); + if (closeBracket == -1) { + throw new IllegalArgumentException("Invalid IPv6 socket address format"); + } + + String ipPart = socketAddress.substring(1, closeBracket); + String portPart = socketAddress.substring(closeBracket + 1); + + if (!portPart.startsWith(":")) { + throw new IllegalArgumentException("Invalid IPv6 socket address format"); + } + + IPv6Address address = IPv6Address.valueOf(ipPart); + int port = Integer.parseInt(portPart.substring(1)); + + return valueOf(address, port); + } else { + // 处理ipv6:port格式(简单情况) + int lastColon = socketAddress.lastIndexOf(':'); + if (lastColon == -1) { + throw new IllegalArgumentException("Invalid IPv6 socket address format"); + } + + String ipPart = socketAddress.substring(0, lastColon); + String portPart = socketAddress.substring(lastColon + 1); + + IPv6Address address = IPv6Address.valueOf(ipPart); + int port = Integer.parseInt(portPart); + + return valueOf(address, port); + } + } catch (Exception e) { + throw new IllegalArgumentException("Invalid IPv6 socket address: " + socketAddress, e); + } + } + + /** + * 创建未解析的地址(带hostname) + * @throws UnknownHostException + */ + public static IPv6SocketAddress createUnresolved(String hostname, int port) throws UnknownHostException { + if (hostname == null || hostname.isEmpty()) { + throw new IllegalArgumentException("Hostname cannot be null or empty"); + } + if (port < 0 || port > 65535) { + throw new IllegalArgumentException("Port out of range: " + port); + } + + return new IPv6SocketAddress(IPv6Address.valueOf ( hostname), port); + } + + // 核心getter方法 + public IPv6Address getAddress() { + return address; + } + + public int getPort() { + return port; + } + + /** + * 转换为byte数组(18字节:16字节地址 + 2字节端口) + */ + public byte[] toByteArray() { + byte[] bytes = new byte[18]; + toByteArray(bytes, 0); + return bytes; + } + + /** + * 写入到现有byte数组 + */ + public void toByteArray(byte[] dest, int offset) { + if (dest.length - offset < 18) { + throw new IllegalArgumentException("Destination array too small"); + } + + address.toByteArray(dest, offset); + dest[offset + 16] = (byte) (port >> 8); + dest[offset + 17] = (byte) port; + } + + /** + * 写入到ByteBuffer(高性能网络操作) + */ + public void writeTo(ByteBuffer buffer) { + address.writeTo(buffer); + buffer.putShort((short) port); + } + + /** + * 写入到ByteBuffer指定位置 + */ + public void writeTo(int offset, ByteBuffer buffer) { + address.writeTo(offset, buffer); + buffer.putShort(offset + 16, (short) port); + } + + /** + * 转换为Java InetSocketAddress(兼容性方法) + */ + public InetSocketAddress toInetSocketAddress() { + Inet6Address inet6Addr = address.toInet6Address(); + return new InetSocketAddress(inet6Addr, port); + } + + // 实用方法 + + /** + * 检查是否为通配符地址(0.0.0.0:0) + */ + public boolean isWildcardAddress() { + return address.equals(IPv6Address.UNSPECIFIED) && port == 0; + } + + /** + * 检查是否为环回地址 + */ + public boolean isLoopbackAddress() { + return address.isLoopbackAddress(); + } + + /** + * 检查是否为多播地址 + */ + public boolean isMulticastAddress() { + return address.isMulticastAddress(); + } + + /** + * 检查是否为链路本地地址 + */ + public boolean isLinkLocalAddress() { + return address.isLinkLocalAddress(); + } + + /** + * 检查是否为站点本地地址 + */ + public boolean isSiteLocalAddress() { + return address.isSiteLocalAddress(); + } + + /** + * 获取多播地址的scope + */ + public int getMulticastScope() { + return address.getMulticastScope(); + } + + // 路由相关的实用方法 + + /** + * 检查地址是否在指定网络内 + */ + public boolean isInNetwork(IPv6Address network, int prefixLength) { + return address.isInNetwork(network, prefixLength); + } + + /** + * 应用网络掩码 + */ + public IPv6SocketAddress maskWith(IPv6Address mask) { + return valueOf(address.maskWith(mask), port); + } + + // 比较和哈希 + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((address == null) ? 0 : address.hashCode()); + result = prime * result + port; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + IPv6SocketAddress other = (IPv6SocketAddress) obj; + if (address == null) { + if (other.address != null) + return false; + } else if (!address.equals(other.address)) + return false; + if (port != other.port) + return false; + return true; + } + + + @Override + public String toString() { + // 对于IPv6地址,使用方括号括起来 + return "[" + address.toString() + "]:" + port; + } + + /** + * 转换为压缩形式的字符串 + */ + public String toCompressedString() { + return "[" + address.toCompressedString() + "]:" + port; + } + + +} \ No newline at end of file diff --git a/src/org/kne/cloud/network/MemorySegmentPool.java b/src/org/kne/cloud/network/MemorySegmentPool.java index ebec1ef..51ff5ff 100644 --- a/src/org/kne/cloud/network/MemorySegmentPool.java +++ b/src/org/kne/cloud/network/MemorySegmentPool.java @@ -63,7 +63,7 @@ public class MemorySegmentPool { } if(b==null) { - ByteBufferAllocator.t.interrupt(); + //ByteBufferAllocator.t.interrupt(); if(direct) { b=((jdk.internal.foreign.ArenaImpl)Arena.ofAuto()).allocateNoInit(length,1); System.out.println(length); diff --git a/src/org/kne/cloud/network/MultipurposeSocketAddress.java b/src/org/kne/cloud/network/MultipurposeSocketAddress.java index 9d444e0..7f3fdf4 100644 --- a/src/org/kne/cloud/network/MultipurposeSocketAddress.java +++ b/src/org/kne/cloud/network/MultipurposeSocketAddress.java @@ -189,7 +189,6 @@ public class MultipurposeSocketAddress implements Serializable{ s.connect(new InetSocketAddress(host, port),timeout); }catch(Exception e) { s.close(); - System.gc(); throw e; } return s; @@ -205,7 +204,6 @@ public class MultipurposeSocketAddress implements Serializable{ s.connect(new InetSocketAddress(host, port)); }catch(Exception e) { s.close(); - System.gc(); throw e; } return s; @@ -220,7 +218,6 @@ public class MultipurposeSocketAddress implements Serializable{ s.connect(new InetSocketAddress(host, port)); }catch(Exception e) { s.close(); - System.gc(); throw e; } return s; @@ -235,7 +232,6 @@ public class MultipurposeSocketAddress implements Serializable{ s.connect(new InetSocketAddress(host, port),timeout); }catch(Exception e) { s.close(); - System.gc(); throw e; } return s; @@ -261,7 +257,6 @@ public class MultipurposeSocketAddress implements Serializable{ s.connect(new InetSocketAddress(host, port)); }catch(Exception e) { s.close(); - System.gc(); throw e; }finally { if(tt!=null) @@ -280,7 +275,6 @@ public class MultipurposeSocketAddress implements Serializable{ s.connect(new InetSocketAddress(host, port)); }catch(Exception e) { s.close(); - System.gc(); throw e; } return s; @@ -295,7 +289,6 @@ public class MultipurposeSocketAddress implements Serializable{ s.connect(new InetSocketAddress(host, port)); }catch(Exception e) { s.close(); - System.gc(); throw e; } return s; @@ -312,7 +305,6 @@ public class MultipurposeSocketAddress implements Serializable{ s.connect(new InetSocketAddress(host, port)); }catch(Exception e) { s.close(); - System.gc(); throw e; }finally { if(tt!=null) @@ -379,7 +371,6 @@ public class MultipurposeSocketAddress implements Serializable{ dgd.connect(new InetSocketAddress(host, port)); }catch(Exception e) { dgd.close(); - System.gc(); throw e; } return dgd; @@ -394,14 +385,12 @@ public class MultipurposeSocketAddress implements Serializable{ dgd.connect(new InetSocketAddress(host, port)); }catch(Exception e) { dgd.close(); - System.gc(); throw e; } return dgd; } public DatagramSocket listenDatagramSocket() throws UnknownHostException, IOException { DatagramSocketFactory dgs=socketTypeRegister.get(type).getDatagramSocketFactory(); - System.out.println(dgs); if(dgs==null) { throw new UnsupportedOperationException("DatagramSocket Unsupported"); } @@ -410,7 +399,6 @@ public class MultipurposeSocketAddress implements Serializable{ dgd.bind(new InetSocketAddress(host, port)); }catch(Exception e) { dgd.close(); - System.gc(); throw e; } return dgd; diff --git a/src/org/kne/cloud/network/NetworkPacket.java b/src/org/kne/cloud/network/NetworkPacket.java index 89ca105..d0aef06 100644 --- a/src/org/kne/cloud/network/NetworkPacket.java +++ b/src/org/kne/cloud/network/NetworkPacket.java @@ -10,7 +10,7 @@ import java.util.concurrent.locks.ReentrantLock; import org.kne.cloud.network.klalb.KLALBPacket; import org.kne.debug.TimeDebugger; -public abstract class NetworkPacket implements Comparable{ +public abstract class NetworkPacket{ private static final boolean debugPassport=false; public static final ByteBufferAllocator bufferAllocator=new ByteBufferAllocator(true); @@ -52,41 +52,7 @@ public abstract class NetworkPacket implements Comparable{ public abstract long getTotalLength(); - public long getPriority() { - return priority; - } - public void setPriority(long priority) { - this.priority = priority; - } - public long getSendseq() { - return sendseq; - } - private long priority; - private long sendseq; - private static final AtomicLong seqgen=new AtomicLong(); - - @Override - public int compareTo(NetworkPacket o) { - if(priority>o.priority) { - return 1; - }else if(priorityo.sendseq) { - return 1; - }else if(sendseqB thread"); - bridgeBA.runAtNewThread("SocketBridge B->A thread"); - bridgeAB.waitfortask(); - bridgeBA.waitfortask(); - } - }else if(b instanceof KLALBVirtualSocket){ - try { - ((KLALBVirtualSocket) b).associateSocket(a); - }catch(CannotAssociateException e) { - bridgeAB.runAtNewThread("SocketBridge A->B thread"); - bridgeBA.runAtNewThread("SocketBridge B->A thread"); - bridgeAB.waitfortask(); - bridgeBA.waitfortask(); - - } - }else { - bridgeAB.runAtNewThread("SocketBridge A->B thread"); - bridgeBA.runAtNewThread("SocketBridge B->A thread"); - bridgeAB.waitfortask(); - bridgeBA.waitfortask(); - }} catch (Exception e) { + Thread ta=bridgeAB.runAtNewThread("SocketBridge A->B thread"); + Thread tb=bridgeBA.runAtNewThread("SocketBridge B->A thread"); + while((ta.isAlive()||tb.isAlive())&&(!a.isClosed())&&(!b.isClosed())) { + LockSupport.parkNanos(1000000L); + } + + } catch (Exception e) { e.printStackTrace(); }finally { //new Exception().printStackTrace(); diff --git a/src/org/kne/cloud/network/SocketChannelBridge.java b/src/org/kne/cloud/network/SocketChannelBridge.java index 6bdcf85..13ffd5c 100644 --- a/src/org/kne/cloud/network/SocketChannelBridge.java +++ b/src/org/kne/cloud/network/SocketChannelBridge.java @@ -4,6 +4,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.*; import java.nio.channels.SocketChannel; +import java.util.concurrent.locks.LockSupport; import org.kne.cloud.network.klalb.CannotAssociateException; import org.kne.cloud.network.klalb.KLALBVirtualSocket; @@ -33,33 +34,13 @@ public class SocketChannelBridge extends Task{ @Override protected void runTask() { try { - if(a instanceof KLALBVirtualSocketChannel) { - try { - ((KLALBVirtualSocketChannel) a).associateSocketChannel(b); - }catch(CannotAssociateException e) { - bridgeAB.runAtNewThread("SocketBridge A->B thread"); - bridgeBA.runAtNewThread("SocketBridge B->A thread"); - bridgeAB.waitfortask(); - bridgeBA.waitfortask(); - - } - }else if(b instanceof KLALBVirtualSocketChannel){ - try { - ((KLALBVirtualSocketChannel) b).associateSocketChannel(a); -}catch(CannotAssociateException e) { - bridgeAB.runAtNewThread("SocketBridge A->B thread"); - bridgeBA.runAtNewThread("SocketBridge B->A thread"); - bridgeAB.waitfortask(); - bridgeBA.waitfortask(); - - } - }else { - bridgeAB.runAtNewThread("SocketBridge A->B thread"); - bridgeBA.runAtNewThread("SocketBridge B->A thread"); - bridgeAB.waitfortask(); - bridgeBA.waitfortask(); - } + Thread ta=bridgeAB.runAtNewThread("SocketBridge A->B thread"); + Thread tb=bridgeBA.runAtNewThread("SocketBridge B->A thread"); + while((ta.isAlive()||tb.isAlive())&&a.isOpen()&&b.isOpen()) { + LockSupport.parkNanos(1000000L); + } + } catch (Exception e) { e.printStackTrace(); }finally { diff --git a/src/org/kne/cloud/network/StreamBridge.java b/src/org/kne/cloud/network/StreamBridge.java index 298227c..ed0b232 100644 --- a/src/org/kne/cloud/network/StreamBridge.java +++ b/src/org/kne/cloud/network/StreamBridge.java @@ -84,8 +84,10 @@ public class StreamBridge extends Task{ public void runAtNewThread() { runAtNewThread("StreamBridge thread"); } - public void runAtNewThread(String name) { - ThreadTool.makeVThreadIfSupport(name, this).start(); + public Thread runAtNewThread(String name) { + Thread t=ThreadTool.makeVThreadIfSupport(name, this); + t.start(); + return t; } } diff --git a/src/org/kne/cloud/network/ThreadTool.java b/src/org/kne/cloud/network/ThreadTool.java index c87dc30..79f2b79 100644 --- a/src/org/kne/cloud/network/ThreadTool.java +++ b/src/org/kne/cloud/network/ThreadTool.java @@ -65,7 +65,10 @@ public class ThreadTool { return rt; } public static Thread makeVDaemonThread(String name, Runnable r) { - try { //return new Thread(r, name); + + if(false) + return new Thread(r, name); + try { Class c=Class.forName("java.lang.Thread"); Method m= c.getDeclaredMethod("ofVirtual", null); Object o=m.invoke(null, null); @@ -87,7 +90,8 @@ public class ThreadTool { } } public static Thread makeVThread(String name, Runnable r) { - + if(false) + return new Thread(r, name); try { //return new Thread(r, name); Class c=Class.forName("java.lang.Thread"); Method m= c.getDeclaredMethod("ofVirtual", null); diff --git a/src/org/kne/cloud/network/congress/MessageBatcher.java b/src/org/kne/cloud/network/congestion/ArrayListMessageBatcher.java similarity index 62% rename from src/org/kne/cloud/network/congress/MessageBatcher.java rename to src/org/kne/cloud/network/congestion/ArrayListMessageBatcher.java index 274438b..d5828e4 100644 --- a/src/org/kne/cloud/network/congress/MessageBatcher.java +++ b/src/org/kne/cloud/network/congestion/ArrayListMessageBatcher.java @@ -1,26 +1,120 @@ -package org.kne.cloud.network.congress; +package org.kne.cloud.network.congestion; +import java.lang.ref.Cleaner; import java.util.ArrayList; import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.LockSupport; import java.util.concurrent.locks.ReentrantLock; import java.util.function.Consumer; +import org.kne.cloud.network.ThreadTool; +import org.kne.concurrent.SpinLock; +import org.kne.opencl64.Releaser; + /** * 网络消息批量发送器,用于减少小包数量,降低网络性能开销 * @param 消息类型 */ -public class MessageBatcher implements Runnable{ + +public class ArrayListMessageBatcher implements MessageBatcher{ + private static final Cleaner clr=Cleaner.create(); + + private ArrayListMessageBatcher0 impl; + + private ArrayListMessageBatcherReleaser releaser; + + public ArrayListMessageBatcher(int batchSize, long maxDelay) { + impl=new ArrayListMessageBatcher0(batchSize, maxDelay); + releaser=new ArrayListMessageBatcherReleaser(impl); + clr.register(this, releaser); + } + + @Override + public int getBatchSize() { + return impl.getBatchSize(); + } + + @Override + public long getMaxDelay() { + return impl.getMaxDelay(); + } + + @Override + public void setConsumer(Consumer> consumer) { + impl.setConsumer(consumer); + } + + @Override + public void putMessage(T message) { + impl.putMessage(message); + } + + @Override + public void putMessages(List messages) { + impl.putMessages(messages); + } + + @Override + public void flush() { + impl.flush(); + } + + @Override + public int getQueueSize() { + return impl.getQueueSize(); + } + + @Override + public boolean isClosed() { + return impl.isClosed(); + } + + @Override + public void close() { + impl.close(); + } + public static void main(String[] args) throws InterruptedException { + for(;;){ + ArrayListMessageBatchermes=new ArrayListMessageBatcher<>(10, 1000000L); + System.gc(); + } + /*ArrayListMessageBatchermes=new ArrayListMessageBatcher<>(10, 1000000L); + mes.setConsumer((x)->{System.out.println(x);}); + int n=0; + for(;;){ + mes.putMessage(n++); + mes.putMessage(n++); + mes.putMessage(n++); + mes.putMessage(n++); + Thread.sleep(1); + }*/ + } +} +class ArrayListMessageBatcherReleaser extends Releaser>{ + + public ArrayListMessageBatcherReleaser(ArrayListMessageBatcher0 resource) { + super(resource); + } + + @Override + protected void release(ArrayListMessageBatcher0 resource) { + resource.close(); + //System.out.println("release!"); + } + +} + class ArrayListMessageBatcher0 implements Runnable,MessageBatcher{ private ArrayList messageList; - private ReentrantLock lock=new ReentrantLock(); + private Lock lock=new SpinLock(); private final int batchSize; private final long maxDelay; private Consumer> consumer; private final Thread batchThread; - private final AtomicBoolean running; + private final AtomicBoolean closed; private long firstTime; /** @@ -28,13 +122,13 @@ public class MessageBatcher implements Runnable{ * @param batchSize 批量大小,当消息达到此数量时触发发送 * @param maxDelayMillis 最大延迟时间(毫秒),即使消息数量不足也会触发发送 */ - public MessageBatcher(int batchSize, long maxDelay) { + public ArrayListMessageBatcher0(int batchSize, long maxDelay) { this.batchSize = batchSize; this.maxDelay = maxDelay; - this.running = new AtomicBoolean(true); + this.closed = new AtomicBoolean(false); // 创建并启动批量处理线程 - this.batchThread = new Thread(this); + this.batchThread = ThreadTool.makeVDaemonThread("ArrayListMessageBatcher Thread", this ); this.batchThread.setDaemon(true); this.batchThread.start(); } @@ -99,7 +193,7 @@ public class MessageBatcher implements Runnable{ * 停止批量处理器 */ public void close() { - running.set(false); + closed.set(true); LockSupport.unpark(batchThread); // 确保所有消息都被发送 flush(); @@ -109,7 +203,7 @@ public class MessageBatcher implements Runnable{ * 批量处理消息的核心方法 */ public void run() { - while(running.get()) { + while(!closed.get()) { lock.lock(); try { check(false); @@ -175,16 +269,12 @@ public class MessageBatcher implements Runnable{ return 0; return cmessageList.size(); } - public static void main(String[] args) throws InterruptedException { - MessageBatchermes=new MessageBatcher<>(10, 1000000L); - mes.setConsumer((x)->{System.out.println(x);}); - int n=0; - for(;;){ - mes.putMessage(n++); - mes.putMessage(n++); - mes.putMessage(n++); - mes.putMessage(n++); - Thread.sleep(1); - } + + @Override + public boolean isClosed() { + return closed.get(); } + + + } \ No newline at end of file diff --git a/src/org/kne/cloud/network/congress/LARCCongressAlgorithm.java b/src/org/kne/cloud/network/congestion/BBRCongestionAlgorithm.java similarity index 78% rename from src/org/kne/cloud/network/congress/LARCCongressAlgorithm.java rename to src/org/kne/cloud/network/congestion/BBRCongestionAlgorithm.java index 5269b6b..a87d424 100644 --- a/src/org/kne/cloud/network/congress/LARCCongressAlgorithm.java +++ b/src/org/kne/cloud/network/congestion/BBRCongestionAlgorithm.java @@ -1,21 +1,21 @@ -package org.kne.cloud.network.congress; +package org.kne.cloud.network.congestion; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.BiConsumer; import java.util.function.Consumer; -public class LARCCongressAlgorithm implements CongressAlgorithm { +public class BBRCongestionAlgorithm implements CongestionAlgorithm ,DetnetCongestionAlgorithm{ - private static final long BURST_TIME = 1000000L; - private static final long BIAS = 1000000L; - private static long MIN_SPEED = 64 * 1024L; + private static final long BURST_TIME = 10000000L; + private static final long BIAS = 500000L; + private static long MIN_SPEED = 512 * 1024L; private static long MIN_WINDOW = 16384; private Consumer windowControlConsumer; private BiConsumer speedControlConsumer; private AtomicBoolean firstUpdate = new AtomicBoolean(true); - private long MIN_RTTVAR = 10000000L; + private long MIN_RTTVAR = 5000000L; private volatile long RTTMin = 1000000000L; private volatile long RTTVar = 1000000000L; private volatile long RTTAvg = 1000000000L; @@ -29,10 +29,10 @@ public class LARCCongressAlgorithm implements CongressAlgorithm { private volatile long speed=MIN_SPEED; private volatile long maxwindow=99999999999L; private long congressSpeed=MIN_SPEED; - private double MAX_GAIN=1.1;//2.8853900817779 - private double MIN_GAIN=0.95; - private double windowGain=1.5; - private double speedGain=4;//MAX_GAIN + private double MIN_GAIN=1.05; + private double MAX_GAIN=1.20;//2.8853900817779 + private double windowGain=MIN_GAIN; + private double speedGain=MAX_GAIN;//1.20 MAX_GAIN @Override public void reset() { window = MIN_WINDOW; @@ -98,7 +98,7 @@ public class LARCCongressAlgorithm implements CongressAlgorithm { congressSpeed = bandwidth; //congressSpeed = (congressSpeed + bandwidth) / 2; } else { - congressSpeed = (congressSpeed * 199 + bandwidth) / 200; + congressSpeed = (congressSpeed * 49 + bandwidth) / 50; } speed=(long) (congressSpeed * speedGain)+MIN_SPEED ; window= ((long) (congressSpeed*windowGain )*(RTTMin+BIAS)/1000000000L)+MIN_WINDOW; @@ -135,4 +135,16 @@ public class LARCCongressAlgorithm implements CongressAlgorithm { //System.out.println(bandwidth+" "+congressSpeed+" "+window); } + @Override + public void setUpperDelayBound(double upper) { + MAX_GAIN=upper; + speedGain=MAX_GAIN; + } + + @Override + public void setLowerDelayBound(double lower) { + MIN_GAIN=lower; + windowGain=MIN_GAIN; + } + } diff --git a/src/org/kne/cloud/network/congress/BBRVegasCongressAlgorithm.java b/src/org/kne/cloud/network/congestion/BBRVegasCongressAlgorithm.java similarity index 93% rename from src/org/kne/cloud/network/congress/BBRVegasCongressAlgorithm.java rename to src/org/kne/cloud/network/congestion/BBRVegasCongressAlgorithm.java index ca84762..c9068f6 100644 --- a/src/org/kne/cloud/network/congress/BBRVegasCongressAlgorithm.java +++ b/src/org/kne/cloud/network/congestion/BBRVegasCongressAlgorithm.java @@ -1,10 +1,10 @@ -package org.kne.cloud.network.congress; +package org.kne.cloud.network.congestion; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.BiConsumer; import java.util.function.Consumer; -public class BBRVegasCongressAlgorithm implements CongressAlgorithm { +public class BBRVegasCongressAlgorithm implements CongestionAlgorithm { private static final long BURST_TIME = 2000000L; private static final long BIAS = 2000000L; diff --git a/src/org/kne/cloud/network/congress/CongressAlgorithm.java b/src/org/kne/cloud/network/congestion/CongestionAlgorithm.java similarity index 84% rename from src/org/kne/cloud/network/congress/CongressAlgorithm.java rename to src/org/kne/cloud/network/congestion/CongestionAlgorithm.java index 8156cc1..9f46731 100644 --- a/src/org/kne/cloud/network/congress/CongressAlgorithm.java +++ b/src/org/kne/cloud/network/congestion/CongestionAlgorithm.java @@ -1,9 +1,9 @@ -package org.kne.cloud.network.congress; +package org.kne.cloud.network.congestion; import java.util.function.BiConsumer; import java.util.function.Consumer; -public interface CongressAlgorithm { +public interface CongestionAlgorithm { public void reset(); public void setWindowControlConsumer(ConsumerwindowControlConsumer); public void setSpeedControlConsumer(BiConsumerspeedControlConsumer); diff --git a/src/org/kne/cloud/network/congress/BBRCongressAlgorithm.java b/src/org/kne/cloud/network/congestion/DCTCP2CongestionAlgorithm.java similarity index 54% rename from src/org/kne/cloud/network/congress/BBRCongressAlgorithm.java rename to src/org/kne/cloud/network/congestion/DCTCP2CongestionAlgorithm.java index c2a5a02..c6cf508 100644 --- a/src/org/kne/cloud/network/congress/BBRCongressAlgorithm.java +++ b/src/org/kne/cloud/network/congestion/DCTCP2CongestionAlgorithm.java @@ -1,131 +1,161 @@ -package org.kne.cloud.network.congress; - -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiConsumer; -import java.util.function.Consumer; - -public class BBRCongressAlgorithm implements CongressAlgorithm { - - private static final long BURST_TIME = 2000000L; - private static final long BIAS = 2000000L; - private static long MIN_SPEED = 128 * 1024L; - private static long MIN_WINDOW = 16384; - - private Consumer windowControlConsumer; - private BiConsumer speedControlConsumer; - - private AtomicBoolean firstUpdate = new AtomicBoolean(true); - private long MIN_RTTVAR = 50000000L; - private volatile long RTTMin = 1000000000L; - private volatile long RTTVar = 1000000000L; - private volatile long RTTAvg = 1000000000L; - private volatile long RTTAvg2 = 1000000000L; - private volatile long RTTTotal = 0; - private volatile long RTTCount = 0; - private volatile long RTO = 1000000000L; - - - private volatile long window=MIN_WINDOW; - private volatile long speed=MIN_SPEED; - private volatile long maxwindow=99999999999L; - private long congressSpeed=MIN_SPEED; - private double MAX_GAIN=1.02;//2.8853900817779 - private double MIN_GAIN=0.9; - private double windowGain=MAX_GAIN; - private double speedGain=MAX_GAIN; - @Override - public void reset() { - window = MIN_WINDOW; - if (windowControlConsumer != null) { - windowControlConsumer.accept(window); - } - speed = MIN_SPEED; - if (speedControlConsumer != null) { - speedControlConsumer.accept(speed, BURST_TIME); - } - windowGain=MAX_GAIN; - } - - @Override - public void setWindowControlConsumer(Consumer windowControlConsumer) { - this.windowControlConsumer = windowControlConsumer; - } - - @Override - public void setSpeedControlConsumer(BiConsumer speedControlConsumer) { - this.speedControlConsumer = speedControlConsumer; - } - - private long RTTstartTime = System.nanoTime(); - private long bandwidth; - @Override - public synchronized void putAck(long packetSize, long latencyns, boolean ecn) { - if (latencyns <= RTTMin) { - RTTMin = latencyns; - } else { - RTTMin = (RTTMin * 99999 + latencyns) / 100000; - } - if (firstUpdate.compareAndSet(true, false)) { - RTTAvg = latencyns; - RTTVar = latencyns / 2; - RTTAvg2 = latencyns; - } else { - RTTVar = (RTTVar * 3 + Math.abs(RTTAvg - latencyns)) / 4; - RTTAvg = (RTTAvg * 7 + latencyns) / 8; - } - RTO = RTTAvg + Math.max(MIN_RTTVAR, RTTVar * 4);// RTTVar*4 - - RTTTotal += latencyns; - RTTCount++; - long curr=System.nanoTime(); - if(curr-RTTstartTime>RTTAvg2) { - if(RTTCount>0) { - RTTAvg2=(RTTAvg2+RTTTotal/RTTCount)/2; - RTTTotal=0; - RTTCount=0; - } - - RTTstartTime=curr; - - if (bandwidth >= congressSpeed) { - congressSpeed = bandwidth; - //congressSpeed = (congressSpeed + bandwidth) / 2; - } else { - congressSpeed = (congressSpeed * 199 + bandwidth) / 200; - } - speed=MIN_SPEED+(long) (congressSpeed * speedGain) ; - window= (Math.max(MIN_SPEED,(long) (congressSpeed*windowGain ))*(RTTMin+1000000L)/1000000000L)+MIN_WINDOW; - if (windowControlConsumer != null) { - windowControlConsumer.accept(window); - } - if (speedControlConsumer != null) { - speedControlConsumer.accept(speed, BURST_TIME); - } - } - - } - - @Override - public void putLoss(long packetSize, long lossns, int losscounter) { - - } - - @Override - public long getRTO() { - return RTO; - } - - @Override - public void setCurrentWindowUsed(long used) { - - } - - @Override - public void setCurrentBandwidth(long bandwidth) { - this.bandwidth=bandwidth; - - //System.out.println(gain); - //System.out.println(bandwidth+" "+congressSpeed+" "+window); - } - -} +package org.kne.cloud.network.congestion; + +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.locks.ReentrantLock; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +public class DCTCP2CongestionAlgorithm implements CongestionAlgorithm { + + private static final long BURST_TIME = 1000000L; + private static final long BIAS = 2000000L; + private static long MIN_SPEED = 64 * 1024L; + private static long MIN_WINDOW = 32768; + + private Consumer windowControlConsumer; + private BiConsumer speedControlConsumer; + + private AtomicBoolean firstUpdate = new AtomicBoolean(true); + private long MIN_RTTVAR = 400000000L; + private volatile long RTTMin = 1000000000L; + private volatile long RTTVar = 1000000000L; + private volatile long RTTAvg = 1000000000L; + private double ECNAvg2 = 0L; + private double alpha=0; + private volatile AtomicLong ECNSize = new AtomicLong(0); + private volatile AtomicLong TotalSize = new AtomicLong(0); + private volatile long RTO = 1000000000L; + + + private volatile long window=MIN_WINDOW; + private volatile long windowUsed=MIN_WINDOW; + private volatile long congressWindowSize=MIN_WINDOW; + private volatile long speed=MIN_SPEED; + private long congressSpeed=MIN_SPEED; + + private long RTTstartTime = System.nanoTime(); + private long bandwidth=MIN_SPEED; + private double MAX_GAIN=1.5;//2.8853900817779 + private double MIN_GAIN=1.2; + private double gain=MAX_GAIN; + + @Override + public void reset() { + window = MIN_WINDOW; + if (windowControlConsumer != null) { + windowControlConsumer.accept(window); + } + speed = MIN_SPEED; + if (speedControlConsumer != null) { + speedControlConsumer.accept(speed, BURST_TIME); + } + gain=MAX_GAIN; + } + + @Override + public void setWindowControlConsumer(Consumer windowControlConsumer) { + this.windowControlConsumer = windowControlConsumer; + } + + @Override + public void setSpeedControlConsumer(BiConsumer speedControlConsumer) { + this.speedControlConsumer = speedControlConsumer; + } + + @Override + public synchronized void putAck(long packetSize, long latencyns, boolean ecn) { + if (latencyns <= RTTMin) { + RTTMin = latencyns; + } else { + RTTMin = (RTTMin * 99999 + latencyns) / 100000; + } + if (firstUpdate.compareAndSet(true, false)) { + RTTAvg = latencyns; + RTTVar = latencyns / 2; + } else { + RTTVar = (RTTVar * 3 + Math.abs(RTTAvg - latencyns)) / 4; + RTTAvg = (RTTAvg * 7 + latencyns) / 8; + } + RTO = RTTAvg + Math.max(MIN_RTTVAR, RTTVar * 4);// RTTVar*4 + + if(ecn) { + ECNSize.addAndGet(packetSize); + } + TotalSize.addAndGet(packetSize); + + + long curr=System.nanoTime(); + if(curr-RTTstartTime>(RTTAvg+BIAS)) { + RTTstartTime=curr; + + long totalSize=TotalSize.getAndSet(0); + long ecnSize=ECNSize.getAndSet(0); + if(totalSize!=0) { + ECNAvg2=ecnSize/(double)totalSize; + alpha=(alpha*15+ECNAvg2)/16; + } + + if(ECNAvg2>0.5) { + gain=MIN_GAIN; + if(congressWindowSize>MIN_WINDOW) { + congressWindowSize-=200; + updateWindowSize(); + } + }else if(ECNAvg2>0.1){ + if(windowUsed*3L>=congressWindowSize) { + congressWindowSize+=200; + updateWindowSize(); + } + }else { + if(windowUsed*3L>=congressWindowSize) { + congressWindowSize+=8000; + updateWindowSize(); + } + } + //System.out.println(ECNAvg2); + //System.out.println(speed+" "+window); + if (bandwidth >= congressSpeed) { + congressSpeed = bandwidth; + } else { + congressSpeed = (congressSpeed * 99 + bandwidth) / 100; + } + speed=Math.max(MIN_SPEED,(long) (congressSpeed * gain)) ; + + if (speedControlConsumer != null) { + speedControlConsumer.accept(speed, BURST_TIME); + } + + } + + + } + + private void updateWindowSize() { + window=Math.max( congressWindowSize,MIN_WINDOW); + if (windowControlConsumer != null) { + windowControlConsumer.accept(window); + } + } + + @Override + public void putLoss(long packetSize, long lossns, int losscounter) { + + } + + @Override + public long getRTO() { + return RTO; + } + + @Override + public void setCurrentWindowUsed(long used) { + this.windowUsed=used; + } + + @Override + public void setCurrentBandwidth(long bandwidth) { + this.bandwidth=bandwidth; + } + +} diff --git a/src/org/kne/cloud/network/congress/ECNCongressAlgorithm.java b/src/org/kne/cloud/network/congestion/DCTCPCongestionAlgorithm.java similarity index 73% rename from src/org/kne/cloud/network/congress/ECNCongressAlgorithm.java rename to src/org/kne/cloud/network/congestion/DCTCPCongestionAlgorithm.java index 441a17e..361596c 100644 --- a/src/org/kne/cloud/network/congress/ECNCongressAlgorithm.java +++ b/src/org/kne/cloud/network/congestion/DCTCPCongestionAlgorithm.java @@ -1,4 +1,4 @@ -package org.kne.cloud.network.congress; +package org.kne.cloud.network.congestion; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; @@ -6,28 +6,25 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.function.BiConsumer; import java.util.function.Consumer; -public class ECNCongressAlgorithm implements CongressAlgorithm { +public class DCTCPCongestionAlgorithm implements CongestionAlgorithm { - private static final long BURST_TIME = 2000000L; + private static final long BURST_TIME = 1000000L; private static final long BIAS = 2000000L; private static long MIN_SPEED = 64 * 1024L; - private static long MIN_WINDOW = 16384; + private static long MIN_WINDOW = 32768; private Consumer windowControlConsumer; private BiConsumer speedControlConsumer; private AtomicBoolean firstUpdate = new AtomicBoolean(true); - private long MIN_RTTVAR = 50000000L; + private long MIN_RTTVAR = 400000000L; private volatile long RTTMin = 1000000000L; private volatile long RTTVar = 1000000000L; private volatile long RTTAvg = 1000000000L; - private volatile long RTTAvg2 = 1000000000L; private double ECNAvg2 = 0L; private double alpha=0; - private volatile AtomicLong RTTTotal = new AtomicLong(0); private volatile AtomicLong ECNSize = new AtomicLong(0); private volatile AtomicLong TotalSize = new AtomicLong(0); - private volatile AtomicLong RTTCount = new AtomicLong(0); private volatile long RTO = 1000000000L; @@ -39,11 +36,10 @@ public class ECNCongressAlgorithm implements CongressAlgorithm { private long RTTstartTime = System.nanoTime(); private long bandwidth=MIN_SPEED; - private double MAX_GAIN=1.2;//2.8853900817779 + private double MAX_GAIN=2.8853900817779;//2.8853900817779 private double MIN_GAIN=1.2; private double gain=MAX_GAIN; - private ReentrantLock lock=new ReentrantLock(); @Override public void reset() { window = MIN_WINDOW; @@ -77,51 +73,48 @@ public class ECNCongressAlgorithm implements CongressAlgorithm { if (firstUpdate.compareAndSet(true, false)) { RTTAvg = latencyns; RTTVar = latencyns / 2; - RTTAvg2 = latencyns; } else { RTTVar = (RTTVar * 3 + Math.abs(RTTAvg - latencyns)) / 4; RTTAvg = (RTTAvg * 7 + latencyns) / 8; } RTO = RTTAvg + Math.max(MIN_RTTVAR, RTTVar * 4);// RTTVar*4 - RTTTotal .addAndGet( latencyns); if(ecn) { ECNSize.addAndGet(packetSize); } TotalSize.addAndGet(packetSize); - RTTCount.incrementAndGet(); long curr=System.nanoTime(); - if(curr-RTTstartTime>RTTAvg2) { + if(curr-RTTstartTime>(RTTAvg+BIAS)) { RTTstartTime=curr; - lock.lock(); - try { - if(RTTCount.get()>0) { - long count=RTTCount.getAndSet(0); - RTTAvg2=RTTTotal.getAndSet(0)/count; - ECNAvg2=ECNSize.getAndSet(0)/(double)TotalSize.getAndSet(0); - alpha=(alpha*15+ECNAvg2)/16; - //System.out.println(alpha); + + long totalSize=TotalSize.getAndSet(0); + long ecnSize=ECNSize.getAndSet(0); + if(totalSize!=0) { + ECNAvg2=ecnSize/(double)totalSize; + alpha=(alpha*15+ECNAvg2)/16; } - if(ECNAvg2>0.5) { + + if(ECNAvg2>0.6) { gain=MIN_GAIN; if(congressWindowSize>MIN_WINDOW) { - congressWindowSize=Math.max(MIN_WINDOW,(long) (congressWindowSize*(1-alpha/5))); + congressWindowSize=Math.max(MIN_WINDOW,(long) (congressWindowSize*(1-alpha/10))); updateWindowSize(); } - }else if(ECNAvg2>0.05){ + }else if(ECNAvg2>0.2){ if(windowUsed*3L>=congressWindowSize) { - congressWindowSize+=100; + congressWindowSize+=200; updateWindowSize(); } }else { if(windowUsed*3L>=congressWindowSize) { - congressWindowSize+=4000; + congressWindowSize+=8000; updateWindowSize(); } } - + //System.out.println(ECNAvg2); + //System.out.println(speed+" "+window); if (bandwidth >= congressSpeed) { congressSpeed = bandwidth; } else { @@ -132,11 +125,9 @@ public class ECNCongressAlgorithm implements CongressAlgorithm { if (speedControlConsumer != null) { speedControlConsumer.accept(speed, BURST_TIME); } - }finally { - lock.unlock(); - } + } - //System.out.println(speed+" "+window); + } diff --git a/src/org/kne/cloud/network/congestion/DetnetCongestionAlgorithm.java b/src/org/kne/cloud/network/congestion/DetnetCongestionAlgorithm.java new file mode 100644 index 0000000..9d2bce1 --- /dev/null +++ b/src/org/kne/cloud/network/congestion/DetnetCongestionAlgorithm.java @@ -0,0 +1,6 @@ +package org.kne.cloud.network.congestion; + +public interface DetnetCongestionAlgorithm extends CongestionAlgorithm { + public void setUpperDelayBound(double upper); + public void setLowerDelayBound(double lower); +} diff --git a/src/org/kne/cloud/network/congress/EmptyCongressAlgorithm.java b/src/org/kne/cloud/network/congestion/EmptyCongestionAlgorithm.java similarity index 82% rename from src/org/kne/cloud/network/congress/EmptyCongressAlgorithm.java rename to src/org/kne/cloud/network/congestion/EmptyCongestionAlgorithm.java index a346351..373aaab 100644 --- a/src/org/kne/cloud/network/congress/EmptyCongressAlgorithm.java +++ b/src/org/kne/cloud/network/congestion/EmptyCongestionAlgorithm.java @@ -1,9 +1,9 @@ -package org.kne.cloud.network.congress; +package org.kne.cloud.network.congestion; import java.util.function.BiConsumer; import java.util.function.Consumer; -public class EmptyCongressAlgorithm implements CongressAlgorithm{ +public class EmptyCongestionAlgorithm implements CongestionAlgorithm{ private long timeout; @@ -53,7 +53,7 @@ public class EmptyCongressAlgorithm implements CongressAlgorithm{ } - public EmptyCongressAlgorithm(long timeout) { + public EmptyCongestionAlgorithm(long timeout) { super(); this.timeout = timeout; } diff --git a/src/org/kne/cloud/network/congestion/MessageBatcher.java b/src/org/kne/cloud/network/congestion/MessageBatcher.java new file mode 100644 index 0000000..73f825c --- /dev/null +++ b/src/org/kne/cloud/network/congestion/MessageBatcher.java @@ -0,0 +1,72 @@ +package org.kne.cloud.network.congestion; +import java.util.List; +import java.util.function.Consumer; + +/** + * 消息批处理器接口 + * 提供批量消息处理功能,支持按数量和时间触发批量发送 + */ +public interface MessageBatcher { + + // ==================== 配置相关方法 ==================== + + /** + * 获取批处理大小 + * @return 批处理大小 + */ + int getBatchSize(); + + /** + * 获取最大延迟时间 + * @return 最大延迟时间(纳秒) + */ + long getMaxDelay(); + + /** + * 设置消息消费者回调函数 + * @param consumer 消费者回调 + */ + void setConsumer(Consumer> consumer); + + // ==================== 消息操作方法 ==================== + + /** + * 添加消息到批处理器 + * @param message 消息对象 + */ + void putMessage(T message); + + /** + * 批量添加消息 + * @param messages 消息列表 + */ + void putMessages(List messages); + + /** + * 立即刷新并发送所有待处理消息 + */ + void flush(); + + // ==================== 状态查询方法 ==================== + + /** + * 获取当前队列中的消息数量 + * @return 队列大小 + */ + int getQueueSize(); + + + // ==================== 生命周期管理方法 ==================== + + /** + * 检查批处理器是否停止 + * @return 是否停止 + */ + boolean isClosed(); + + + /** + * 停止批处理器 + */ + void close(); +} \ No newline at end of file diff --git a/src/org/kne/cloud/network/congress/ReceiveByteSlidingWindow.java b/src/org/kne/cloud/network/congestion/ReceiveByteSlidingWindow.java similarity index 93% rename from src/org/kne/cloud/network/congress/ReceiveByteSlidingWindow.java rename to src/org/kne/cloud/network/congestion/ReceiveByteSlidingWindow.java index ccb793a..8185309 100644 --- a/src/org/kne/cloud/network/congress/ReceiveByteSlidingWindow.java +++ b/src/org/kne/cloud/network/congestion/ReceiveByteSlidingWindow.java @@ -1,4 +1,4 @@ -package org.kne.cloud.network.congress; +package org.kne.cloud.network.congestion; import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; diff --git a/src/org/kne/cloud/network/congress/SendByteSlidingWindow.java b/src/org/kne/cloud/network/congestion/SendByteSlidingWindow.java similarity index 93% rename from src/org/kne/cloud/network/congress/SendByteSlidingWindow.java rename to src/org/kne/cloud/network/congestion/SendByteSlidingWindow.java index 0f56e50..653443c 100644 --- a/src/org/kne/cloud/network/congress/SendByteSlidingWindow.java +++ b/src/org/kne/cloud/network/congestion/SendByteSlidingWindow.java @@ -1,4 +1,4 @@ -package org.kne.cloud.network.congress; +package org.kne.cloud.network.congestion; import java.util.Iterator; import java.util.Objects; diff --git a/src/org/kne/cloud/network/congestion/SendPacketSlidingWindow.java b/src/org/kne/cloud/network/congestion/SendPacketSlidingWindow.java new file mode 100644 index 0000000..f6f25ee --- /dev/null +++ b/src/org/kne/cloud/network/congestion/SendPacketSlidingWindow.java @@ -0,0 +1,221 @@ +package org.kne.cloud.network.congestion; + +import java.io.Closeable; +import java.io.IOException; +import java.net.SocketException; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.UUID; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.LongAdder; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; +import java.util.function.Consumer; + +import org.kne.cloud.network.NetworkPacket; +import org.kne.cloud.network.ThreadTool; +import org.kne.cloud.network.ipv6.IPv6Packet; +import org.kne.cloud.network.klalb.SendItem; + +public class SendPacketSlidingWindow implements Closeable, AutoCloseable { + private Map> sendMap = new ConcurrentHashMap<>(1024, 0.2f); + private AtomicLong sendmapWindowUsed=new AtomicLong(0); + //private LongAdder sendmapWindowUsed = new LongAdder(); + + private int headerCalibrate = 0; + + public void setHeaderCalibrate(int headerCalibrate) { + this.headerCalibrate = headerCalibrate; + } + + private CongestionAlgorithm algorithm; + + private Consumer resendConsumer; + private Consumer closingConsumer; + private volatile boolean closed = false; + private ResendChecker checker = new ResendChecker(); + private AtomicLong windowSize = new AtomicLong(); + + private Lock lock; + + private Condition condition; + private boolean removeAtResend; + + public SendPacketSlidingWindow(CongestionAlgorithm algorithm, long windowSize) { + this(algorithm, windowSize, 0, true); + } + + public SendPacketSlidingWindow(CongestionAlgorithm algorithm, long windowSize, int headerCalibrate) { + this(algorithm, windowSize, headerCalibrate, true); + } + + public SendPacketSlidingWindow(CongestionAlgorithm algorithm, long windowSize, int headerCalibrate, + boolean removeAtResend) { + this.headerCalibrate = headerCalibrate; + this.removeAtResend = removeAtResend; + this.algorithm = algorithm; + this.windowSize.set(windowSize); + Thread t = ThreadTool.makeVThread("重路由计时器线程", checker); + t.start(); + } + + public long getWindowSize() { + return windowSize.get(); + } + + public void setWindowSize(long windowSize) { + this.windowSize.set(windowSize); + } + + public Consumer getResendConsumer() { + return resendConsumer; + } + + public void setResendConsumer(Consumer resendConsumer) { + this.resendConsumer = resendConsumer; + } + + public Consumer getClosingConsumer() { + return closingConsumer; + } + + public void setClosingConsumer(Consumer closingConsumer) { + this.closingConsumer = closingConsumer; + } + + public long getSendmapWindowUsed() { + return sendmapWindowUsed.get(); + } + + public int getHeaderCalibrate() { + return headerCalibrate; + } + + public CongestionAlgorithm getAlgorithm() { + return algorithm; + } + + public boolean isCongress(IPv6Packet iPv6Packet, double scale) { + boolean congress = sendmapWindowUsed.get() > windowSize.get() * scale; + return congress; + + } + + public void put(K sequence, V packet) { + SendItem newitem = new SendItem(packet); + SendItem old = sendMap.put(sequence, newitem); + long dx=0; + if (old != null) { + dx=-(old.getPacketLength() + headerCalibrate); + } + long newWindow =sendmapWindowUsed.addAndGet(newitem.getPacketLength() + headerCalibrate+dx); + algorithm.setCurrentWindowUsed(newWindow); + } + public V ack(K sequence) { + return ack(sequence,false); + } + + public V ack(K sequence,boolean ecn) { + SendItem ipv6; + if ((ipv6 = sendMap.remove(sequence)) != null) { + long newWindow =sendmapWindowUsed.addAndGet(-(ipv6.getPacketLength() + headerCalibrate)); + algorithm.setCurrentWindowUsed(newWindow); + long RTTC = System.nanoTime() - ipv6.getSendtime(); + algorithm.putAck(ipv6.getPacketLength(), RTTC, ecn); + // System.out.println("remove:"+aseq.getSequence()+" "+sendMap.size()); + Lock lockx = lock; + if (lockx != null) { + lockx.lock(); + try { + Condition cds = condition; + if (cds != null) { + cds.signalAll(); + } + } finally { + lockx.unlock(); + } + } + return ipv6.getPacket(); + } else { + // System.out.println("miss:"+aseq.getSequence()+" "+sendMap.size()); + return null; + } + } + + private class ResendChecker implements Runnable { + + @Override + public void run() { + while (!closed) { + + Collection> vals = sendMap.values(); + for (Iterator> iterator = vals.iterator(); iterator.hasNext();) { + SendItem sitm = (SendItem) iterator.next(); + long current = System.nanoTime(); + if (current - sitm.getSendtime() > algorithm.getRTO()) { + if (removeAtResend) { + iterator.remove(); + long newWindow = sendmapWindowUsed.addAndGet((int) -(sitm.getPacketLength() + headerCalibrate)); + algorithm.setCurrentWindowUsed(newWindow); + } else { + sitm.setSendtime(current); + } + V pktr = sitm.getPacket(); + if (resendConsumer != null) + resendConsumer.accept(pktr); + } + } + + try { + Thread.sleep(2); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + // 清理资源 + if (closingConsumer != null) { + for (SendItem item : sendMap.values()) { + closingConsumer.accept(item.getPacket()); + } + } + sendMap.clear(); + sendmapWindowUsed.set(0); + } + } + + public boolean isClosed() { + return closed; + } + + @Override + public void close() { + closed = true; + } + + public void setCongressCondition(Lock lock2, Condition condition2) { + this.lock = lock2; + this.condition = condition2; + } + + public Map> getSendmap() { + return sendMap; + } + + public int getWindowPacketCount() { + return sendMap.size(); + } + + public boolean isEmpty() { + return sendMap.isEmpty(); + } + + @Override + public String toString() { + return "SendPacketSlidingWindow [sendmapWindowUsed=" + sendmapWindowUsed + ", windowSize=" + windowSize + "]"; + } + +} diff --git a/src/org/kne/cloud/network/congestion/Vegas2CongestionAlgorithm.java b/src/org/kne/cloud/network/congestion/Vegas2CongestionAlgorithm.java new file mode 100644 index 0000000..f52d4ac --- /dev/null +++ b/src/org/kne/cloud/network/congestion/Vegas2CongestionAlgorithm.java @@ -0,0 +1,218 @@ +package org.kne.cloud.network.congestion; + +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +public class Vegas2CongestionAlgorithm implements CongestionAlgorithm,DetnetCongestionAlgorithm { + + // 可配置的时延膨胀比上下限 - Vegas2.0核心参数 + private double delayUpperBound = 1.20; // RTT上限为基础RTT的1.2倍 + private double delayLowerBound = 1.15; // RTT下限为基础RTT的1.05倍 + + private static final long BURST_TIME = 2000000L; + private static final long BIAS = 500000L; + private static long MIN_SPEED = 256 * 1024L; + private static long MIN_WINDOW = 16384; + + // 新增:窗口调整参数(可基于当前窗口大小动态调整) + private static final double WINDOW_ADJUST_FACTOR = 0.01; // 1%的窗口调整幅度 + + private Consumer windowControlConsumer; + private BiConsumer speedControlConsumer; + + private AtomicBoolean firstUpdate = new AtomicBoolean(true); + private long MIN_RTTVAR = 30000000L; + private volatile long RTTMin = 1000000000L; // BaseRTT + private volatile long RTTVar = 1000000000L; + private volatile long RTTAvg = 1000000000L; + private volatile long RTTAvg2 = 1000000000L; // 当前平滑RTT + private volatile long RTTTotal = 0; + private volatile long RTTCount = 0; + private volatile long RTO = 1000000000L; + + private volatile long window = MIN_WINDOW; + private volatile long window2 = MIN_WINDOW; + private volatile long speed = MIN_SPEED; + private volatile long maxwindow = 99999999999L; + private long congressSpeed=MIN_SPEED; + + public Vegas2CongestionAlgorithm() { + reset(); + } + + @Override + public void reset() { + window = MIN_WINDOW; + if (windowControlConsumer != null) { + windowControlConsumer.accept(window); + } + speed = MIN_SPEED; + if (speedControlConsumer != null) { + speedControlConsumer.accept(speed, BURST_TIME); + } + } + + @Override + public void setWindowControlConsumer(Consumer windowControlConsumer) { + this.windowControlConsumer = windowControlConsumer; + } + + @Override + public void setSpeedControlConsumer(BiConsumer speedControlConsumer) { + this.speedControlConsumer = speedControlConsumer; + } + + private long RTTstartTime = System.nanoTime(); + + @Override + public synchronized void putAck(long packetSize, long latencyns, boolean ecn) { + // 处理ECN信号 - 将其视为强烈的拥塞信号 + if (ecn) { + // 当收到ECN时,更激进地减少窗口 + window2 = Math.max(0, window2 * 3 / 4); + if (windowControlConsumer != null) { + windowControlConsumer.accept(window2); + } + } + + // 更新最小RTT(BaseRTT) + if (latencyns <= RTTMin) { + RTTMin = latencyns; + } else { + // 缓慢适应:当网络路径真正变化时,BaseRTT应能缓慢更新 + // 这里使用极慢的衰减因子,只有在持续观测到更低RTT时才快速更新 + RTTMin = (RTTMin * 9999 + latencyns) / 10000; + } + + // 更新平滑RTT估计 + if (firstUpdate.compareAndSet(true, false)) { + RTTAvg = latencyns; + RTTVar = latencyns / 2; + RTTAvg2 = latencyns; + } else { + RTTVar = (RTTVar * 3 + Math.abs(RTTAvg - latencyns)) / 4; + RTTAvg = (RTTAvg * 7 + latencyns) / 8; + } + + RTO = RTTAvg + Math.max(MIN_RTTVAR, RTTVar * 4); + + RTTTotal += latencyns; + RTTCount++; + + long curr = System.nanoTime(); + // 每个RTT周期调整一次窗口(使用当前估计的RTT) + if (curr - RTTstartTime > Math.max(BIAS, RTTMin)) { + if (RTTCount > 0) { + long currentRTT = RTTTotal / RTTCount; + RTTAvg2 = (RTTAvg2 * 3 + currentRTT) / 4; // 平滑当前RTT + RTTTotal = 0; + RTTCount = 0; + } + + // ================== Vegas2.0核心逻辑 ================== + // 1. 计算时延膨胀比 + double delayRatio = (double) RTTAvg2 / (double) Math.max(BIAS, RTTMin); + + // 2. 基于比值的窗口调整(取代原来的基于差值的调整) + long adjustStep = Math.max(512, (long)(window2 * WINDOW_ADJUST_FACTOR)); + + if (delayRatio > delayUpperBound) { + // 时延过高:减小窗口,减少幅度与超标程度成正比 + double exceedRatio = delayRatio / delayUpperBound; + window2 -= (long)(adjustStep * exceedRatio); + } else if (delayRatio < delayLowerBound) { + // 时延过低:增大窗口,增加幅度与低于目标程度成正比 + double belowRatio = delayLowerBound / delayRatio; + window2 += (long)(adjustStep * belowRatio); + } else { + // 在理想区间内:微调以维持稳定 + // 计算目标RTT = BaseRTT × 目标膨胀比 + long targetRTT = (long)(Math.max(BIAS, RTTMin) * (delayLowerBound + delayUpperBound) / 2.0); + + if (RTTAvg2 > targetRTT) { + // 略高于目标:小幅减少 + window2 = Math.max(0, window2 - 256); + } else if (RTTAvg2 < targetRTT) { + // 略低于目标:小幅增加 + window2 = Math.min(maxwindow, window2 + 256); + } + // 非常接近目标:保持窗口不变 + } + // =================================================== + + // 窗口边界检查 + if (window2 >= maxwindow) { + window2 = maxwindow; + } + if (window2 < 0) { + window2 = 0; + } + + RTTstartTime = curr; + + if (bandwidth >= congressSpeed) { + congressSpeed = bandwidth; + //congressSpeed = (congressSpeed + bandwidth) / 2; + } else { + congressSpeed = (congressSpeed * 49 + bandwidth) / 50; + } + + // 速度计算:基于当前窗口和RTT,考虑一个安全边界 + // 使用目标膨胀比而非固定1.2倍,确保与窗口控制逻辑一致 + window=window2+MIN_WINDOW; + speed=(long) (congressSpeed * delayUpperBound)+MIN_SPEED ; + + if (windowControlConsumer != null) { + windowControlConsumer.accept(window); + } + if (speedControlConsumer != null) { + speedControlConsumer.accept(speed, BURST_TIME); + } + } + } + + @Override + public void putLoss(long packetSize, long lossns, int losscounter) { + } + + @Override + public long getRTO() { + return RTO; + } + + @Override + public void setCurrentWindowUsed(long used) { + this.maxwindow = used * 16 + 65536; + } + private long bandwidth; + + @Override + public void setCurrentBandwidth(long bandwidth) { + // 可选:基于已知带宽信息调整参数 + this.bandwidth=bandwidth; + } + + // 新增方法:获取当前状态信息(用于监控和调试) + public double getCurrentDelayRatio() { + return (double) RTTAvg2 / (double) Math.max(BIAS, RTTMin); + } + + public long getBaseRTT() { + return RTTMin; + } + + public long getCurrentRTT() { + return RTTAvg2; + } + + @Override + public void setUpperDelayBound(double upper) { + delayUpperBound=upper; + } + + @Override + public void setLowerDelayBound(double lower) { + delayLowerBound=lower; + } +} \ No newline at end of file diff --git a/src/org/kne/cloud/network/congress/SendPacketSlidingWindow.java b/src/org/kne/cloud/network/congress/SendPacketSlidingWindow.java deleted file mode 100644 index ade50ab..0000000 --- a/src/org/kne/cloud/network/congress/SendPacketSlidingWindow.java +++ /dev/null @@ -1,203 +0,0 @@ -package org.kne.cloud.network.congress; - -import java.io.Closeable; -import java.io.IOException; -import java.net.SocketException; -import java.util.Collection; -import java.util.Iterator; -import java.util.Map; -import java.util.UUID; -import java.util.Map.Entry; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.atomic.LongAdder; -import java.util.concurrent.locks.Condition; -import java.util.concurrent.locks.Lock; -import java.util.function.Consumer; - -import org.kne.cloud.network.NetworkPacket; -import org.kne.cloud.network.ipv6.IPv6Packet; -import org.kne.cloud.network.klalb.SendItem; - -public class SendPacketSlidingWindow implements Closeable,AutoCloseable{ - private Map> sendMap= new ConcurrentHashMap<>(1024,0.2f); - //private AtomicInteger sendmapWindowUsed=new AtomicInteger(0); - private LongAdder sendmapWindowUsed=new LongAdder(); - - private int headerCalibrate=0; - public void setHeaderCalibrate(int headerCalibrate) { - this.headerCalibrate = headerCalibrate; - } - - private CongressAlgorithm algorithm; - - private Consumer resendConsumer; - private Consumer closingConsumer; - private volatile boolean closed=false; - private ResendChecker checker=new ResendChecker(); - private AtomicLong windowSize = new AtomicLong(); - - - private Lock lock; - - private Condition condition; - - public SendPacketSlidingWindow(CongressAlgorithm algorithm, long windowSize) { - super(); - this.algorithm = algorithm; - this.windowSize .set( windowSize); - Thread t=new Thread(checker); - t.start(); - } - - public SendPacketSlidingWindow(CongressAlgorithm algorithm, long windowSize,int headerCalibrate) { - this(algorithm,windowSize); - this.headerCalibrate=headerCalibrate; - } - - public long getWindowSize() { - return windowSize.get(); - } - - public void setWindowSize(long windowSize) { - this.windowSize.set(windowSize); - } - - public Consumer getResendConsumer() { - return resendConsumer; - } - - public void setResendConsumer(Consumer resendConsumer) { - this.resendConsumer = resendConsumer; - } - - public Consumer getClosingConsumer() { - return closingConsumer; - } - - public void setClosingConsumer(Consumer closingConsumer) { - this.closingConsumer = closingConsumer; - } - - public long getSendmapWindowUsed() { - return sendmapWindowUsed.sum(); - } - - public int getHeaderCalibrate() { - return headerCalibrate; - } - - public CongressAlgorithm getAlgorithm() { - return algorithm; - } - - - public boolean isCongress(IPv6Packet iPv6Packet,double scale) { - boolean congress=sendmapWindowUsed.sum()>windowSize.get()*scale; - return congress; - - } - - public void put(K sequence,V packet) throws SocketException { - if(closed) { - throw new SocketException("sliding window closed!"); - } - SendItem newitem=new SendItem( packet); - SendItem old= sendMap.put(sequence,newitem); - if(old!=null) { - sendmapWindowUsed.add( -(old.getPacketLength()+headerCalibrate)); - } - sendmapWindowUsed.add( (newitem.getPacketLength()+headerCalibrate)); - long newWindow=sendmapWindowUsed.sum(); - algorithm.setCurrentWindowUsed(newWindow); - } - - public V ack(K sequence) { - SendItem ipv6; - if((ipv6=sendMap.remove(sequence))!=null) { - sendmapWindowUsed.add( -(ipv6.getPacketLength()+headerCalibrate)); - long newWindow= sendmapWindowUsed.sum(); - algorithm.setCurrentWindowUsed(newWindow); - long RTTC=System.nanoTime()-ipv6.getSendtime(); - algorithm.putAck(ipv6.getPacketLength(), RTTC, false); - //System.out.println("remove:"+aseq.getSequence()+" "+sendMap.size()); - Lock lockx=lock; - if(lockx!=null) { - lockx.lock(); - try { - Condition cds=condition; - if(cds!=null) { - cds.signalAll(); - } - }finally { - lockx.unlock(); - } - } - return ipv6.getPacket(); - }else { - // System.out.println("miss:"+aseq.getSequence()+" "+sendMap.size()); - return null; - } - } - - private class ResendChecker implements Runnable{ - - @Override - public void run() { - while(!closed) { - - Collection>vals= sendMap.values(); - for (Iterator> iterator = vals.iterator(); iterator.hasNext();) { - SendItem sitm = (SendItem) iterator.next(); - if(System.nanoTime() -sitm.getSendtime()>algorithm.getRTO()) { - iterator.remove(); - sendmapWindowUsed.add((int) -(sitm.getPacketLength()+headerCalibrate)); - long newWindow=sendmapWindowUsed.sum(); - algorithm.setCurrentWindowUsed(newWindow); - //if(!kplink.isStream()) - V pktr=sitm.getPacket(); - pktr.setPriority(pktr.getPriority()-1); - if(resendConsumer!=null) - resendConsumer.accept(pktr); - //System.out.println("reroute"); - } - } - - - - try { - Thread.sleep(2); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - // 清理资源 - if (closingConsumer != null) { - for (SendItem item : sendMap.values()) { - closingConsumer.accept(item.getPacket()); - } - } - sendMap.clear(); - sendmapWindowUsed.reset(); - } - } - public boolean isClosed() { - return closed; - } - - @Override - public void close() { - closed=true; - } - - public void setCongressCondition(Lock lock2, Condition condition2) { - this.lock=lock2; - this.condition=condition2; - } - - public Map> getSendmap() { - return sendMap; - } - -} diff --git a/src/org/kne/cloud/network/congress/VegasCongressAlgorithm.java b/src/org/kne/cloud/network/congress/VegasCongressAlgorithm.java deleted file mode 100644 index 7227c65..0000000 --- a/src/org/kne/cloud/network/congress/VegasCongressAlgorithm.java +++ /dev/null @@ -1,132 +0,0 @@ -package org.kne.cloud.network.congress; - -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiConsumer; -import java.util.function.Consumer; - -public class VegasCongressAlgorithm implements CongressAlgorithm { - - private static final long BURST_TIME = 1000000L; - private static final long BIAS = 1000000L; - private static long MIN_SPEED=256*1024L; - private static long MIN_WINDOW=4096L; - - private Consumer windowControlConsumer; - private BiConsumer speedControlConsumer; - - private AtomicBoolean firstUpdate=new AtomicBoolean(true); - private long MIN_RTTVAR=30000000L; - private volatile long RTTMin=1000000000L; - private volatile long RTTVar=1000000000L; - private volatile long RTTAvg=1000000000L; - private volatile long RTTAvg2=1000000000L; - private volatile long RTTTotal=0; - private volatile long RTTCount=0; - private volatile long RTO=1000000000L; - - private volatile long window=MIN_WINDOW; - private volatile long speed=MIN_SPEED; - private volatile long maxwindow=99999999999L; - @Override - public void reset() { - window=MIN_WINDOW; - if(windowControlConsumer!=null) { - windowControlConsumer.accept(window); - } - speed=MIN_SPEED; - if(speedControlConsumer!=null) { - speedControlConsumer.accept(speed, BURST_TIME); - } - } - - @Override - public void setWindowControlConsumer(Consumer windowControlConsumer) { - this.windowControlConsumer=windowControlConsumer; - } - - @Override - public void setSpeedControlConsumer(BiConsumer speedControlConsumer) { - this.speedControlConsumer=speedControlConsumer; - } - private long RTTstartTime=System.nanoTime(); - @Override - public synchronized void putAck(long packetSize, long latencyns, boolean ecn) { - if(latencyns<=RTTMin) { - RTTMin=latencyns; - }else { - RTTMin= (RTTMin*9999+latencyns)/10000; - } - if(firstUpdate.compareAndSet(true, false)) { - RTTAvg=latencyns; - RTTVar=latencyns/2; - RTTAvg2=latencyns; - }else { - RTTVar=(RTTVar*3+Math.abs(RTTAvg-latencyns))/4; - RTTAvg= (RTTAvg*7+latencyns)/8; - } - RTO=RTTAvg+Math.max(MIN_RTTVAR, RTTVar*4);//RTTVar*4 - - RTTTotal+=latencyns; - RTTCount++; - - long curr=System.nanoTime(); - if(curr-RTTstartTime>RTTMin) { - if(RTTCount>0) { - RTTAvg2=(RTTAvg2+RTTTotal/RTTCount)/2; - RTTTotal=0; - RTTCount=0; - } - double excepted=window/(double)(Math.max( BIAS,RTTMin)); - double actual=window/(double)(RTTAvg2); - double diff=(excepted-actual)*(Math.max( BIAS,RTTMin)); - //System.out.println("diff:"+diff); - if(diff>65536*3) { - window-=512; - } - if(diff<65536*2) { - window+=512; - } - if(window>=maxwindow){ - window=maxwindow; - //System.out.println("window:"+window); - } - if(window listeners = new CopyOnWriteArraySet<>(); + private SRv6Router srv6Router; + + + public SRv6Router getSrv6Router() { + return srv6Router; + } + + public void setSRv6Router(SRv6Router srv6Router) { + this.srv6Router = srv6Router; + } + @Override public void addIPv6LinkStateListener(IPv6LinkStateListener listener) { listeners.add(listener); @@ -40,4 +54,14 @@ public abstract class AbstractIPv6NetworkLink implements IPv6NetworkLink { v.onAddressUpdate(this); }); } + + public BiConsumer> getReceiveConsumer() { + return receiveConsumer; + } + + private BiConsumer> receiveConsumer; + @Override + public void setReceiveConsumer(BiConsumer> receiveConsumer) { + this.receiveConsumer = receiveConsumer; + } } diff --git a/src/org/kne/cloud/network/ipv6/ControlledIPv6NetworkLink.java b/src/org/kne/cloud/network/ipv6/ControlledIPv6NetworkLink.java new file mode 100644 index 0000000..14b3884 --- /dev/null +++ b/src/org/kne/cloud/network/ipv6/ControlledIPv6NetworkLink.java @@ -0,0 +1,16 @@ +package org.kne.cloud.network.ipv6; + +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; +import java.util.function.Consumer; + +public interface ControlledIPv6NetworkLink extends IPv6NetworkLink { + + public boolean isCongress(IPv6Packet iPv6Packet,double scale); + public default boolean isCongress(IPv6Packet iPv6Packet) { + return isCongress(iPv6Packet, 1.0); + } + void setRerouteConsumer(Consumer rerouteConsumer); + public boolean isReachSpeedLimit(IPv6Packet iPv6Packet); + public void setCongressCondition(Lock lock,Condition condition); +} diff --git a/src/org/kne/cloud/network/ipv6/FlowSession.java b/src/org/kne/cloud/network/ipv6/FlowSession.java index 9c11765..1292e18 100644 --- a/src/org/kne/cloud/network/ipv6/FlowSession.java +++ b/src/org/kne/cloud/network/ipv6/FlowSession.java @@ -6,19 +6,19 @@ import java.net.InetAddress; import java.util.Objects; public class FlowSession implements Serializable{ - private Inet6Address srcAddr; - private Inet6Address dstAddr; + private IPv6Address srcAddr; + private IPv6Address dstAddr; private int flowLabel; - public FlowSession(Inet6Address srcAddr, Inet6Address dstAddr, int flowLabel) { + public FlowSession(IPv6Address srcAddr, IPv6Address dstAddr, int flowLabel) { super(); this.srcAddr = srcAddr; this.dstAddr = dstAddr; this.flowLabel = flowLabel; } - public Inet6Address getSrcAddr() { + public IPv6Address getSrcAddr() { return srcAddr; } - public Inet6Address getDstAddr() { + public IPv6Address getDstAddr() { return dstAddr; } public int getFlowLabel() { @@ -30,7 +30,12 @@ public class FlowSession implements Serializable{ } @Override public int hashCode() { - return Objects.hash(dstAddr, flowLabel, srcAddr); + final int prime = 31; + int result = 1; + result = prime * result + ((dstAddr == null) ? 0 : dstAddr.hashCode()); + result = prime * result + flowLabel; + result = prime * result + ((srcAddr == null) ? 0 : srcAddr.hashCode()); + return result; } @Override public boolean equals(Object obj) { @@ -41,8 +46,19 @@ public class FlowSession implements Serializable{ if (getClass() != obj.getClass()) return false; FlowSession other = (FlowSession) obj; - return Objects.equals(dstAddr, other.dstAddr) && flowLabel == other.flowLabel - && Objects.equals(srcAddr, other.srcAddr); + if (dstAddr == null) { + if (other.dstAddr != null) + return false; + } else if (!dstAddr.equals(other.dstAddr)) + return false; + if (flowLabel != other.flowLabel) + return false; + if (srcAddr == null) { + if (other.srcAddr != null) + return false; + } else if (!srcAddr.equals(other.srcAddr)) + return false; + return true; } } diff --git a/src/org/kne/cloud/network/ipv6/ICMPv6Packet.java b/src/org/kne/cloud/network/ipv6/ICMPv6Packet.java index 9ea27f4..34c5ae2 100644 --- a/src/org/kne/cloud/network/ipv6/ICMPv6Packet.java +++ b/src/org/kne/cloud/network/ipv6/ICMPv6Packet.java @@ -1,5 +1,6 @@ package org.kne.cloud.network.ipv6; +import java.io.EOFException; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.ReadableByteChannel; @@ -22,21 +23,38 @@ public class ICMPv6Packet extends IPv6Payload { public static final int TYPE_PARAMETER_PROBLEM = 4; public static final int TYPE_ECHO_REQUEST = 128; public static final int TYPE_ECHO_REPLY = 129; + public static final int TYPE_POSTCARD = 253; - private ByteBuffer header = NetworkPacket.bufferAllocator.allocate(ICMPv6_HEADER_LENGTH); + private ByteBuffer header; private ByteBuffer data; + public void setData(ByteBuffer data) { + this.data = data; + } - public ICMPv6Packet() { + private boolean isDefault; + + protected ICMPv6Packet(ByteBuffer header,boolean isDefault) { super(ICMPv6_PROTOCOL_NUMBER, false); + this.header=header; + this.isDefault=isDefault; + } public ICMPv6Packet(int type, int code) { + this(type,code,true); + } + + protected ICMPv6Packet(int type, int code,boolean isDefault) { super(ICMPv6_PROTOCOL_NUMBER, false); + header = NetworkPacket.bufferAllocator.allocate(ICMPv6_HEADER_LENGTH); getHeader().put((byte) type); getHeader().put((byte) code); // 校验和字段初始为0,后续计算 getHeader().putChar((char) 0); + this.isDefault=isDefault; + if(isDefault) { data = NetworkPacket.bufferAllocator.allocate(65535); + } } @Override @@ -50,7 +68,7 @@ public class ICMPv6Packet extends IPv6Payload { public void writeToChannel(WritableByteChannel dto) throws IOException { // 写入头部和数据 dto.write(getHeader().slice(0, ICMPv6_HEADER_LENGTH)); - if (data != null && data.limit() > 0) { + if ( isDefault) { dto.write(data.slice(0, data.limit())); } } @@ -58,9 +76,9 @@ public class ICMPv6Packet extends IPv6Payload { @Override public void readFromChannel(ReadableByteChannel din, long length) throws IOException { // 读取ICMPv6头部 - getHeader().clear().limit(ICMPv6_HEADER_LENGTH); + getHeader().limit(ICMPv6_HEADER_LENGTH); KNEChannels.readFully(din, getHeader()); - + getHeader().flip(); // 读取数据部分(总长度减去头部长度) long dataLength = length - ICMPv6_HEADER_LENGTH; @@ -68,18 +86,16 @@ public class ICMPv6Packet extends IPv6Payload { throw new IOException("Invalid ICMPv6 packet: total length < header length"); } - if (dataLength > 0) { + if (isDefault) { data = NetworkPacket.bufferAllocator.allocate((int) dataLength); KNEChannels.readFully(din, data); data.flip(); - } else { - data = null; - } + } } @Override protected boolean needEndPosition() { - return false; + return true; } /** @@ -167,17 +183,10 @@ public class ICMPv6Packet extends IPv6Payload { // 临时将校验和字段设为0 setChecksum(0); - long sum = 0; // IPv6伪首部 - byte[] srcAddr = new byte[16], dstAddr = new byte[16]; - getParent().getRawSourceAddress(srcAddr); - getParent().getRawDestinationAddress(dstAddr); - - for (int i = 0; i < 16; i += 2) { - sum += ((srcAddr[i] & 0xFF) << 8) | (srcAddr[i + 1] & 0xFF); - sum += ((dstAddr[i] & 0xFF) << 8) | (dstAddr[i + 1] & 0xFF); - } + long sum = getParent().calculateAddressChecksum(); + // ICMPv6报文长度 int totalLength = (int) getTotalLength(); @@ -281,4 +290,26 @@ public class ICMPv6Packet extends IPv6Payload { public ByteBuffer getHeader() { return header; } + + public static ICMPv6Packet readICMPv6PacketFromChannel(ReadableByteChannel din, int payloadlength) throws EOFException, IOException { + ByteBuffer bb=NetworkPacket.bufferAllocator.allocate(ICMPv6_HEADER_LENGTH); + bb.position(0); + bb.limit(ICMPv6_HEADER_LENGTH); + KNEChannels.readFully(din, bb); + int type=bb.get(0)&0xff; + switch(type) { + case ICMPv6TimeExceededPacket.TYPE_TIME_EXCEEDED: + ICMPv6TimeExceededPacket timeExceed=new ICMPv6TimeExceededPacket(bb); + timeExceed.readFromChannel(din, payloadlength); + return timeExceed; + case ICMPv6PostcardPacket.TYPE_POSTCARD: + ICMPv6PostcardPacket postcards=new ICMPv6PostcardPacket(bb); + postcards.readFromChannel(din, payloadlength); + return postcards; + default: + ICMPv6Packet icmp=new ICMPv6Packet(bb, true); + icmp.readFromChannel(din, payloadlength); + return icmp; + } + } } \ No newline at end of file diff --git a/src/org/kne/cloud/network/ipv6/ICMPv6PostcardPacket.java b/src/org/kne/cloud/network/ipv6/ICMPv6PostcardPacket.java new file mode 100644 index 0000000..859926d --- /dev/null +++ b/src/org/kne/cloud/network/ipv6/ICMPv6PostcardPacket.java @@ -0,0 +1,62 @@ +package org.kne.cloud.network.ipv6; + +import java.io.IOException; +import java.io.StreamCorruptedException; +import java.nio.ByteBuffer; +import java.nio.channels.ReadableByteChannel; +import java.nio.channels.WritableByteChannel; +import java.util.ArrayList; +import java.util.List; + +import org.kne.cloud.network.NetworkPacket; +import org.kne.io.KNEChannels; + +public class ICMPv6PostcardPacket extends ICMPv6Packet { + private List postcards=new ArrayList<>(); + protected ICMPv6PostcardPacket(ByteBuffer header) { + super(header, false); + } + + public ICMPv6PostcardPacket(int code) { + super(ICMPv6Packet.TYPE_POSTCARD, code, false); + } + + public ICMPv6PostcardPacket() { + this(0); + } + + public List getPostcards() { + return postcards; + } + + @Override + public long getTotalLength() { + return ICMPv6Packet.ICMPv6_HEADER_LENGTH+postcards.size()*PostcardEntry.POSTCARD_ENTRY_SIZE; + } + + @Override + public void writeToChannel(WritableByteChannel dto) throws IOException { + super.writeToChannel(dto); + for(PostcardEntry postcard:postcards) { + postcard.writeToChannel(dto); + } + } + + @Override + public String toString() { + return "ICMPv6PostcardPacket [postcards=" + postcards + ", getTotalLength()=" + getTotalLength() + "]"; + } + + @Override + public void readFromChannel(ReadableByteChannel din, long length) throws IOException { + super.readFromChannel(din, length); + postcards.clear(); + int count= (int) ((length-ICMPv6Packet.ICMPv6_HEADER_LENGTH)/PostcardEntry.POSTCARD_ENTRY_SIZE); + for(int i=0;i { + + private final long high; + private final long low; + + // 常用常量地址 + public static final IPv6Address LOOPBACK = new IPv6Address(0, 1); + public static final IPv6Address UNSPECIFIED = new IPv6Address(0, 0); + public static final IPv6Address LOCALHOST = LOOPBACK; + + // IPv4映射的IPv6地址前缀 + private static final long IPV4_MAPPED_HIGH = 0x0000_0000_0000_0000L; + private static final long IPV4_MAPPED_LOW_PREFIX = 0x0000_0000_FFFF_0000L; + + // 构造方法 + public IPv6Address(long high, long low) { + this.high = high; + this.low = low; + } + + public IPv6Address(Inet6Address address) { + this(address.getAddress()); + } + + public IPv6Address(byte[] bytes) { + if (bytes.length != 16) { + throw new IllegalArgumentException("IPv6 address must be 16 bytes"); + } + + this. high = ((long)(bytes[0] & 0xFF) << 56) | + ((long)(bytes[1] & 0xFF) << 48) | + ((long)(bytes[2] & 0xFF) << 40) | + ((long)(bytes[3] & 0xFF) << 32) | + ((long)(bytes[4] & 0xFF) << 24) | + ((long)(bytes[5] & 0xFF) << 16) | + ((long)(bytes[6] & 0xFF) << 8) | + ((long)(bytes[7] & 0xFF)); + + this.low = ((long)(bytes[8] & 0xFF) << 56) | + ((long)(bytes[9] & 0xFF) << 48) | + ((long)(bytes[10] & 0xFF) << 40) | + ((long)(bytes[11] & 0xFF) << 32) | + ((long)(bytes[12] & 0xFF) << 24) | + ((long)(bytes[13] & 0xFF) << 16) | + ((long)(bytes[14] & 0xFF) << 8) | + ((long)(bytes[15] & 0xFF)); + } + + /** + * 从两个long创建IPv6地址 + */ + public static IPv6Address valueOf(long high, long low) { + return new IPv6Address(high, low); + } + + /** + * 从byte[16]创建IPv6地址(高性能版本) + */ + public static IPv6Address valueOf(byte[] bytes) { + return new IPv6Address(bytes); + } + + /** + * 从ByteBuffer创建IPv6地址(零拷贝友好) + */ + public static IPv6Address valueOf(ByteBuffer buffer) { + if (buffer.remaining() < 16) { + throw new IllegalArgumentException("Buffer must have at least 16 bytes remaining"); + } + + long high = buffer.getLong(); + long low = buffer.getLong(); + return valueOf(high, low); + } + + + public static IPv6Address valueOf(int offset, ByteBuffer buffer) { + long high = buffer.getLong(offset); + long low = buffer.getLong(offset+8); + return valueOf(high, low); + } + + /** + * 从字符串解析IPv6地址(高性能版本) + * @throws UnknownHostException + */ + public static IPv6Address valueOf(String ipString) throws UnknownHostException { + if (ipString == null || ipString.isEmpty()) { + throw new IllegalArgumentException("Invalid IPv6 address string"); + } + + return new IPv6Address((Inet6Address)Inet6Address.getByName(ipString)); + + } + + /** + * 从Java InetAddress转换 + */ + public static IPv6Address valueOf(InetAddress inetAddress) { + if (inetAddress == null) { + throw new IllegalArgumentException("InetAddress cannot be null"); + } + + byte[] bytes = inetAddress.getAddress(); + if (bytes.length == 4) { + // IPv4地址,转换为IPv4映射的IPv6地址 + return valueOf(IPV4_MAPPED_HIGH, + IPV4_MAPPED_LOW_PREFIX | + (((long)(bytes[0] & 0xFF) << 24) | + ((bytes[1] & 0xFF) << 16) | + ((bytes[2] & 0xFF) << 8) | + (bytes[3] & 0xFF))); + } + + return valueOf(bytes); + } + + // 核心getter方法 + public long getHigh() { + return high; + } + + public long getLow() { + return low; + } + + /** + * 转换为byte[16](需要时使用) + */ + public byte[] toByteArray() { + byte[] bytes = new byte[16]; + toByteArray(bytes, 0); + return bytes; + } + + /** + * 写入到现有byte数组(避免创建新对象) + */ + public void toByteArray(byte[] dest, int offset) { + if (dest.length - offset < 16) { + throw new IllegalArgumentException("Destination array too small"); + } + + dest[offset] = (byte) (high >> 56); + dest[offset + 1] = (byte) (high >> 48); + dest[offset + 2] = (byte) (high >> 40); + dest[offset + 3] = (byte) (high >> 32); + dest[offset + 4] = (byte) (high >> 24); + dest[offset + 5] = (byte) (high >> 16); + dest[offset + 6] = (byte) (high >> 8); + dest[offset + 7] = (byte) high; + + dest[offset + 8] = (byte) (low >> 56); + dest[offset + 9] = (byte) (low >> 48); + dest[offset + 10] = (byte) (low >> 40); + dest[offset + 11] = (byte) (low >> 32); + dest[offset + 12] = (byte) (low >> 24); + dest[offset + 13] = (byte) (low >> 16); + dest[offset + 14] = (byte) (low >> 8); + dest[offset + 15] = (byte) low; + } + + /** + * 写入到ByteBuffer(高性能网络操作) + */ + public void writeTo(ByteBuffer buffer) { + buffer.putLong(high); + buffer.putLong(low); + } + + + public void writeTo(int offset, ByteBuffer buffer) { + buffer.putLong(offset,high); + buffer.putLong(offset+8,low); + } + /** + * 转换为标准IPv6字符串表示 + */ + @Override + public String toString() { + try { + return Inet6Address.getByAddress(toByteArray()).getHostAddress(); + } catch (UnknownHostException e) { + return "Internal Error"; + } + } + + /** + * 转换为压缩形式的字符串(::格式) + */ + public String toCompressedString() { + return KLALBUtils.parseAbbrIPv6(toString()); + } + + /** + * 检查是否为IPv4映射地址 + */ + public boolean isIPv4MappedAddress() { + return high == IPV4_MAPPED_HIGH && + (low & 0x0000_0000_FFFF_0000L) == IPV4_MAPPED_LOW_PREFIX; + } + + /** + * 如果这是IPv4映射地址,提取IPv4部分 + */ + public byte[] getIPv4Bytes() { + if (!isIPv4MappedAddress()) { + throw new IllegalStateException("Not an IPv4 mapped address"); + } + + byte[] ipv4 = new byte[4]; + ipv4[0] = (byte) (low >> 24); + ipv4[1] = (byte) (low >> 16); + ipv4[2] = (byte) (low >> 8); + ipv4[3] = (byte) low; + + return ipv4; + } + + /** + * 检查是否为多播地址 + */ + public boolean isMulticastAddress() { + return (high & 0xFF00_0000_0000_0000L) == 0xFF00_0000_0000_0000L; + } + + /** + * 检查是否为链路本地地址 + */ + public boolean isLinkLocalAddress() { + return (high & 0xFFC0_0000_0000_0000L) == 0xFE80_0000_0000_0000L; + } + + /** + * 检查是否为站点本地地址(已弃用,但为了兼容性保留) + */ + public boolean isSiteLocalAddress() { + return (high & 0xFFC0_0000_0000_0000L) == 0xFEC0_0000_0000_0000L; + } + + /** + * 检查是否为唯一本地地址 (ULA) + */ + public boolean isUniqueLocalAddress() { + return (high & 0xFE00_0000_0000_0000L) == 0xFC00_0000_0000_0000L; + } + + /** + * 检查是否为环回地址 + */ + public boolean isLoopbackAddress() { + return this.equals(LOOPBACK); + } + + /** + * 检查是否为未指定地址 + */ + public boolean isUnspecifiedAddress() { + return this.equals(UNSPECIFIED); + } + + /** + * 获取多播地址的scope + */ + public int getMulticastScope() { + if (!isMulticastAddress()) { + return -1; + } + return (int) ((low >> 48) & 0x0F); + } + + // 路由表相关的实用方法 + + /** + * 创建掩码(用于CIDR表示法) + */ + public static IPv6Address createMask(int prefixLength) { + if (prefixLength < 0 || prefixLength > 128) { + throw new IllegalArgumentException("Prefix length must be between 0 and 128"); + } + + long maskHigh, maskLow; + if (prefixLength == 128) { + maskHigh = -1L; // 0xFFFFFFFF_FFFFFFFF + maskLow = -1L; + } else if (prefixLength > 64) { + maskHigh = -1L; + maskLow = (-1L) << (64 - (prefixLength - 64)); + } else if (prefixLength == 64) { + maskHigh = -1L; + maskLow = 0; + } else { + maskHigh = (-1L) << (64 - prefixLength); + maskLow = 0; + } + + return valueOf(maskHigh, maskLow); + } + + /** + * 应用掩码(用于网络地址计算) + */ + public IPv6Address maskWith(IPv6Address mask) { + return valueOf(high & mask.high, low & mask.low); + } + + /** + * 检查地址是否在指定网络内 + */ + public boolean isInNetwork(IPv6Address network, IPv6Address mask) { + IPv6Address maskedThis = this.maskWith(mask); + IPv6Address maskedNetwork = network.maskWith(mask); + return maskedThis.equals(maskedNetwork); + } + + /** + * 检查地址是否在指定CIDR网络内 + */ + public boolean isInNetwork(IPv6Address network, int prefixLength) { + IPv6Address mask = createMask(prefixLength); + return isInNetwork(network, mask); + } + + // 比较和哈希 + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + + IPv6Address other = (IPv6Address) obj; + return high == other.high && low == other.low; + } + + @Override + public int hashCode() { + // 优化的哈希计算,考虑long的分布 + return (int) (high ^ (high >>> 32) ^ low ^ (low >>> 32)); + } + + @Override + public int compareTo(IPv6Address other) { + int highCompare = Long.compareUnsigned(high, other.high); + if (highCompare != 0) return highCompare; + return Long.compareUnsigned(low, other.low); + } + + public static void main(String[] args) throws UnknownHostException { + // 创建IPv6地址 + IPv6Address addr1 = IPv6Address.valueOf("2001:db8::1"); + IPv6Address addr2 = IPv6Address.valueOf(0x20010DB800000000L, 0x0000000000000001L); + + // 高性能路由表查找 + IPv6Address target = IPv6Address.valueOf("2001:db8:1234::5678"); + IPv6Address network = IPv6Address.valueOf("2001:db8:1234::"); + int prefixLength = 64; + + if (target.isInNetwork(network, prefixLength)) { + System.out.println("地址在目标网络内"); + } + + // 转换为字节数组(需要时) + byte[] bytes = addr1.toByteArray(); + + // 直接写入ByteBuffer(零拷贝) + ByteBuffer buffer = ByteBuffer.allocateDirect(16); + addr1.writeTo(buffer); + + } + + public Inet6Address toInet6Address() { + try { + return (Inet6Address) Inet6Address.getByAddress(toByteArray()); + } catch (UnknownHostException e) { + return null; + } + } + + public boolean isAnyLocalAddress() { + return high==0&&low==0; + } + + + +} \ No newline at end of file diff --git a/src/org/kne/cloud/network/ipv6/IPv6AddressGroup.java b/src/org/kne/cloud/network/ipv6/IPv6AddressGroup.java new file mode 100644 index 0000000..10a059f --- /dev/null +++ b/src/org/kne/cloud/network/ipv6/IPv6AddressGroup.java @@ -0,0 +1,73 @@ +package org.kne.cloud.network.ipv6; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.Arrays; +import java.util.Objects; +import java.util.UUID; + +public class IPv6AddressGroup implements Comparable{ + + public IPv6AddressGroup(IPv6Address address) { + this(address, 128); + } + @Override + public String toString() { + return address+"/"+prefixLength; + } + @Override + public int hashCode() { + return Objects.hash(address, prefixLength); + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + IPv6AddressGroup other = (IPv6AddressGroup) obj; + return Objects.equals(address, other.address) && prefixLength == other.prefixLength; + } + public IPv6AddressGroup(IPv6Address address, int prefixLength) { + super(); + this.address = address; + this.prefixLength = prefixLength; + } + public IPv6AddressGroup(DataInputStream in) throws IOException { + readFromStream(in); + } + private IPv6Address address; + private int prefixLength=128; + public IPv6Address getAddress() { + return address; + } + public int getPrefixLength() { + return prefixLength; + } + + @Override + public int compareTo(IPv6AddressGroup o) { + return -Integer.compare(prefixLength, o.prefixLength); + } + public void writeToStream(DataOutputStream out) throws IOException { + out.writeLong(address.getHigh()); + out.writeLong(address.getLow()); + out.write(prefixLength); + } + public void readFromStream(DataInputStream in) throws IOException { + long high=in.readLong(); + long low=in.readLong(); + address=new IPv6Address(high,low); + prefixLength=in.read(); + } + public boolean checkMatch(IPv6Address address2) { + return address2.equals(address.maskWith(IPv6Address.createMask(prefixLength))); + } + +} diff --git a/src/org/kne/cloud/network/ipv6/IPv6HopByHopTLV.java b/src/org/kne/cloud/network/ipv6/IPv6HopByHopTLV.java index 9c8e9ad..6622418 100644 --- a/src/org/kne/cloud/network/ipv6/IPv6HopByHopTLV.java +++ b/src/org/kne/cloud/network/ipv6/IPv6HopByHopTLV.java @@ -13,6 +13,8 @@ public class IPv6HopByHopTLV extends TLV { public static final int PADN = 1; public static final int JUMBO_PAYLOAD = 0xC2; public static final int ROUTER_ALERT = 0x05; + public static final int KLALB_OAM = 0x3E; + public static final int KLALB_PASSPORT = 0x1E; public IPv6HopByHopTLV(ByteBuffer header) { this(header, true); @@ -62,6 +64,16 @@ public class IPv6HopByHopTLV extends TLV { htlv = new JumboPayloadHopByHopTLV(bbf, true); htlv.readFromChannel(din, 0); return htlv; + case KLALB_OAM: + // KLALB OAM + htlv = new KLALBOAMHopByHopTLV(bbf); + htlv.readFromChannel(din, 0); + return htlv; + case KLALB_PASSPORT: + // KLALB Passport + htlv = new KLALBPassportHopByHopTLV(bbf); + htlv.readFromChannel(din, 0); + return htlv; default: // 未知类型: 假设有数据部分 htlv = new IPv6HopByHopTLV(bbf, true); diff --git a/src/org/kne/cloud/network/ipv6/IPv6NetworkLink.java b/src/org/kne/cloud/network/ipv6/IPv6NetworkLink.java index 93f3d51..5fa2c4a 100644 --- a/src/org/kne/cloud/network/ipv6/IPv6NetworkLink.java +++ b/src/org/kne/cloud/network/ipv6/IPv6NetworkLink.java @@ -5,29 +5,29 @@ import java.net.Inet6Address; import java.util.*; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; +import java.util.function.BiConsumer; import java.util.function.Consumer; +import java.util.function.Supplier; import org.kne.cloud.network.ipv6.IPv6Packet; import org.kne.cloud.network.klalb.KLALBPacket; import org.kne.cloud.network.monitor.MonitorData; import org.kne.cloud.network.monitor.SpeedAndTrafficAndDelayMonitorDataImpl; +import org.kne.cloud.network.srv6.SRv6Router; public interface IPv6NetworkLink { + public SRv6Router getSrv6Router() ; + + public void setSRv6Router(SRv6Router srv6Router) ; public boolean isLoopBack(); - public List getAddressGroups(); + public List getAddressGroups(); public List getNeighborsInfo(); public List getRouteItems(); - public void sendPacket(IPv6Packet pack, Inet6Address inet6Address) throws IOException; - public boolean isCongress(IPv6Packet iPv6Packet,double scale); - public default boolean isCongress(IPv6Packet iPv6Packet) { - return isCongress(iPv6Packet, 1.0); - } + public void sendPacket(IPv6Packet pack, IPv6Address inet6Address) throws IOException; public String getName(); public boolean isUp(); - public void setReceiveConsumer(Consumercon); - void setRerouteConsumer(Consumer rerouteConsumer); - public boolean isReachSpeedLimit(IPv6Packet iPv6Packet); - public void setCongressCondition(Lock lock,Condition condition); + public void setReceiveConsumer(BiConsumer> srhReceive); public void addIPv6LinkStateListener(IPv6LinkStateListener listener); public void removeIPv6LinkStateListener(IPv6LinkStateListener listener); + } diff --git a/src/org/kne/cloud/network/ipv6/IPv6Packet.java b/src/org/kne/cloud/network/ipv6/IPv6Packet.java index 02390e7..ab94b65 100644 --- a/src/org/kne/cloud/network/ipv6/IPv6Packet.java +++ b/src/org/kne/cloud/network/ipv6/IPv6Packet.java @@ -12,6 +12,7 @@ import java.nio.channels.WritableByteChannel; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -35,6 +36,8 @@ import org.pcap4j.packet.namednumber.IpNumber; */ public class IPv6Packet extends NetworkPacket { + private static final boolean debug=false; + // ==================== IPv6扩展头类型 ==================== /** 逐跳选项头 - RFC 8200 */ @@ -238,17 +241,6 @@ public class IPv6Packet extends NetworkPacket { this.previousLink = previousLink; } - // 流序列标记,用于标识数据包在流中的顺序 - private long flowSeqMark = -1; - - public long getFlowSeqMark() { - return flowSeqMark; - } - - public void setFlowSeqMark(long flowSeqMark) { - this.flowSeqMark = flowSeqMark; - } - // TTL是否已减少的标志 private boolean TTLdecreased = false; @@ -261,14 +253,19 @@ public class IPv6Packet extends NetworkPacket { } // IPv6头部数据缓冲区 - private volatile ByteBuffer IPv6header; + private ByteBuffer IPv6header; + private IPv6HopByHopHeader hopByHopHeader; + + private IPv6RoutingHeader routingHeader; + // IPv6扩展头部列表 - private volatile List headers = new ArrayList<>(); + private List headers = new ArrayList<>(); // IPv6负载数据 private IPv6Payload payload; + // IPv6头部固定长度 public static final int IPv6_HEADER_LENGTH = 40; @@ -289,7 +286,6 @@ public class IPv6Packet extends NetworkPacket { */ public IPv6Packet() { IPv6header = NetworkPacket.bufferAllocator.allocate(IPv6_HEADER_LENGTH); - IPv6header.limit(IPv6_HEADER_LENGTH); } /** @@ -354,7 +350,7 @@ public class IPv6Packet extends NetworkPacket { */ public void markCE() { IPv6header.put(1, (byte) (IPv6header.get(1) | 0b00110000)); - // new Exception().printStackTrace(); + // new Exception().printStackTrace(); } /** @@ -434,7 +430,7 @@ public class IPv6Packet extends NetworkPacket { * 获取原始源地址字节数组 * @param sourceAddress 用于存储源地址的字节数组 */ - public void getRawSourceAddress(byte[] sourceAddress) { + public void getRawSourceAddressArray(byte[] sourceAddress) { IPv6header.get(SOURCE_ADDRESS_OFFSET, sourceAddress, 0, sourceAddress.length); } @@ -442,21 +438,15 @@ public class IPv6Packet extends NetworkPacket { * 设置原始源地址字节数组 * @param sourceAddress 源地址字节数组 */ - public void setRawSourceAddress(byte[] sourceAddress) { + public void setRawSourceAddressArray(byte[] sourceAddress) { IPv6header.put(SOURCE_ADDRESS_OFFSET, sourceAddress, 0, sourceAddress.length); } - public IPv6RouteTableKey getSourceRouteTableKey() { - long most=IPv6header.getLong(SOURCE_ADDRESS_OFFSET); - long least=IPv6header.getLong(SOURCE_ADDRESS_OFFSET+8); - return new IPv6RouteTableKey(most, least); - } - /** * 获取原始目标地址字节数组 * @param destinationAddress 用于存储目标地址的字节数组 */ - public void getRawDestinationAddress(byte[] destinationAddress) { + public void getRawDestinationAddressArray(byte[] destinationAddress) { IPv6header.get(DESTINATION_ADDRESS_OFFSET, destinationAddress, 0, destinationAddress.length); } @@ -465,22 +455,49 @@ public class IPv6Packet extends NetworkPacket { * 设置原始目标地址字节数组 * @param destinationAddress 目标地址字节数组 */ - public void setRawDestinationAddress(byte[] destinationAddress) { + public void setRawDestinationAddressArray(byte[] destinationAddress) { IPv6header.put(DESTINATION_ADDRESS_OFFSET, destinationAddress, 0, destinationAddress.length); } + + /** + * 获取原始源地址字节数组 + * @param sourceAddress 用于存储源地址的字节数组 + * @return + */ + public IPv6Address getSourceAddress() { + return IPv6Address.valueOf(SOURCE_ADDRESS_OFFSET,IPv6header); + } + /** + * 设置原始源地址字节数组 + * @param sourceAddress 源地址字节数组 + */ + public void setSourceAddress(IPv6Address sourceAddress) { + sourceAddress.writeTo(SOURCE_ADDRESS_OFFSET,IPv6header); + } - public IPv6RouteTableKey getDestinationRouteTableKey() { - long most=IPv6header.getLong(DESTINATION_ADDRESS_OFFSET); - long least=IPv6header.getLong(DESTINATION_ADDRESS_OFFSET+8); - return new IPv6RouteTableKey(most, least); - } + + /** + * 获取原始目标地址字节数组 + * @param destinationAddress 用于存储目标地址的字节数组 + */ + public IPv6Address getDestinationAddress() { + return IPv6Address.valueOf(DESTINATION_ADDRESS_OFFSET,IPv6header); + } + + /** + * 设置原始目标地址字节数组 + * @param destinationAddress 目标地址字节数组 + */ + public void setDestinationAddress(IPv6Address destinationAddress) { + destinationAddress.writeTo(DESTINATION_ADDRESS_OFFSET,IPv6header); + } /** * 获取源地址 * @return 源地址 */ - public Inet6Address getSourceAddress() { + public Inet6Address getSourceAddress2() { byte[] b = new byte[IPV6_ADDRESS_LENGTH]; IPv6header.get(SOURCE_ADDRESS_OFFSET, b, 0, b.length); try { @@ -494,7 +511,7 @@ public class IPv6Packet extends NetworkPacket { * 设置源地址 * @param sourceAddress 源地址 */ - public void setSourceAddress(Inet6Address sourceAddress) { + public void setSourceAddress2(Inet6Address sourceAddress) { byte[] b = sourceAddress.getAddress(); IPv6header.put(SOURCE_ADDRESS_OFFSET, b, 0, b.length); } @@ -503,7 +520,7 @@ public class IPv6Packet extends NetworkPacket { * 获取目标地址 * @return 目标地址 */ - public Inet6Address getDestinationAddress() { + public Inet6Address getDestinationAddress2() { byte[] b = new byte[IPV6_ADDRESS_LENGTH]; IPv6header.get(DESTINATION_ADDRESS_OFFSET, b, 0, b.length); try { @@ -517,7 +534,7 @@ public class IPv6Packet extends NetworkPacket { * 设置目标地址 * @param destinationAddress 目标地址 */ - public void setDestinationAddress(Inet6Address destinationAddress) { + public void setDestinationAddress2(Inet6Address destinationAddress) { byte[] b = destinationAddress.getAddress(); IPv6header.put(DESTINATION_ADDRESS_OFFSET, b, 0, b.length); } @@ -539,7 +556,11 @@ public class IPv6Packet extends NetworkPacket { private int calcPayloadLength() { int lth = 0; for (int i = 0; i < headers.size(); i++) { - lth += headers.get(i).getTotalLength(); + int extHeaderLength=(int) headers.get(i).getTotalLength(); + if(extHeaderLength<=0) { + throw new IllegalArgumentException("extHeaderLength:"+extHeaderLength+"<0"); + } + lth += extHeaderLength; } lth += payload.getTotalLength(); return lth; @@ -578,6 +599,9 @@ public class IPv6Packet extends NetworkPacket { exth.writeToChannel(dto); } payload.writeToChannel(dto); + + if(debug) + debug("send"); } /** @@ -607,6 +631,7 @@ public class IPv6Packet extends NetworkPacket { nextheader = ext.getNextHeader(); payloadlength -= ext.getTotalLength(); headers.add(ext); + hopByHopHeader=(IPv6HopByHopHeader) ext; break; case DESTINATION_OPTIONS: // 目标选项头部 ext = new IPv6DestinationHeader(); @@ -637,6 +662,7 @@ public class IPv6Packet extends NetworkPacket { nextheader = ext.getNextHeader(); payloadlength -= ext.getTotalLength(); headers.add(ext); + routingHeader=(IPv6RoutingHeader) ext; break; case FRAGMENT: // 分段头部 ext = new IPv6ExtHeader(nextheader); @@ -666,12 +692,16 @@ public class IPv6Packet extends NetworkPacket { payloadlength -= ext.getTotalLength(); headers.add(ext); break; - + case ICMPv6: + ICMPv6Packet icmp=ICMPv6Packet.readICMPv6PacketFromChannel(din,payloadlength); + icmp.setParent(this); + this.payload=icmp; + break loop; case UDP: // UDP协议 - UDPPacket up=new UDPPacket(); - up.setParent(this); - up.readFromChannel(din,payloadlength); - this.payload=up; + UDPPacket udp=new UDPPacket(); + udp.setParent(this); + udp.readFromChannel(din,payloadlength); + this.payload=udp; break loop; case KLALBPacket.KLALB_PROTOCOL_NUMBER: // KLALB协议 KLALBPacket kp = KLALBPacket.readKLALBPacketFromChannel(din); @@ -689,9 +719,24 @@ public class IPv6Packet extends NetworkPacket { break loop; } } - + if(debug) + debug("recv"); + } + + private void debug(String description) { + StringBuilder sb=new StringBuilder(); + sb.append(description); + sb.append(" total:"); + sb.append(getPayloadLength()); + sb.append(" "); + for (IPv6ExtHeader iPv6ExtHeader : headers) { + sb.append(iPv6ExtHeader.getTotalLength()); + sb.append(' '); + } + if(payload!=null) + sb.append(payload.getTotalLength()); + System.out.println(sb); } - /** * 转换为字符串表示 @@ -1062,7 +1107,7 @@ public class IPv6Packet extends NetworkPacket { */ public static class IPv6SegmentRoutingHeader extends IPv6RoutingHeader { - private final List addresses = new ArrayList(); + private final List addresses = new ArrayList(); private final List tlvs = new ArrayList(); @Override @@ -1083,7 +1128,7 @@ public class IPv6Packet extends NetworkPacket { super(EXT_HEADER_ALIGNMENT, bbf); } - public IPv6SegmentRoutingHeader(List segs) { + public IPv6SegmentRoutingHeader(List segs) { this(); this.addresses.addAll(segs); int ln = addresses.size() - 1; @@ -1115,7 +1160,7 @@ public class IPv6Packet extends NetworkPacket { getData().putShort(6, (short) tag); } - public List getAddresses() { + public List getAddresses() { return addresses; } @@ -1134,9 +1179,12 @@ public class IPv6Packet extends NetworkPacket { setLastEntry(addresses.size() - 1); super.writeToChannel(dto); - for (Inet6Address inet6Address : addresses) { - dto.write(ByteBuffer.wrap(inet6Address.getAddress())); + ByteBuffer addr=NetworkPacket.bufferAllocator.allocateHeap(addresses.size() *IPV6_ADDRESS_LENGTH); + for (IPv6Address inet6Address : addresses) { + inet6Address.writeTo(addr); } + addr.flip(); + dto.write(addr); for (IPv6SegmentRoutingTLV tlv : tlvs) { IPv6SegmentRoutingTLV.writeIPv6SegmentRoutingTLVToChannel(dto, tlv); } @@ -1200,15 +1248,12 @@ public class IPv6Packet extends NetworkPacket { } addresses.clear(); - bfr = NetworkPacket.bufferAllocator.allocateHeap(IPV6_ADDRESS_LENGTH); - - for (int i = 0; i <= laste; i++) { // 注意:应该是 <= laste - bfr.clear(); - KNEChannels.readFully(din, bfr); - bfr.flip(); + bfr = NetworkPacket.bufferAllocator.allocateHeap(IPV6_ADDRESS_LENGTH*(laste+1)); + KNEChannels.readFully(din, bfr); + bfr.flip(); usdl += bfr.limit(); - Inet6Address addr = (Inet6Address) Inet6Address.getByAddress(bfr.array()); - addresses.add(addr); + for (int i = 0; i <= laste; i++) { // 注意:应该是 <= laste + addresses.add(IPv6Address.valueOf(bfr)); } tlvs.clear(); @@ -1290,38 +1335,59 @@ public class IPv6Packet extends NetworkPacket { * @return IPv6段逐跳头部,如果不存在则返回null */ public IPv6HopByHopHeader getHopByHopHeader() { - IPv6HopByHopHeader hoph = null; - List exhs = headers; - for (int j = 0; j < exhs.size(); j++) { - IPv6ExtHeader exh = exhs.get(j); - if (exh instanceof IPv6HopByHopHeader) { - hoph=(IPv6HopByHopHeader) exh; - break; - } - } - return hoph; + return hopByHopHeader; + } + /** + * 获取路由头部 + * @return 路由头部,如果不存在则返回null + */ + public IPv6RoutingHeader getRoutingHeader() { + return routingHeader; } - /** + + + public void setHopByHopHeader(IPv6HopByHopHeader hopByHopHeader) { + this.hopByHopHeader = hopByHopHeader; + } + + public void setRoutingHeader(IPv6RoutingHeader routingHeader) { + this.routingHeader = routingHeader; + } + + /** * 获取SRv6段路由头部 * @return SRv6段路由头部,如果不存在则返回null */ - public IPv6SegmentRoutingHeader getSRHHeader() { - IPv6SegmentRoutingHeader srhh = null; - List exhs = headers; - for (int j = 0; j < exhs.size(); j++) { - IPv6ExtHeader exh = exhs.get(j); - if (exh instanceof IPv6SegmentRoutingHeader) { - if (((IPv6SegmentRoutingHeader) exh).getRoutingType() == SRV6_ROUTING_TYPE) { - srhh = (IPv6SegmentRoutingHeader) exh; - break; + public IPv6SegmentRoutingHeader getSegmentRoutingHeader() { + IPv6RoutingHeader rh=getRoutingHeader(); + if(rh==null) + return null; + IPv6SegmentRoutingHeader srhh=null; + if (rh instanceof IPv6SegmentRoutingHeader) { + if (((IPv6SegmentRoutingHeader) rh).getRoutingType() == SRV6_ROUTING_TYPE) { + srhh = (IPv6SegmentRoutingHeader) rh; } } - } + return srhh; } + + public UUID getPacketID() { + IPv6HopByHopHeader hop=getHopByHopHeader(); + if(hop==null) + return null; + List tlvs= hop.getTlvs(); + for(IPv6HopByHopTLV tlv:tlvs) { + if(tlv instanceof KLALBOAMHopByHopTLV) + return ((KLALBOAMHopByHopTLV)tlv).getUUID(); + } + return null; + } + + @Override protected boolean needEndPosition() { return false; @@ -1334,16 +1400,21 @@ public class IPv6Packet extends NetworkPacket { return rerouteCounter; } - // 承诺标志,用于某种状态跟踪 - private volatile boolean promise = true; + public long calculateAddressChecksum() { + long sum=0; + + ByteBuffer dataCopy = IPv6header.slice(SOURCE_ADDRESS_OFFSET,32); + + while (dataCopy.remaining() >= 2) { + sum += dataCopy.getChar(); + } + + if (dataCopy.remaining() == 1) { + sum += (dataCopy.get() & 0xFF) << 8; + } + return sum; + } - public void setPromise(boolean b) { - promise = b; - } - - public boolean isPromise() { - return promise; - } diff --git a/src/org/kne/cloud/network/ipv6/IPv6RouteTableKey.java b/src/org/kne/cloud/network/ipv6/IPv6RouteTableKey.java deleted file mode 100644 index 0914cc3..0000000 --- a/src/org/kne/cloud/network/ipv6/IPv6RouteTableKey.java +++ /dev/null @@ -1,305 +0,0 @@ -package org.kne.cloud.network.ipv6; - -import java.net.Inet6Address; -import java.util.Objects; - -public class IPv6RouteTableKey { - private long most; - private long least; - - public IPv6RouteTableKey(byte[] address) { - long[] l = inet6AddressToLongs(address); - this.most = l[0]; - this.least = l[1]; // 修复:应该是 l[1] 而不是 l[0] - } - - public IPv6RouteTableKey(long most, long least) { - super(); - this.most = most; - this.least = least; - } - - public IPv6RouteTableKey(Inet6Address address) { - this(address.getAddress()); - } - - public IPv6RouteTableKey(Inet6AddressGroup address) { - this(address.getAddress()); - applyMask(address.getPrefixLength()); - } - - public long getMost() { - return most; - } - - public long getLeast() { - return least; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (int) (least ^ (least >>> 32)); - result = prime * result + (int) (most ^ (most >>> 32)); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - IPv6RouteTableKey other = (IPv6RouteTableKey) obj; - if (least != other.least) - return false; - if (most != other.most) - return false; - return true; - } - - - /** - * 根据前缀长度应用掩码,仅保留网络部分 - * @param prefixLength 前缀长度 (0-128) - * @return 应用掩码后的新 IPv6RouteTableKey 对象 - */ - public IPv6RouteTableKey mask(int prefixLength) { - if (prefixLength < 0 || prefixLength > 128) { - throw new IllegalArgumentException("前缀长度必须在 0 到 128 之间"); - } - - if (prefixLength == 0) { - return new IPv6RouteTableKey(0L, 0L); // 默认路由 - } - - long maskedMost = this.most; - long maskedLeast = this.least; - - if (prefixLength <= 64) { - // 仅影响高位 - long mask = createMask(prefixLength); - maskedMost &= mask; - maskedLeast = 0L; // 低位全部清零 - } else { - // 影响高位和部分低位 - int lowPrefixLength = prefixLength - 64; - long lowMask = createMask(lowPrefixLength); - maskedLeast &= lowMask; - // 高位保持不变 - } - - return new IPv6RouteTableKey(maskedMost, maskedLeast); - } - - - /** - * 根据前缀长度应用掩码,仅保留网络部分 - * @param prefixLength 前缀长度 (0-128) - * @return 应用掩码后的新 IPv6RouteTableKey 对象 - */ - public void applyMask(int prefixLength) { - if (prefixLength < 0 || prefixLength > 128) { - throw new IllegalArgumentException("前缀长度必须在 0 到 128 之间"); - } - - if (prefixLength == 0) { - this.most=0; - this.least=0; - return; - //return new IPv6RouteTableKey(0L, 0L); // 默认路由 - } - - long maskedMost = this.most; - long maskedLeast = this.least; - - if (prefixLength <= 64) { - // 仅影响高位 - long mask = createMask(prefixLength); - maskedMost &= mask; - maskedLeast = 0L; // 低位全部清零 - } else { - // 影响高位和部分低位 - int lowPrefixLength = prefixLength - 64; - long lowMask = createMask(lowPrefixLength); - maskedLeast &= lowMask; - // 高位保持不变 - } - this.most=maskedMost; - this.least=maskedLeast; - // return new IPv6RouteTableKey(maskedMost, maskedLeast); - } - - /** - * 创建指定长度的掩码 - * @param bits 要保留的位数 (0-64) - * @return 掩码值 - */ - private long createMask(int bits) { - // 使用查表法,预先计算所有可能的掩码值 - return MASK_TABLE[bits]; - } - - // 预计算的掩码表 - private static final long[] MASK_TABLE = new long[65]; // 0-64 共65个值 - - // 静态初始化块,在类加载时预计算所有掩码值 - static { - for (int bits = 0; bits <= 64; bits++) { - if (bits == 0) { - MASK_TABLE[bits] = 0L; - } else if (bits == 64) { - MASK_TABLE[bits] = -1L; - } else { - MASK_TABLE[bits] = (-1L) << (64 - bits); - } - } - } - - /** - * 将 byte[] 转换为两个 long 值(高位和低位) - * @param bytes 16字节的IPv6地址 - * @return 包含两个long值的数组,第一个是高位,第二个是低位 - */ - public static long[] inet6AddressToLongs(byte[] bytes) { - if (bytes.length != 16) { - throw new IllegalArgumentException("IPv6地址必须是16字节"); - } - - long high = 0; - long low = 0; - - // 处理前8字节(高位) - for (int i = 0; i < 8; i++) { - high = (high << 8) | (bytes[i] & 0xFF); - } - - // 处理后8字节(低位) - for (int i = 8; i < 16; i++) { - low = (low << 8) | (bytes[i] & 0xFF); - } - - return new long[]{high, low}; - } - - /** - * 将两个long值转换回byte[] - * @param high 高位long值 - * @param low 低位long值 - * @return 16字节的IPv6地址 - */ - public static byte[] longsToInet6Address(long high, long low) { - byte[] bytes = new byte[16]; - - // 提取高位的8个字节 - for (int i = 0; i < 8; i++) { - bytes[i] = (byte) ((high >> (56 - i * 8)) & 0xFF); - } - - // 提取低位的8个字节 - for (int i = 0; i < 8; i++) { - bytes[8 + i] = (byte) ((low >> (56 - i * 8)) & 0xFF); - } - - return bytes; - } - - @Override - public String toString() { - return String.format("%016x:%016x", most, least); - } - - /** - * 单元测试 - */ - public static void main(String[] args) { - for(int i=0;i<65;i++) { - long l=MASK_TABLE[i]; - System.out.println(Long.toUnsignedString(l, 16)); - } - - System.out.println("开始 IPv6RouteTableKey 单元测试..."); - - // 测试1: 基本转换测试 - System.out.println("\n1. 测试基本转换:"); - byte[] testAddress = new byte[16]; - // 创建测试地址: 2001:0db8:85a3::8a2e:0370:7334 - testAddress[0] = 0x20; testAddress[1] = 0x01; - testAddress[2] = 0x0d; testAddress[3] = (byte) 0xb8; - testAddress[4] = (byte) 0x85; testAddress[5] = (byte) 0xa3; - // 中间部分为0 - testAddress[12] = (byte) 0x8a; testAddress[13] = 0x2e; - testAddress[14] = 0x03; testAddress[15] = 0x70; - // testAddress[16] = 0x73; testAddress[17] = 0x34; // 注意: 数组只有16个元素 - - IPv6RouteTableKey key = new IPv6RouteTableKey(testAddress); - System.out.println("原始地址: " + key); - - // 测试2: 掩码应用测试 - System.out.println("\n2. 测试掩码应用:"); - IPv6RouteTableKey masked64 = key.mask(64); - System.out.println("/64 掩码: " + masked64); - - IPv6RouteTableKey masked48 = key.mask(48); - System.out.println("/48 掩码: " + masked48); - - IPv6RouteTableKey masked128 = key.mask(128); - System.out.println("/128 掩码: " + masked128); - - IPv6RouteTableKey masked0 = key.mask(0); - System.out.println("/0 掩码: " + masked0); - - // 测试3: 相等性测试 - System.out.println("\n3. 测试相等性:"); - IPv6RouteTableKey key2 = new IPv6RouteTableKey(testAddress); - System.out.println("相同地址是否相等: " + key.equals(key2)); - System.out.println("哈希码是否相同: " + (key.hashCode() == key2.hashCode())); - - // 测试4: 转换函数测试 - System.out.println("\n4. 测试转换函数:"); - long[] longs = inet6AddressToLongs(testAddress); - System.out.println("转换为longs: " + Long.toHexString(longs[0]) + ":" + Long.toHexString(longs[1])); - - byte[] reconverted = longsToInet6Address(longs[0], longs[1]); - boolean conversionOk = true; - for (int i = 0; i < 16; i++) { - if (testAddress[i] != reconverted[i]) { - conversionOk = false; - break; - } - } - System.out.println("转换是否可逆: " + conversionOk); - - // 测试5: 边界条件测试 - System.out.println("\n5. 测试边界条件:"); - try { - key.applyMask(-1); - System.out.println("错误: 应该抛出异常"); - } catch (IllegalArgumentException e) { - System.out.println("正确: 负前缀长度抛出异常"); - } - - try { - key.applyMask(129); - System.out.println("错误: 应该抛出异常"); - } catch (IllegalArgumentException e) { - System.out.println("正确: 过大前缀长度抛出异常"); - } - - // 测试6: 全零和全一地址测试 - System.out.println("\n6. 测试特殊地址:"); - byte[] allZeros = new byte[16]; - IPv6RouteTableKey zeroKey = new IPv6RouteTableKey(allZeros); - System.out.println("全零地址: " + zeroKey); - - byte[] allOnes = new byte[16]; - for (int i = 0; i < 16; i++) allOnes[i] = (byte) 0xFF; - IPv6RouteTableKey onesKey = new IPv6RouteTableKey(allOnes); - System.out.println("全一地址: " + onesKey); - - System.out.println("\n所有测试完成!"); - } -} \ No newline at end of file diff --git a/src/org/kne/cloud/network/ipv6/IPv6TUNLoopbackNetworkLink.java b/src/org/kne/cloud/network/ipv6/IPv6TUNLoopbackNetworkLink.java index 68d9296..fbd3cd6 100644 --- a/src/org/kne/cloud/network/ipv6/IPv6TUNLoopbackNetworkLink.java +++ b/src/org/kne/cloud/network/ipv6/IPv6TUNLoopbackNetworkLink.java @@ -2,156 +2,147 @@ package org.kne.cloud.network.ipv6; import java.io.Closeable; import java.io.IOException; -import java.net.Inet6Address; import java.net.InetAddress; import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.HashMap; import java.util.Iterator; import java.util.List; -import java.util.Map; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArraySet; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.LockSupport; -import java.util.concurrent.locks.ReentrantLock; -import java.util.function.Consumer; +import java.util.function.BiConsumer; +import java.util.function.Supplier; import org.kne.cloud.network.NetworkPacket; +import org.kne.cloud.network.ipv6.IPv6Packet.IPv6HopByHopHeader; import org.kne.cloud.network.ipv6.IPv6Packet.IPv6SegmentRoutingHeader; -import org.kne.cloud.network.monitor.MonitorData; +import org.kne.cloud.network.klalb.CONST; import org.kne.cloud.network.monitor.SpeedAndTrafficMonitorDataImpl; +import org.kne.cloud.network.srv6.DetNetSRv6TLV; import org.kne.cloud.network.srv6.IPv6SegmentRoutingTLV; import org.kne.cloud.network.srv6.IpV6RoutingSRHData; import org.kne.cloud.network.srv6.PacketConsumer; -import org.kne.cloud.network.srv6.PacketReorder; -import org.kne.cloud.network.srv6.SEQSSegmentRoutingTLV; import org.kne.cloud.network.srv6.SRv6PacketReorder; -import org.kne.cloud.network.srv6.SRv6PacketSeqMarker; +import org.kne.cloud.network.srv6.SRv6Router; import org.kne.cloud.network.srv6.SRv6StreamSequenceTLV; import org.kne.cloud.network.srv6.SRv6TLV; -import org.kne.cloud.network.srv6.TCPTransimitAgent; +import org.kne.cloud.network.tun.InetAddressRow; +import org.kne.cloud.network.tun.TUNChannel; import org.kne.cloud.network.tun.TUNNetworkDevice; -import org.kne.concurrent.DisruptorExecutor; -import org.kne.concurrent.HighPerformanceExecutor; import org.kne.concurrent.SpinLock; import org.kne.io.KNEChannels; -public class IPv6TUNLoopbackNetworkLink extends AbstractIPv6NetworkLink implements IPv6NetworkLink, Closeable, AutoCloseable { +public class IPv6TUNLoopbackNetworkLink extends AbstractIPv6NetworkLink + implements IPv6NetworkLink, Closeable, AutoCloseable { - public static final String KLALB_DECENTRALIZED_S_RV6_NETWORK = "KLALB Decentralized SRv6 Network"; - - public static final String KLALB_S_RV6 = "KLALB SRv6"; private TUNNetworkDevice tun; - private Inet6AddressGroup hostAddress; + private IPv6AddressGroup hostAddress; private Thread tr; - private Lock slok=new SpinLock(); - - private SRv6PacketSeqMarker seqm=new SRv6PacketSeqMarker(); - - public IPv6TUNLoopbackNetworkLink(Inet6AddressGroup hostAddress, int mtu,Listdns) throws IOException { + private Lock slok = new SpinLock(); + + public IPv6TUNLoopbackNetworkLink(String name,IPv6AddressGroup hostAddress, int mtu, List dns) throws IOException { if (tun != null) throw new IllegalStateException("already open!"); try { - tun = TUNNetworkDevice.createDevice(KLALB_S_RV6, KLALB_DECENTRALIZED_S_RV6_NETWORK); - tun.open(); - tun.setStatus(true); - this.hostAddress = hostAddress; - if (hostAddress != null) - tun.setIPAddress(hostAddress.getAddress(), hostAddress.getPrefixLength()); - if(dns!=null) { - tun.setDNSAddress(dns); - } - try { - tun.setMTU(mtu); - }catch(IOException e) { - e.printStackTrace(); - } - Thread tb = new Thread(() -> { - while (true) { - ByteBuffer tmp = NetworkPacket.bufferAllocator.allocateNative(65535); - try { - tun.read(tmp); - tmp.flip(); - //System.out.println(tmp); - if (IPv6Packet.getIPVersion(tmp.get(0)) == 6) { - - HighPerformanceExecutor.defaultExecutor.execute(() -> { + tun = TUNNetworkDevice.createDevice(name, CONST.KLALB_DECENTRALIZED_S_RV6_NETWORK); + this.hostAddress = hostAddress; + if (hostAddress != null) { + Listrows=new ArrayList<>(); + rows.add(new InetAddressRow(hostAddress.getAddress().toInet6Address(), hostAddress.getPrefixLength())); + tun.setIPAddress(rows); + } + if (dns != null) { + tun.setDNSAddress(dns); + } + try { + tun.setMTU(mtu); + } catch (IOException e) { + e.printStackTrace(); + } + + TUNChannel channel= tun.openSession(); + Thread tb = new Thread(() -> { + while (true) { + ByteBuffer tmp = NetworkPacket.bufferAllocator.allocateNative(65535); + try { + channel.read(tmp); + tmp.flip(); + // System.out.println(tmp); + if (IPv6Packet.getIPVersion(tmp.get(0)) == 6) { + try { IPv6Packet ipp = new IPv6Packet(); ipp.readFromChannel(KNEChannels.newReadableChannel(tmp), mtu); - - //NetworkPacket.databufferpool_65535.back(tmp); - if (con != null) { - monitor.getOutPacketCounterAL().add(1); - monitor.getOutTrafficAL().add(ipp.getTotalLength()); - // ipp.setDisposeAfterSend(true); - // ipp.getPayload().setDisposeAfterSend(true); - ipp.setPromise(true); - if(ipp.getPayload().getProtocolNumber()==6) { - seqm.mark(ipp); - } - con.accept(ipp); + // NetworkPacket.databufferpool_65535.back(tmp); + BiConsumer> con = super.getReceiveConsumer(); + if (con != null) { + if (ipp.getPayload().getProtocolNumber() == 6) { + SRv6Router router = getSrv6Router(); + + if (router != null) { + router.insertHopByHopHeader(ipp); + } + } + + con.accept(IPv6TUNLoopbackNetworkLink.this, () -> { + UUID pid = ipp.getPacketID(); + if (pid != null) { + monitor.getUploadBandwidth().recordPacket(pid, (int) ipp.getTotalLength()); + } + // ipp.setDisposeAfterSend(true); + // ipp.getPayload().setDisposeAfterSend(true); + return ipp; + }); } else { - //ipp.dispose(); + // ipp.dispose(); } } catch (IOException e) { e.printStackTrace(); } - }); - }else { - //NetworkPacket.databufferpool_65535.back(tmp); + } else { + // NetworkPacket.databufferpool_65535.back(tmp); + } + } catch (Exception e) { + // NetworkPacket.databufferpool_65535.back(tmp); + e.printStackTrace(); } - } catch (Exception e) { - //NetworkPacket.databufferpool_65535.back(tmp); - e.printStackTrace(); } - } - }); - tb.setPriority(Thread.MAX_PRIORITY-1); - tb.start(); - tr = new Thread(() -> { - while (true) { - ByteBuffer tmp = sendQueue.poll(); - if (tmp != null) { + }); + tb.setPriority(Thread.MAX_PRIORITY - 1); + tb.start(); + tr = new Thread(() -> { + while (true) { + ByteBuffer tmp = sendQueue.poll(); + if (tmp != null) { slok.lock(); try { - tun.write(tmp); + channel.write(tmp); } catch (IOException e) { e.printStackTrace(); - }finally { + } finally { slok.unlock(); - //NetworkPacket.databufferpool_65535.back(tmp); - } - } else { - for(SRv6PacketReorder spr:reorder.values()) { - try { - spr.runOrdering(); - } catch (IOException e) { - e.printStackTrace(); + // NetworkPacket.databufferpool_65535.back(tmp); } + } else { + + LockSupport.parkNanos(1000000L); } - LockSupport.parkNanos(10000000L); + } - - } - }); - tr.setPriority(Thread.MAX_PRIORITY-1); - tr.start(); - - }catch(UnsatisfiedLinkError e) { + }); + tr.setPriority(Thread.MAX_PRIORITY - 1); + tr.start(); + + } catch (UnsatisfiedLinkError e) { throw new IOException(e); } onOnlineStateUpdate(); @@ -159,87 +150,64 @@ public class IPv6TUNLoopbackNetworkLink extends AbstractIPv6NetworkLink implemen private LinkedBlockingQueue sendQueue = new LinkedBlockingQueue(); - private volatile Consumer con; - private SpeedAndTrafficMonitorDataImpl monitor; - private ConcurrentHashMap reorder=new ConcurrentHashMap<>(); - @Override - public void sendPacket(IPv6Packet pack, Inet6Address next) throws IOException { - if (tun != null) { - + public void sendPacket(IPv6Packet pack, IPv6Address next) throws IOException { + if (tun != null) { - - - - try { - // System.out.println("rev"); - IPv6SegmentRoutingHeader srh= pack.getSRHHeader(); - SEQSSegmentRoutingTLV seqs=null; - if(srh!=null) { - List l=srh.getTlvs(); - - for (int i = 0; i < l.size(); i++) { - IPv6SegmentRoutingTLV tlv=l.get(i); - if(tlv instanceof SEQSSegmentRoutingTLV) { - seqs=(SEQSSegmentRoutingTLV) tlv; - break; - } - } - } - - - sendPacket0(pack,seqs); - - } catch (IOException e) { - //NetworkPacket.databufferpool_65535.back(tmp); - e.printStackTrace(); - } + try { - //pack.disposeAll(); - - } else { - //pack.disposeAll(); + IPv6HopByHopHeader hbh = pack.getHopByHopHeader(); + KLALBOAMHopByHopTLV oamtlv = null; + if (hbh != null) { + List ll = hbh.getTlvs(); + + for (int i = 0; i < ll.size(); i++) { + IPv6HopByHopTLV tlv = ll.get(i); + if (tlv instanceof KLALBOAMHopByHopTLV) { + oamtlv = (KLALBOAMHopByHopTLV) tlv; + break; + } + } + } + + IPv6SegmentRoutingHeader srh = pack.getSegmentRoutingHeader(); + DetNetSRv6TLV seqs = null; + if (srh != null) { + List l = srh.getTlvs(); + + for (int i = 0; i < l.size(); i++) { + IPv6SegmentRoutingTLV tlv = l.get(i); + if (tlv instanceof DetNetSRv6TLV) { + seqs = (DetNetSRv6TLV) tlv; + break; + } + } + } + + sendPacket0(pack, oamtlv, seqs); + + } catch (IOException e) { + e.printStackTrace(); } + + } else { + } } - private void sendPacket0(IPv6Packet pack,SEQSSegmentRoutingTLV seqs) throws IOException { + private void sendPacket0(IPv6Packet pack, KLALBOAMHopByHopTLV oamtlv, DetNetSRv6TLV detNet) throws IOException { + - if(seqs!=null&&seqs.isKeepOrder()) { - FlowSession fss=pack.getFlowSession(); - - - SRv6PacketReorder newr= new SRv6PacketReorder(new PacketConsumer() { - - @Override - public boolean accept(IPv6Packet packx) throws IOException { - ByteBuffer tmp = NetworkPacket.bufferAllocator.allocateNative(65535); - packx.writeToChannel(KNEChannels.newWritableChannel(tmp)); - monitor.getInPacketCounterAL().add(1); - monitor.getInTrafficAL().add(packx.getTotalLength()); - tmp.flip(); - sendQueue.add(tmp); - LockSupport.unpark(tr); - return true; - } - }); - SRv6PacketReorder olr=reorder.putIfAbsent(fss,newr); - if(olr==null) { - olr=newr; - } - olr.put(pack,seqs.getSequence()); - - - }else { ByteBuffer tmp = NetworkPacket.bufferAllocator.allocate(65535); pack.writeToChannel(KNEChannels.newWritableChannel(tmp)); - monitor.getInPacketCounterAL().add(1); - monitor.getInTrafficAL().add(pack.getTotalLength()); - tmp.flip(); - sendQueue.add(tmp); - LockSupport.unpark(tr); - } + UUID pid = pack.getPacketID(); + if (pid != null) { + monitor.getUploadBandwidth().recordPacket(pid, (int) pack.getTotalLength()); + } + tmp.flip(); + sendQueue.add(tmp); + LockSupport.unpark(tr); } private SRv6StreamSequenceTLV getStreamSequenceTLV(IpV6RoutingSRHData srh) { @@ -261,15 +229,15 @@ public class IPv6TUNLoopbackNetworkLink extends AbstractIPv6NetworkLink implemen @Override public List getNeighborsInfo() { List hs = new ArrayList<>(); - //if (hostAddress != null) - //hs.put(hostAddress, null); + // if (hostAddress != null) + // hs.put(hostAddress, null); return hs; } - @Override - public boolean isCongress(IPv6Packet iPv6Packet,double scale) { - return sendQueue.size() > 1000*scale; - } + /* + * @Override public boolean isCongress(IPv6Packet iPv6Packet,double scale) { + * return sendQueue.size() > 1000*scale; } + */ @Override public String getName() { @@ -289,11 +257,6 @@ public class IPv6TUNLoopbackNetworkLink extends AbstractIPv6NetworkLink implemen onOnlineStateUpdate(); } - @Override - public void setReceiveConsumer(Consumer con) { - this.con = con; - } - public void setMonitor(SpeedAndTrafficMonitorDataImpl monitor) { this.monitor = monitor; } @@ -303,49 +266,31 @@ public class IPv6TUNLoopbackNetworkLink extends AbstractIPv6NetworkLink implemen } @Override - public List< Inet6AddressGroup> getAddressGroups() { + public List getAddressGroups() { return List.of(hostAddress); } - @Override - public void setRerouteConsumer(Consumer rerouteConsumer) { - - } - @Override public List getRouteItems() { - List rlist=new ArrayList<>(); - - for(Inet6AddressGroup grp:getAddressGroups()) { - rlist.add(new RouteItem(new Inet6AddressGroup(grp.getAddress(), 128), - grp.getAddress(), this, "Direct", 0, 1, null, "D",true)); + List rlist = new ArrayList<>(); + + for (IPv6AddressGroup grp : getAddressGroups()) { + rlist.add(new RouteItem(new IPv6AddressGroup(grp.getAddress(), 128), grp.getAddress(), this, "Direct", 0, 1, + null, "D", true)); } - - for (Iterator iteratorx = getNeighborsInfo() - .iterator(); iteratorx.hasNext();) { + + for (Iterator iteratorx = getNeighborsInfo().iterator(); iteratorx.hasNext();) { Neighbor addresses = (Neighbor) iteratorx.next(); - RouteItem ri = new RouteItem(new Inet6AddressGroup(addresses.getAddress().getAddress(), 128), addresses.getAddress().getAddress(), - this, "Direct", 0, 128, addresses.getMonitor(), "D",false); - rlist.add(ri); - - RouteItem ris = new RouteItem(addresses.getLocator(), (Inet6Address) addresses.getLocator().getAddress(), - this, "KLALB SRv6", 13, 128, addresses.getMonitor(), "D",false); - rlist.add(ris); + RouteItem ri = new RouteItem(new IPv6AddressGroup(addresses.getAddress().getAddress(), 128), + addresses.getAddress().getAddress(), this, "Direct", 0, 128, addresses.getMonitor(), "D", false); + rlist.add(ri); + + RouteItem ris = new RouteItem(addresses.getLocator(), addresses.getLocator().getAddress(), this, + "KLALB SRv6", 13, 128, addresses.getMonitor(), "D", false); + rlist.add(ris); } return rlist; } - @Override - public boolean isReachSpeedLimit(IPv6Packet iPv6Packet) { - return false; - } - - @Override - public void setCongressCondition(Lock lock, Condition condition) { - // TODO 自动生成的方法存根 - - } - - } diff --git a/src/org/kne/cloud/network/ipv6/Inet6AddressGroup.java b/src/org/kne/cloud/network/ipv6/Inet6AddressGroup.java deleted file mode 100644 index e5036ba..0000000 --- a/src/org/kne/cloud/network/ipv6/Inet6AddressGroup.java +++ /dev/null @@ -1,142 +0,0 @@ -package org.kne.cloud.network.ipv6; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.net.Inet6Address; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.Arrays; -import java.util.Objects; -import java.util.UUID; - -public class Inet6AddressGroup implements Comparable{ - private static final byte[][] maskTransf=new byte[129][16]; - static { - for (int i = 0; i < 129; i++) { - for(int j=0;j>>j%8)|maskTransf[i][j/8]); - } - } - /* for (int i = 0; i < maskTransf.length; i++) { - try { - System.out.println(InetAddress.getByAddress(maskTransf[i])); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - }*/ - } - public Inet6AddressGroup(Inet6Address address) { - this(address, 128); - } - @Override - public String toString() { - return address.getHostAddress()+"/"+prefixLength; - } - @Override - public int hashCode() { - return Objects.hash(address, prefixLength); - } - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Inet6AddressGroup other = (Inet6AddressGroup) obj; - return Objects.equals(address, other.address) && prefixLength == other.prefixLength; - } - public Inet6AddressGroup(Inet6Address address, int prefixLength) { - super(); - this.address = address; - this.prefixLength = prefixLength; - } - public Inet6AddressGroup(DataInputStream in) throws IOException { - readFromStream(in); - } - private Inet6Address address; - private int prefixLength=128; - public Inet6Address getAddress() { - return address; - } - public int getPrefixLength() { - return prefixLength; - } - private byte[] cachedRawAddress; - public byte[] getRawAddress() { - if(cachedRawAddress==null) { - return (cachedRawAddress=address.getAddress()); - }else { - return cachedRawAddress; - } - } - private byte[] cachedAndm; - private byte[] getAndm(byte[]mask) { - if(cachedAndm==null) { - return (cachedAndm=and0(mask ,getRawAddress())); - }else { - return cachedAndm; - } - } - public boolean checkMatch(Inet6Address ia) { - byte[]mask=maskTransf[prefixLength]; - byte[]andm=getAndm(mask); - - return andeq0(mask,ia.getAddress(),andm); - } - public boolean checkMatch(byte[] ia) { - byte[]mask=maskTransf[prefixLength]; - byte[]andm=getAndm(mask); - - return andeq0(mask,ia,andm); - } - private static boolean andeq0(byte[] bs, byte[] address2, byte[] andm) { - for (int i = 0; i < bs.length; i++) { - if(andm[i]!=(byte) (bs[i]&address2[i])) { - return false; - } - } - return true; - } - private static byte[] and0(byte[] bs, byte[] address2) { - byte[]rez=new byte[bs.length]; - for (int i = 0; i < rez.length; i++) { - rez[i]=(byte) (bs[i]&address2[i]); - } - return rez; - } - @Override - public int compareTo(Inet6AddressGroup o) { - return -Integer.compare(prefixLength, o.prefixLength); - } - public void writeToStream(DataOutputStream out) throws IOException { - out.write(address.getAddress()); - out.write(prefixLength); - } - public void readFromStream(DataInputStream in) throws IOException { - byte[]b=new byte[16]; - in.readFully(b); - address=(Inet6Address) Inet6Address.getByAddress(b); - prefixLength=in.read(); - } - - public Inet6AddressGroup createPrefixOnlyAddressGroup(int newPrefixLength) { - byte[]mask=maskTransf[newPrefixLength]; - byte[]andm=getAndm(mask); - try { - return new Inet6AddressGroup((Inet6Address) Inet6Address.getByAddress(andm), newPrefixLength); - } catch (UnknownHostException e) { - return null; - } - } - public Inet6AddressGroup createPrefixOnlyAddressGroup() { - return createPrefixOnlyAddressGroup(prefixLength); - } - public static void main(String[] args) throws UnknownHostException { - Inet6AddressGroup i6ag=new Inet6AddressGroup((Inet6Address) Inet6Address.getByName("1234:1234::1234"),12); - System.out.println(i6ag); - System.out.println(i6ag.createPrefixOnlyAddressGroup()); - } -} diff --git a/src/org/kne/cloud/network/ipv6/KLALBOAMHopByHopTLV.java b/src/org/kne/cloud/network/ipv6/KLALBOAMHopByHopTLV.java new file mode 100644 index 0000000..3543623 --- /dev/null +++ b/src/org/kne/cloud/network/ipv6/KLALBOAMHopByHopTLV.java @@ -0,0 +1,180 @@ +package org.kne.cloud.network.ipv6; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.ReadableByteChannel; +import java.nio.channels.WritableByteChannel; +import java.util.UUID; + +public class KLALBOAMHopByHopTLV extends IPv6HopByHopTLV { + + // 标志位掩码定义 - 移除了DetNet相关标志 + public static final int FLAG_RECORD_PASSPORT = 0x01; // 第1位: 记录Passport + public static final int FLAG_POSTCARD_TO_SOURCE = 0x02; // 第2位: 向源地址回传Postcard + public static final int FLAG_POSTCARD_TO_PREV_HOP = 0x04; // 第3位: 向上一跳回传Postcard + + // 保留其他位用于未来扩展 (0x08, 0x10, 0x20, 0x40, 0x80) + + public KLALBOAMHopByHopTLV(ByteBuffer klalbHeader) { + super(klalbHeader); + } + + @Override + public String toString() { + return "KLALBOAMHopByHopTLV [getVersion()=" + getVersion() + ", getFlags()=" + getFlags() + + ", getInitialHops()=" + getInitialHops() + ", getUUID()=" + getUUID() + + ", isRecordPassport()=" + isRecordPassport() + + ", isPostcardToSource()=" + isPostcardToSource() + + ", isPostcardToPreviousHop()=" + isPostcardToPreviousHop() + + "]"; + } + + public KLALBOAMHopByHopTLV(int version, int flags, int initialHops, UUID uuid,long timestamp) { + super(IPv6HopByHopTLV.KLALB_OAM); + setVersion(version); + setFlags(flags); + setInitialHops(initialHops); + getData().put(3, (byte) 0); + getData().put(4, (byte) 0); + getData().put(5, (byte) 0); + setUUID(uuid); + setTimestamp(timestamp); + getData().limit(30); + } + + /** + * 新的构造方法,通过boolean参数设置OAM测量相关的标志位 + * + * @param version 版本号 + * @param initialHops 初始跳数 + * @param recordPassport 是否启用记录Passport + * @param postcardToSource 是否启用向源地址回传Postcard + * @param postcardToPreviousHop 是否启用向上一跳回传Postcard + * @param flowuuid 流UUID + * @param sequence 序列号 + */ + public KLALBOAMHopByHopTLV(int version, int initialHops, boolean recordPassport, boolean postcardToSource, + boolean postcardToPreviousHop, UUID uuid ,long timestamp) { + super(IPv6HopByHopTLV.KLALB_OAM); + + setVersion(version); + setInitialHops(initialHops); + + // 根据boolean参数计算flags值 + int flags = 0; + if (recordPassport) flags |= FLAG_RECORD_PASSPORT; + if (postcardToSource) flags |= FLAG_POSTCARD_TO_SOURCE; + if (postcardToPreviousHop) flags |= FLAG_POSTCARD_TO_PREV_HOP; + + setFlags(flags); + + // 设置保留字段为0 + getData().put(3, (byte) 0); + getData().put(4, (byte) 0); + getData().put(5, (byte) 0); + + setUUID(uuid); + setTimestamp(timestamp); + getData().limit(30); + } + + + + + public int getVersion() { + return getData().get(0) & 0xff; + } + + public void setVersion(int version) { + getData().put(0, (byte) version); + } + + public int getFlags() { + return getData().get(1) & 0xff; + } + + public void setFlags(int flags) { + getData().put(1, (byte) flags); + } + + public int getInitialHops() { + return getData().get(2) & 0xff; + } + + public void setInitialHops(int initialHops) { + getData().put(2, (byte) initialHops); + } + + public void setUUID(UUID uuid) { + getData().putLong(6, uuid.getMostSignificantBits()); + getData().putLong(14, uuid.getLeastSignificantBits()); + } + + public UUID getUUID() { + return new UUID(getData().getLong(6), getData().getLong(14)); + } + + public long getTimestamp() { + return getData().getLong(22); + } + + public void setTimestamp(long sequence) { + getData().putLong(22, sequence); + } + + // 第1位: 记录Passport + public boolean isRecordPassport() { + return (getFlags() & FLAG_RECORD_PASSPORT) != 0; + } + + public void setRecordPassport(boolean enabled) { + int flags = getFlags(); + if (enabled) { + flags |= FLAG_RECORD_PASSPORT; + } else { + flags &= ~FLAG_RECORD_PASSPORT; + } + setFlags(flags); + } + + // 第2位: 向源地址回传Postcard + public boolean isPostcardToSource() { + return (getFlags() & FLAG_POSTCARD_TO_SOURCE) != 0; + } + + public void setPostcardToSource(boolean enabled) { + int flags = getFlags(); + if (enabled) { + flags |= FLAG_POSTCARD_TO_SOURCE; + } else { + flags &= ~FLAG_POSTCARD_TO_SOURCE; + } + setFlags(flags); + } + + // 第3位: 向上一跳回传Postcard + public boolean isPostcardToPreviousHop() { + return (getFlags() & FLAG_POSTCARD_TO_PREV_HOP) != 0; + } + + public void setPostcardToPreviousHop(boolean enabled) { + int flags = getFlags(); + if (enabled) { + flags |= FLAG_POSTCARD_TO_PREV_HOP; + } else { + flags &= ~FLAG_POSTCARD_TO_PREV_HOP; + } + setFlags(flags); + } + + @Override + public void writeToChannel(WritableByteChannel dto) throws IOException { + super.writeToChannel(dto); + } + + @Override + public void readFromChannel(ReadableByteChannel din, long length) throws IOException { + super.readFromChannel(din, length); + } + +} \ No newline at end of file diff --git a/src/org/kne/cloud/network/ipv6/KLALBPassportHopByHopTLV.java b/src/org/kne/cloud/network/ipv6/KLALBPassportHopByHopTLV.java new file mode 100644 index 0000000..900ba3b --- /dev/null +++ b/src/org/kne/cloud/network/ipv6/KLALBPassportHopByHopTLV.java @@ -0,0 +1,80 @@ +package org.kne.cloud.network.ipv6; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.ReadableByteChannel; +import java.nio.channels.WritableByteChannel; + +public class KLALBPassportHopByHopTLV extends IPv6HopByHopTLV { + + public KLALBPassportHopByHopTLV(ByteBuffer buffer) { + super(buffer); + } + + /** + * 构造方法 - 创建新的护照时间戳记录 + * + * @param packetSize 包长度(2字节) + * @param timestampOffset 时间戳偏移量(4字节),相对于流开始时间 + */ + public KLALBPassportHopByHopTLV(int packetSize, int timestampOffset) { + super(IPv6HopByHopTLV.KLALB_PASSPORT); // 护照记录类型 + + setPacketSize(packetSize); + setTimestampOffset(timestampOffset); + getData().limit(6); // 固定6字节数据 + } + + @Override + public String toString() { + return "KLALBPassportHopByHopTLV [packetLength=" + getPacketSize() + + ", timestampOffset=" + getTimestampOffset() + "]"; + } + + /** + * 设置包长度(2字节,大端序) + * 范围: 0-65535字节 + */ + public void setPacketSize(int packetSize) { + if (packetSize < 0 || packetSize > 65535) { + throw new IllegalArgumentException("Packet length must be between 0 and 65535"); + } + getData().put(0, (byte) ((packetSize >> 8) & 0xFF)); + getData().put(1, (byte) (packetSize & 0xFF)); + } + + /** + * 获取包长度(2字节,大端序) + */ + public int getPacketSize() { + return ((getData().get(0) & 0xFF) << 8) | (getData().get(1) & 0xFF); + } + + /** + * 设置时间戳偏移量(4字节,有符号整数,大端序) + */ + public void setTimestampOffset(int timestampOffset) { + getData().putInt(2, timestampOffset); + } + + /** + * 获取时间戳偏移量(4字节,有符号整数,大端序) + */ + public int getTimestampOffset() { + return getData().getInt(2); + } + + @Override + public void writeToChannel(WritableByteChannel dto) throws IOException { + super.writeToChannel(dto); + } + + @Override + public void readFromChannel(ReadableByteChannel din, long length) throws IOException { + super.readFromChannel(din, length); + } + + public long getTimestampOffsetLong() { + return ((long)getTimestampOffset())<<4; + } +} \ No newline at end of file diff --git a/src/org/kne/cloud/network/ipv6/LoopbackIPv6NetworkLink.java b/src/org/kne/cloud/network/ipv6/LoopbackIPv6NetworkLink.java index 410706c..33e8ef8 100644 --- a/src/org/kne/cloud/network/ipv6/LoopbackIPv6NetworkLink.java +++ b/src/org/kne/cloud/network/ipv6/LoopbackIPv6NetworkLink.java @@ -9,7 +9,9 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; +import java.util.function.BiConsumer; import java.util.function.Consumer; +import java.util.function.Supplier; import org.kne.cloud.network.srv6.PacketConsumer; import org.kne.cloud.network.srv6.SRv6Router; @@ -32,23 +34,18 @@ public class LoopbackIPv6NetworkLink extends AbstractIPv6NetworkLink implements return protocolNumberRegister; } - private List addressGroups =new ArrayList<>(); + private List addressGroups =new ArrayList<>(); //new Inet6AddressGroup(loopbackAddress, 128) new Inet6AddressGroup((Inet6Address) Inet6Address.getByName("::1"), 128) - public LoopbackIPv6NetworkLink(List addressGroupsx,SRv6Router router) { + public LoopbackIPv6NetworkLink(List addressGroupsx,SRv6Router router) { this.addressGroups .addAll( addressGroupsx); } - - public Consumer getReceiveConsumer() { - return receiveConsumer; - } - - private Consumer receiveConsumer; + private Consumer rerouteConsumer; private SRv6Router router; @Override - public void sendPacket(IPv6Packet pack, Inet6Address next) throws IOException { + public void sendPacket(IPv6Packet pack, IPv6Address next) throws IOException { PacketConsumer pcm= protocolNumberRegister.get(pack.getPayload().getProtocolNumber()); if (pcm != null) { if(!pcm.accept(pack)) { @@ -74,10 +71,6 @@ public class LoopbackIPv6NetworkLink extends AbstractIPv6NetworkLink implements return hs; } - @Override - public boolean isCongress(IPv6Packet iPv6Packet, double scale) { - return false; - } @Override public String getName() { @@ -90,26 +83,18 @@ public class LoopbackIPv6NetworkLink extends AbstractIPv6NetworkLink implements } @Override - public void setReceiveConsumer(Consumer con) { - this.receiveConsumer = con; + public void setReceiveConsumer(BiConsumer> con) { + super.setReceiveConsumer(con); if(fallbackLink!=null) { fallbackLink.setReceiveConsumer(con); } } @Override - public List getAddressGroups() { + public List getAddressGroups() { return addressGroups; } - @Override - public void setRerouteConsumer(Consumer rerouteConsumer) { - this.rerouteConsumer=rerouteConsumer; - if(fallbackLink!=null) { - fallbackLink.setRerouteConsumer(rerouteConsumer); - } - } - public Consumer getRerouteConsumer() { return rerouteConsumer; } @@ -117,20 +102,20 @@ public class LoopbackIPv6NetworkLink extends AbstractIPv6NetworkLink implements @Override public List getRouteItems() { List rlist = new ArrayList<>(); - for(Inet6AddressGroup group:addressGroups) { - rlist.add(new RouteItem(new Inet6AddressGroup(group.getAddress(), 128), + for(IPv6AddressGroup group:addressGroups) { + rlist.add(new RouteItem(new IPv6AddressGroup(group.getAddress(), 128), group.getAddress(), this, "Direct", 0, 0, null, "D", true)); } for (Iterator iteratorx = getNeighborsInfo().iterator(); iteratorx.hasNext();) { Neighbor addresses = (Neighbor) iteratorx.next(); - RouteItem ri = new RouteItem(new Inet6AddressGroup(addresses.getAddress().getAddress(), 128), + RouteItem ri = new RouteItem(new IPv6AddressGroup(addresses.getAddress().getAddress(), 128), addresses.getAddress().getAddress(), this, "Direct", 0, 128, addresses.getMonitor(), "D", false); rlist.add(ri); RouteItem ris = new RouteItem(addresses.getLocator(), - (Inet6Address) addresses.getLocator().getAddress(), this, "KLALB SRv6", 13, 128, + addresses.getLocator().getAddress(), this, "KLALB SRv6", 13, 128, addresses.getMonitor(), "D", false); rlist.add(ris); @@ -138,10 +123,6 @@ public class LoopbackIPv6NetworkLink extends AbstractIPv6NetworkLink implements return rlist; } - @Override - public boolean isReachSpeedLimit(IPv6Packet iPv6Packet) { - return false; - } public SRv6Router getRouter() { return router; @@ -150,13 +131,6 @@ public class LoopbackIPv6NetworkLink extends AbstractIPv6NetworkLink implements public void setRouter(SRv6Router router) { this.router = router; } - - @Override - public void setCongressCondition(Lock lock, Condition condition) { - // TODO 自动生成的方法存根 - - } - }; \ No newline at end of file diff --git a/src/org/kne/cloud/network/ipv6/Neighbor.java b/src/org/kne/cloud/network/ipv6/Neighbor.java index 0a42976..5224c8b 100644 --- a/src/org/kne/cloud/network/ipv6/Neighbor.java +++ b/src/org/kne/cloud/network/ipv6/Neighbor.java @@ -5,34 +5,33 @@ import java.net.InetAddress; import java.util.Objects; import org.kne.cloud.network.monitor.MonitorData; -import org.kne.cloud.network.monitor.QueueingMonitorDataImpl; import org.kne.cloud.network.te.BandwidthDistributer; public class Neighbor { - private Inet6AddressGroup address; - private Inet6AddressGroup locator; + private IPv6AddressGroup address; + private IPv6AddressGroup locator; private MonitorData monitor; private BandwidthDistributer bandwidthDistributer; public MonitorData getMonitor() { return monitor; } - public Inet6AddressGroup getAddress() { + public IPv6AddressGroup getAddress() { return address; } - public Inet6AddressGroup getLocator() { + public IPv6AddressGroup getLocator() { return locator; } public BandwidthDistributer getBandwidthDistributer() { return bandwidthDistributer; } - public Neighbor(Inet6AddressGroup address, Inet6AddressGroup locator, MonitorData monitor) { + public Neighbor(IPv6AddressGroup address, IPv6AddressGroup locator, MonitorData monitor) { super(); this.address = address; this.locator = locator; this.monitor = monitor; } - public Neighbor(Inet6AddressGroup address, Inet6AddressGroup locator, MonitorData monitor2, + public Neighbor(IPv6AddressGroup address, IPv6AddressGroup locator, MonitorData monitor2, BandwidthDistributer bandwidthDistributer) { this(address,locator,monitor2); this.bandwidthDistributer=bandwidthDistributer; diff --git a/src/org/kne/cloud/network/ipv6/PacketID.java b/src/org/kne/cloud/network/ipv6/PacketID.java new file mode 100644 index 0000000..7c178bf --- /dev/null +++ b/src/org/kne/cloud/network/ipv6/PacketID.java @@ -0,0 +1,53 @@ +package org.kne.cloud.network.ipv6; + +import java.util.UUID; +import java.util.concurrent.atomic.AtomicLong; + +public class PacketID { + private UUID flowuuid; + private long sequence; + + public PacketID(UUID flowuuid, long sequence) { + super(); + this.flowuuid = flowuuid; + this.sequence = sequence; + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long value = flowuuid.getMostSignificantBits() ^ flowuuid.getLeastSignificantBits(); + result = prime * result + (int)(value ^ (value >>> 32)); + result = prime * result + (int) (sequence ^ (sequence >>> 32)); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PacketID other = (PacketID) obj; + if (flowuuid == null) { + if (other.flowuuid != null) + return false; + } else if (!flowuuid.equals(other.flowuuid)) + return false; + if (sequence != other.sequence) + return false; + return true; + } + @Override + public String toString() { + return "PacketID [flowuuid=" + flowuuid + ", sequence=" + sequence + "]"; + } + public UUID getFlowuuid() { + return flowuuid; + } + public long getSequence() { + return sequence; + } + +} diff --git a/src/org/kne/cloud/network/ipv6/PacketIDGenerator.java b/src/org/kne/cloud/network/ipv6/PacketIDGenerator.java new file mode 100644 index 0000000..288ed9d --- /dev/null +++ b/src/org/kne/cloud/network/ipv6/PacketIDGenerator.java @@ -0,0 +1,55 @@ +package org.kne.cloud.network.ipv6; + +import java.util.UUID; +import java.util.concurrent.atomic.AtomicLong; + +public class PacketIDGenerator { + private UUID flowuuid; + private AtomicLong sequence; + public PacketIDGenerator() { + flowuuid=UUID.randomUUID(); + sequence=new AtomicLong(); + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((flowuuid == null) ? 0 : flowuuid.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PacketIDGenerator other = (PacketIDGenerator) obj; + if (flowuuid == null) { + if (other.flowuuid != null) + return false; + } else if (!flowuuid.equals(other.flowuuid)) + return false; + return true; + } + public PacketIDGenerator(UUID flowuuid, AtomicLong sequence) { + super(); + this.flowuuid = flowuuid; + this.sequence = sequence; + } + public UUID getFlowuuid() { + return flowuuid; + } + public AtomicLong getSequence() { + return sequence; + } + @Override + public String toString() { + return "PacketIDGenerater [flowuuid=" + flowuuid + ", sequence=" + sequence + "]"; + } + + public PacketID generate() { + return new PacketID(flowuuid, sequence.getAndIncrement()); + } +} diff --git a/src/org/kne/cloud/network/ipv6/PostcardEntry.java b/src/org/kne/cloud/network/ipv6/PostcardEntry.java new file mode 100644 index 0000000..31a0a42 --- /dev/null +++ b/src/org/kne/cloud/network/ipv6/PostcardEntry.java @@ -0,0 +1,193 @@ +package org.kne.cloud.network.ipv6; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.ReadableByteChannel; +import java.nio.channels.WritableByteChannel; +import java.util.UUID; + +import org.kne.cloud.network.NetworkPacket; +import org.kne.io.KNEChannels; + +public class PostcardEntry extends NetworkPacket { + public static final int POSTCARD_ENTRY_SIZE = 48; + private ByteBuffer data = NetworkPacket.bufferAllocator.allocate(POSTCARD_ENTRY_SIZE); + + // 字段偏移量常量 + private static final int SID_OFFSET = 0; // 16字节 + private static final int UUID_OFFSET = 16; // 16字节 + private static final int SEQUENCE_OFFSET = 16+16; // 8字节 + private static final int TIMESTAMP_BASE_OFFSET = 16+16; // 8字节 + private static final int TIMESTAMP_DELTA_OFFSET = 24+16; // 4字节 + private static final int PACKET_SIZE_OFFSET = 28+16; // 2字节 + private static final int RESERVED_OFFSET = 30+16; // 6字节 + + public PostcardEntry(IPv6Address sid,UUID uuid,long timestampBase,int timestampDelta,int packetSize) { + setSID(sid); + setPacketUUID(uuid); + setTimestampBase(timestampBase); + setTimestampDelta(timestampDelta); + setPacketSize(packetSize); + data.limit(POSTCARD_ENTRY_SIZE); + + } + + + + + + public void setSID(IPv6Address sid) { + data.putLong(SID_OFFSET, sid.getHigh()); + data.putLong(SID_OFFSET+8, sid.getLow()); + } + + public IPv6Address getSID() { + long high=data.getLong(SID_OFFSET); + long low =data.getLong(SID_OFFSET+8); + return new IPv6Address(high, low); + } + + public PostcardEntry() { + // 初始化缓冲区 + data.limit(POSTCARD_ENTRY_SIZE); + } + + @Override + public long getTotalLength() { + return POSTCARD_ENTRY_SIZE; + } + + @Override + public void writeToChannel(WritableByteChannel dto) throws IOException { + data.position(0); + data.limit(POSTCARD_ENTRY_SIZE); + dto.write(data.slice()); + } + + @Override + public void readFromChannel(ReadableByteChannel din, long length) throws IOException { + data.clear(); + data.limit(POSTCARD_ENTRY_SIZE); + KNEChannels.readFully(din, data); + data.flip(); + } + + @Override + protected boolean needEndPosition() { + return false; + } + + /** + * 设置包UUID(16字节) + */ + public void setPacketUUID(UUID uuid) { + data.putLong(UUID_OFFSET, uuid.getMostSignificantBits()); + data.putLong(UUID_OFFSET + 8, uuid.getLeastSignificantBits()); + } + + /** + * 获取包UUID(16字节) + */ + public UUID getPacketUUID() { + long mostSigBits = data.getLong(UUID_OFFSET); + long leastSigBits = data.getLong(UUID_OFFSET + 8); + return new UUID(mostSigBits, leastSigBits); + } + + /** + * 设置序列号(8字节) + */ + public void setSequence(long sequence) { + data.putLong(SEQUENCE_OFFSET, sequence); + } + + /** + * 获取序列号(8字节) + */ + public long getSequence() { + return data.getLong(SEQUENCE_OFFSET); + } + + /** + * 设置时间戳(8字节) + */ + public void setTimestampBase(long timestamp) { + data.putLong(TIMESTAMP_BASE_OFFSET, timestamp); + } + + /** + * 获取时间戳(8字节) + */ + public long getTimestampBase() { + return data.getLong(TIMESTAMP_BASE_OFFSET); + } + + public int getTimestampDelta() { + return data.getInt(TIMESTAMP_DELTA_OFFSET); + } + + public void setTimestampDelta(int delta) { + data.putInt(TIMESTAMP_DELTA_OFFSET, delta); + } + + /** + * 设置包大小(2字节,无符号) + */ + public void setPacketSize(int packetSize) { + if (packetSize < 0 || packetSize > 65535) { + throw new IllegalArgumentException("Packet size must be between 0 and 65535"); + } + data.putShort(PACKET_SIZE_OFFSET, (short) packetSize); + } + + /** + * 获取包大小(2字节,无符号) + */ + public int getPacketSize() { + return data.getShort(PACKET_SIZE_OFFSET) & 0xFFFF; + } + + /** + * 设置保留字段(2字节) + */ + public void setReserved(int reserved) { + data.putChar(RESERVED_OFFSET ,(char) reserved); + } + + /** + * 获取保留字段(2字节) + */ + public int getReserved() { + return data.getChar(RESERVED_OFFSET); + } + + /** + * 清空保留字段(设置为0) + */ + public void clearReserved() { + setReserved(0); + } + + + + + + + + @Override + public String toString() { + UUID uuid = getPacketUUID(); + return String.format("PostcardEntry[uuid=%s, seq=%d, time=%d, delta=%d, size=%d]", + uuid.toString(), + getSequence(), + getTimestampBase(), + getTimestampDelta(), + getPacketSize()); + } + + public double getTimestampDeltaLong() { + return ((long)getTimestampDelta())<<4; + } + + +} \ No newline at end of file diff --git a/src/org/kne/cloud/network/ipv6/RouteItem.java b/src/org/kne/cloud/network/ipv6/RouteItem.java index 38f6d83..2c51cc1 100644 --- a/src/org/kne/cloud/network/ipv6/RouteItem.java +++ b/src/org/kne/cloud/network/ipv6/RouteItem.java @@ -6,14 +6,13 @@ import java.util.Objects; import org.kne.cloud.network.ipv6.IPv6NetworkLink; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; import org.kne.cloud.network.monitor.DelayMonitorData; import org.kne.cloud.network.monitor.MonitorData; -import org.kne.cloud.network.monitor.QueueingMonitorDataImpl; public class RouteItem implements Comparable,Cloneable{ - private Inet6AddressGroup destination; - private Inet6Address nexthop; + private IPv6AddressGroup destination; + private IPv6Address nexthop; private IPv6NetworkLink destlink; private String proto; private int pre; @@ -44,7 +43,7 @@ public class RouteItem implements Comparable,Cloneable{ && Objects.equals(flag, other.flag) && pre == other.pre && Objects.equals(proto, other.proto); } - public RouteItem(Inet6AddressGroup destination, Inet6Address nexthop, IPv6NetworkLink destlink, String proto, int pre, + public RouteItem(IPv6AddressGroup destination, IPv6Address nexthop, IPv6NetworkLink destlink, String proto, int pre, long cost,String flag,boolean isLoopback) { super(); this.destination = destination; @@ -56,7 +55,7 @@ public class RouteItem implements Comparable,Cloneable{ this.flag=flag; this.isLoopback=isLoopback; } - public RouteItem(Inet6AddressGroup destination, Inet6Address nexthop, IPv6NetworkLink destlink, String proto, int pre, + public RouteItem(IPv6AddressGroup destination, IPv6Address nexthop, IPv6NetworkLink destlink, String proto, int pre, long cost,MonitorData monitor,String flag,boolean isLoopback) { super(); this.destination = destination; @@ -69,10 +68,10 @@ public class RouteItem implements Comparable,Cloneable{ this.flag=flag; this.isLoopback=isLoopback; } - public Inet6AddressGroup getDestination() { + public IPv6AddressGroup getDestination() { return destination; } - public Inet6Address getNexthop() { + public IPv6Address getNexthop() { return nexthop; } public IPv6NetworkLink getDestlink() { @@ -89,17 +88,17 @@ public class RouteItem implements Comparable,Cloneable{ } @Override public String toString() { - return getDestination()+"\t"+getProto()+"\t"+getPre()+"\t"+getCost()+"\t"+getFlag()+"\t"+getNexthop().getHostAddress()+"\t"+getDestlink().getName(); + return getDestination()+"\t"+getProto()+"\t"+getPre()+"\t"+getCost()+"\t"+getFlag()+"\t"+getNexthop()+"\t"+getDestlink().getName(); } public long getCost() { return cost; } - public boolean checkMatch(Inet6Address ia) { + /*public boolean checkMatch(IPv6Address ia) { return destination.checkMatch(ia); } public boolean checkMatch(byte[] ia) { return destination.checkMatch(ia); - } + }*/ @Override public int compareTo(RouteItem o) { int v1=destination.compareTo(o.destination); @@ -109,13 +108,7 @@ public class RouteItem implements Comparable,Cloneable{ if(v2!=0) return v2; int v3=Long.compare(cost, o.cost); - if(v3!=0) - return v3; - if(monitor==null||o.monitor==null||(!(monitor instanceof DelayMonitorData))||(!(o.monitor instanceof DelayMonitorData))) - return v3; - if(!(monitor instanceof QueueingMonitorDataImpl)||!(o.monitor instanceof QueueingMonitorDataImpl)) - return Long.compare(outDelay, o.outDelay); - return Long.compare(outDelay+queueingDelay, o.outDelay+o.queueingDelay); + return v3; } @Override public Object clone() { @@ -130,18 +123,13 @@ public class RouteItem implements Comparable,Cloneable{ } } - long outDelay; - long queueingDelay; public void preSort() { if(monitor!=null) { - outDelay=((DelayMonitorData)monitor).getOutDelay(); - if(monitor instanceof QueueingMonitorDataImpl) { - queueingDelay=((QueueingMonitorDataImpl)monitor).getQueueingDelay(); - } + cost=((DelayMonitorData)monitor).getOutDelay(); } } public boolean ECMPequals(RouteItem prevr) { - return prevr.getDestination().getPrefixLength()==getDestination().getPrefixLength()&&prevr.getPre()==getPre()&&prevr.getCost()==getCost(); + return prevr.getDestination().getPrefixLength()==getDestination().getPrefixLength()&&prevr.getPre()==getPre(); } diff --git a/src/org/kne/cloud/network/ipv6/TLV.java b/src/org/kne/cloud/network/ipv6/TLV.java index 2fcc4d6..da83dda 100644 --- a/src/org/kne/cloud/network/ipv6/TLV.java +++ b/src/org/kne/cloud/network/ipv6/TLV.java @@ -19,7 +19,7 @@ public static final int PAD1=0; if(getType()==PAD1) setHeaderLength(1); if(isDefault&&(getHeaderLength()>1)) { - data=NetworkPacket.bufferAllocator.allocate(512); + data=NetworkPacket.bufferAllocator.allocate(256); } } @@ -33,7 +33,7 @@ public static final int PAD1=0; header.put((byte) 0); header.flip(); if(isDefault&&(getHeaderLength()>1)) { - data=NetworkPacket.bufferAllocator.allocate(512); + data=NetworkPacket.bufferAllocator.allocate(256); } } diff --git a/src/org/kne/cloud/network/klalb/ADDRPacket.java b/src/org/kne/cloud/network/klalb/ADDRPacket.java index 381c56c..ee4f404 100644 --- a/src/org/kne/cloud/network/klalb/ADDRPacket.java +++ b/src/org/kne/cloud/network/klalb/ADDRPacket.java @@ -9,24 +9,23 @@ import java.net.Inet6Address; import java.net.UnknownHostException; import java.nio.ByteBuffer; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6Address; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; public class ADDRPacket extends KLALBPacket { private static final int HEADER_LENGTH=18; - public Inet6AddressGroup getAddr() { - byte[]b=new byte[16]; - klalbHeader.get(1, b); - try { - return new Inet6AddressGroup( (Inet6Address) Inet6Address.getByAddress(b),klalbHeader.get(17)&0xff); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - return null; + public IPv6AddressGroup getAddr() { + long high=klalbHeader.getLong(1); + long low=klalbHeader.getLong(9); + int perf=klalbHeader.get(17)&0xff; + + return new IPv6AddressGroup(new IPv6Address(high, low), perf); } - public ADDRPacket(Inet6AddressGroup addr) { + public ADDRPacket(IPv6AddressGroup addr) { super(ADDR,HEADER_LENGTH); - klalbHeader.put(1, addr.getAddress().getAddress()); + klalbHeader.putLong(1, addr.getAddress().getHigh()); + klalbHeader.putLong(9, addr.getAddress().getLow()); klalbHeader.put(17,(byte) addr.getPrefixLength()); } diff --git a/src/org/kne/cloud/network/klalb/AbstractControlledIPv6NetworkLink.java b/src/org/kne/cloud/network/klalb/AbstractControlledIPv6NetworkLink.java new file mode 100644 index 0000000..20e475b --- /dev/null +++ b/src/org/kne/cloud/network/klalb/AbstractControlledIPv6NetworkLink.java @@ -0,0 +1,18 @@ +package org.kne.cloud.network.klalb; + +import java.io.IOException; +import java.net.Inet6Address; +import java.util.List; + +import org.kne.cloud.network.ipv6.AbstractIPv6NetworkLink; +import org.kne.cloud.network.ipv6.ControlledIPv6NetworkLink; +import org.kne.cloud.network.ipv6.IPv6Packet; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; +import org.kne.cloud.network.ipv6.Neighbor; +import org.kne.cloud.network.ipv6.RouteItem; + +public abstract class AbstractControlledIPv6NetworkLink extends AbstractIPv6NetworkLink implements ControlledIPv6NetworkLink{ + + + +} diff --git a/src/org/kne/cloud/network/klalb/AbstractKLALBPacketLink.java b/src/org/kne/cloud/network/klalb/AbstractKLALBPacketLink.java index 2f932bd..327b79f 100644 --- a/src/org/kne/cloud/network/klalb/AbstractKLALBPacketLink.java +++ b/src/org/kne/cloud/network/klalb/AbstractKLALBPacketLink.java @@ -21,78 +21,9 @@ public abstract class AbstractKLALBPacketLink implements KLALBPacketLink { AbstractKLALBPacketLink.defaultSoTimeout = defaultSoTimeout; } - private LongAdder[] inputTrafficCounters; - private LongAdder[] outputTrafficCounters; - private LongAdder[] inputPacketsCounters; - private LongAdder[] outputPacketsCounters; - @Override - public void setOutputPacketsCounters(LongAdder[] outCounter) { - outputPacketsCounters=outCounter; - } - @Override - public void setInputPacketsCounters(LongAdder[] inCounter) { - inputPacketsCounters=inCounter; - - } - @Override - public void setOutputTrafficCounters(LongAdder[] outCounter) { - this.outputTrafficCounters=outCounter; - } - - @Override - public void setInputTrafficCounters(LongAdder[] inCounter) { - this.inputTrafficCounters=inCounter; - } - - public LongAdder[] getInputTrafficCounters() { - return inputTrafficCounters; - } - - public LongAdder[] getOutputTrafficCounters() { - return outputTrafficCounters; - } - - public LongAdder[] getInputPacketsCounters() { - return inputPacketsCounters; - } - - public LongAdder[] getOutputPacketsCounters() { - return outputPacketsCounters; - } - protected void incOutput(int packetLength) { - if(outputTrafficCounters!=null) { - for(LongAdder al:outputTrafficCounters) { - al.add(packetLength); - } - } - if(outputPacketsCounters!=null) { - for(LongAdder al:outputPacketsCounters) { - al.add(1); - } - } - } - protected void incInput(int packetLength) { - if(inputTrafficCounters!=null) { - for(LongAdder al:inputTrafficCounters) { - al.add(packetLength); - } - } - if(inputPacketsCounters!=null) { - for(LongAdder al:inputPacketsCounters) { - al.add(1); - } - } - } - - @Override - public void writeKLALBPackets(List kps) throws IOException { - for(KLALBPacket pack:kps) { - writeKLALBPacket(pack); - } - } @Override public void writeKLALBPacket(KLALBPacket kp) throws IOException { @@ -103,6 +34,8 @@ public abstract class AbstractKLALBPacketLink implements KLALBPacketLink { writePacket(dataWrite); } + protected abstract void writePacket(ByteBuffer dataWrite) throws IOException; + @Override public KLALBPacket readKLALBPacket() throws IOException { ByteBuffer buffer=readPacket(); @@ -111,4 +44,6 @@ public abstract class AbstractKLALBPacketLink implements KLALBPacketLink { } return KLALBPacket.readKLALBPacketFromChannel(KNEChannels.newReadableChannel(buffer)); } + + protected abstract ByteBuffer readPacket() throws IOException; } diff --git a/src/org/kne/cloud/network/klalb/BWINFPacket.java b/src/org/kne/cloud/network/klalb/BWINFPacket.java index 03d7c82..7bb0a69 100644 --- a/src/org/kne/cloud/network/klalb/BWINFPacket.java +++ b/src/org/kne/cloud/network/klalb/BWINFPacket.java @@ -25,7 +25,7 @@ public class BWINFPacket extends KLALBPacket { } public BWINFPacket(long upSpeed,long downSpeed) { - super( BWINF,HEADER_LENGTH,-1); + super( BWINF,HEADER_LENGTH); klalbHeader.putLong(upSpeed); klalbHeader.putLong(downSpeed); } diff --git a/src/org/kne/cloud/network/klalb/CONST.java b/src/org/kne/cloud/network/klalb/CONST.java index 31fc93a..822420a 100644 --- a/src/org/kne/cloud/network/klalb/CONST.java +++ b/src/org/kne/cloud/network/klalb/CONST.java @@ -2,11 +2,20 @@ package org.kne.cloud.network.klalb; public class CONST { public static final String klalb="KLALB"; - public static final String klalbver="3.4"; public static final int bversion=3; - public static final int sversion=1; - public static final int itemwidth = 720; - public static final int linepanelheight = 45; - public static final int settingheight = 30; + public static final int mversion=6; + public static final int sversion=0; + public static final String klalbver=bversion+"."+mversion+"."+sversion; + + public static final String KLALB_DECENTRALIZED_S_RV6_NETWORK = "KLALB Decentralized SRv6 Network"; + + public static final String KLALB_S_RV6 = "KLALB_SRv6"; + + + + public static final int itemwidth = 1000; + public static final int linepanelheight = 41; + public static final int settingheight = 30; + public static final int dialwidth = 150; } diff --git a/src/org/kne/cloud/network/klalb/DATATPacket.java b/src/org/kne/cloud/network/klalb/DATATPacket.java index 2b321fe..f386468 100644 --- a/src/org/kne/cloud/network/klalb/DATATPacket.java +++ b/src/org/kne/cloud/network/klalb/DATATPacket.java @@ -21,7 +21,6 @@ public class DATATPacket extends KLALBPacket implements PortPacket{ public long getTotalLength() { return HEADER_LENGTH+dataBuffer.limit(); } - volatile long resendtimer=System.nanoTime(); private ByteBuffer dataBuffer;//=NetworkPacket.databufferpool_65535.borrow(); @@ -64,6 +63,7 @@ public class DATATPacket extends KLALBPacket implements PortPacket{ } private long numberc=Long.MIN_VALUE; + public long resendtimer; public long getNumber() { if(numberc!=Long.MIN_VALUE) { return numberc; diff --git a/src/org/kne/cloud/network/klalb/DatagramKLALBPacketLink.java b/src/org/kne/cloud/network/klalb/DatagramKLALBPacketLink.java index 00629fc..c2626e0 100644 --- a/src/org/kne/cloud/network/klalb/DatagramKLALBPacketLink.java +++ b/src/org/kne/cloud/network/klalb/DatagramKLALBPacketLink.java @@ -188,7 +188,6 @@ public class DatagramKLALBPacketLink extends AbstractKLALBPacketLink implements @Override public void writePacket(ByteBuffer kp) throws IOException { int length=kp.remaining(); - incOutput(length); kp.get(b,0,length); DatagramPacket dp=new DatagramPacket(b,length); ds.send(dp); @@ -204,7 +203,6 @@ public class DatagramKLALBPacketLink extends AbstractKLALBPacketLink implements dp=new DatagramPacket(c, c.length); ds.receive(dp); } - incInput(dp.getLength()); ByteBuffer bbf=NetworkPacket.bufferAllocator.allocate(dp.getLength()); bbf.put(dp.getData(),0,dp.getLength()); bbf.flip(); diff --git a/src/org/kne/cloud/network/klalb/IPSequence.java b/src/org/kne/cloud/network/klalb/IPSequence.java deleted file mode 100644 index 1e7433b..0000000 --- a/src/org/kne/cloud/network/klalb/IPSequence.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.kne.cloud.network.klalb; - -import java.net.Inet6Address; -import java.net.InetAddress; -import java.util.Objects; -import java.util.UUID; - -public class IPSequence { - private UUID uuid; - private boolean isPromise; - - - public IPSequence(UUID uuid, boolean isPromise) { - super(); - this.uuid = uuid; - this.isPromise = isPromise; - } - - public UUID getUuid() { - return uuid; - } - - public boolean isPromise() { - return isPromise; - } - - @Override - public String toString() { - return "IPSequence [uuid=" + uuid + ", isPromise=" + isPromise + "]"; - } - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((uuid == null) ? 0 : uuid.hashCode()); - return result; - } - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - IPSequence other = (IPSequence) obj; - if (uuid == null) { - if (other.uuid != null) - return false; - } else if (!uuid.equals(other.uuid)) - return false; - return true; - } - -} diff --git a/src/org/kne/cloud/network/klalb/KLALBController.java b/src/org/kne/cloud/network/klalb/KLALBController.java index 1baad1e..13e6750 100644 --- a/src/org/kne/cloud/network/klalb/KLALBController.java +++ b/src/org/kne/cloud/network/klalb/KLALBController.java @@ -49,14 +49,17 @@ import org.kne.cloud.network.MultipurposeSocketAddress; import org.kne.cloud.network.PortPair; import org.kne.cloud.network.SocketType; import org.kne.cloud.network.ThreadTool; +import org.kne.cloud.network.ipv6.IPv6Address; import org.kne.cloud.network.ipv6.IPv6NetworkLink; import org.kne.cloud.network.ipv6.IPv6Packet; import org.kne.cloud.network.ipv6.IPv6Packet.IPv6ExtHeader; import org.kne.cloud.network.ipv6.IPv6Packet.IPv6Payload; import org.kne.cloud.network.ipv6.IPv6TUNLoopbackNetworkLink; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; import org.kne.cloud.network.ipv6.LoopbackIPv6NetworkLink; import org.kne.cloud.network.ipv6.Neighbor; +import org.kne.cloud.network.ipv6.PacketID; +import org.kne.cloud.network.monitor.HashMapTimestampMonitor; import org.kne.cloud.network.monitor.MonitorData; import org.kne.cloud.network.monitor.SpeedAndTrafficMonitorDataImpl; import org.kne.cloud.network.monitor.TimestampMonitor; @@ -84,15 +87,24 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; public class KLALBController { + private UUID nodeuuid=UUID.randomUUID(); + private HighAccuracyClock clock = new HighAccuracyClock(); - //TimestampMonitor<> - - private SpeedAndTrafficMonitorDataImpl linkMonitor = new SpeedAndTrafficMonitorDataImpl(); + public HighAccuracyClock getClock() { + return clock; + } - private SpeedAndTrafficMonitorDataImpl datatMonitor = new SpeedAndTrafficMonitorDataImpl(); + private SpeedAndTrafficMonitorDataImpl linkMonitor = new SpeedAndTrafficMonitorDataImpl( + new HashMapTimestampMonitor(HighAccuracyClock.SYSTEM_CLOCK, "up", 100, 500000000L), + new HashMapTimestampMonitor(HighAccuracyClock.SYSTEM_CLOCK, "down", 100, 500000000L)); + + private SpeedAndTrafficMonitorDataImpl datatMonitor = new SpeedAndTrafficMonitorDataImpl( + new HashMapTimestampMonitor(HighAccuracyClock.SYSTEM_CLOCK, "up", 100, 500000000L), + new HashMapTimestampMonitor(HighAccuracyClock.SYSTEM_CLOCK, "down", 100, 500000000L)); private List selflineTable = new ArrayList<>(); + private static final boolean debug=false; private static final boolean showpacket = false; private static final int PREFIX = 128;// 112 @@ -113,280 +125,286 @@ public class KLALBController { } private Timer twk = new Timer("网卡检测扫描计时器", true); - - private TimerTask tsk1=new TimerTask() { + private List getAllNetworkInterfaceAddress() throws SocketException { + List addresses = new ArrayList(); + Enumeration eu = NetworkInterface.getNetworkInterfaces(); + while (eu.hasMoreElements()) { + NetworkInterface networkInterface = (NetworkInterface) eu.nextElement(); - @Override - public void run() { - - try { - - Enumeration eu = NetworkInterface.getNetworkInterfaces(); - while (eu.hasMoreElements()) { - NetworkInterface networkInterface = (NetworkInterface) eu.nextElement(); - - if (networkInterface.getDisplayName() - .startsWith(IPv6TUNLoopbackNetworkLink.KLALB_DECENTRALIZED_S_RV6_NETWORK)) { - continue; - } - if (networkInterfaceExcept.contains(networkInterface)) { - continue; - } - if (networkInterface.isUp()) { - // System.out.println(networkInterface+" "+networkInterface.isUp()); - Enumeration ei = networkInterface.getInetAddresses(); - while (ei.hasMoreElements()) { - InetAddress inetAddress = (InetAddress) ei.nextElement(); - if (!inetAddress.isLoopbackAddress()) - for (Iterator iterator = listens.iterator(); iterator - .hasNext();) { - MultipurposeSocketAddress tcpl = (MultipurposeSocketAddress) iterator.next(); - - try { - if (tcpl.getInetAddress().isAnyLocalAddress() - || tcpl.getInetAddress().equals(inetAddress)) { - MultipurposeSocketAddress bind = new MultipurposeSocketAddress( - tcpl.getType(), inetAddress.getHostAddress(), tcpl.getPort()); - // System.out.println(bind); - synchronized (selflineTable) { - if (!selflineTable.contains(bind)) { - selflineTable.add(bind); - } - } - } - } catch (UnknownHostException e) { - // TODO 自动生成的 catch 块 - e.printStackTrace(); - } - - } - } - - } + if (networkInterface.getDisplayName() + .startsWith(CONST.KLALB_DECENTRALIZED_S_RV6_NETWORK)) { + continue; + } + if (networkInterfaceExcept.contains(networkInterface)) { + continue; + } + if (networkInterface.isUp()) { + // System.out.println(networkInterface+" "+networkInterface.isUp()); + Enumeration ei = networkInterface.getInetAddresses(); + while (ei.hasMoreElements()) { + InetAddress inetAddress = (InetAddress) ei.nextElement(); + if (checkIsSelfLocator(inetAddress)) { + continue; } - } catch (SocketException e) { + addresses.add(inetAddress); } - lineslock.writeLock().lock(); - try { + } + } + return addresses; + } - List localaddress = new ArrayList<>(); - Enumeration eu = NetworkInterface.getNetworkInterfaces(); - while (eu.hasMoreElements()) { - NetworkInterface networkInterface = (NetworkInterface) eu.nextElement(); - if (networkInterface.isUp()) { - // System.out.println(networkInterface+" "+networkInterface.isUp()); - Enumeration ei = networkInterface.getInetAddresses(); - while (ei.hasMoreElements()) { - InetAddress inetAddress = (InetAddress) ei.nextElement(); - MultipurposeSocketAddress bind = new MultipurposeSocketAddress( - inetAddress.getHostAddress(), 0); - localaddress.add(bind); + private TimerTask tsk1 = new TimerTask() { + @Override + public void run() { + try { + List localaddress = getAllNetworkInterfaceAddress(); + + for (InetAddress inetAddress : localaddress) { + if (!inetAddress.isLoopbackAddress()) + for (Iterator iterator = listens.iterator(); iterator.hasNext();) { + MultipurposeSocketAddress tcpl = (MultipurposeSocketAddress) iterator.next(); + + try { + if (tcpl.getInetAddress().isAnyLocalAddress() + || tcpl.getInetAddress().equals(inetAddress)) { + MultipurposeSocketAddress bind = new MultipurposeSocketAddress(tcpl.getType(), + inetAddress.getHostAddress(), tcpl.getPort()); + // System.out.println(bind); + synchronized (selflineTable) { + if (!selflineTable.contains(bind)) { + selflineTable.add(bind); + } + } + } + } catch (UnknownHostException e) { + // TODO 自动生成的 catch 块 + e.printStackTrace(); } + } - } - Set st = new HashSet<>(); - for (Iterator iterator = srv6Router.getLinkTabel().iterator(); iterator.hasNext();) { - IPv6NetworkLink link=iterator.next(); - if(link instanceof KLALBRemoteLine) { + } + + lineslock.writeLock().lock(); + try { + + + Set st = new HashSet<>(); + for (Iterator iterator = srv6Router.getLinkTabel().iterator(); iterator.hasNext();) { + IPv6NetworkLink link = iterator.next(); + if (link instanceof KLALBRemoteLine) { KLALBRemoteLine multipurposeSocketAddress = (KLALBRemoteLine) link; if (multipurposeSocketAddress.getSocketAddress() != null) st.add(multipurposeSocketAddress.getSocketAddress()); - } } + } - for (Iterator iterator = st.iterator(); iterator.hasNext();) { - MultipurposeSocketAddress target = (MultipurposeSocketAddress) iterator.next(); - addRemoteLines(target); - /* - * for (Iterator iterator2 = localaddress.iterator(); - * iterator2.hasNext();) { MultipurposeSocketAddress bind = - * (MultipurposeSocketAddress) iterator2 .next(); try { - * if(target.getInetAddress().isLoopbackAddress() - * &&(!bind.getInetAddress().isLoopbackAddress())) { continue; } - * if((!target.getInetAddress().isLoopbackAddress()) - * &&bind.getInetAddress().isLoopbackAddress()) { continue; } - * if(target.getInetAddress()instanceof Inet4Address&&bind.getInetAddress() - * instanceof Inet6Address) { continue; } if(target.getInetAddress() instanceof - * Inet6Address &&bind.getInetAddress() instanceof Inet4Address) { continue; } } - * catch (UnknownHostException e) { - * if(e.getMessage().toLowerCase().contains("no scope_id found")) } - * if(!checkContainsTargetAndBind(target,bind)) { - * //System.out.println(target+" "+bind); addRemoteLine( new - * KLALBRemoteLine(target,bind)); } } - */ - - } - for (Iterator iterator = srv6Router.getLinkTabel().iterator(); iterator.hasNext();) { - IPv6NetworkLink link=iterator.next(); - if(link instanceof KLALBRemoteLine) { + for (Iterator iterator = st.iterator(); iterator.hasNext();) { + MultipurposeSocketAddress target = (MultipurposeSocketAddress) iterator.next(); + addRemoteLines(target); + } + for (Iterator iterator = srv6Router.getLinkTabel().iterator(); iterator.hasNext();) { + IPv6NetworkLink link = iterator.next(); + if (link instanceof KLALBRemoteLine) { KLALBRemoteLine reml = (KLALBRemoteLine) link; if (reml.getSocketAddress() != null) { if (reml.getBindAddress() != null || reml.getRemoteVaddr() != null) - if (!localaddress.contains(reml.getBindAddress())) { + try { + MultipurposeSocketAddress iadr=reml.getBindAddress(); + if(iadr!=null) { + if (!localaddress.contains(iadr.getInetAddress())) { + reml.close(); + srv6Router.getLinkTabel().remove(reml); + } + }else { + + reml.close(); + } + } catch (UnknownHostException e) { reml.close(); srv6Router.getLinkTabel().remove(reml); + e.printStackTrace(); } } - } + } + } + + } finally { + lineslock.writeLock().unlock(); + } + + + updateBroadcastNetworkInterface(); + } catch (SocketException e) { + } + } + + private void updateBroadcastNetworkInterface() throws SocketException { + for (Iterator iterator = ipmd.iterator(); iterator.hasNext();) { + IPMulticastDiscovery ipMulticastDiscovery = (IPMulticastDiscovery) iterator.next(); + if (ipMulticastDiscovery.isClosed() || (!ipMulticastDiscovery.getNinterface().isUp()) + || (configItem != null && configItem.isDenyLineTableBroadcast())) { + iterator.remove(); + try { + ipMulticastDiscovery.close(); + } catch (IOException e) { + e.printStackTrace(); + } + if(debug) + System.out.println("关闭网卡地址广播:" + ipMulticastDiscovery.getNinterface()); + } + } + + if (configItem != null && configItem.isDenyLineTableBroadcast()) { + + } else { + Enumeration eu2 = NetworkInterface.getNetworkInterfaces(); + while (eu2.hasMoreElements()) { + NetworkInterface networkInterface = (NetworkInterface) eu2.nextElement(); + if (networkInterface.getDisplayName() + .startsWith(CONST.KLALB_DECENTRALIZED_S_RV6_NETWORK)) { + continue; } - for (Iterator iterator = ipmd.iterator(); iterator.hasNext();) { - IPMulticastDiscovery ipMulticastDiscovery = (IPMulticastDiscovery) iterator.next(); - if (ipMulticastDiscovery.isClosed() || (!ipMulticastDiscovery.getNinterface().isUp())) { - iterator.remove(); + if (networkInterfaceExcept.contains(networkInterface)) { + continue; + } + + if (networkInterface.isUp()) { + + Enumeration ei = networkInterface.getInetAddresses(); + loop: while (ei.hasMoreElements()) { + InetAddress bidr = (InetAddress) ei.nextElement(); + if (checkIsSelfLocator(bidr)) { + continue; + } + for (Iterator iterator = ipmd.iterator(); iterator.hasNext();) { + IPMulticastDiscovery ipMulticastDiscovery = (IPMulticastDiscovery) iterator.next(); + if (networkInterface.equals(ipMulticastDiscovery.getNinterface()) + && bidr.equals(ipMulticastDiscovery.getBind().getAddress())) { + continue loop; + } + } + try { - ipMulticastDiscovery.close(); + // InetAddress bidr=InetAddress.getByName("::0"); + + if (bidr instanceof Inet6Address) { + IPMulticastDiscovery ipd = new IPMulticastDiscovery( + new InetSocketAddress(bidr, DISCOVERY_PORT), + new InetSocketAddress(InetAddress.getByName("ff02::2486"), + DISCOVERY_PORT), + networkInterface, selflineTable, nodeuuid,10000L); + ipd.setCon((mpa) -> { + // System.out.println("添加本地IPv6链路:"+mpa); + try { + if (!checkIsSelf(mpa)) + addRemoteLines(mpa); + } catch (UnknownHostException e) { + } + }); + ipd.start(); + ipmd.add(ipd); + } else if (bidr instanceof Inet4Address) { + // bidr=InetAddress.getByName("0.0.0.0"); + IPMulticastDiscovery ipd2 = new IPMulticastDiscovery( + new InetSocketAddress(bidr, DISCOVERY_PORT), + new InetSocketAddress(InetAddress.getByName("224.0.0.86"), + DISCOVERY_PORT), + networkInterface, selflineTable,nodeuuid, 10000L); + ipd2.setCon((mpa) -> { + // System.out.println("添加本地IPv4链路:"+mpa); + try { + if (!checkIsSelf(mpa)) + addRemoteLines(mpa); + } catch (UnknownHostException e) { + } + }); + ipd2.start(); + ipmd.add(ipd2); + } + if(debug) + System.out.println("开启网卡地址广播:" + networkInterface); + } catch (BindException e) { + // e.printStackTrace(); + } catch (UnknownHostException e) { + e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } - System.out.println("移除网卡:" + ipMulticastDiscovery.getNinterface()); + } + // } } - Enumeration eu2 = NetworkInterface.getNetworkInterfaces(); - while (eu2.hasMoreElements()) { - NetworkInterface networkInterface = (NetworkInterface) eu2.nextElement(); - if (networkInterface.getDisplayName() - .startsWith(IPv6TUNLoopbackNetworkLink.KLALB_DECENTRALIZED_S_RV6_NETWORK)) { - continue; - } - - if (networkInterfaceExcept.contains(networkInterface)) { - continue; - } - - if (networkInterface.isUp()) { - - Enumeration ei = networkInterface.getInetAddresses(); - loop: while (ei.hasMoreElements()) { - InetAddress bidr = (InetAddress) ei.nextElement(); - - for (Iterator iterator = ipmd.iterator(); iterator.hasNext();) { - IPMulticastDiscovery ipMulticastDiscovery = (IPMulticastDiscovery) iterator.next(); - if (networkInterface.equals(ipMulticastDiscovery.getNinterface()) - && bidr.equals(ipMulticastDiscovery.getBind().getAddress())) { - continue loop; - } - } - - try { - // InetAddress bidr=InetAddress.getByName("::0"); - - if (bidr instanceof Inet6Address) { - IPMulticastDiscovery ipd = new IPMulticastDiscovery( - new InetSocketAddress(bidr, DISCOVERY_PORT), - new InetSocketAddress(InetAddress.getByName("ff02::2486"), - DISCOVERY_PORT), - networkInterface, selflineTable, 10000L); - ipd.setCon((mpa) -> { - // System.out.println("添加本地IPv6链路:"+mpa); - try { - if (!checkIsSelf(mpa)) - addRemoteLines(mpa); - } catch (UnknownHostException e) { - } - }); - ipd.start(); - ipmd.add(ipd); - } else if (bidr instanceof Inet4Address) { - // bidr=InetAddress.getByName("0.0.0.0"); - IPMulticastDiscovery ipd2 = new IPMulticastDiscovery( - new InetSocketAddress(bidr, DISCOVERY_PORT), - new InetSocketAddress(InetAddress.getByName("224.0.0.86"), - DISCOVERY_PORT), - networkInterface, selflineTable, 10000L); - ipd2.setCon((mpa) -> { - // System.out.println("添加本地IPv4链路:"+mpa); - try { - if (!checkIsSelf(mpa)) - addRemoteLines(mpa); - } catch (UnknownHostException e) { - } - }); - ipd2.start(); - ipmd.add(ipd2); - } - System.out.println("添加网卡:" + networkInterface); - } catch (BindException e) { - // e.printStackTrace(); - } catch (UnknownHostException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - - } - // } - } - } - - } catch (SocketException e) { - } finally { - lineslock.writeLock().unlock(); } } + } - private boolean checkIsSelf(MultipurposeSocketAddress inetAddress) throws UnknownHostException { + }; - return inetAddress.getInetAddress().isAnyLocalAddress() - || inetAddress.getInetAddress().isLoopbackAddress() || selflineTable.contains(inetAddress); - } - }; - - private TimerTask tsk2=new TimerTask() { - - @Override - public void run() { - - List nt=ntptable; - //System.out.println("srv6 ip"+nb); - if(nvc2!=null) { - Set sp=nvc2.getPeers(); + private boolean checkIsSelf(MultipurposeSocketAddress inetAddress) throws UnknownHostException { + + return inetAddress.getInetAddress().isAnyLocalAddress() || inetAddress.getInetAddress().isLoopbackAddress() + || selflineTable.contains(inetAddress); + } + + private boolean checkIsSelfLocator(InetAddress inetAddress) { + return srv6Router.getLocator().getAddress().toInet6Address().equals(inetAddress); + } + + private TimerTask tsk2 = new TimerTask() { + + @Override + public void run() { + + List nt = ntptable; + // System.out.println("srv6 ip"+nb); + if (nvc2 != null) { + Set sp = nvc2.getPeers(); for (MultipurposeSocketAddress server : nt) { - sp.add(new NTPPeer(server, NTPv4Packet.NTP_CLIENT)); - - } - sp.removeIf((p)->{ - for (MultipurposeSocketAddress server : nt) { - if(server.equals(p.getAddress())) { - return false; - } - } - return true; - }); - } - } - }; - + sp.add(new NTPPeer(server, NTPv4Packet.NTP_CLIENT)); - private TimerTask tsk3=new TimerTask() { - - @Override - public void run() { - if(srv6Router!=null&&routingProtocol!=null) { - Set nb=srv6Router.getLocators(); - for (Iterator iterator = nb.iterator(); iterator.hasNext();) { - Inet6AddressGroup neighbor = (Inet6AddressGroup) iterator.next(); - try { - InetSocketAddress iaddr= new InetSocketAddress( neighbor.getAddress(),KLALBRoutingProtocol.DEFAULT_PORT); - apiClient.requestOpenLines(iaddr,(v)->{ - ThreadTool.makeVDaemonThreadIfSupport("线路添加任务", () -> { - for (MultipurposeSocketAddress msa:v) { - // System.out.print(msa); - addRemoteLines(msa); - } - }).start(); - }); - } catch (IOException e) { - e.printStackTrace(); - } - + } + sp.removeIf((p) -> { + for (MultipurposeSocketAddress server : nt) { + if (server.equals(p.getAddress())) { + return false; + } } + return true; + }); + } + } + }; + + private TimerTask tsk3 = new TimerTask() { + + @Override + public void run() { + if (srv6Router != null && routingProtocol != null) { + Set nb = srv6Router.getLocators(); + for (Iterator iterator = nb.iterator(); iterator.hasNext();) { + IPv6AddressGroup neighbor = (IPv6AddressGroup) iterator.next(); + try { + InetSocketAddress iaddr = new InetSocketAddress(neighbor.getAddress().toInet6Address(), + KLALBRoutingProtocol.DEFAULT_PORT); + apiClient.requestOpenLines(iaddr, (v) -> { + ThreadTool.makeVDaemonThreadIfSupport("线路添加任务", () -> { + for (MultipurposeSocketAddress msa : v) { + // System.out.print(msa); + addRemoteLines(msa); + } + }).start(); + }); + } catch (IOException e) { + e.printStackTrace(); + } + } } - }; - + } + }; public SpeedAndTrafficMonitorDataImpl getLinkMonitor() { return linkMonitor; @@ -395,12 +413,6 @@ public class KLALBController { public SpeedAndTrafficMonitorDataImpl getDatatMonitor() { return datatMonitor; } - - private HighAccuracyClock clock; - - public HighAccuracyClock getClock() { - return clock; - } private SocketType streamSocketType = new KLALBStreamSocketType(); @@ -418,7 +430,7 @@ public class KLALBController { public SocketType getStreamSocketType() { return streamSocketType; } - + private SocketType datagramSocketType = new KLALBDatagramSocketType(); public class KLALBDatagramSocketType extends SocketType { @@ -426,8 +438,8 @@ public class KLALBController { public KLALBDatagramSocketType() { super(new KLALBVirtualDatagramSocketFactory(KLALBController.this), new KLALBVirtualDatagramServerSocketFactory(KLALBController.this)); - //new KLALBVirtualDatagramSocketChannelFactory(KLALBController.this), - //new KLALBVirtualDatagramServerSocketChannelFactory(KLALBController.this)); + // new KLALBVirtualDatagramSocketChannelFactory(KLALBController.this), + // new KLALBVirtualDatagramServerSocketChannelFactory(KLALBController.this)); } } @@ -452,7 +464,7 @@ public class KLALBController { // private Inet6AddressGroup self; - public Inet6AddressGroup getSelf() { + public IPv6AddressGroup getSelf() { return srv6Router.getLocator(); } @@ -465,13 +477,13 @@ public class KLALBController { private PortBinder streamPortBinder = new PortBinder(this); private PortBinder datagramPortBinder = new PortBinder(this); - + private PortBinder rawPortBinder = new PortBinder(this); protected PortBinder getStreamPortBinder() { return streamPortBinder; } - + protected PortBinder getDatagramPortBinder() { return datagramPortBinder; } @@ -482,8 +494,8 @@ public class KLALBController { public void reconnectImmediately() { for (Iterator iterator = srv6Router.getLinkTabel().iterator(); iterator.hasNext();) { - IPv6NetworkLink val=iterator.next(); - if(val instanceof KLALBRemoteLine) { + IPv6NetworkLink val = iterator.next(); + if (val instanceof KLALBRemoteLine) { KLALBRemoteLine klalbRemoteLine = (KLALBRemoteLine) val; klalbRemoteLine.reconnectImmediately(); @@ -491,44 +503,37 @@ public class KLALBController { } } - private NTPv4Protocol nvc2; private KLALBRoutingProtocolAPIServer apiServer; private KLALBRoutingProtocolAPIClient apiClient; - /*private PacketReceiver prc = new PacketReceiver(); - private class PacketReceiver implements Consumer { + private KLALBControllerConfigItem configItem; - @Override - public void accept(KLALBPacket rec) { - switch (rec.getType()) { - case KLALBPacket.ADDLINES: - ADDLINESPacket lpt = (ADDLINESPacket) rec; - String s = lpt.getLines(); - ThreadTool.makeVDaemonThreadIfSupport("线路添加任务", () -> { - Scanner scn = new Scanner(s); - while (scn.hasNext()) { - String sn = scn.nextLine(); - MultipurposeSocketAddress msa = new MultipurposeSocketAddress(sn); - addRemoteLines(msa); - - } - }).start(); - break; - default: - break; - - } - } - - }*/ + /* + * private PacketReceiver prc = new PacketReceiver(); private class + * PacketReceiver implements Consumer { + * + * @Override public void accept(KLALBPacket rec) { switch (rec.getType()) { case + * KLALBPacket.ADDLINES: ADDLINESPacket lpt = (ADDLINESPacket) rec; String s = + * lpt.getLines(); ThreadTool.makeVDaemonThreadIfSupport("线路添加任务", () -> { + * Scanner scn = new Scanner(s); while (scn.hasNext()) { String sn = + * scn.nextLine(); MultipurposeSocketAddress msa = new + * MultipurposeSocketAddress(sn); addRemoteLines(msa); + * + * } }).start(); break; default: break; + * + * } } + * + * } + */ public void addRemoteLines(List select) { - for(MultipurposeSocketAddress target:select) { + for (MultipurposeSocketAddress target : select) { addRemoteLines(target); } } + public List addRemoteLines(MultipurposeSocketAddress target) { lineslock.writeLock().lock(); try { @@ -570,9 +575,18 @@ public class KLALBController { // e.printStackTrace(); } if (!checkContainsTargetAndBind(target, bind)) { - KLALBRemoteLine line = new KLALBRemoteLine(target, bind); + int count=1; + if(configItem!=null) { + count=configItem.getLinkConnectionsCount(); + } + if(count<=0) { + count=1; + } + for(int i=0;i rmved = new ArrayList<>(); for (Iterator iterator = srv6Router.getLinkTabel().iterator(); iterator.hasNext();) { - IPv6NetworkLink link= iterator.next(); - if(link instanceof KLALBRemoteLine) { - KLALBRemoteLine klalbRemoteLine = (KLALBRemoteLine)link; - if (mpsa.equals(klalbRemoteLine.getSocketAddress())) { - klalbRemoteLine.close(); - rmved.add(klalbRemoteLine); - } + IPv6NetworkLink link = iterator.next(); + if (link instanceof KLALBRemoteLine) { + KLALBRemoteLine klalbRemoteLine = (KLALBRemoteLine) link; + if (mpsa.equals(klalbRemoteLine.getSocketAddress())) { + klalbRemoteLine.close(); + rmved.add(klalbRemoteLine); + } } } return rmved; @@ -614,37 +628,38 @@ public class KLALBController { public Inet6Address getRemoteVaddrBySocketAddress(MultipurposeSocketAddress target) throws SocketTimeoutException { KLALBRemoteLine kr = null; for (Iterator iterator = srv6Router.getLinkTabel().iterator(); iterator.hasNext();) { - IPv6NetworkLink link= iterator.next(); - if(link instanceof KLALBRemoteLine) { - KLALBRemoteLine klalbRemoteLine = (KLALBRemoteLine) link; - if (target.equals(klalbRemoteLine.getSocketAddress()) && klalbRemoteLine.getBindAddress() == null) { - kr = klalbRemoteLine; - break; - } + IPv6NetworkLink link = iterator.next(); + if (link instanceof KLALBRemoteLine) { + KLALBRemoteLine klalbRemoteLine = (KLALBRemoteLine) link; + if (target.equals(klalbRemoteLine.getSocketAddress()) && klalbRemoteLine.getBindAddress() == null) { + kr = klalbRemoteLine; + break; + } } } if (kr == null) { - kr = new KLALBRemoteLine(target); + kr = new KLALBRemoteLine(this, target); addRemoteLine(kr); kr.waitForRemoteVaddrAvaliable(20000); } else { kr.reconnectImmediately(); kr.waitForRemoteVaddrAvaliable(20000); } - return kr.getRemoteVaddr().getAddress(); + return kr.getRemoteVaddr().getAddress().toInet6Address(); } private boolean checkContainsTargetAndBind(MultipurposeSocketAddress target, MultipurposeSocketAddress bind) { boolean b = false; for (Iterator iterator = srv6Router.getLinkTabel().iterator(); iterator.hasNext();) { - IPv6NetworkLink link= iterator.next(); - if(link instanceof KLALBRemoteLine) { - KLALBRemoteLine klalbRemoteLine = (KLALBRemoteLine) link; - if (bind.equals(klalbRemoteLine.getBindAddress()) && target.equals(klalbRemoteLine.getSocketAddress())) { - b = true; - break; - } + IPv6NetworkLink link = iterator.next(); + if (link instanceof KLALBRemoteLine) { + KLALBRemoteLine klalbRemoteLine = (KLALBRemoteLine) link; + if (bind.equals2(klalbRemoteLine.getBindAddress()) + && target.equals2(klalbRemoteLine.getSocketAddress())) { + b = true; + break; + } } } return b; @@ -653,23 +668,21 @@ public class KLALBController { private boolean checkContainsTarget(MultipurposeSocketAddress target) { boolean b = false; for (Iterator iterator = srv6Router.getLinkTabel().iterator(); iterator.hasNext();) { - IPv6NetworkLink link= iterator.next(); - if(link instanceof KLALBRemoteLine) { - KLALBRemoteLine klalbRemoteLine = (KLALBRemoteLine) link; - if (target.equals(klalbRemoteLine.getSocketAddress())) { - b = true; - break; + IPv6NetworkLink link = iterator.next(); + if (link instanceof KLALBRemoteLine) { + KLALBRemoteLine klalbRemoteLine = (KLALBRemoteLine) link; + if (target.equals(klalbRemoteLine.getSocketAddress())) { + b = true; + break; + } } } - } return b; } public void addRemoteLine(KLALBRemoteLine krs) { lineslock.writeLock().lock(); try { - //krs.setPacketReceiver(prc); - krs.setKlalbController(this); krs.setLocalVaddrSupplier(() -> { return getSelf(); }); @@ -705,9 +718,9 @@ public class KLALBController { UDPPacket rec = (UDPPacket) pl; if (showpacket) System.out.println("UDP_RX:" + rec); - Inet6Address srcA = packx.getSourceAddress(); + IPv6Address srcA = packx.getSourceAddress(); PortPacket pt = (PortPacket) rec; - if(datagramPortBinder.distributePacketToConsumer(srcA, pt)) { + if (datagramPortBinder.distributePacketToConsumer(srcA, pt)) { return true; } } @@ -731,14 +744,16 @@ public class KLALBController { System.out.println("KLALB_RX:" + rec); if (rec instanceof PortPacket) { rec.setCE(packx.isCE()); - Inet6Address srcA = packx.getSourceAddress(); + IPv6Address srcA = packx.getSourceAddress(); PortPacket pt = (PortPacket) rec; if (streamPortBinder.distributePacketToConsumer(srcA, pt)) { - }else { - if (!(pt instanceof RSTPacket)) - HighPerformanceExecutor.defaultExecutor.execute(() -> { - sendPacketToAddress(srcA, 0, new RSTPacket(pt.getDstPort(), pt.getSrcPort()), 2); + } else { + if (!(pt instanceof RSTPacket)) { + srv6Router.enqueuePacketSendTask(() -> { + return createPacketToAddress(srcA, 0, new RSTPacket(pt.getDstPort(), pt.getSrcPort()), + 2); }); + } } } } @@ -748,94 +763,101 @@ public class KLALBController { } - private void loadSRv6ProtocolStack(Inet6AddressGroup selfx, boolean enableVirtualAdapter) { - srv6Router = new SRv6Router(selfx); + private void loadSRv6ProtocolStack(IPv6AddressGroup selfx, boolean enableVirtualAdapter) { + srv6Router = new SRv6Router(selfx, clock); srv6Router.runKLALBRouteProtocol(); routingProtocol = srv6Router.getKlalbRouteProtol(); - routingProtocol.addReceiver((addr,packet)->{ - - + routingProtocol.addReceiver((addr, packet) -> { + }); - - System.out.println("SRv6协议栈已加载"); - - if (enableVirtualAdapter) + + System.out.println(" Loaded: SRv6 Stack"); + + String name=(configItem!=null)?configItem.getTUNName():CONST.KLALB_S_RV6; + if (enableVirtualAdapter&&(name!=null)) { try { - IPv6TUNLoopbackNetworkLink tunlink = new IPv6TUNLoopbackNetworkLink( - new Inet6AddressGroup(srv6Router.getLocator().getAddress(), 32), SRv6Router.MTU, dnsAddresses); + IPv6TUNLoopbackNetworkLink tunlink = new IPv6TUNLoopbackNetworkLink(name, + new IPv6AddressGroup(srv6Router.getLocator().getAddress(), 32), SRv6Router.MTU, dnsAddresses); tunlink.setMonitor(datatMonitor); - //srv6Router.getLinkTabel().add(tunlink); + // srv6Router.getLinkTabel().add(tunlink); srv6Router.getinLoopback().setFallbackLink(tunlink); - System.out.println("虚拟网卡已挂载"); + System.out.println(" Mounted: Tun Adapter"); + } catch (Exception e) { System.err.println("挂载虚拟网卡失败,可能是无管理员权限?请尝试使用管理员权限运行软件"); e.printStackTrace(); } - - - srv6Router.getinLoopback(). getProtocolNumberRegister().put(UDPPacket.UDP_PROTOCOL_NUMBER, new UDPProtocolPacketConsumer()); - System.out.println("UDP协议已加载"); + }else { + System.out.println(" Tun Adapter Disbaled"); + + } + srv6Router.getinLoopback().getProtocolNumberRegister().put(UDPPacket.UDP_PROTOCOL_NUMBER, + new UDPProtocolPacketConsumer()); + System.out.println(" Loaded: UDP Protocol"); srv6Router.getinLoopback().getProtocolNumberRegister().put(KLALBPacket.KLALB_PROTOCOL_NUMBER, new KLALBProtocolPacketConsumer()); - System.out.println("KLALB协议已加载"); - String iproxyname="KLALB_"+UUID.randomUUID(); + System.out.println(" Loaded: KLALB Protocol"); + String iproxyname = "KLALB_" + UUID.randomUUID(); registerToProxyTypeAs(iproxyname); - - clock = new HighAccuracyClock(); + NTPContext context = new NTPContext(clock); context.syncToSystem(); - //System.out.println(context); + // System.out.println(context); try { - NTPv4Protocol nvc = new NTPv4Protocol(context, new MultipurposeSocketAddress("{"+iproxyname+"_Datagram}0.0.0.0:123")); + NTPv4Protocol nvc = new NTPv4Protocol(context, + new MultipurposeSocketAddress("{" + iproxyname + "_Datagram}0.0.0.0:123")); srv6Router.addSRv6RouterListener(new SRv6RouterListener() { - + @Override public void onLinkChanged(SRv6Router router, IPv6NetworkLink link) { - List nb=router.getNeighbors(); - //System.out.println("srv6 ip"+nb); - Set sp=nvc.getPeers(); + List nb = router.getNeighbors(); + // System.out.println("srv6 ip"+nb); + Set sp = nvc.getPeers(); for (Neighbor neighbor : nb) { - if(neighbor.getLocator()!=null) - sp.add(new NTPPeer(new MultipurposeSocketAddress(iproxyname+"_Datagram",neighbor.getLocator().getAddress().getHostAddress(),123), NTPv4Packet.NTP_SYMMETRIC_ACTIVE)); - + if (neighbor.getLocator() != null) + sp.add(new NTPPeer( + new MultipurposeSocketAddress(iproxyname + "_Datagram", + neighbor.getLocator().getAddress().toString(), 123), + NTPv4Packet.NTP_SYMMETRIC_ACTIVE)); + } - sp.removeIf((p)->{ + sp.removeIf((p) -> { for (Neighbor neighbor : nb) { try { - if(neighbor.getLocator()!=null) - if(neighbor.getLocator().getAddress().equals(p.getAddress().getInetAddress())) { - return false; - } + if (neighbor.getLocator() != null) + if (neighbor.getLocator().getAddress().toInet6Address() + .equals(p.getAddress().getInetAddress())) { + return false; + } } catch (UnknownHostException e) { e.printStackTrace(); } } - return true; + return true; }); } }); nvc2 = new NTPv4Protocol(context, new MultipurposeSocketAddress("{UDP}0.0.0.0:0"));// 106.55.184.199 - - System.out.println("NTP时钟同步协议已加载"); + + System.out.println(" Loaded: NTP Module"); } catch (UnknownHostException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); - }// 106.55.184.199 + } // 106.55.184.199 } - private void loadController() { - this.apiServer=new KLALBRoutingProtocolAPIServer(routingProtocol, this); - this.apiClient=new KLALBRoutingProtocolAPIClient(routingProtocol); - twk.schedule(tsk1, 2000, 2000); - twk.schedule(tsk2, 2000, 2000); + this.apiServer = new KLALBRoutingProtocolAPIServer(routingProtocol, this); + this.apiClient = new KLALBRoutingProtocolAPIClient(routingProtocol); + twk.schedule(tsk1, 5000, 5000); + twk.schedule(tsk2, 5000, 5000); twk.schedule(tsk3, 5000, 5000); } - + public KLALBController() { this(true, null); } @@ -846,36 +868,77 @@ public class KLALBController { public KLALBController(Inet6Address self, boolean enableVirtualAdapter, List dnsaddr) { this.dnsAddresses = dnsaddr; - Inet6AddressGroup selfg = new Inet6AddressGroup(self, PREFIX); + IPv6AddressGroup selfg = new IPv6AddressGroup(IPv6Address.valueOf(self), PREFIX); initKLALB(enableVirtualAdapter, selfg); } - protected void initKLALB(boolean enableVirtualAdapter, Inet6AddressGroup selfg) { + protected void initKLALB(boolean enableVirtualAdapter, IPv6AddressGroup selfg) { loadSRv6ProtocolStack(selfg, enableVirtualAdapter); loadController(); } - public KLALBController(boolean enableVirtualAdapter, List dnsaddr) { this.dnsAddresses = dnsaddr; - SecureRandom sc = new SecureRandom(); - byte[] v = new byte[16]; - sc.nextBytes(v); - v[0] = (byte) 0x24; - v[1] = (byte) 0x86; - v[2] = 0; - v[3] = 1; - v[14] = 0; - v[15] = 1; - Inet6AddressGroup selfx = null; - try { - selfx = new Inet6AddressGroup((Inet6Address) InetAddress.getByAddress(v), PREFIX); - } catch (UnknownHostException e) { - e.printStackTrace(); - } + + IPv6AddressGroup selfx = new IPv6AddressGroup(KLALBUtils.randomKLALBIPv6Address(), PREFIX); initKLALB(enableVirtualAdapter, selfx); } + public KLALBController(KLALBControllerConfigItem configItem) { + this.configItem = configItem; + String vase = configItem.getVirtualAddress(); + this.dnsAddresses = new ArrayList(); + List vdns = configItem.getDNS(); + if (vdns != null) { + dnsAddresses.addAll(vdns); + } + IPv6AddressGroup selfx = null; + if (vase != null) { + try { + selfx = new IPv6AddressGroup(IPv6Address.valueOf(vase), PREFIX); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + } else { + selfx = new IPv6AddressGroup(KLALBUtils.randomKLALBIPv6Address(), PREFIX); + + } + + initKLALB(true, selfx); + Long vasn = configItem.getVirtualASN(); + if (vasn != null) { + getIpv6Router().setASN(vasn); + } + + List linele = configItem.getLineTable(); + if (linele != null) { + getSelflineTable().addAll(linele); + } + List linetoc = configItem.getConnectLineTable(); + if (linetoc != null) { + linetoc.forEach((aline) -> { + addRemoteLines(aline); + }); + } + + List ntps = configItem.getNtpServerTable(); + if (ntps != null) { + getNTPTable().addAll(ntps); + } + + List strexc = configItem.getNetworkInterfaceExcepts(); + getNetworkInterfaceExcept().clear(); + if (strexc != null) { + for (String strexci : strexc) { + try { + getNetworkInterfaceExcept().add(NetworkInterface.getByName(strexci)); + } catch (SocketException e) { + e.printStackTrace(); + } + } + } + } + public KLALBController(List daddr) { this(true, daddr); } @@ -891,7 +954,7 @@ public class KLALBController { protected KLALBVirtualSocketImpl createVirtualSocketImpl() { return new KLALBVirtualSocketImpl(this); } - + protected KLALBVirtualDatagramSocketImpl createVirtualDatagramSocketImpl() { return new KLALBVirtualDatagramSocketImpl(this); } @@ -912,72 +975,69 @@ public class KLALBController { srv6Router.getLinkTabel().removeIf((v) -> { return (v instanceof KLALBRemoteLine) && ((KLALBRemoteLine) v).isClosed(); }); - srv6Router.updateRouteTabel(); + srv6Router.updateRouteTabel(); } } }, 100, 100); - } - - protected void sendPacketToAddress(Inet6Address addr, int flowlabel, IPv6Packet.IPv6Payload packet) { - sendPacketToAddress(addr, flowlabel, packet, 1); + trtr.scheduleAtFixedRate(new TimerTask() { + + @Override + public void run() { + if (srv6Router != null) { + srv6Router.sortRouteTabel(); + } + + } + }, 10, 10); } - protected void sendPacketToAddress(Inet6Address addr, int flowlabel, IPv6Packet.IPv6Payload packet, int count) - { - //HighPerformanceExecutor.defaultExecutor.execute(() -> { + protected IPv6Packet createPacketToAddress(IPv6Address addr, int flowlabel, IPv6Packet.IPv6Payload packet) { + return createPacketToAddress(addr, flowlabel, packet, 1); + } - IPv6Packet ipv = new IPv6Packet(); + protected IPv6Packet createPacketToAddress(IPv6Address addr, int flowlabel, IPv6Packet.IPv6Payload packet, + int count) { + // HighPerformanceExecutor.defaultExecutor.execute(() -> { - if (showpacket) - System.out.println("KLALB_TX:" + packet); + IPv6Packet ipv = new IPv6Packet(); - ipv.setVersion(6); - ipv.setTrafficClass(0); - ipv.setFlowLabel(flowlabel); - ipv.setHopLimit(255); - ipv.setSourceAddress(getSelf().getAddress()); - ipv.setDestinationAddress(addr); - ipv.setPriority(packet.getPriority()); - // if(packet instanceof DATATPacket) { - ipv.setPromise(true); - // } - ipv.enableECN(); - /* - * if(b) ipv.markCE(); - */ - ipv.setPayload(packet); - packet.setParent(ipv); - // System.out.println(ipv.getPayload().getProtocolNumber()); - /* - * System.out.println("SND:"+ipv.getPayload().getData()); byte[]b=new - * byte[ipv.getPayload().getData().limit()]; ipv.getPayload().getData().get(0, - * b); System.out.println(Arrays.toString(b)); - */ - // packet.getSendRecord().add(null); - if(packet instanceof KLALBPacket) + if (showpacket) + System.out.println("KLALB_TX:" + packet); + + ipv.setVersion(6); + ipv.setTrafficClass(0); + ipv.setFlowLabel(flowlabel); + ipv.setHopLimit(255); + ipv.setSourceAddress(getSelf().getAddress()); + ipv.setDestinationAddress(addr); + + ipv.enableECN(); + + ipv.setPayload(packet); + packet.setParent(ipv); + + if (packet instanceof KLALBPacket) ((KLALBPacket) packet).incSendCounter(); - packet.putTimePassport("packedInIPv6"); - packet.printPassport(); - ipv.putTimePassport("packed"); - srv6Router.insertSRHandRoutePacket(ipv); - // srv6Router.putProtocolNumberPacketAndInsertSRHAsync(ipv); - //}); + packet.putTimePassport("packedInIPv6"); + packet.printPassport(); + ipv.putTimePassport("packed"); + return ipv; } - private Map> bandwidthDistrmap = new ConcurrentHashMap<>(); + private Map> bandwidthDistrmap = new ConcurrentHashMap<>(); private Lock bdmLock = new ReentrantLock(); - protected Map> getBandwidthDistrmap() { + protected Map> getBandwidthDistrmap() { return bandwidthDistrmap; } - protected void registerDistUpdateConsumer(Inet6Address targetaAddress, PortPair portp, + protected void registerDistUpdateConsumer(IPv6Address targetaAddress, PortPair portp, Consumer updateConsumer) { if (updateConsumer == null) { - System.out.println("连接" + targetaAddress.getHostAddress() + " " + portp + " 释放带宽!"); + System.out.println("连接" + targetaAddress + " " + portp + " 释放带宽!"); bdmLock.lock(); try { BandwidthDistributer bdr = bandwidthDistrmap.get(targetaAddress); @@ -992,7 +1052,7 @@ public class KLALBController { bdmLock.unlock(); } } else { - System.out.println("连接" + targetaAddress.getHostAddress() + " " + portp + " 申请带宽!"); + System.out.println("连接" + targetaAddress + " " + portp + " 申请带宽!"); bdmLock.lock(); try { BandwidthDistributer bdr = bandwidthDistrmap.get(targetaAddress); @@ -1012,7 +1072,7 @@ public class KLALBController { } } - protected void updateBandwidthRequest(Inet6Address targetaAddress, PortPair portp, long bandwidth) { + protected void updateBandwidthRequest(IPv6Address targetaAddress, PortPair portp, long bandwidth) { if (bandwidth < 0) { throw new IllegalArgumentException(bandwidth + "<0"); } @@ -1023,7 +1083,7 @@ public class KLALBController { if (bdr != null) { bdr.setBandwidthRequest(portp, bandwidth); } else { - throw new NullPointerException("连接" + targetaAddress.getHostAddress() + " " + portp + " 未申请带宽!"); + throw new NullPointerException("连接" + targetaAddress + " " + portp + " 未申请带宽!"); } } @@ -1052,14 +1112,18 @@ public class KLALBController { return listens; } - private Listntptable=new CopyOnWriteArrayList(); + private List ntptable = new CopyOnWriteArrayList(); private KLALBRoutingProtocol routingProtocol; + public List getNTPTable() { - return ntptable;//nvc2.getPeers().add(new NTPPeer("{UDP}106.55.184.199:123", NTPv4Packet.NTP_CLIENT)); + return ntptable;// nvc2.getPeers().add(new NTPPeer("{UDP}106.55.184.199:123", + // NTPv4Packet.NTP_CLIENT)); } - + public KLALBControllerConfigItem getConfigItem() { + return configItem; + } /* * @Override public void listen(MultipurposeSocketAddress msa) { // TODO diff --git a/src/org/kne/cloud/network/klalb/KLALBControllerConfigItem.java b/src/org/kne/cloud/network/klalb/KLALBControllerConfigItem.java index 3d3c9c3..1043faf 100644 --- a/src/org/kne/cloud/network/klalb/KLALBControllerConfigItem.java +++ b/src/org/kne/cloud/network/klalb/KLALBControllerConfigItem.java @@ -23,6 +23,16 @@ public class KLALBControllerConfigItem extends KLALBConfigItem { private ListLineTable=new ArrayList<>(); private ListConnectLineTable=new ArrayList<>(); private ListntpServerTable=new ArrayList<>(); + private boolean denyLineTableQuery=false; + private boolean denyLineTableBroadcast=false; + private String congestionAlgorithm="BBR"; + private double delayUpperBound=1.20; + private double delayLowerBound=1.15; + private long nagleDelayTime=1000000L; + private long linkNagleDelayTime=1000000L; + private int linkConnectionsCount=1; + private String TUNName=CONST.KLALB_S_RV6; + public void setNetworkInterfaceExcepts(List networkInterfaceExcepts) { NetworkInterfaceExcepts = networkInterfaceExcepts; } @@ -34,24 +44,6 @@ public class KLALBControllerConfigItem extends KLALBConfigItem { - public KLALBControllerConfigItem(String type, boolean nogui, String virtualAddress, Long virtualASN, - List dNS, MultipurposeSocketAddress tCPListen, MultipurposeSocketAddress uDPListen, - String virtualSocketName, List lineTable, - List connectLineTable) { - super(type); - this.nogui = nogui; - VirtualAddress = virtualAddress; - VirtualASN = virtualASN; - DNS = dNS; - TCPListen = tCPListen; - UDPListen = uDPListen; - VirtualSocketName = virtualSocketName; - LineTable = lineTable; - ConnectLineTable = connectLineTable; - } - - - public List getNetworkInterfaceExcepts() { return NetworkInterfaceExcepts; @@ -195,16 +187,126 @@ public class KLALBControllerConfigItem extends KLALBConfigItem { this.ntpServerTable = ntpServerTable; } + + + + public String getCongestionAlgorithm() { + return congestionAlgorithm; + } + + + + + public void setCongestionAlgorithm(String congestionAlgorithm) { + this.congestionAlgorithm = congestionAlgorithm; + } + + + + + public double getDelayUpperBound() { + return delayUpperBound; + } + + + + + public void setDelayUpperBound(double delayUpperBound) { + this.delayUpperBound = delayUpperBound; + } + + + + + public double getDelayLowerBound() { + return delayLowerBound; + } + + + + + public void setDelayLowerBound(double delayLowerBound) { + this.delayLowerBound = delayLowerBound; + } + + + + + public boolean isDenyLineTableQuery() { + return denyLineTableQuery; + } + + + public void setDenyLineTableQuery(boolean denyLineTableQuery) { + this.denyLineTableQuery = denyLineTableQuery; + } + + + public boolean isDenyLineTableBroadcast() { + return denyLineTableBroadcast; + } + + + public void setDenyLineTableBroadcast(boolean denyLineTableBroadcast) { + this.denyLineTableBroadcast = denyLineTableBroadcast; + } + + + public long getNagleDelayTime() { + return nagleDelayTime; + } + + + public void setNagleDelayTime(long nagleDelayTime) { + this.nagleDelayTime = nagleDelayTime; + } + + + public int getLinkConnectionsCount() { + return linkConnectionsCount; + } + + + + public void setLinkConnectionsCount(int linkConnectionsCount) { + this.linkConnectionsCount = linkConnectionsCount; + } + + + public long getLinkNagleDelayTime() { + return linkNagleDelayTime; + } + + + public void setLinkNagleDelayTime(long linkNagleDelayTime) { + this.linkNagleDelayTime = linkNagleDelayTime; + } + + + public String getTUNName() { + return TUNName; + } + + + public void setTUNName(String tUNName) { + TUNName = tUNName; + } + + @Override public String toString() { return "KLALBControllerConfigItem [language=" + language + ", nogui=" + nogui + ", VirtualAddress=" + VirtualAddress + ", VirtualASN=" + VirtualASN + ", DNS=" + DNS + ", TCPListen=" + TCPListen + ", UDPListen=" + UDPListen + ", VirtualSocketName=" + VirtualSocketName + ", LineTable=" + LineTable + ", ConnectLineTable=" + ConnectLineTable + ", ntpServerTable=" + ntpServerTable - + ", NetworkInterfaceExcepts=" + NetworkInterfaceExcepts + "]"; + + ", denyLineTableQuery=" + denyLineTableQuery + ", denyLineTableBroadcast=" + denyLineTableBroadcast + + ", congestionAlgorithm=" + congestionAlgorithm + ", delayUpperBound=" + delayUpperBound + + ", delayLowerBound=" + delayLowerBound + ", nagleDelayTime=" + nagleDelayTime + + ", linkNagleDelayTime=" + linkNagleDelayTime + ", linkConnectionsCount=" + linkConnectionsCount + + ", TUNName=" + TUNName + ", NetworkInterfaceExcepts=" + NetworkInterfaceExcepts + "]"; } @@ -218,11 +320,23 @@ public class KLALBControllerConfigItem extends KLALBConfigItem { result = prime * result + ((LineTable == null) ? 0 : LineTable.hashCode()); result = prime * result + ((NetworkInterfaceExcepts == null) ? 0 : NetworkInterfaceExcepts.hashCode()); result = prime * result + ((TCPListen == null) ? 0 : TCPListen.hashCode()); + result = prime * result + ((TUNName == null) ? 0 : TUNName.hashCode()); result = prime * result + ((UDPListen == null) ? 0 : UDPListen.hashCode()); result = prime * result + ((VirtualASN == null) ? 0 : VirtualASN.hashCode()); result = prime * result + ((VirtualAddress == null) ? 0 : VirtualAddress.hashCode()); result = prime * result + ((VirtualSocketName == null) ? 0 : VirtualSocketName.hashCode()); + result = prime * result + ((congestionAlgorithm == null) ? 0 : congestionAlgorithm.hashCode()); + long temp; + temp = Double.doubleToLongBits(delayLowerBound); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(delayUpperBound); + result = prime * result + (int) (temp ^ (temp >>> 32)); + result = prime * result + (denyLineTableBroadcast ? 1231 : 1237); + result = prime * result + (denyLineTableQuery ? 1231 : 1237); result = prime * result + ((language == null) ? 0 : language.hashCode()); + result = prime * result + linkConnectionsCount; + result = prime * result + (int) (linkNagleDelayTime ^ (linkNagleDelayTime >>> 32)); + result = prime * result + (int) (nagleDelayTime ^ (nagleDelayTime >>> 32)); result = prime * result + (nogui ? 1231 : 1237); result = prime * result + ((ntpServerTable == null) ? 0 : ntpServerTable.hashCode()); return result; @@ -264,6 +378,11 @@ public class KLALBControllerConfigItem extends KLALBConfigItem { return false; } else if (!TCPListen.equals(other.TCPListen)) return false; + if (TUNName == null) { + if (other.TUNName != null) + return false; + } else if (!TUNName.equals(other.TUNName)) + return false; if (UDPListen == null) { if (other.UDPListen != null) return false; @@ -284,11 +403,30 @@ public class KLALBControllerConfigItem extends KLALBConfigItem { return false; } else if (!VirtualSocketName.equals(other.VirtualSocketName)) return false; + if (congestionAlgorithm == null) { + if (other.congestionAlgorithm != null) + return false; + } else if (!congestionAlgorithm.equals(other.congestionAlgorithm)) + return false; + if (Double.doubleToLongBits(delayLowerBound) != Double.doubleToLongBits(other.delayLowerBound)) + return false; + if (Double.doubleToLongBits(delayUpperBound) != Double.doubleToLongBits(other.delayUpperBound)) + return false; + if (denyLineTableBroadcast != other.denyLineTableBroadcast) + return false; + if (denyLineTableQuery != other.denyLineTableQuery) + return false; if (language == null) { if (other.language != null) return false; } else if (!language.equals(other.language)) return false; + if (linkConnectionsCount != other.linkConnectionsCount) + return false; + if (linkNagleDelayTime != other.linkNagleDelayTime) + return false; + if (nagleDelayTime != other.nagleDelayTime) + return false; if (nogui != other.nogui) return false; if (ntpServerTable == null) { diff --git a/src/org/kne/cloud/network/klalb/KLALBInputStream.java b/src/org/kne/cloud/network/klalb/KLALBInputStream.java index 1a2a96a..f431a5f 100644 --- a/src/org/kne/cloud/network/klalb/KLALBInputStream.java +++ b/src/org/kne/cloud/network/klalb/KLALBInputStream.java @@ -27,9 +27,10 @@ public class KLALBInputStream extends DataInputStream { throw new StreamCorruptedException("no KLALB format"); } int bv=readInt(); + int mv=readInt(); int sv=readInt(); - if(bv!=CONST.bversion) - throw new StreamCorruptedException("remote version is V"+bv+"."+sv+",not V"+CONST.klalbver); + if((bv!=CONST.bversion)||(mv!=CONST.mversion)) + throw new StreamCorruptedException("remote version is V"+bv+"."+mv+",not V"+CONST.bversion+"."+CONST.mversion); } public KLALBPacket readKLALBPacket() throws IOException { int len=readInt(); diff --git a/src/org/kne/cloud/network/klalb/KLALBMain.java b/src/org/kne/cloud/network/klalb/KLALBMain.java index 8cc409c..6df36ef 100644 --- a/src/org/kne/cloud/network/klalb/KLALBMain.java +++ b/src/org/kne/cloud/network/klalb/KLALBMain.java @@ -19,22 +19,21 @@ import org.kne.cloud.network.SocketChannelListener; import org.kne.cloud.network.SocketListener; import org.kne.cloud.network.ipv6.IPv6NetworkLink; import org.kne.cloud.network.ipv6.RouteItem; -import org.kne.cloud.network.klalb.ui.KLALBStateGUI2; import org.kne.cloud.network.klalb.ui.KLALBStateGUI3; import org.kne.cloud.network.klalb.ui.UIEnv; import org.kne.cloud.network.perf.Kperf; -import org.kne.cloud.network.perf.MemcpyBenchmark; import org.kne.cloud.network.perf.NodeBenchmark; import org.kne.debug.Debuger; import org.kne.debug.TimeDebugger; +import org.kne.membandboost.MembandBenchmark; public class KLALBMain { public static KLALBStateGUI3 ksg; public static void main(String[] args) throws IOException { try { UIEnv.inituie(); - }catch(Exception e) { - + }catch(Throwable e) { + e.printStackTrace(); } System.out.println(CONST.klalb+" V"+CONST.klalbver); Scanner scn=new Scanner(System.in); @@ -46,7 +45,9 @@ public class KLALBMain { dtb.putTime("Create"); kpcje.loadConfigJson(configJson); dtb.putTime("Load"); - System.out.println("SRv6地址:"+kpcje.getKlalbController().getSelf().getAddress().getHostAddress()); + System.out.println("=".repeat(65)); + System.out.println(" - IPv6 Address / End SID: "+kpcje.getKlalbController().getSelf().getAddress()); + System.out.println("=".repeat(65)); try { if(!kpcje.getControllerConfig().isNogui()) openGUI(kpcje); @@ -70,22 +71,28 @@ public class KLALBMain { e.printStackTrace(); } }); + System.out.println("Done!"); while(true) { + System.out.print("KLALB>"); try { String s=scn.nextLine(); - String[]sc=s.trim().split(" "); + String tri=s.trim(); + if(tri.isEmpty()) { + continue; + } + String[]sc=tri.split(" "); switch(sc[0]) { case "?": case "help": - System.out.println("help:查看命令使用说明"); - System.out.println("monitor:显示监视器图形界面"); - System.out.println("lines-state:查看线路状态"); - System.out.println("lines-add <地址:端口>:添加线路"); - System.out.println("lines-remove <地址:端口>:删除线路"); - System.out.println("lines-reconnect:所有离线线路立即尝试重连"); - System.out.println("route:显示路由表"); - System.out.println("kperf <地址:端口>:网络性能测试"); - System.out.println("stop:退出程序"); + System.out.println(" help / ?: see help"); + System.out.println(" monitor: show monitor GUI"); + System.out.println(" links-state: query link states"); + System.out.println(" links-add : add link"); + System.out.println(" links-remove : remove link"); + System.out.println(" links-reconnect: reconnect all link"); + System.out.println(" route: display internal route table"); + System.out.println(" kperf : Porformance benchmark"); + System.out.println(" exit: Exit"); break; case "monitor": @@ -95,8 +102,8 @@ public class KLALBMain { e.printStackTrace(); } break; - case "lines-state": - System.out.println("线路状态:"); + case "links-state": + System.out.println("links state:"); System.out.println("状态\t上传流量\t下载流量\t上传速度\t下载速度\t上传延迟\t下载延迟\t上传抖动\t下载抖动"); synchronized (kpcje.getKlalbController().getLines()) { for (Iterator iterator = kpcje.getKlalbController().getLines().iterator(); iterator.hasNext();) { @@ -108,7 +115,7 @@ public class KLALBMain { } } break; - case "lines-add": + case "links-add": if(sc.length>=2) { MultipurposeSocketAddress mpsa=new MultipurposeSocketAddress(sc[1]); Listaddl=kpcje.getKlalbController().addRemoteLines(mpsa); @@ -125,39 +132,39 @@ public class KLALBMain { System.out.println("请输入要添加地址:端口!"); } break; - case "lines-remove": + case "links-remove": if(sc.length>=2) { MultipurposeSocketAddress mpsa=new MultipurposeSocketAddress(sc[1]); Listrmvl=kpcje.getKlalbController().removeRemoteLines(mpsa); if(rmvl.isEmpty()) { - System.out.println("未找到匹配移除项"); + System.out.println("No matched link has been found."); }else { for (Iterator iterator = rmvl.iterator(); iterator.hasNext();) { KLALBRemoteLine klalbRemoteLine = (KLALBRemoteLine) iterator.next(); - System.out.println("移除成功:"+klalbRemoteLine.getMonitor().getName()); + System.out.println("Successfully removed: "+klalbRemoteLine.getMonitor().getName()); } } }else { - System.out.println("请输入要添加地址:端口!"); + System.out.println("Invalid arguments."); } break; - case "stop": - System.out.println("已退出程序"); + case "exit": + System.out.println("Exited."); System.exit(0); break; - case "lines-reconnect": - System.out.println("尝试重连断开的线路"); + case "links-reconnect": + System.out.println("Trying to reconnect all links."); kpcje.getKlalbController().reconnectImmediately(); break; case "route": List lri=new ArrayList<>( kpcje.getKlalbController().getIpv6Router().getCurrentRouteTabel()); Collections.sort(lri); - System.out.println("路由表:"); - System.out.println("前缀\t协议\t优先级\t开销\t标志\t下一跳\t接口"); + System.out.println("Route Table:"); + System.out.println("Prefix\tProtocol\tPref\tCost\tFlag\tNext Hop\tInterface"); for (Iterator iterator = lri.iterator(); iterator.hasNext();) { RouteItem routeItem = (RouteItem) iterator.next(); - System.out.println(routeItem.getDestination()+"\t"+routeItem.getProto()+"\t"+routeItem.getPre()+"\t"+routeItem.getCost()+"\t"+routeItem.getFlag()+"\t"+routeItem.getNexthop().getHostAddress()+"\t"+routeItem.getDestlink().getName()); + System.out.println(routeItem.getDestination()+"\t"+routeItem.getProto()+"\t"+routeItem.getPre()+"\t"+routeItem.getCost()+"\t"+routeItem.getFlag()+"\t"+routeItem.getNexthop()+"\t"+routeItem.getDestlink().getName()); } break; @@ -167,31 +174,12 @@ public class KLALBMain { Kperf kp=new Kperf(mpsa); kp.startPerfing(); }else { - System.out.println("请输入测速服务端地址:端口!"); + System.out.println("Invalid arguments."); } break; case "memcpy": - System.out.println("数组拷贝测试"); - for (int i = 0; i < 10; i++) { - MemcpyBenchmark. testArrayCopySpeed(256*1024*1024); - } - System.out.println("Bytebuffer拷贝测试"); - for (int i = 0; i < 10; i++) { - MemcpyBenchmark.testByteBufferCopySpeed(256*1024*1024); - } - System.out.println("Directbytebuffer分配测试"); - for (int i = 0; i < 10; i++) { - MemcpyBenchmark.testDirectByteBufferAllocateSpeed(65536); - } - System.out.println("Bytebuffer分配测试"); - for (int i = 0; i < 10; i++) { - MemcpyBenchmark.testByteBufferAllocateSpeed(65536); - } - System.out.println("BytebufferAllocator分配测试"); - for (int i = 0; i < 10; i++) { - MemcpyBenchmark.testByteBufferAllocatorSpeed(65536); - } + MembandBenchmark.main(args); break; //case "$$SYSTEM:": //System.out.println(); @@ -205,13 +193,13 @@ public class KLALBMain { nbc.startPerfing(); break; default: - System.out.println("未知命令,请输入help以查询命令说明"); + System.out.println("Unknown command. See \"help\" or \"?\"."); } }catch (NoSuchElementException err) { - System.out.println("已退出程序"); + System.out.println("Exited."); System.exit(0); }catch(RuntimeException e) { - System.out.println("错误!"); + System.out.println("Exception Occured!"); e.printStackTrace(); } } diff --git a/src/org/kne/cloud/network/klalb/KLALBOutputStream.java b/src/org/kne/cloud/network/klalb/KLALBOutputStream.java index db79802..0e34a75 100644 --- a/src/org/kne/cloud/network/klalb/KLALBOutputStream.java +++ b/src/org/kne/cloud/network/klalb/KLALBOutputStream.java @@ -17,6 +17,7 @@ public class KLALBOutputStream extends DataOutputStream { byte[]b=new byte[] {'K','L','A','L','B'}; write(b); writeInt(CONST.bversion); + writeInt(CONST.mversion); writeInt(CONST.sversion); flush(); } diff --git a/src/org/kne/cloud/network/klalb/KLALBPacket.java b/src/org/kne/cloud/network/klalb/KLALBPacket.java index d1cce98..04815b4 100644 --- a/src/org/kne/cloud/network/klalb/KLALBPacket.java +++ b/src/org/kne/cloud/network/klalb/KLALBPacket.java @@ -63,10 +63,6 @@ public abstract class KLALBPacket extends IPv6Packet.IPv6Payload { klalbHeader.put((byte) type); this.headerLength=headerLength; } - public KLALBPacket(int type,int headerLength, long priority) { - this(type,headerLength); - setPriority(priority); - } @Override public String toString() { return "KLALBPacket [type=" + getType() + "]"; @@ -146,7 +142,7 @@ public abstract class KLALBPacket extends IPv6Packet.IPv6Payload { public static KLALBPacket readKLALBPacketFromChannel(ReadableByteChannel in) throws IOException { while(true) { - ByteBuffer bb=NetworkPacket.bufferAllocator.allocate(40); + ByteBuffer bb=NetworkPacket.bufferAllocator.allocate(64); bb.position(0); bb.limit(1); while(bb.hasRemaining()){ diff --git a/src/org/kne/cloud/network/klalb/KLALBPacketLink.java b/src/org/kne/cloud/network/klalb/KLALBPacketLink.java index bac1859..87d05b4 100644 --- a/src/org/kne/cloud/network/klalb/KLALBPacketLink.java +++ b/src/org/kne/cloud/network/klalb/KLALBPacketLink.java @@ -10,20 +10,9 @@ import java.util.concurrent.atomic.LongAdder; import org.kne.cloud.network.MultipurposeSocketAddress; public interface KLALBPacketLink { - public void setOutputTrafficCounters(LongAdder[] al); - public void setOutputPacketsCounters(LongAdder[] longAdders); - public void setInputTrafficCounters(LongAdder[] longAdders); - public void setInputPacketsCounters(LongAdder[] al); - public void writePacket(ByteBuffer kp) throws IOException; - public default void writePackets(ByteBuffer[] kpp,int off,int len) throws IOException { - for (int i = 0; i < len; i++) { - writePacket(kpp[off+i]); - } - } public void writeKLALBPacket(KLALBPacket kp) throws IOException; public void flush() throws IOException; public KLALBPacket readKLALBPacket()throws IOException; - public ByteBuffer readPacket()throws IOException; public void close() throws IOException; public boolean isClosed(); public void setSoTimeout(int val) throws SocketException; @@ -31,6 +20,5 @@ public interface KLALBPacketLink { @Override public String toString(); public boolean isStream(); - public void writeKLALBPackets(List kp) throws IOException; } diff --git a/src/org/kne/cloud/network/klalb/KLALBProtocolDetectSocketListener.java b/src/org/kne/cloud/network/klalb/KLALBProtocolDetectSocketListener.java index 2b97d33..9a40ec8 100644 --- a/src/org/kne/cloud/network/klalb/KLALBProtocolDetectSocketListener.java +++ b/src/org/kne/cloud/network/klalb/KLALBProtocolDetectSocketListener.java @@ -46,7 +46,7 @@ public class KLALBProtocolDetectSocketListener extends SocketListener { if(!pds.getProtocolStack().isEmpty()&&pds.getProtocolStack().pop().getName().equals("KLALB")) { KLALBRemoteLine krs=null; try { - krs = new KLALBRemoteLine(new StreamKLALBPacketLink(pds)); + krs = new KLALBRemoteLine(klalbController,new StreamKLALBPacketLink(pds)); klalbController.addRemoteLine(krs); } catch (Exception e) { e.printStackTrace(); diff --git a/src/org/kne/cloud/network/klalb/KLALBProxySystem.java b/src/org/kne/cloud/network/klalb/KLALBProxySystem.java index cc26039..73ed0f4 100644 --- a/src/org/kne/cloud/network/klalb/KLALBProxySystem.java +++ b/src/org/kne/cloud/network/klalb/KLALBProxySystem.java @@ -24,7 +24,6 @@ import java.util.Map; import java.util.Map.Entry; import org.kne.cloud.network.*; -import org.kne.cloud.network.klalb.ui.KLALBStateGUI2; import org.kne.cloud.network.klalb.ui.KLALBStateGUI3; import org.kne.cloud.network.klalb.ui.Language; import org.kne.cloud.network.klalb.ui.UIEnv; @@ -122,7 +121,6 @@ public class KLALBProxySystem { } public void loadConfigJson(JsonElement json) { KLALBConfig config= gson.fromJson(json, KLALBConfig.class); - System.out.println(config); loadConfig(config); } public void loadConfig(KLALBConfig config) { @@ -141,31 +139,10 @@ public class KLALBProxySystem { } } } - String vase= kcci.getVirtualAddress(); - //System.out.println(vase); - Listdaddr=new ArrayList(); - List vdns= kcci.getDNS(); - if(vdns!=null) { - for(InetAddress dnsaddr:vdns) { - daddr.add(dnsaddr); - } - - } - if(vase!=null) { - try { - klalbController=new KLALBController((Inet6Address) InetAddress.getByName(vase),daddr); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - }else { - klalbController=new KLALBController(daddr); - } - - Long vasn= kcci.getVirtualASN(); - if(vasn!=null) { - klalbController.getIpv6Router().setASN (vasn); - } + klalbController=new KLALBController(kcci); + + String vsne=kcci.getVirtualSocketName(); @@ -183,7 +160,7 @@ public class KLALBProxySystem { KLALBRemoteLine krs=null; try { - krs = new KLALBRemoteLine(new StreamChannelKLALBPacketLink(soc)); + krs = new KLALBRemoteLine(klalbController,new StreamChannelKLALBPacketLink(soc)); klalbController.addRemoteLine(krs); } catch (IOException e) { e.printStackTrace(); @@ -206,7 +183,7 @@ public class KLALBProxySystem { KLALBRemoteLine krs=null; try { - krs = new KLALBRemoteLine(new SplitedDatagramKLALBPacketLink(soc)); + krs = new KLALBRemoteLine(klalbController,new SplitedDatagramKLALBPacketLink(soc)); klalbController.addRemoteLine(krs); } catch (IOException e) { e.printStackTrace(); @@ -219,33 +196,7 @@ public class KLALBProxySystem { e1.printStackTrace(); } } - List linele=kcci.getLineTable(); - if(linele!=null) { - klalbController.getSelflineTable().addAll(linele); - } - List linetoc=kcci.getConnectLineTable(); - if(linetoc!=null) { - linetoc.forEach((aline)->{ - klalbController.addRemoteLines(aline); - }); - } - List ntps=kcci.getNtpServerTable(); - if(ntps!=null) { - klalbController.getNTPTable().addAll(ntps); - } - - List strexc=kcci.getNetworkInterfaceExcepts(); - klalbController.getNetworkInterfaceExcept().clear(); - if(strexc!=null) { - for(String strexci:strexc) { - try { - klalbController.getNetworkInterfaceExcept().add(NetworkInterface.getByName(strexci)); - } catch (SocketException e) { - e.printStackTrace(); - } - } - } }else if(item instanceof SocketBridgeConfigItem) { SocketBridgeConfigItem scci=(SocketBridgeConfigItem) item; diff --git a/src/org/kne/cloud/network/klalb/KLALBRemoteLine.java b/src/org/kne/cloud/network/klalb/KLALBRemoteLine.java index 8e970eb..e062b37 100644 --- a/src/org/kne/cloud/network/klalb/KLALBRemoteLine.java +++ b/src/org/kne/cloud/network/klalb/KLALBRemoteLine.java @@ -6,80 +6,75 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; import java.io.StreamCorruptedException; -import java.lang.foreign.MemorySegment; +import java.lang.ModuleLayer.Controller; import java.math.BigInteger; import java.net.Inet6Address; import java.net.InetAddress; import java.net.SocketTimeoutException; import java.net.UnknownHostException; -import java.nio.ByteBuffer; import java.nio.channels.UnresolvedAddressException; import java.security.SecureRandom; import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.PriorityBlockingQueue; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.LongAdder; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.LockSupport; import java.util.concurrent.locks.ReentrantLock; +import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Supplier; -import org.kne.cloud.clock.AdjustedNanoClock; + import org.kne.cloud.clock.HighAccuracyClock; import org.kne.cloud.clock.NTPTimestamps; import org.kne.cloud.clock.ReliabilityBackoffTimeClock; -import org.kne.cloud.network.ByteBufferAllocator; +import org.kne.cloud.clock.WatchDogTimer; import org.kne.cloud.network.MultipurposeSocketAddress; -import org.kne.cloud.network.NetworkPacket; import org.kne.cloud.network.SpeedLimiter; import org.kne.cloud.network.ThreadTool; -import org.kne.cloud.network.congress.BBRCongressAlgorithm; -import org.kne.cloud.network.congress.BBRVegasCongressAlgorithm; -import org.kne.cloud.network.congress.CongressAlgorithm; -import org.kne.cloud.network.congress.LARCCongressAlgorithm; -import org.kne.cloud.network.congress.SendPacketSlidingWindow; -import org.kne.cloud.network.congress.VegasCongressAlgorithm; -import org.kne.cloud.network.ipv6.AbstractIPv6NetworkLink; -import org.kne.cloud.network.ipv6.IPv6LinkStateListener; +import org.kne.cloud.network.congestion.BBRCongestionAlgorithm; +import org.kne.cloud.network.congestion.CongestionAlgorithm; +import org.kne.cloud.network.congestion.DetnetCongestionAlgorithm; +import org.kne.cloud.network.congestion.SendPacketSlidingWindow; +import org.kne.cloud.network.congestion.Vegas2CongestionAlgorithm; +import org.kne.cloud.network.ipv6.ControlledIPv6NetworkLink; +import org.kne.cloud.network.ipv6.ICMPv6PostcardPacket; +import org.kne.cloud.network.ipv6.IPv6Address; +import org.kne.cloud.network.ipv6.IPv6HopByHopTLV; import org.kne.cloud.network.ipv6.IPv6NetworkLink; import org.kne.cloud.network.ipv6.IPv6Packet; import org.kne.cloud.network.ipv6.IPv6Packet.IPv6EmptyPayload; +import org.kne.cloud.network.ipv6.IPv6Packet.IPv6HopByHopHeader; import org.kne.cloud.network.ipv6.IPv6Packet.IPv6SegmentRoutingHeader; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; +import org.kne.cloud.network.ipv6.KLALBOAMHopByHopTLV; +import org.kne.cloud.network.ipv6.KLALBPassportHopByHopTLV; import org.kne.cloud.network.ipv6.Neighbor; +import org.kne.cloud.network.ipv6.PacketID; +import org.kne.cloud.network.ipv6.PacketIDGenerator; +import org.kne.cloud.network.ipv6.PostcardEntry; import org.kne.cloud.network.ipv6.RouteItem; import org.kne.cloud.network.monitor.MonitorData; -import org.kne.cloud.network.monitor.QueueingMonitorDataImpl; import org.kne.cloud.network.monitor.SpeedAndTrafficAndDelayMonitorDataImpl; import org.kne.cloud.network.perf.TESTNPacket; import org.kne.cloud.network.srv6.ACKSEQSSegmentRoutingTLV; import org.kne.cloud.network.srv6.IPv6SegmentRoutingTLV; -import org.kne.cloud.network.srv6.SEQSSegmentRoutingTLV; +import org.kne.cloud.network.srv6.SRv6Router; import org.kne.cloud.network.te.BandwidthDistributer; -import org.kne.cloud.network.te.LoadingBalanceEntry; -import org.kne.concurrent.DisruptorExecutor; import org.kne.concurrent.HighPerformanceExecutor; +import org.kne.concurrent.SpinLock; import org.kne.concurrent.ThreadParker; -import org.kne.io.KNEChannels; import org.kne.math.Long128; -public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6NetworkLink { +import com.github.f4b6a3.uuid.UuidCreator; + +public class KLALBRemoteLine extends AbstractControlledIPv6NetworkLink implements ControlledIPv6NetworkLink { private static final int HEADER_CALIBRATE = 40; @@ -87,10 +82,9 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw private static final boolean showpacket = false; - private ReliabilityBackoffTimeClock coll = new ReliabilityBackoffTimeClock(); private volatile boolean closed = false; - private volatile Supplier localVaddrSupplier; + private volatile Supplier localVaddrSupplier; private volatile KLALBController klalbController; @@ -98,27 +92,23 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw return klalbController; } - public void setKlalbController(KLALBController klalbController) { - this.klalbController = klalbController; - sysclk=klalbController.getClock(); - } - public Supplier getLocalVaddrSupplier() { + public Supplier getLocalVaddrSupplier() { return localVaddrSupplier; } - public void setLocalVaddrSupplier(Supplier localVaddrSupplier) { + public void setLocalVaddrSupplier(Supplier localVaddrSupplier) { this.localVaddrSupplier = localVaddrSupplier; } - private volatile Inet6AddressGroup remoteVaddr; + private volatile IPv6AddressGroup remoteVaddr; - public Inet6AddressGroup getRemoteVaddr() { + public IPv6AddressGroup getRemoteVaddr() { return remoteVaddr; } - private HighAccuracyClock sysclk=new HighAccuracyClock(); - + private HighAccuracyClock sysclk ; + public void waitForRemoteVaddrAvaliable(long timeout) throws SocketTimeoutException { long s = System.nanoTime(); while (remoteVaddr == null) { @@ -133,7 +123,7 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw } } - public QueueingMonitorDataImpl getMonitor() { + public SpeedAndTrafficAndDelayMonitorDataImpl getMonitor() { return monitor; } @@ -141,12 +131,11 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw return remoteVaddr + "\t" + monitor.toString(); } - private QueueingMonitorDataImpl monitor; + private SpeedAndTrafficAndDelayMonitorDataImpl monitor; private volatile KLALBPacketLink kplink; private MultipurposeSocketAddress bindAddress; private MultipurposeSocketAddress socketAddress; - private Thread lthd; public void setKplink(KLALBPacketLink kplink) { this.kplink = kplink; @@ -164,45 +153,40 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw return bindAddress; } - private Inet6AddressGroup addressGroup; - private Inet6AddressGroup peerAddress; + private IPv6AddressGroup addressGroup; + private IPv6AddressGroup peerAddress; @Override - public List getAddressGroups() { - List list = new ArrayList<>(); + public List getAddressGroups() { + List list = new ArrayList<>(); list.add(addressGroup); return list; } - public Inet6AddressGroup getPeerAddress() { + public IPv6AddressGroup getPeerAddress() { return peerAddress; } - - public KLALBRemoteLine(MultipurposeSocketAddress mpa, Inet6AddressGroup address) { - this(mpa, address, new QueueingMonitorDataImpl()); + + public KLALBRemoteLine(KLALBController controller, MultipurposeSocketAddress mpa, IPv6AddressGroup address) { + this(controller,mpa, null,address); } - public KLALBRemoteLine(MultipurposeSocketAddress mpa, Inet6AddressGroup address, QueueingMonitorDataImpl monitor) { - this(mpa, null, address, monitor); - } - - public KLALBRemoteLine(KLALBPacketLink kpl, Inet6AddressGroup address) { - this(kpl, address, new QueueingMonitorDataImpl()); - } - - public KLALBRemoteLine(KLALBPacketLink kpl, Inet6AddressGroup address, QueueingMonitorDataImpl monitor) { + public KLALBRemoteLine(KLALBController controller,KLALBPacketLink kpl, IPv6AddressGroup address) { + this.klalbController=controller; + sysclk = klalbController.getClock(); this.kplink = kpl; this.addressGroup = address; - this.monitor = monitor; + monitor=new SpeedAndTrafficAndDelayMonitorDataImpl(sysclk); monitor.setName(kpl.toString()); } - public KLALBRemoteLine(MultipurposeSocketAddress mpa, MultipurposeSocketAddress bindaddr, Inet6AddressGroup address, - QueueingMonitorDataImpl monitor) { + private KLALBRemoteLine(KLALBController controller,MultipurposeSocketAddress mpa, MultipurposeSocketAddress bindaddr, IPv6AddressGroup address) { + this.klalbController=controller; + sysclk = klalbController.getClock(); this.socketAddress = mpa; this.bindAddress = bindaddr; this.addressGroup = address; - this.monitor = monitor; + monitor=new SpeedAndTrafficAndDelayMonitorDataImpl(sysclk); if (bindaddr == null) { monitor.setName("→" + mpa.toString()); } else { @@ -210,85 +194,76 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw } } - public KLALBRemoteLine(MultipurposeSocketAddress mpa, MultipurposeSocketAddress bindaddr, - Inet6AddressGroup address) { - this(mpa, bindaddr, address, new QueueingMonitorDataImpl()); + + public KLALBRemoteLine(KLALBController controller,MultipurposeSocketAddress mpa, MultipurposeSocketAddress bind) { + this(controller,mpa, bind, null); } - public KLALBRemoteLine(MultipurposeSocketAddress mpa, MultipurposeSocketAddress bind) { - this(mpa, bind, null); + public KLALBRemoteLine(KLALBController controller,MultipurposeSocketAddress mpa) { + this(controller,mpa, (IPv6AddressGroup) null); } - public KLALBRemoteLine(MultipurposeSocketAddress mpa) { - this(mpa, (Inet6AddressGroup) null); + public KLALBRemoteLine(KLALBController controller,KLALBPacketLink link) { + this(controller,link, (IPv6AddressGroup) null); } - public KLALBRemoteLine(KLALBPacketLink link) { - this(link, (Inet6AddressGroup) null); - } - PrintStream pw; - private boolean flag = false; - - private void startRecord() { - if (flag) - return; - flag = true; - try { - File fl = new File("logs"); - if (!fl.exists()) { - fl.mkdirs(); - } - File fx = new File(fl, getMonitor().getName().replace(':', ':') + ".csv"); - pw = new PrintStream(new FileOutputStream(fx, true)); - - if (fx.length() <= 0) - pw.println("时间,状态,上传速度,下载速度,上传延迟,下载延迟,往返延迟,抖动"); - ThreadTool.makeVDaemonThreadIfSupport("BigData Record", () -> { - while (!closed) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - e.printStackTrace(); - } - pw.println(System.currentTimeMillis() + "," + monitor.getState() + "," + monitor.getOutSpeed() + "," - + monitor.getInSpeed() + "," + monitor.getOutDelay() + "," + monitor.getInDelay() + "," - + monitor.getLatency() + "," + monitor.getTotalJitter()); - } - pw.close(); - }).start(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } - - private SpeedLimiter speedLimit = new SpeedLimiter(256 * 1024L, 10 * 1000000L);// 50*1000000L - - private volatile CongressAlgorithm algorithm; - - private volatile SendPacketSlidingWindow sendWindow; - - private class RerouteChecker implements Runnable { - @Override - public void run() { - while ((!kplink.isClosed()) && (!closed)) { - - if (checkACKTime()) { - sendALLIPv6ACK(); - } - - try { - Thread.sleep(1); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - } + private CongestionAlgorithm algorithm; + private SendPacketSlidingWindow sendWindow; + + + private class RemoteSender implements Runnable { + private SpeedLimiter speedLimit = new SpeedLimiter(256 * 1024L, 10 * 1000000L);// 50*1000000L + + private ConcurrentLinkedQueue sendQueue = new ConcurrentLinkedQueue(); + private WatchDogTimer watchdog = new WatchDogTimer(400000000L); + + private ThreadParker tlock = new ThreadParker(); + + private volatile long time = System.nanoTime(); + private volatile long pingInterval = 100000000L; + + private boolean checkPingTime() { + long cu = System.nanoTime(); + if (cu - time > pingInterval) { + time = cu; + return true; + } else { + return false; + } + + } + + + public ConcurrentLinkedQueue getSendQueue() { + return sendQueue; + } + + + public WatchDogTimer getWatchdog() { + return watchdog; + } + + public long getPingInterval() { + return pingInterval; + } + public void setPingInterval(long pingInterval) { + this.pingInterval = pingInterval; + } + + private volatile long flushInterval=1000000L; + + public long getFlushInterval() { + return flushInterval; + } + public void setFlushInterval(long flushInterval) { + this.flushInterval = flushInterval; + } + private long flushTime=System.nanoTime(); @Override public void run() { try { @@ -302,45 +277,30 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw writeKLALBPacketToKPL(new VADDRREQPacket()); writeKLALBPacketToKPL(new VADDRPacket(localVaddrSupplier.get())); writeKLALBPacketToKPL(new VADDRPacket(localVaddrSupplier.get())); - flushKPL(); - Listpacks=new ArrayList<>(); + kplink.flush(); while ((!kplink.isClosed()) && (!closed)) { - if (checkBandwidthReportTime()) { - sendIPacket(new BWINFPacket(monitor.getOutSpeedAvg(), monitor.getInSpeedAvg())); - } - if (checkPingTimeSleep()) { + if (checkPingTime()) { ping(); if (remoteVaddr == null) - writeKLALBPacketToKPL(new VADDRREQPacket()); + sendPacket(new VADDRREQPacket()); if (peerAddress == null) - writeKLALBPacketToKPL(new ADDRREQPacket()); + sendPacket(new ADDRREQPacket()); - } else { - KLALBPacket kpip = IsendDequeList.poll(); - if (kpip != null) { - writeKLALBPacketToKPL(kpip); - - } else { - - KLALBPacket tkpp = sendDequeList.poll(); - - if (tkpp != null) { - packs.add(tkpp); - while((tkpp=sendDequeList.poll())!=null) { - packs.add(tkpp); - } - kplink.writeKLALBPackets(packs); - packs.clear(); - if (checkPingTime()) { - ping(); - } - - } else { - tlock.parkNanos(1000000L); - } - } } + KLALBPacket tkpp = sendQueue.poll(); + if (tkpp != null) { + kplink.writeKLALBPacket(tkpp); + watchdog.feed(); + + } else { + tlock.parkNanos(1000000L); + } + long curr=System.nanoTime(); + if(curr-flushTime>=flushInterval) { + flushTime=curr; + kplink.flush(); + } Thread.yield(); } } catch (StreamCorruptedException sce) { @@ -354,72 +314,110 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw } catch (IOException e) { e.printStackTrace(); } + tpk.unpark(); } } + + public boolean send(KLALBPacket blk) { + boolean b=sendQueue.add(blk); + if(b) { + tlock.unpark(); + speedLimit.forceTransmit(blk.getTotalLength()); + } + return b; + } + } private class RemoteReceiver implements Runnable { + + private WatchDogTimer watchdog = new WatchDogTimer(400000000L); + private long rtt=Long.MAX_VALUE/1024; AtomicBoolean fst = new AtomicBoolean(true); - ReentrantLock readLock=new ReentrantLock(); + //ReentrantLock readLock = new ReentrantLock(); + @Override public void run() { try { while ((!kplink.isClosed()) && (!closed)) { - KLALBPacket kppb=null; - readLock.lock(); - try { - kppb = kplink.readKLALBPacket(); - }finally { - readLock.unlock(); - } + KLALBPacket kppb = readKLALBPacketFromKPL(); + if (kppb == null) { break; } - KLALBPacket kpp = kppb; - HighPerformanceExecutor.defaultExecutor2.execute(() -> { + watchdog.feed(); + KLALBPacket kpp = kppb; + SRv6Router.getDefaultExecutor().execute(() -> { debugShowPacket("RX", kpp); + UUID val = null; + long delay = Long.MAX_VALUE / 1024; switch (kpp.getType()) { case KLALBPacket.PING: - long pct=System.nanoTime()- kpp.getRcvtime(); - Long128 curr=sysclk.getCurrentTimeNanos(); - Long128 rcv=curr.subtract(pct); + long pct = System.nanoTime() - kpp.getRcvtime(); + Long128 curr = sysclk.getCurrentTimeNanos(); + Long128 rcv = curr.subtract(pct); - - BigInteger local1281= NTPTimestamps.nanosToNtp128BitTimestamp(curr); - PONGPacket pong=new PONGPacket(((PINGPacket) kpp).getTime(), NTPTimestamps.ntp128To64(NTPTimestamps.nanosToNtp128BitTimestamp(rcv)).longValue(), NTPTimestamps.ntp128To64(NTPTimestamps.nanosToNtp128BitTimestamp(curr)).longValue()); - sendIPacket( - pong); - /*long prcv1=pong.getTimepingrcv(); - System.out.println("prcv"+NTPTimestamps.nanosSince1970ToString( NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( prcv1,local1281)))); - long posnd1=pong.getTimepongsnd(); - System.out.println("posnd"+NTPTimestamps.nanosSince1970ToString( NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( posnd1,local1281))));*/ + Long128 local1281 = NTPTimestamps.nanosToNtp128BitTimestamp(curr); + PONGPacket pong = new PONGPacket(((PINGPacket) kpp).getTime(), + NTPTimestamps.ntp128To64(NTPTimestamps.nanosToNtp128BitTimestamp(rcv)).longValue(), + NTPTimestamps.ntp128To64(NTPTimestamps.nanosToNtp128BitTimestamp(curr)).longValue(), + monitor.getUploadBandwidth().calculateBandwidth(500000000L), + monitor.getDownloadBandwidth().calculateBandwidth(500000000L)); + sendPacket(pong); + /* + * long prcv1=pong.getTimepingrcv(); + * System.out.println("prcv"+NTPTimestamps.nanosSince1970ToString( + * NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( + * prcv1,local1281)))); long posnd1=pong.getTimepongsnd(); + * System.out.println("posnd"+NTPTimestamps.nanosSince1970ToString( + * NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( + * posnd1,local1281)))); + */ break; case KLALBPacket.PONG: PONGPacket png = (PONGPacket) kpp; - /*long ul = png.getRcvtime() - png.getTimepingsnd() - - (png.getTimepongsnd() - png.getTimepingrcv());*/ - Long128 local=sysclk.getCurrentTimeNanos(); - BigInteger local128= NTPTimestamps.nanosToNtp128BitTimestamp(local); - - long psnd=png.getTimepingsnd(); - //System.out.println("psnd"+NTPTimestamps.nanosSince1970ToString( NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( psnd,local128)))); - long prcv=png.getTimepingrcv(); - //System.out.println("prcv"+NTPTimestamps.nanosSince1970ToString( NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( prcv,local128)))); - long posnd=png.getTimepongsnd(); - //System.out.println("posnd"+NTPTimestamps.nanosSince1970ToString( NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( posnd,local128)))); - - long DsndDelayFactor =NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( prcv,local128)) .subtract( NTPTimestamps.ntp128BitToNanosTimestamp(NTPTimestamps.inferNtp64To128( psnd,local128))).longValue(); - long DrcvDelayFactor = local .subtract( NTPTimestamps.ntp128BitToNanosTimestamp(NTPTimestamps.inferNtp64To128( posnd,local128))).longValue(); - //System.out.println(DsndDelayFactor+" "+DrcvDelayFactor); + /* + * long ul = png.getRcvtime() - png.getTimepingsnd() - (png.getTimepongsnd() - + * png.getTimepingrcv()); + */ + Long128 local = sysclk.getCurrentTimeNanos(); + Long128 local128 = NTPTimestamps.nanosToNtp128BitTimestamp(local); - if (DsndDelayFactor >= 0 && DrcvDelayFactor >= 0) { - monitor.setOutDelay(DsndDelayFactor); - monitor.setInDelay(DrcvDelayFactor); - monitor.setRecentPingNanoTime(png.getTimepingsnd()); + Long128 psnd = NTPTimestamps.ntp128BitToNanosTimestamp( + NTPTimestamps.inferNtp64To128(png.getTimepingsnd(), local128)); + // System.out.println("psnd"+NTPTimestamps.nanosSince1970ToString( + // NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( + // psnd,local128)))); + Long128 prcv = NTPTimestamps.ntp128BitToNanosTimestamp( + NTPTimestamps.inferNtp64To128(png.getTimepingrcv(), local128)); + // System.out.println("prcv"+NTPTimestamps.nanosSince1970ToString( + // NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( + // prcv,local128)))); + Long128 posnd = NTPTimestamps.ntp128BitToNanosTimestamp( + NTPTimestamps.inferNtp64To128(png.getTimepongsnd(), local128)); + // System.out.println("posnd"+NTPTimestamps.nanosSince1970ToString( + // NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( + // posnd,local128)))); + + long DsndDelay = prcv.subtract(psnd).longValue(); + long DrcvDelay = local.subtract(posnd).longValue(); + // System.out.println(DsndDelayFactor+" "+DrcvDelayFactor); + + rtt = DsndDelay + DrcvDelay; + if (DsndDelay >= 0 && DrcvDelay >= 0) { + delay = DrcvDelay; + monitor.getUploadBandwidth().recordPacket(KLALBUtils.createGlobalUUID(), psnd, 0, DsndDelay); + // System.out.println(local); + } else { + long Dfallback = rtt / 2; + if (Dfallback >= 0) { + delay = Dfallback; + monitor.getUploadBandwidth().recordPacket(KLALBUtils.createGlobalUUID(), psnd, 0, Dfallback); + } } - tlock.unpark(); + algorithm.setCurrentBandwidth(png.getDownSpeed()); break; case KLALBPacket.BWINF: BWINFPacket bwi = (BWINFPacket) kpp; @@ -427,41 +425,36 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw break; case KLALBPacket.ADDRREQ: if (addressGroup != null) - sendIPacket(new ADDRPacket(addressGroup)); + sendPacket(new ADDRPacket(addressGroup)); break; case KLALBPacket.ADDR: peerAddress = ((ADDRPacket) kpp).getAddr(); if (addressGroup == null) { - byte[] ab = peerAddress.getAddress().getAddress(); + byte[] ab = peerAddress.getAddress().toByteArray(); ab[15] = 2; - Inet6AddressGroup ardg2 = null; - try { - ardg2 = new Inet6AddressGroup((Inet6Address) InetAddress.getByAddress(ab), - peerAddress.getPrefixLength()); - } catch (UnknownHostException e) { - e.printStackTrace(); - } + IPv6AddressGroup ardg2 = new IPv6AddressGroup(IPv6Address.valueOf(ab), + peerAddress.getPrefixLength()); if (ardg2 != null) addressGroup = ardg2; } KLALBRemoteLine.this.onAddressUpdate(); - + break; case KLALBPacket.VADDRREQ: - sendIPacket(new VADDRPacket(localVaddrSupplier.get())); + sendPacket(new VADDRPacket(localVaddrSupplier.get())); break; case KLALBPacket.VADDR: - Inet6AddressGroup vdr = ((VADDRPacket) kpp).getVaddr(); + IPv6AddressGroup vdr = ((VADDRPacket) kpp).getVaddr(); remoteVaddr = vdr; - sendIPacket(new VADDRACKPacket()); + sendPacket(new VADDRACKPacket()); if (fst.compareAndSet(true, false)) { // coll.resetCoolingTime(); - monitor.setState(MonitorData.ONLINE); + monitor.setState(MonitorData.UP); KLALBRemoteLine.this.onOnlineStateUpdate(); } KLALBRemoteLine.this.onLocatorUpdate(); - + break; case KLALBPacket.VADDRACK: break; @@ -471,59 +464,49 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw IPv6OverKLALBPacket ivk = (IPv6OverKLALBPacket) kpp; IPv6Packet iv6 = ivk.getIPv6Packet(); - ivk.putTimePassport("unpacked"); ivk.printPassport(); iv6.putTimePassport("unpackFromLink"); + if (getSrv6Router() != null) { + getSrv6Router().onReceive(KLALBRemoteLine.this, iv6); + } + + KLALBOAMHopByHopTLV ktlv = null; + List ptlv = new ArrayList<>(); - IPSequence val = null; - IPv6SegmentRoutingHeader srh = iv6.getSRHHeader(); - if (srh != null) { - List l = srh.getTlvs(); - - for (int i = 0; i < l.size(); i++) { - IPv6SegmentRoutingTLV tlv = l.get(i); - if (tlv instanceof SEQSSegmentRoutingTLV) { - SEQSSegmentRoutingTLV seqs = (SEQSSegmentRoutingTLV) tlv; - // if(seqs.isPromise()) { - val = new IPSequence(seqs.getUUID(), seqs.isPromise()); - // } - - } else if (tlv instanceof ACKSEQSSegmentRoutingTLV) { - ACKSEQSSegmentRoutingTLV aseq = (ACKSEQSSegmentRoutingTLV) tlv; - l.remove(i); - i--; - - sendWindow.ack(aseq.getIPSequence()); + long btimes = 0; + IPv6HopByHopHeader hop = iv6.getHopByHopHeader(); + if (hop != null) { + List tlvs = hop.getTlvs(); + for (IPv6HopByHopTLV tlv : tlvs) { + if (tlv instanceof KLALBOAMHopByHopTLV) { + ktlv = (KLALBOAMHopByHopTLV) tlv; + val = ktlv.getUUID(); + btimes = ktlv.getTimestamp(); + ptlv.add(btimes); + } else if (tlv instanceof KLALBPassportHopByHopTLV) { + ptlv.add(btimes + ((KLALBPassportHopByHopTLV) tlv).getTimestampOffsetLong()); } } } - if (val != null) - ackIDs.add(val); - if (checkACKTime() || ackIDs.size() >= 20) - sendALLIPv6ACK(); - - if (ipv6con != null) { - if (iv6.getPayload() instanceof IPv6EmptyPayload) { - // iv6.dispose(); - } else { - if (val != null) { - /* - * Long l=recvedUIDMap.putIfAbsent(val.getUuid(), System.nanoTime()); - * if(l==null) { - */ - ipv6con.accept(iv6); - // } - } else { - ipv6con.accept(iv6); - } - } + if (ptlv.size() >= 2) { + long delta = ptlv.get(ptlv.size() - 1) - ptlv.get(ptlv.size() - 2); + long deltaxnanos = (long) (delta * 1000000000.0 / (1L << 32)); + if (deltaxnanos > 0) + //System.out.println(deltaxnanos); + delay = deltaxnanos; } + + break; - default: - if (rec != null) - rec.accept(kpp); - break; + } + + long length = kpp.getTotalLength(); + UUID pid = val == null ? KLALBUtils.createGlobalUUID() : val; + monitor.getDownloadBandwidth().recordPacket(pid, (int) length, delay); + if (klalbController != null) { + klalbController.getLinkMonitor().getDownloadBandwidth().recordPacket(pid, (int) length, + delay); } }); } @@ -534,26 +517,39 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); - }finally { + } finally { try { if (kplink != null) kplink.close(); } catch (IOException e) { e.printStackTrace(); } + tpk.unpark(); } } + public WatchDogTimer getWatchdog() { + return watchdog; + } + public long getRTT() { + return rtt; + } } + private ThreadParker tpk=new ThreadParker(); + private StateManager stateManager; private class StateManager implements Runnable { + private Thread currThread; + private RemoteSender sender; + private RemoteReceiver receiver; @Override public void run() { + currThread = Thread.currentThread(); + ReliabilityBackoffTimeClock coll = new ReliabilityBackoffTimeClock(); while (true) { try { - monitor.setState(MonitorData.CONNECTING); if (socketAddress == null) { if (kplink.isClosed()) { close(); @@ -569,65 +565,63 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw addr[3] = 2; addr[14] = 0; addr[15] = 1; - Inet6Address i6a = (Inet6Address) Inet6Address.getByAddress(addr); - addressGroup = new Inet6AddressGroup(i6a, 112); + IPv6Address i6a = IPv6Address.valueOf(addr); + addressGroup = new IPv6AddressGroup(i6a, 112); } } else { kplink = KLALBUtils.createKLALBPacketLink(bindAddress, socketAddress, true); } // startRecord(); - if (klalbController != null) { - - kplink.setInputTrafficCounters(new LongAdder[] { monitor.getInTrafficAL(), - klalbController.getLinkMonitor().getInTrafficAL() }); - kplink.setOutputTrafficCounters(new LongAdder[] { monitor.getOutTrafficAL(), - klalbController.getLinkMonitor().getOutTrafficAL() }); - kplink.setInputPacketsCounters(new LongAdder[] { monitor.getInPacketCounterAL(), - klalbController.getLinkMonitor().getInPacketCounterAL() }); - kplink.setOutputPacketsCounters(new LongAdder[] { monitor.getOutPacketCounterAL(), - klalbController.getLinkMonitor().getOutPacketCounterAL() }); - } else { - kplink.setInputTrafficCounters(new LongAdder[] { monitor.getInTrafficAL() }); - kplink.setOutputTrafficCounters(new LongAdder[] { monitor.getOutTrafficAL() }); - kplink.setInputPacketsCounters(new LongAdder[] { monitor.getInPacketCounterAL() }); - kplink.setOutputPacketsCounters(new LongAdder[] { monitor.getOutPacketCounterAL() }); - } - kplink.setSoTimeout(20000); - - algorithm = new LARCCongressAlgorithm(); - // algorithm=new BBRCongressAlgorithm(); + kplink.setSoTimeout(3000); + + + algorithm=getCongestionAlgorithm(); + sender = new RemoteSender(); + receiver = new RemoteReceiver(); + algorithm.setSpeedControlConsumer((speed, bursttime) -> { - speedLimit.setLimitspeed(speed); - speedLimit.setBrustTime(bursttime); + sender.speedLimit.setLimitspeed(speed); + sender.speedLimit.setBrustTime(bursttime); }); - algorithm.reset(); - sendWindow = new SendPacketSlidingWindow(algorithm, 65535, - HEADER_CALIBRATE); + sendWindow = new SendPacketSlidingWindow(algorithm, 65535, HEADER_CALIBRATE); sendWindow.setResendConsumer(rerouteConsumer); sendWindow.setClosingConsumer(rerouteConsumer); algorithm.setWindowControlConsumer((sendwindow) -> { sendWindow.setWindowSize(sendwindow); }); - - kplink.setSoTimeout(3000); - - Thread timer = ThreadTool.makeVDaemonThread("重路由计时器线程", new RerouteChecker()); - timer.start(); - - Thread t = ThreadTool.makeVDaemonThreadIfSupport("远程发送线程", new RemoteSender()); + Thread t = ThreadTool.makeVDaemonThreadIfSupport("远程发送线程", sender); t.start(); - - RemoteReceiver recvr=new RemoteReceiver(); - int cores=Runtime.getRuntime().availableProcessors(); - for(int i=0;i<1;i++) { - ThreadTool.makeVDaemonThreadIfSupport("远程接收线程", recvr).start(); + + int cores = Runtime.getRuntime().availableProcessors(); + for (int i = 0; i < 1; i++) { + ThreadTool.makeVDaemonThreadIfSupport("远程接收线程", receiver).start(); } - - while(!kplink.isClosed()) { - Thread.sleep(10); + + while (!kplink.isClosed()) { + if(klalbController!=null&& klalbController.getConfigItem()!=null) { + KLALBControllerConfigItem config=klalbController.getConfigItem(); + if(algorithm instanceof DetnetCongestionAlgorithm) { + double v1=config.getDelayUpperBound(); + if(v1!=0) { + ((DetnetCongestionAlgorithm)algorithm).setUpperDelayBound(v1); + } + double v2=config.getDelayLowerBound(); + if(v2!=0) { + ((DetnetCongestionAlgorithm)algorithm).setLowerDelayBound(v2); + } + } + sender.setFlushInterval( config.getLinkNagleDelayTime()); + + + } + boolean b = sender.getWatchdog().isBarking() + || receiver.getWatchdog().isBarking(); + boolean isup= (!b)&&(receiver.getRTT()<1000000000L); + monitor.setState(isup?MonitorData.UP:MonitorData.UNSTABLE); + tpk.parkNanos(10000000L); } } catch (StreamCorruptedException sce) { sce.printStackTrace(); @@ -637,9 +631,7 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw } catch (Exception e) { e.printStackTrace(); } finally { - monitor.setState(MonitorData.OFFLINE); - onOnlineStateUpdate(); - pressure = false; + monitor.setState(MonitorData.DOWN); try { if (kplink != null) kplink.close(); @@ -648,104 +640,66 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw } if (sendWindow != null) sendWindow.close(); + onOnlineStateUpdate(); } if (closed) { break; } - // Thread.sleep(monitor.getCoolingTime()); - lthd = Thread.currentThread(); - // LockSupport.parkNanos(1000000000L); LockSupport.parkNanos(coll.getCoolingTime(monitor.getReliability())); - // System.out.println("waitend"); - // coll.incCoolingTime(); } } + private CongestionAlgorithm getCongestionAlgorithm() { + if(klalbController!=null&& klalbController.getConfigItem()!=null) { + KLALBControllerConfigItem config=klalbController.getConfigItem(); + String cong=config.getCongestionAlgorithm(); + if(cong!=null) { + switch(cong) { + case "BBR": + return new BBRCongestionAlgorithm(); + case "Vegas2": + return new Vegas2CongestionAlgorithm(); + default: + return new BBRCongestionAlgorithm(); + } + }else { + return new BBRCongestionAlgorithm(); + } + }else { + return new BBRCongestionAlgorithm(); + } + } + public void reconnectImmediately() { + LockSupport.unpark(currThread); + } + public RemoteSender getSender() { + return sender; + } + public RemoteReceiver getReceiver() { + return receiver; + } + } - + protected void startIO() { - ThreadTool.makeVDaemonThreadIfSupport("远程线路状态线程", new StateManager()).start(); + stateManager=new StateManager(); + ThreadTool.makeVDaemonThread("远程线路状态线程", stateManager).start(); } public void ping() throws IOException { - PINGPacket ping=new PINGPacket(sysclk.getCurrentTimeNTP64().longValue()); - /*Long128 local=sysclk.getCurrentTimeNanos(); - BigInteger local128= NTPTimestamps.nanosToNtp128BitTimestamp(local); - System.out.println("psnd0"+NTPTimestamps.nanosSince1970ToString( NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( ping.getTime(),local128))));*/ - writeKLALBPacketToKPL(ping); - } - - private ConcurrentLinkedQueue ackIDs = new ConcurrentLinkedQueue<>(); - private volatile long prevAckTime = System.nanoTime(); - private volatile long ackInterval = 100000L; - - private boolean checkACKTime() { - long cu = System.nanoTime(); - if (cu - prevAckTime > ackInterval) { - prevAckTime = cu; - return true; - } else { - return false; - } - } - - private void sendALLIPv6ACK() { - if (peerAddress != null) { - while (true) { - int rez = sendIPv6ACK(); - if (rez <= 0) - break; - } - } - } - - private int sendIPv6ACK() { - IPv6SegmentRoutingHeader srh2 = new IPv6SegmentRoutingHeader(); - int adds = addACKSEQToSRH(srh2, 20); - if (adds <= 0) - return adds; - - // System.out.println(adds+"ACKS"); - - IPv6Packet ipv = new IPv6Packet(); - ipv.setVersion(6); - ipv.setTrafficClass(0); - ipv.setFlowLabel(0); - ipv.setHopLimit(255); - ipv.setSourceAddress(addressGroup.getAddress()); - ipv.setDestinationAddress(peerAddress.getAddress()); - ipv.setPriority(0); - ipv.enableECN(); - srh2.getAddresses().add(peerAddress.getAddress()); - - ipv.getHeaders().add(srh2); - ipv.setPayload(new IPv6EmptyPayload()); - - sendIPacket(new IPv6OverKLALBPacket(ipv)); - // System.out.println("ack:"+val); - return adds; - } - - private int addACKSEQToSRH(IPv6SegmentRoutingHeader srh, int maxAckCount) { - int i = 0; - for (; i < maxAckCount; i++) { - - IPSequence ackid = ackIDs.poll(); - if (ackid != null) { - srh.getTlvs().add(new ACKSEQSSegmentRoutingTLV(ackid, ackid.isPromise())); - } else { - prevAckTime = System.nanoTime(); - return i; - } - } - return i; - } - - private void flushKPL() throws IOException { - kplink.flush(); + PINGPacket ping = new PINGPacket(sysclk.getCurrentTimeNTP64().longValue(), monitor.getOutSpeed(), + monitor.getInSpeed()); + /* + * Long128 local=sysclk.getCurrentTimeNanos(); BigInteger local128= + * NTPTimestamps.nanosToNtp128BitTimestamp(local); + * System.out.println("psnd0"+NTPTimestamps.nanosSince1970ToString( + * NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128( + * ping.getTime(),local128)))); + */ + sendPacket(ping); } private KLALBPacket readKLALBPacketFromKPL() throws IOException { @@ -779,8 +733,7 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw public void close() { closed = true; - monitor.setState(MonitorData.OFFLINE); - pressure = false; + monitor.setState(MonitorData.DOWN); try { if (kplink != null) kplink.close(); @@ -793,76 +746,36 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw return closed; } - private volatile long time = System.nanoTime(); - private volatile long pingInterval = 1000000L; - private volatile long pingIntervalSleep = 10000000L; + - private boolean checkPingTime() { - long cu = System.nanoTime(); - if (cu - time > pingInterval) { - time = cu; - return true; - } else { - return false; - } + + + + public void sendPacket(KLALBPacket vaddrreqPacket) { + sendPacket(vaddrreqPacket, null); } - private boolean checkPingTimeSleep() { - long cu = System.nanoTime(); - if (cu - time > pingIntervalSleep) { - time = cu; - return true; - } else { - return false; - } - - } - - private volatile long bwtime = System.nanoTime(); - private volatile long bwpingInterval = 10000000L; - private volatile long bwpingIntervalSleep = 200000000L; - - private boolean checkBandwidthReportTime() { - long cu = System.nanoTime(); - if (cu - bwtime > bwpingIntervalSleep) { - bwtime = cu; - return true; - } else { - return false; - } - - } - - private volatile Consumer rec; - - // private volatile Thread tlock; - private ThreadParker tlock = new ThreadParker(); - - private ConcurrentLinkedQueue IsendDequeList = new ConcurrentLinkedQueue(); - - private PriorityBlockingQueue sendDequeList = new PriorityBlockingQueue(); - - protected void sendPacket(KLALBPacket blk) { + protected void sendPacket(KLALBPacket blk, UUID val) { debugShowPacket("TX", blk); + RemoteSender sender=stateManager.getSender(); + if(sender!=null) { blk.markJoinqueuetime(); - sendDequeList.add(blk); - tlock.unpark(); - speedLimit.forceTransmit(blk.getTotalLength()); + long length = blk.getTotalLength(); + UUID pid = val == null ? KLALBUtils.createGlobalUUID() : val; + monitor.getUploadBandwidth().recordPacket(pid, (int) length); + if (klalbController != null) { + klalbController.getLinkMonitor().getUploadBandwidth().recordPacket(pid, (int) length); + } + sender.send(blk); + } } - private void sendIPacket(KLALBPacket blk) { - IsendDequeList.add(blk); - tlock.unpark(); - } - - public void setPacketReceiver(Consumer rec) { - this.rec = rec; - } public void reconnectImmediately() { - if (lthd != null) { - LockSupport.unpark(lthd); + StateManager stateManagerx=stateManager; + if (stateManagerx != null) { + stateManagerx.reconnectImmediately(); } } @@ -875,34 +788,6 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw } } - private static final TESTNPacket testPacket = new TESTNPacket(60000); - private volatile boolean pressure = false; - private SpeedLimiter pressureSpeed = new SpeedLimiter(32768); - - public void pressureTest() { - if (pressure) - throw new IllegalStateException("Test already start"); - this.pressure = true; - pressureSpeed.setLimitspeed(32768); - ThreadTool.makeVThreadIfSupport("压力测试控制线程", () -> { - while (pressure) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - e.printStackTrace(); - } - if (getMonitor().getOutSpeed() < pressureSpeed.getLimitspeed() * 2 / 3 - || getMonitor().getInDelayMin() * 30 < getMonitor().getInDelay()) { - pressure = false; - break; - } - pressureSpeed.setLimitspeed(pressureSpeed.getLimitspeed() * 400 / 399); - } - }).start(); - } - - private Consumer ipv6con; - @Override public boolean isLoopBack() { return false; @@ -912,7 +797,7 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw @Override public List getNeighborsInfo() { - List hs = new ArrayList<>(); + List hs = new ArrayList<>(1); if (peerAddress != null) { hs.add(new Neighbor(peerAddress, remoteVaddr, monitor, bandwidthDistributer)); // System.out.println(peerAddress+" "+addressGroup); @@ -926,34 +811,34 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw private Consumer rerouteConsumer; @Override - public void sendPacket(IPv6Packet pack, Inet6Address inet6Address) throws IOException { + public void sendPacket(IPv6Packet pack, IPv6Address inet6Address) throws IOException { // 只有已连接的链路才能传输数据 - if (monitor.getState() == MonitorData.ONLINE) { + if (monitor.getState() == MonitorData.UP) { // if(inet6Address.equals(remoteVaddr.getAddress())||inet6Address.equals(peerAddress.getAddress())) // { + // 获得数据包的IPv6逐跳扩展头部 + IPv6HopByHopHeader hop = pack.getHopByHopHeader(); - // 获得数据包的SRv6扩展头部 - IPv6SegmentRoutingHeader srh = pack.getSRHHeader(); - - IPSequence val = null; - if (srh != null) { - List l = srh.getTlvs(); + UUID val = null; + if (hop != null) { + List l = hop.getTlvs(); for (int i = 0; i < l.size(); i++) { - IPv6SegmentRoutingTLV tlv = l.get(i); - if (tlv instanceof SEQSSegmentRoutingTLV) { - SEQSSegmentRoutingTLV seqs = (SEQSSegmentRoutingTLV) tlv; - // if(seqs.isPromise()) + IPv6HopByHopTLV tlv = l.get(i); + if (tlv instanceof KLALBOAMHopByHopTLV) { + KLALBOAMHopByHopTLV seqs = (KLALBOAMHopByHopTLV) tlv; // 获得数据包的序号 - val = new IPSequence(seqs.getUUID(), seqs.isPromise()); + val = seqs.getUUID(); break; } } if (val != null) { - // 放入滑动窗口中并记录缓冲区大小占用 - sendWindow.put(val, pack); + if (!(pack.getPayload() instanceof ICMPv6PostcardPacket)) { + // 放入滑动窗口中并记录缓冲区大小占用 + sendWindow.put(val, pack); + } } } // 捎带发送反方向的ACK给对方发送过来的数据包,减小设备性能开销 @@ -961,7 +846,8 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw * if(srh!=null) { addACKSEQToSRH(srh,10); } */ // 发送数据包 - sendIPv6PacketToLink(pack); + + sendIPv6PacketToLink(pack, val); // } } else { @@ -976,25 +862,24 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw this.rerouteConsumer = rerouteConsumer; } - private void sendIPv6PacketToLink(IPv6Packet pack) { + private void sendIPv6PacketToLink(IPv6Packet pack, UUID val) { IPv6OverKLALBPacket kipv6 = new IPv6OverKLALBPacket(pack); - kipv6.setPriority(pack.getPriority()); pack.putTimePassport("packdInLink"); pack.printPassport(); - sendPacketToLink(kipv6); + sendPacketToLink(kipv6, val); } - private void sendPacketToLink(KLALBPacket packet) { - packet.genseq(); - // packet.getSendRecord().add(this); - sendPacket(packet); + private void sendPacketToLink(KLALBPacket packet, UUID val) { + sendPacket(packet, val); } @Override public boolean isCongress(IPv6Packet iPv6Packet, double scale) { - SendPacketSlidingWindow sw = sendWindow; + SendPacketSlidingWindow sw = sendWindow; if (sw != null) { - return sw.isCongress(iPv6Packet, scale)||(monitor.getOutDelay()/(monitor.getOutDelayMin()+1000000L)>3); + boolean cong = (scale <= 1.0) && (monitor.getOutDelay() / (monitor.getOutDelayMin() + 1000000L) > 2); + + return cong || sw.isCongress(iPv6Packet, scale); } else { return true; } @@ -1002,9 +887,9 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw @Override public boolean isReachSpeedLimit(IPv6Packet iPv6Packet) { - boolean xcongress=!speedLimit.checkTransmit(iPv6Packet.getTotalLength()); - return xcongress; - //return false; + //boolean xcongress = !speedLimit.checkTransmit(iPv6Packet.getTotalLength()); + //return xcongress; + return false; } @Override @@ -1012,38 +897,31 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw return monitor.getName(); } - @Override - public boolean isUp() { - boolean b = (monitor.getInDelay() > 3000000000L || monitor.getOutDelay() > 3000000000L - || monitor.getInSpeedAvg() <= 0 || monitor.getOutSpeedAvg() <= 0); - // System.out.println(b); - return (!isClosed()) && (getMonitor().getState() == MonitorData.ONLINE) && (!b); - } + @Override - public void setReceiveConsumer(Consumer ipv6con) { - this.ipv6con = ipv6con; + public boolean isUp() { + return (!isClosed()) && (getMonitor().getState() == MonitorData.UP) ; } @Override public List getRouteItems() { List rlist = new ArrayList<>(); - Inet6AddressGroup adg = addressGroup; - if (adg != null) - rlist.add(new RouteItem(new Inet6AddressGroup(adg.getAddress(), 128), adg.getAddress(), this, "Direct", 0, - 0, null, "D", true)); + IPv6AddressGroup adg = addressGroup; + /*if (adg != null) + rlist.add(new RouteItem(new IPv6AddressGroup(adg.getAddress(), 128), adg.getAddress(), this, "Direct", 0, 0, + null, "D", true));*/ for (Iterator iteratorx = getNeighborsInfo().iterator(); iteratorx.hasNext();) { Neighbor addresses = (Neighbor) iteratorx.next(); - RouteItem ri = new RouteItem(new Inet6AddressGroup(addresses.getAddress().getAddress(), 128), + RouteItem ri = new RouteItem(new IPv6AddressGroup(addresses.getAddress().getAddress(), 128), addresses.getAddress().getAddress(), this, "Direct", 0, 128, addresses.getMonitor(), "D", false); rlist.add(ri); if (addresses.getLocator() != null) { - RouteItem ris = new RouteItem(addresses.getLocator(), - (Inet6Address) addresses.getLocator().getAddress(), this, "KLALB SRv6", 13, 128, - addresses.getMonitor(), "D", false); + RouteItem ris = new RouteItem(addresses.getLocator(), addresses.getLocator().getAddress(), this, + "KLALB SRv6", 13, 128, addresses.getMonitor(), "D", false); rlist.add(ris); } } @@ -1056,6 +934,14 @@ public class KLALBRemoteLine extends AbstractIPv6NetworkLink implements IPv6Netw sendWindow.setCongressCondition(lock, condition); } - + public void onPostcardReceive(PostcardEntry postcard) { + long deltaxnanos = (long) (postcard.getTimestampDeltaLong() * 1000000000.0 / (1L << 32)); + if (deltaxnanos > 0) { + Long128 psnd = NTPTimestamps.ntp128BitToNanosTimestamp( + NTPTimestamps.inferNtp64To128(postcard.getTimestampBase(), sysclk.getCurrentTimeNTP128())); + monitor.getUploadBandwidth().recordPacket(KLALBUtils.createGlobalUUID(), psnd, 0, deltaxnanos); + } + sendWindow.ack(postcard.getPacketUUID()); + } } diff --git a/src/org/kne/cloud/network/klalb/KLALBRemoteManagement.java b/src/org/kne/cloud/network/klalb/KLALBRemoteManagement.java index 0ba2f0b..49592b1 100644 --- a/src/org/kne/cloud/network/klalb/KLALBRemoteManagement.java +++ b/src/org/kne/cloud/network/klalb/KLALBRemoteManagement.java @@ -79,14 +79,11 @@ public class KLALBRemoteManagement { jklbrl.addProperty("ipport", klalbRemoteLine.getSocketAddress().toString()); jklbrl.addProperty("state",MonitorData.parseStateToString( klalbRemoteLine.getMonitor().getState())); - jklbrl.addProperty("Vaddr", klalbRemoteLine.getRemoteVaddr().getAddress().getHostAddress()); + jklbrl.addProperty("Vaddr", klalbRemoteLine.getRemoteVaddr().getAddress().toString()); jklbrl.addProperty("uploadspeed", klalbRemoteLine.getMonitor().getOutSpeed()); jklbrl.addProperty("downloadspeed", klalbRemoteLine.getMonitor().getInSpeed()); - jklbrl.addProperty("uploadspeedavg", klalbRemoteLine.getMonitor().getOutSpeedAvg()); - jklbrl.addProperty("downloadspeedavg", klalbRemoteLine.getMonitor().getInSpeedAvg()); - jklbrl.addProperty("uploadtraffic", klalbRemoteLine.getMonitor().getOutTraffic()); jklbrl.addProperty("downloadtraffic", klalbRemoteLine.getMonitor().getInTraffic()); @@ -139,9 +136,6 @@ public class KLALBRemoteManagement { jrsp.addProperty("uploadspeed", klalbProxySystem.getKlalbController().getLinkMonitor().getOutSpeed()); jrsp.addProperty("downloadspeed", klalbProxySystem.getKlalbController().getLinkMonitor().getInSpeed()); - jrsp.addProperty("uploadspeedavg", klalbProxySystem.getKlalbController().getLinkMonitor().getOutSpeedAvg()); - jrsp.addProperty("downloadspeedavg", klalbProxySystem.getKlalbController().getLinkMonitor().getInSpeedAvg()); - jrsp.addProperty("uploadtraffic", klalbProxySystem.getKlalbController().getLinkMonitor().getOutTraffic()); jrsp.addProperty("downloadtraffic", klalbProxySystem.getKlalbController().getLinkMonitor().getInTraffic()); diff --git a/src/org/kne/cloud/network/klalb/KLALBUtils.java b/src/org/kne/cloud/network/klalb/KLALBUtils.java index 0f4bdb1..aa5e407 100644 --- a/src/org/kne/cloud/network/klalb/KLALBUtils.java +++ b/src/org/kne/cloud/network/klalb/KLALBUtils.java @@ -7,6 +7,7 @@ import java.io.IOException; import java.net.Inet6Address; import java.net.InetAddress; import java.net.UnknownHostException; +import java.security.SecureRandom; import java.util.List; import java.util.UUID; import java.util.concurrent.LinkedBlockingQueue; @@ -14,6 +15,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.cloud.network.ipv6.IPv6Address; public class KLALBUtils { public static Inet6Address uuidToIP(UUID uuid) { @@ -36,6 +38,18 @@ public class KLALBUtils { } return null; } + + + public static IPv6Address randomKLALBIPv6Address() { + SecureRandom sc = new SecureRandom(); + byte[] v = new byte[16]; + sc.nextBytes(v); + v[0] = (byte) 0x24; + v[1] = (byte) 0x86; + v[2] = 0x00; + v[3] = 0x01; + return IPv6Address.valueOf(v); + } public static void main(String[] args) { System.out.println(uuidToIP(new UUID(-1,-1))); } @@ -366,6 +380,37 @@ public static String parseAbbrIPv6(String IPv6Str) { } return join(arr, ":").replaceAll(":{2,}", "::"); } - - + + private static class UUIDGenarator{ + + private final long id; + private long counter=0; + private UUID randUUID=UUID.randomUUID(); + private long time=System.nanoTime(); + private static final long INTERVAL=1000000L; + public UUIDGenarator(long threadId) { + this.id=threadId; + } + public UUID genarateUUID() { + long curr=System.nanoTime(); + if(curr-time>INTERVAL) { + time=curr; + randUUID=UUID.randomUUID(); + } + long h=randUUID.getMostSignificantBits()^id; + long l=randUUID.getLeastSignificantBits()^counter; + + UUID ret=new UUID(h, l); + counter++; + return ret; + } + + } + private static ThreadLocal gens=ThreadLocal.withInitial(()->{ + return new UUIDGenarator(Thread.currentThread().threadId()); + }); + public static UUID createGlobalUUID() { + //return UUID.randomUUID(); + return gens.get().genarateUUID(); + } } diff --git a/src/org/kne/cloud/network/klalb/KLALBVirtualDatagramSocketImpl.java b/src/org/kne/cloud/network/klalb/KLALBVirtualDatagramSocketImpl.java index e0bd262..dd422cf 100644 --- a/src/org/kne/cloud/network/klalb/KLALBVirtualDatagramSocketImpl.java +++ b/src/org/kne/cloud/network/klalb/KLALBVirtualDatagramSocketImpl.java @@ -20,6 +20,7 @@ import java.util.concurrent.locks.LockSupport; import org.kne.cloud.network.NetworkPacket; import org.kne.cloud.network.VirtualDatagramSocketImpl; +import org.kne.cloud.network.ipv6.IPv6Address; import org.kne.cloud.network.ipv6.IPv6Packet; import org.kne.cloud.network.tcp.UDPPacket; import org.kne.concurrent.HighPerformanceExecutor; @@ -82,7 +83,7 @@ public class KLALBVirtualDatagramSocketImpl extends VirtualDatagramSocketImpl im if (!(host instanceof Inet6Address)) { throw new IllegalArgumentException("invalid address type, KLALB socket can only use IPV6 virtualaddress"); } - if ((!host.isAnyLocalAddress()) && (!host.equals(controller.getSelf().getAddress()))) { + if ((!host.isAnyLocalAddress()) && (!IPv6Address.valueOf( host).equals(controller.getSelf().getAddress()))) { throw new BindException("must bind to self"); } localaddr = (Inet6Address) host; @@ -97,8 +98,9 @@ public class KLALBVirtualDatagramSocketImpl extends VirtualDatagramSocketImpl im UDPPacket udp=new UDPPacket(localPort, p.getPort()); udp.getData().put(p.getData(), p.getOffset(), p.getLength()); udp.getData().flip(); - HighPerformanceExecutor.defaultExecutor.execute(() -> { - controller.sendPacketToAddress((Inet6Address) p.getAddress(),0, udp); + controller.getIpv6Router().enqueuePacketSendTask(()->{ + IPv6Packet uip=controller.createPacketToAddress(IPv6Address.valueOf( p.getAddress()),0, udp); + return uip; }); } @@ -121,7 +123,7 @@ public class KLALBVirtualDatagramSocketImpl extends VirtualDatagramSocketImpl im } private void copyTo(UDPPacket pack, DatagramPacket p) throws IOException { - p.setAddress(pack.getParent().getSourceAddress()); + p.setAddress(pack.getParent().getSourceAddress2()); p.setPort(pack.getSrcPort()); ByteBuffer buffer= ByteBuffer.wrap(p.getData(),p.getOffset(),p.getLength()); @@ -216,7 +218,7 @@ public class KLALBVirtualDatagramSocketImpl extends VirtualDatagramSocketImpl im private Queue recvQueue = new ConcurrentLinkedQueue(); private AtomicInteger recvQueueUsed=new AtomicInteger(0); @Override - public void accept(Inet6Address t,NetworkPacket np) { + public void accept(IPv6Address t,NetworkPacket np) { UDPPacket u=(UDPPacket) np; if(recvQueueUsed.get()<=inputchachesize) { if(recvQueue.offer(u)) { diff --git a/src/org/kne/cloud/network/klalb/KLALBVirtualRawSocketImpl.java b/src/org/kne/cloud/network/klalb/KLALBVirtualRawSocketImpl.java index b76ca6a..d29ef9f 100644 --- a/src/org/kne/cloud/network/klalb/KLALBVirtualRawSocketImpl.java +++ b/src/org/kne/cloud/network/klalb/KLALBVirtualRawSocketImpl.java @@ -15,7 +15,9 @@ import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.LockSupport; +import java.util.function.BiConsumer; import java.util.function.Consumer; +import java.util.function.Supplier; import org.kne.cloud.network.ByteBufferAllocator; import org.kne.cloud.network.NetworkPacket; @@ -24,7 +26,9 @@ import org.kne.cloud.network.ThreadTool; import org.kne.cloud.network.VirtualRawSocketImpl; import org.kne.cloud.network.ipv6.IPv6Packet; import org.kne.cloud.network.ipv6.IPv6Packet.IPv6Payload; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6Address; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6NetworkLink; import org.kne.cloud.network.ipv6.LoopbackIPv6NetworkLink; import org.kne.cloud.network.srv6.PacketConsumer; import org.kne.cloud.network.srv6.SRv6Router; @@ -139,8 +143,8 @@ public class KLALBVirtualRawSocketImpl extends VirtualRawSocketImpl implements P } if (!address.isAnyLocalAddress() ) { boolean contains=false; - for(Inet6AddressGroup adg:link.getAddressGroups()) { - if(adg.checkMatch((Inet6Address) address)) { + for(IPv6AddressGroup adg:link.getAddressGroups()) { + if(adg.checkMatch(IPv6Address.valueOf( address))) { contains=true; break; } @@ -187,14 +191,19 @@ public class KLALBVirtualRawSocketImpl extends VirtualRawSocketImpl implements P if(ipHeaderInclude) { }else { - HighPerformanceExecutor.defaultExecutor.execute(() -> { + IPv6Payload pl=new IPv6Payload(bindProtocolNumber); + pl.getData().put(buf); + pl.getData().flip(); + BiConsumer>cons=link.getReceiveConsumer(); + if(cons!=null) { + cons.accept(link,() -> { IPv6Packet ipv=new IPv6Packet(); ipv.setVersion(6); ipv.setTrafficClass(0); ipv.setFlowLabel(0); ipv.setHopLimit(255); if(!localaddr.isAnyLocalAddress()) { - ipv.setSourceAddress(localaddr); + ipv.setSourceAddress2(localaddr); }else { ipv.setSourceAddress(link.getRouter().getLocator().getAddress()); } @@ -202,24 +211,18 @@ public class KLALBVirtualRawSocketImpl extends VirtualRawSocketImpl implements P if (!(address instanceof Inet6Address)) { throw new IllegalArgumentException("invalid address type, KLALB socket can only use IPV6 address"); } - ipv.setDestinationAddress((Inet6Address)address); - ipv.setPriority(3); + ipv.setDestinationAddress2((Inet6Address)address); //ipv.enableECN(); - IPv6Payload pl=new IPv6Payload(bindProtocolNumber); - pl.getData().put(buf); - pl.getData().flip(); ipv.setPayload(pl); - Consumercons=link.getReceiveConsumer(); - if(cons!=null) { - cons.accept(ipv); - } + return ipv; }); } + } } @Override protected InetAddress peek() throws IOException { - return peekNextPacket().getSourceAddress(); + return peekNextPacket().getSourceAddress2(); } @Override @@ -229,7 +232,7 @@ public class KLALBVirtualRawSocketImpl extends VirtualRawSocketImpl implements P } private void copyTo(IPv6Packet pack, DatagramPacket p) throws IOException { - p.setAddress(pack.getSourceAddress()); + p.setAddress(pack.getSourceAddress2()); ByteBuffer buffer= ByteBuffer.wrap(p.getData(),p.getOffset(),p.getLength()); if(ipHeaderInclude) { diff --git a/src/org/kne/cloud/network/klalb/KLALBVirtualSocket.java b/src/org/kne/cloud/network/klalb/KLALBVirtualSocket.java index ffc95df..586b897 100644 --- a/src/org/kne/cloud/network/klalb/KLALBVirtualSocket.java +++ b/src/org/kne/cloud/network/klalb/KLALBVirtualSocket.java @@ -75,12 +75,7 @@ public class KLALBVirtualSocket extends VirtualSocket { } - public void associateSocket(Socket associateSocket) throws IOException { - ((KLALBVirtualSocketImpl)getVirtualImpl()).associateSocket(associateSocket); - } -public void associateSocketChannel(SocketChannel b) throws IOException{ - ((KLALBVirtualSocketImpl)getVirtualImpl()).associateSocketChannel(b); - } + @Override public SocketChannel getChannel() { return channel; diff --git a/src/org/kne/cloud/network/klalb/KLALBVirtualSocketChannel.java b/src/org/kne/cloud/network/klalb/KLALBVirtualSocketChannel.java index 5b3e0ea..62321de 100644 --- a/src/org/kne/cloud/network/klalb/KLALBVirtualSocketChannel.java +++ b/src/org/kne/cloud/network/klalb/KLALBVirtualSocketChannel.java @@ -145,10 +145,6 @@ public class KLALBVirtualSocketChannel extends SocketChannel{ } } - public void associateSocketChannel(SocketChannel b) throws IOException { - socket.associateSocketChannel(b); - } - public boolean isAutoFlush() throws IOException { return ((KVSIOutputStream)socket.getOutputStream()).isAutoFlush(); } diff --git a/src/org/kne/cloud/network/klalb/KLALBVirtualSocketImpl.java b/src/org/kne/cloud/network/klalb/KLALBVirtualSocketImpl.java index 92f0a1d..66cc9ad 100644 --- a/src/org/kne/cloud/network/klalb/KLALBVirtualSocketImpl.java +++ b/src/org/kne/cloud/network/klalb/KLALBVirtualSocketImpl.java @@ -1,12 +1,8 @@ package org.kne.cloud.network.klalb; -import java.io.ByteArrayOutputStream; -import java.io.FileDescriptor; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.PrintStream; import java.net.BindException; import java.net.ConnectException; import java.net.Inet4Address; @@ -14,70 +10,50 @@ import java.net.Inet6Address; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.NoRouteToHostException; -import java.net.ServerSocket; -import java.net.Socket; import java.net.SocketAddress; import java.net.SocketException; import java.net.SocketImpl; import java.net.SocketOptions; import java.net.SocketTimeoutException; -import java.net.UnknownHostException; import java.nio.ByteBuffer; -import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; -import java.nio.channels.SocketChannel; import java.nio.channels.WritableByteChannel; +import java.util.Iterator; +import java.util.Map; +import java.util.TimerTask; import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.BlockingDeque; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.LinkedBlockingDeque; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.PriorityBlockingQueue; -import java.util.concurrent.Semaphore; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; -import java.util.concurrent.atomic.AtomicReferenceArray; import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.LockSupport; -import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantLock; -import java.util.concurrent.locks.ReentrantReadWriteLock; -import java.util.function.BiConsumer; -import java.util.function.Consumer; import java.util.zip.Deflater; import java.util.zip.DeflaterOutputStream; -import java.util.zip.GZIPInputStream; import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; +import org.kne.cloud.clock.HighAccuracyClock; import org.kne.cloud.network.NetworkPacket; import org.kne.cloud.network.PortPair; import org.kne.cloud.network.SpeedLimiter; -import org.kne.cloud.network.ThreadTool; import org.kne.cloud.network.VirtualSocketImpl; -import org.kne.cloud.network.congress.CongressAlgorithm; -import org.kne.cloud.network.congress.ECNCongressAlgorithm; -import org.kne.cloud.network.congress.LARCCongressAlgorithm; +import org.kne.cloud.network.congestion.CongestionAlgorithm; +import org.kne.cloud.network.congestion.DCTCP2CongestionAlgorithm; +import org.kne.cloud.network.congestion.SendPacketSlidingWindow; +import org.kne.cloud.network.ipv6.IPv6Address; +import org.kne.cloud.network.ipv6.PacketID; +import org.kne.cloud.network.ipv6.PacketIDGenerator; import org.kne.cloud.network.monitor.SpeedAndTrafficAndDelayMonitorDataImpl; -import org.kne.concurrent.HighPerformanceExecutor; import org.kne.concurrent.SpinLock; import org.kne.concurrent.ThreadParker; -import org.kne.debug.TimeDebugger; -import org.kne.io.Data; -import com.google.gson.internal.Pair; - -import java.util.*; +import com.github.f4b6a3.uuid.UuidCreator; public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements BindableKLALBPacketConsumer{ - private static final int HEADER_CALIBRATE = 80; + private static final int HEADER_CALIBRATE = 100; /* private PrintStream dbg; { @@ -93,10 +69,9 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl private static final boolean debug = false; + //private SpeedAndTrafficAndDelayMonitorDataImpl socketMonitor=new SpeedAndTrafficAndDelayMonitorDataImpl(HighAccuracyClock.SYSTEM_CLOCK); - private SpeedAndTrafficAndDelayMonitorDataImpl socketMonitor=new SpeedAndTrafficAndDelayMonitorDataImpl(); - - private SpeedAndTrafficAndDelayMonitorDataImpl socketRawMonitor=new SpeedAndTrafficAndDelayMonitorDataImpl(); + //private SpeedAndTrafficAndDelayMonitorDataImpl socketRawMonitor=new SpeedAndTrafficAndDelayMonitorDataImpl(HighAccuracyClock.SYSTEM_CLOCK); private KLALBController controller; @@ -110,37 +85,16 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl private SpeedLimiter spdlmt=new SpeedLimiter(MIN_LIMIT_SPEED,1000000L); - protected Inet6Address remoteaddr; - protected Inet6Address localaddr;{ - try { - localaddr=(Inet6Address) Inet6Address.getByName("::0"); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - } - //private CountDownLatch reseted=new CountDownLatch(1); + protected IPv6Address remoteaddr; + protected IPv6Address localaddr=IPv6Address.UNSPECIFIED; private BlockingQueue backlogQueue; private ReentrantLock backlogQueuelock=new ReentrantLock(); private ThreadParker sendDequeLock=new ThreadParker(); - private Map recvMap = new ConcurrentHashMap(1024,0.2f); + private Map recvMap = new ConcurrentHashMap(1024); private AtomicInteger recvWindowUsed=new AtomicInteger(0); - //private AtomicInteger recvCounter=new AtomicInteger(0); - - - private Map sendmap=new ConcurrentHashMap(1024,0.5f); - private AtomicInteger sendmapWindowUsed=new AtomicInteger(0); - //private ReentrantReadWriteLock sendmaplock=new ReentrantReadWriteLock(); private ThreadParker sendthread=new ThreadParker(); - //private List sendlist=new ArrayList<>(); - private TimerTask sendCheckTask=new SendCheckTask(); - - //private List inputchache = new RangeArrayList<>(); - //private Map inputchache=new ConcurrentHashMap(); - //private Lock inputchachelock=new ReentrantLock(); - - private AtomicBoolean firstUpdate=new AtomicBoolean(true); private boolean ignoreBindCheck; private boolean connected; @@ -159,15 +113,33 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl private KVSIInputStream kvsii; private KVSIOutputStream kvsio; - private boolean nodelay=true; + private boolean nodelay=false; private long delaytime=2; private int inputchachesize =128* 1024*1024; private int outputchachesize = 128* 1024*1024; - - - private volatile long congressWindowSize = MTU * 10; - private volatile long sendWindowSize = MTU * 100; - + + private CongestionAlgorithm algorithm=new DCTCP2CongestionAlgorithm(); + private SendPacketSlidingWindowsendMap=new SendPacketSlidingWindow<>(algorithm, 4*MTU,HEADER_CALIBRATE,false); + { + sendMap.setResendConsumer((dtp)->{ + if(dtp.getSendCounter()>=10) { + System.err.println("send error!"); + try { + close0(true); + } catch (IOException e) { + e.printStackTrace(); + } + } + + controller.getIpv6Router().enqueuePacketSendTask(()->{ + long length= dtp.getTotalLength(); + //socketRawMonitor.getUploadBandwidth().recordPacket(pidg.generate(), (int) length); + spdlmt.forceTransmit(length); + //System.out.println("第"+(dtp.getSendCounter()-1)+"次重传:"+dtp); + return controller.createPacketToAddress( remoteaddr,0,dtp,1); + }); + }); + } private volatile long requestSpeedOld=MIN_LIMIT_SPEED; @@ -178,6 +150,7 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl private long inputcount = 0; private volatile long peerAvaliableRcvWindow = MTU*40; + private volatile long congestionWindow= MTU*40; private long outputcount = 0; @@ -186,7 +159,6 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl - private CongressAlgorithm algorithm=new ECNCongressAlgorithm(); @@ -218,69 +190,15 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl } - private class SendCheckTask extends TimerTask{ - - public void run() { - - - - try { - Collection cdp=sendmap.values(); - for (Iterator iterator = cdp.iterator(); iterator.hasNext();) { - DATATPacket dtp = (DATATPacket) iterator.next(); - try { - long x=System.nanoTime(); - long dt=x-dtp.resendtimer; - long limit= (long) ((1<< (dtp.getSendCounter()-1))*(algorithm.getRTO()*2)); - if(dt>limit) { - if(dtp.getSendCounter()>=10) { - throw new IOException("send error!"); - } - - HighPerformanceExecutor.defaultExecutor.execute(() -> { - dtp.setPriority(4); - long length= dtp.getTotalLength(); - socketRawMonitor.getOutTrafficAL().add(length); - spdlmt.forceTransmit(length); - controller.sendPacketToAddress((Inet6Address) remoteaddr,0,dtp,1); - //System.out.println("第"+(dtp.getSendCounter()-1)+"次重传:"+dtp+" "+dt+">"+limit); - dtp.resendtimer=x; - }); - - /*if(congressWindowSize>65535) { - congressWindowSize-=(dtp.getSize()+HEADER_CALIBRATE); - updateWindowSize(); - //System.out.println(reallimit+" -8192"); - }*/ - } - } catch (IOException e) { - e.printStackTrace(); - try { - close0(true); - } catch (IOException e1) { - e1.printStackTrace(); - } - break; - } - } - - }catch(Exception e) { - e.printStackTrace(); - } - } - - } - - private class FlowControlTask extends TimerTask{ @Override public void run() { if(getLocalPort()!=0&&getPort()!=0) - if(remoteaddr instanceof Inet6Address&&(!remoteaddr.isAnyLocalAddress())) - HighPerformanceExecutor.defaultExecutor.execute(() -> { - controller.sendPacketToAddress((Inet6Address) remoteaddr,0, new ACKTPacket(getLocalPort(),getPort(), -1, - getAvaliableRcvWindow(),false,socketMonitor.getInSpeedMax(),0)); + if(!remoteaddr.isAnyLocalAddress()) + controller.getIpv6Router().enqueuePacketSendTask(()->{ + return controller.createPacketToAddress( remoteaddr,0, new ACKTPacket(getLocalPort(),getPort(), -1, + getAvaliableRcvWindow(),false,0,0)); }); } @@ -288,6 +206,7 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl } + private long getAvaliableRcvWindow() { return Math.max(0, inputchachesize-recvWindowUsed.get()); } @@ -296,36 +215,13 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl return backlogQueue != null; } - - - - - - -/* private int countInputBytes() { - AtomicInteger i = new AtomicInteger(0); - sendDeque.forEach((c) -> { - try { - i.addAndGet(c.getSize()); - }catch(IndexOutOfBoundsException e) { - System.out.println("ERRS:"+c.getHeader()); - } - }); - return i.get(); - } - private int countOutputBytes() { - AtomicInteger i = new AtomicInteger(0); - sendmap.values().forEach((c) -> { - i.addAndGet(c.getSize()); - }); - return i.get(); - }*/ public KLALBController getController() { return controller; } public KLALBVirtualSocketImpl(KLALBController kc) { super(); this.controller = kc; + this.delaytime=kc.getConfigItem().getNagleDelayTime(); } @Override @@ -386,8 +282,8 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl bind(Inet6Address.getByName("::0"), 0); } port = ((InetSocketAddress) address).getPort(); - this.address=this.remoteaddr = (Inet6Address) ((InetSocketAddress) address).getAddress(); - + this.address = (Inet6Address) ((InetSocketAddress) address).getAddress(); + this.remoteaddr=IPv6Address.valueOf(this.address); if(connected) throw new SocketException("already connected"); @@ -395,7 +291,6 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl connectionPending=true; - controller.getResendTimer().schedule(sendCheckTask, 10, 10); //controller.sendPacketToAddress((Inet6Address) this.remoteaddr, new SYNTPacket(localport, port), 0,1); try { getKVSIOutputStream().write(compress); @@ -438,7 +333,7 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl algorithm.setWindowControlConsumer((window)->{ if(debug) System.out.println("window:"+window); - congressWindowSize=window; + congestionWindow=window; updateWindowSize(); }); algorithm.reset(); @@ -449,6 +344,7 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl }catch(NoRouteToHostException e) { throw e; }catch(SocketException e) { + e.printStackTrace(); throw new ConnectException("connect refused"); }finally { connectionPending=false; @@ -479,10 +375,10 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl if (!(host instanceof Inet6Address)) { throw new IllegalArgumentException("invalid address type, KLALB socket can only use IPV6 virtualaddress"); } - if ((!host.isAnyLocalAddress()) && (!host.equals(controller.getSelf().getAddress()))) { + if ((!host.isAnyLocalAddress()) && (! IPv6Address.valueOf( host).equals(controller.getSelf().getAddress()))) { throw new BindException("must bind to self"); } - localaddr = (Inet6Address) host; + localaddr = IPv6Address.valueOf( host); localport=port; this.ignoreBindCheck=ignoreBindCheck; if(!ignoreBindCheck) @@ -498,7 +394,7 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl protected void listen(int backlog) throws IOException { backlogQueue = new ArrayBlockingQueue<>(backlog); controller.getStreamPortBinder().listen(this); - address=localaddr; + address=localaddr.toInet6Address(); } @Override @@ -524,10 +420,10 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl kvsi.outputchachesize=outputchachesize; kvsi.address = isa.getAddress(); - kvsi.remoteaddr=(Inet6Address) isa.getAddress(); + kvsi.remoteaddr=IPv6Address.valueOf( isa.getAddress()); - kvsi.bind(localaddr, localport,true); - kvsi.accept((Inet6Address)p[1],(KLALBPacket) p[2]); + kvsi.bind(localaddr.toInet6Address(), localport,true); + kvsi.accept((IPv6Address) p[1],(KLALBPacket) p[2]); kvsi.connect(isa, 5000); /*kvsi.port = isa.getPort(); kvsi.localport = localport; @@ -579,10 +475,9 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl } //System.out.println("PULL:"+dtp2); dataPack = dtp2; - socketMonitor.getInTrafficAL().add(dtp2.getSize()); - socketMonitor.getInPacketCounterAL().add(1); - controller.getDatatMonitor().getInTrafficAL().add(dtp2.getSize()); - controller.getDatatMonitor().getInPacketCounterAL().add(1); + int size=dtp2.getSize(); + //socketMonitor.getDownloadBandwidth().recordPacket(pid, size); + controller.getDatatMonitor().getDownloadBandwidth().recordPacket(KLALBUtils.createGlobalUUID(), size); //checkFlowControl(dtp2); break; @@ -771,7 +666,7 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl private volatile int count=0;*/ - private Lock olock=null/*new ReentrantLock()*/; + private Lock olock=new SpinLock(); private volatile boolean locked=true; private volatile boolean autoFlush=true; @@ -785,11 +680,10 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl if(olock!=null) olock.lock(); try { - createDataPackIfNull(1); dataPack.getDataBuffer().put((byte) b);//1429?5773?8669 if (dataPack!=null&& dataPack.getDataBuffer().hasRemaining()) {//1429?5773?8669 if(autoFlush) - flush(); + delayFlush(); }else { flush0(); } @@ -814,7 +708,6 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl olock.lock(); try { while(len>0) { - createDataPackIfNull(len); int remainD=dataPack.getDataBuffer().remaining(); int min=Math.min(len, remainD); dataPack.getDataBuffer().put(b, off, min); @@ -828,7 +721,7 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl if(dataPack!=null&& dataPack.getDataBuffer().position()>0) { if(autoFlush) - flush(); + delayFlush(); } }finally { if(olock!=null) @@ -845,7 +738,6 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl try { while(src.hasRemaining()) { - createDataPackIfNull(src.remaining()); int min=Math.min(src.remaining(), dataPack.getDataBuffer().remaining()); int olm=src.limit(); src.limit(src.position()+min); @@ -876,7 +768,6 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl try { while(src.hasRemaining()) { - createDataPackIfNull(src.remaining()); int min=Math.min(src.remaining(), dataPack.getDataBuffer().remaining()); int olm=src.limit(); src.limit(src.position()+min); @@ -891,7 +782,7 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl if(dataPack!=null&& dataPack.getDataBuffer().position()>0) { if(autoFlush) - flush(); + delayFlush(); } }finally { if(olock!=null) @@ -901,16 +792,9 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl } - private void createDataPackIfNull(int remaining) { + private void createDataPack() { if(dataPack==null) { - int blth; - if(autoFlush) { - blth=Math.min( remaining,MTU); - }else { - blth=MTU; - } - - dataPack=new DATATPacket(localport, port, outputcount++, blth); + dataPack=new DATATPacket(localport, port, outputcount++, MTU); dataPack.putTimePassport("buildHeader"); } } @@ -919,7 +803,7 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl while(true){ if (isClosed()) throw new SocketException("Socket is closed"); - if(sendmap.isEmpty()) + if(sendMap.isEmpty()) break; if(timeout!=0&&(System.nanoTime()-start>timeout*1000000L)) throw new SocketTimeoutException("wait for acknowledged timout"); @@ -931,45 +815,17 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl @Override public void flush() throws IOException { - if(nodelay||locked) { - if(olock!=null) - olock.lock(); - try { + if(olock!=null) + olock.lock(); + try { + if((delaytime<=0)||locked) { flush0(); - }finally { - if(olock!=null) - olock.unlock(); - } }else { - if(tt==null) { - tt= new TimerTask() { - - @Override - public void run() { - if(isClosed()) - cancel(); - try { - if(olock!=null) - olock.lock(); - try { - flush0(); - }finally { - if(olock!=null) - olock.unlock(); - } - } catch (IOException e) { - ioe.set(e); - } - } - }; - getController().getNagleTimer().schedule(tt, delaytime); - } - - IOException ioex=ioe.get(); - if(ioex!=null) { - ioex.fillInStackTrace(); - throw ioex; - } + delayFlush(); + } + }finally { + if(olock!=null) + olock.unlock(); } } public void forceFlush() throws IOException{ @@ -982,6 +838,37 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl olock.unlock(); } } + public void delayFlush()throws IOException{ + if(tt==null) { + tt= new TimerTask() { + + @Override + public void run() { + if(isClosed()) + cancel(); + try { + if(olock!=null) + olock.lock(); + try { + flush0(); + }finally { + if(olock!=null) + olock.unlock(); + } + } catch (IOException e) { + ioe.set(e); + } + } + }; + getController().getNagleTimer().schedule(tt, delaytime/1000000L); + } + + IOException ioex=ioe.get(); + if(ioex!=null) { + ioex.fillInStackTrace(); + throw ioex; + } + } private void flush0() throws IOException { if (dataPack!=null&&dataPack.getDataBuffer().position() > 0) { @@ -994,8 +881,8 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl while(true){ if (isClosed()) throw new SocketException("Socket is closed"); - boolean b=sendmapWindowUsed.get()<=sendWindowSize; - if(b) + boolean b=sendMap.isCongress(null, 1.0); + if(!b) break; sendthread.parkNanos(1000000L); } @@ -1005,31 +892,20 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl pack.getDataBuffer().flip(); - spdlmt.transmit(pack.getDataBuffer().limit()); - HighPerformanceExecutor.defaultExecutor.execute(() -> { - DATATPacket prv= sendmap.put(pack.getNumber(),pack); - long wu=sendmapWindowUsed.addAndGet((int) (pack.getTotalLength()+HEADER_CALIBRATE)); - if(prv!=null) { - wu=sendmapWindowUsed.addAndGet((int) (-(prv.getTotalLength()+HEADER_CALIBRATE))); - } - algorithm.setCurrentWindowUsed(wu ); - if(debug) - System.out.println("windowused:"+wu); + //spdlmt.transmit(pack.getDataBuffer().limit()); + controller.getIpv6Router().enqueuePacketSendTask(()->{ + sendMap.put(pack.getNumber(),pack); - - socketMonitor.getOutTrafficAL().add(pack.getDataBuffer().limit()); - socketMonitor.getOutPacketCounterAL().add(1); - controller.getDatatMonitor().getOutTrafficAL().add(pack.getDataBuffer().limit()); - controller.getDatatMonitor().getOutPacketCounterAL().add(1); + int size= pack.getDataBuffer().limit(); + //socketMonitor.getUploadBandwidth().recordPacket(pid, size); + controller.getDatatMonitor().getUploadBandwidth().recordPacket(KLALBUtils.createGlobalUUID(), size); - pack.setPriority(5); - pack.resendtimer=System.nanoTime(); - socketRawMonitor.getOutTrafficAL().add(pack.getTotalLength()); - controller.sendPacketToAddress(remoteaddr,0,pack); + //socketRawMonitor.getUploadBandwidth().recordPacket(pid, size); + return controller.createPacketToAddress(remoteaddr,0,pack); }); - + createDataPack(); @@ -1058,16 +934,13 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl } DATATPacket pack=new DATATPacket(localport, port, outputcount++,MTU); - pack.setPriority(5); pack.getDataBuffer(). flip(); - HighPerformanceExecutor.defaultExecutor.execute(() -> { - controller.sendPacketToAddress(remoteaddr,0,pack); + controller.getIpv6Router().enqueuePacketSendTask(()->{ + return controller.createPacketToAddress(remoteaddr,0,pack); }); /*sendmaplock.readLock().lock(); try{*/ - pack.resendtimer=System.nanoTime(); - sendmap.put(pack.getNumber(),pack); - sendmapWindowUsed.addAndGet((int) (pack.getTotalLength()+HEADER_CALIBRATE)); + sendMap.put(pack.getNumber(),pack); /*}finally { sendmaplock.readLock().unlock(); }*/ @@ -1076,7 +949,7 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl if (isClosed()) throw new SocketException("Socket is closed"); //System.out.println(sendmap.size()); - if(sendmap.isEmpty()) + if(sendMap.isEmpty()) break; sendthread.parkNanos(1000000L); } @@ -1178,12 +1051,12 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl closed = true; if(!isListening() ) { - sendCheckTask.cancel(); flowControlTask.cancel(); + sendMap.close(); if(b) if(remoteaddr!=null) { - HighPerformanceExecutor.defaultExecutor.execute(() -> { - controller.sendPacketToAddress(remoteaddr,0, new RSTPacket(super.localport, super.port), + controller.getIpv6Router().enqueuePacketSendTask(()->{ + return controller.createPacketToAddress(remoteaddr,0, new RSTPacket(super.localport, super.port), 2); }); } @@ -1218,280 +1091,9 @@ public class KLALBVirtualSocketImpl extends VirtualSocketImpl implements Bindabl return super.getLocalPort(); } -public void associateSocketChannel(SocketChannel b) throws IOException{ - InputStream is=getInputStream(); - OutputStream os=getOutputStream(); - if((!(is instanceof KVSIInputStream))||(!(os instanceof KVSIOutputStream))) { - throw new CannotAssociateException("cant use association because compress is enabled"); - } - KVSIInputStream kis=(KVSIInputStream) is; - KVSIOutputStream kos=(KVSIOutputStream) os; - Thread t1=ThreadTool.makeVThreadIfSupport("本地发送线程", ()->{ - boolean onError=false; - try { - DATATPacket dp; - while((dp=kis.nextPacket()).getSize()!=0) { - b.write(dp.getDataBuffer()); - dp.putTimePassport("unpacked"); - dp.printPassport(); - //dp.dispose(); - } - }catch(IOException e) { - onError=true; - e.printStackTrace(); - }finally { - try { - b.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - kis.close(); - } catch (IOException e) { - e.printStackTrace(); - } - if(true) { - try { - b.close(); - } catch (IOException e) { - // TODO 自动生成的 catch 块 - e.printStackTrace(); - } - try { - close(); - } catch (IOException e) { - // TODO 自动生成的 catch 块 - e.printStackTrace(); - } - } - } - }); - Thread t2=ThreadTool.makeVThreadIfSupport("本地接收线程", ()->{ - boolean onError=false; - try { - ByteBuffer tst=ByteBuffer.allocateDirect(MTU); - while(true) { - if(nodelay) { - kos.createDataPackIfNull(MTU); - if(b.read(kos.dataPack.getDataBuffer())==-1) { - break; - } - kos.flush0(); - }else { - if(b.read(tst)==-1) { - break; - } - tst.flip(); - - kos.olock.lock(); - try { - kos.dataPack.getDataBuffer().put(tst); - /*if(b.read(kos.dataPack.getDataBuffer())==-1) { - break; - }*/ - }finally { - kos.olock.unlock(); - - } - if(kos.dataPack.getDataBuffer().hasRemaining()) { - kos.olock.lock(); - try { - kos.flush(); - }finally { - kos.olock.unlock(); - } - }else { - kos.olock.lock(); - try { - kos.flush0(); - }finally { - kos.olock.unlock(); - } - } - tst.clear(); - } - } - }catch(IOException e) { - onError=true; - e.printStackTrace(); - }finally { - try { - b.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - kos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - if(true) { - try { - b.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - t1.start(); - t2.start(); - try { - t1.join(); - t2.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - b.close(); - close(); - } - - public void associateSocket(Socket associateSocket) throws IOException { - InputStream lis=associateSocket.getInputStream(); - OutputStream los=associateSocket.getOutputStream(); - ReadableByteChannel irc=Channels.newChannel(lis); - WritableByteChannel orc=Channels.newChannel(los); - - - InputStream is=getInputStream(); - OutputStream os=getOutputStream(); - if((!(is instanceof KVSIInputStream))||(!(os instanceof KVSIOutputStream))) { - throw new CannotAssociateException("cant use association because compress is enabled"); - } - KVSIInputStream kis=(KVSIInputStream) is; - KVSIOutputStream kos=(KVSIOutputStream) os; - Thread t1=ThreadTool.makeVThreadIfSupport("本地发送线程", ()->{ - boolean onError=false; - try { - DATATPacket dp; - while((dp=kis.nextPacket()).getSize()!=0) { - orc.write(dp.getDataBuffer()); - dp.putTimePassport("unpacked"); - dp.printPassport(); - //dp.dispose(); - } - }catch(IOException e) { - onError=true; - e.printStackTrace(); - }finally { - try { - los.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - kis.close(); - } catch (IOException e) { - e.printStackTrace(); - } - if(true) { - try { - associateSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - Thread t2=ThreadTool.makeVThreadIfSupport("本地接收线程", ()->{ - boolean onError=false; - try { - ByteBuffer tst=ByteBuffer.allocateDirect(MTU); - while(true) { - if(nodelay) { - kos.createDataPackIfNull(MTU); - if(irc.read(kos.dataPack.getDataBuffer())==-1) { - break; - } - kos.flush0(); - }else { - if(irc.read(tst)==-1) { - break; - } - tst.flip(); - - kos.olock.lock(); - try { - kos.dataPack.getDataBuffer().put(tst); - /*if(irc.read(kos.dataPack.getDataBuffer())==-1) { - break; - }*/ - }finally { - kos.olock.unlock(); - - } - if(kos.dataPack.getDataBuffer().hasRemaining()) { - kos.olock.lock(); - try { - kos.flush(); - }finally { - kos.olock.unlock(); - } - }else { - kos.olock.lock(); - try { - kos.flush0(); - }finally { - kos.olock.unlock(); - } - } - tst.clear(); - } - } - }catch(IOException e) { - onError=true; - e.printStackTrace(); - }finally { - try { - lis.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - kos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - if(true) { - try { - associateSocket.close(); - } catch (IOException e) { - // TODO 自动生成的 catch 块 - e.printStackTrace(); - } - try { - close(); - } catch (IOException e) { - // TODO 自动生成的 catch 块 - e.printStackTrace(); - } - } - } - }); - t1.start(); - t2.start(); - try { - t1.join(); - t2.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - associateSocket.close(); - close(); - } @Override - public void accept(Inet6Address from,NetworkPacket np) { + public void accept(IPv6Address from,NetworkPacket np) { KLALBPacket u=(KLALBPacket) np; try { //System.out.println(this+" "+u); @@ -1510,27 +1112,7 @@ public void associateSocketChannel(SocketChannel b) throws IOException{ ACKTPacket ackt = (ACKTPacket) u; acceptACK(from, ackt); break; - case KLALBPacket.NACKT: - NACKTPacket nackt=(NACKTPacket) u; - DATATPacket st=null; - /*sendmaplock.readLock().lock(); - try {*/ - st=sendmap.get(nackt.getNumber()); - /*}finally { - sendmaplock.readLock().unlock(); - }*/ - - if(st!=null) { - /*if(reallimit>LIMIT*2) { - reallimit=reallimit-2048; - System.out.println(reallimit+" -2048"); - }*/ - //System.out.println("快速重传:"+st); - - st.setPriority(4); - controller.sendPacketToAddress(remoteaddr,0,st); - } - break; + default: break; } @@ -1539,15 +1121,15 @@ public void associateSocketChannel(SocketChannel b) throws IOException{ } } - private void acceptDATA(Inet6Address from, DATATPacket dtp) throws BindException, IOException { - socketRawMonitor.getInTrafficAL().add(dtp.getTotalLength()); + private void acceptDATA(IPv6Address from, DATATPacket dtp) throws BindException, IOException { + //socketRawMonitor.getDownloadBandwidth().recordPacket(pidg.generate(), length); if(isListening()) { if(dtp.getNumber()==0) { backlogQueuelock.lock(); try{ //controller.getStreamPortBinder().checkIsConnected(new Pair); - InetSocketAddress is=new InetSocketAddress(from, dtp.getSrcPort()); + InetSocketAddress is=new InetSocketAddress(from.toInet6Address(), dtp.getSrcPort()); AtomicBoolean ab=new AtomicBoolean(true); for (Iterator iterator = backlogQueue.iterator(); iterator.hasNext();) { Object[] objects = (Object[]) iterator.next(); @@ -1557,7 +1139,7 @@ public void associateSocketChannel(SocketChannel b) throws IOException{ } } if(ab.get()) { - if(controller.getStreamPortBinder().checkIsConnect(this,new InetSocketAddress(from, dtp.getSrcPort()))) { + if(controller.getStreamPortBinder().checkIsConnect(this,new InetSocketAddress(from.toInet6Address(), dtp.getSrcPort()))) { ab.set(false); } } @@ -1568,8 +1150,8 @@ public void associateSocketChannel(SocketChannel b) throws IOException{ /* controller.sendPacketToAddress(from.getRemoteVaddr(), new ACKTPacket(dtp.getDport(), dtp.getSport(),dtp.getNumber(),true,0), 0,2);*/ }else { - HighPerformanceExecutor.defaultExecutor.execute(() -> { - controller.sendPacketToAddress(from,0, new RSTPacket(dtp.getDstPort(), dtp.getSrcPort()), + controller.getIpv6Router().enqueuePacketSendTask(()->{ + return controller.createPacketToAddress(from,0, new RSTPacket(dtp.getDstPort(), dtp.getSrcPort()), 2); }); } @@ -1579,16 +1161,16 @@ public void associateSocketChannel(SocketChannel b) throws IOException{ backlogQueuelock.unlock(); } }else { - HighPerformanceExecutor.defaultExecutor.execute(() -> { - controller.sendPacketToAddress(from,0, new RSTPacket(dtp.getDstPort(), dtp.getSrcPort()), + controller.getIpv6Router().enqueuePacketSendTask(()->{ + return controller.createPacketToAddress(from,0, new RSTPacket(dtp.getDstPort(), dtp.getSrcPort()), 2); }); } }else { //System.out.println(dtp.isCE()); - HighPerformanceExecutor.defaultExecutor.execute(() -> { - controller.sendPacketToAddress(from,0, new ACKTPacket(dtp.getDstPort(), dtp.getSrcPort(), dtp.getNumber(), - getAvaliableRcvWindow(),dtp.isCE(),socketMonitor.getInSpeedAvg(),dtp.getSendcount()), 1); + controller.getIpv6Router().enqueuePacketSendTask(()->{ + return controller.createPacketToAddress(from,0, new ACKTPacket(dtp.getDstPort(), dtp.getSrcPort(), dtp.getNumber(), + getAvaliableRcvWindow(),dtp.isCE(),0,dtp.getSendcount()), 1); }); boolean added=false; @@ -1623,10 +1205,10 @@ public void associateSocketChannel(SocketChannel b) throws IOException{ } } - private void acceptACK(Inet6Address from, ACKTPacket ackt) throws IOException { + private void acceptACK(IPv6Address from, ACKTPacket ackt) throws IOException { if(isListening()) { - HighPerformanceExecutor.defaultExecutor.execute(() -> { - controller.sendPacketToAddress(from,0, new RSTPacket(ackt.getDstPort(), ackt.getSrcPort()), + controller.getIpv6Router().enqueuePacketSendTask(()->{ + return controller.createPacketToAddress(from,0, new RSTPacket(ackt.getDstPort(), ackt.getSrcPort()), 2); }); }else { @@ -1645,23 +1227,8 @@ public void associateSocketChannel(SocketChannel b) throws IOException{ DATATPacket kl=null; - kl=sendmap.remove(ackt.getNumber()); - if(kl!=null) { - long wu= sendmapWindowUsed.addAndGet((int) (-(kl.getTotalLength()+HEADER_CALIBRATE))); - if(debug) - System.out.println("windowused:"+wu); - algorithm.setCurrentWindowUsed(wu); - } + kl=sendMap.ack(ackt.getNumber(),ackt.isCongress()); - if(kl!=null) { - - - if(kl.getSendCounter()==1) { - long RTTC=ackt.getRcvtime()- kl.getSndtime(); - algorithm.putAck(kl.getTotalLength(), RTTC,ackt.isCongress()); - } - - } @@ -1669,7 +1236,7 @@ public void associateSocketChannel(SocketChannel b) throws IOException{ } private void updateWindowSize() { - sendWindowSize=Math.min(peerAvaliableRcvWindow, congressWindowSize); + sendMap.setWindowSize(Math.min(peerAvaliableRcvWindow, congestionWindow)); if(sendthread!=null) sendthread.unpark(); @@ -1677,12 +1244,12 @@ public void associateSocketChannel(SocketChannel b) throws IOException{ @Override public InetAddress getRemoteInetAddress() { - return remoteaddr; + return remoteaddr.toInet6Address(); } @Override public InetAddress getLocalInetAddress() { - return localaddr; + return localaddr.toInet6Address(); } @Override diff --git a/src/org/kne/cloud/network/klalb/MemUseTest.java b/src/org/kne/cloud/network/klalb/MemUseTest.java deleted file mode 100644 index c42b322..0000000 --- a/src/org/kne/cloud/network/klalb/MemUseTest.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.kne.cloud.network.klalb; - -public class MemUseTest { - - public static void main(String[] args) throws InterruptedException { - Thread.sleep(1000); - Runtime r=Runtime.getRuntime(); - System.out.println("total:"+r.totalMemory()+" max:"+r.maxMemory()+" free:"+r.freeMemory()); - while(true) { - - } - } - -} diff --git a/src/org/kne/cloud/network/klalb/MonitoredSocket.java b/src/org/kne/cloud/network/klalb/MonitoredSocket.java index aa9eff6..32f67ab 100644 --- a/src/org/kne/cloud/network/klalb/MonitoredSocket.java +++ b/src/org/kne/cloud/network/klalb/MonitoredSocket.java @@ -7,30 +7,36 @@ import java.net.Socket; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.LongAdder; import org.kne.cloud.network.FilterSocket; import org.kne.cloud.network.monitor.MonitorData; import org.kne.cloud.network.monitor.SpeedAndTrafficMonitorDataImpl; public class MonitoredSocket extends FilterSocket { - public SpeedAndTrafficMonitorDataImpl getMonitor() { - return monitor; - } - - - private SpeedAndTrafficMonitorDataImpl monitor; + private LongAdder inMonitor; + private LongAdder outMonitor; + + + public LongAdder getInMonitor() { + return inMonitor; + } + public LongAdder getOutMonitor() { + return outMonitor; + } @Override public synchronized void close() throws IOException { super.close(); } public MonitoredSocket(Socket socket) { - this(socket,new SpeedAndTrafficMonitorDataImpl()); + this(socket,new LongAdder(),new LongAdder()); } - public MonitoredSocket(Socket socket,SpeedAndTrafficMonitorDataImpl monitor) { + public MonitoredSocket(Socket socket,LongAdder inMonitor,LongAdder outMonitor) { super(socket); - this.monitor=monitor; + this.inMonitor=inMonitor; + this.outMonitor=outMonitor; } @@ -41,14 +47,14 @@ public class MonitoredSocket extends FilterSocket { @Override public InputStream getInputStream() throws IOException { if(in==null) - in=new MonitoredInputStream(socket.getInputStream(), monitor.getInTrafficAL()); + in=new MonitoredInputStream(socket.getInputStream(), inMonitor); return in; } @Override public OutputStream getOutputStream() throws IOException { if(out==null) { - out=new MonitoredOutputStream(socket.getOutputStream(), monitor.getOutTrafficAL()); + out=new MonitoredOutputStream(socket.getOutputStream(), outMonitor); } return out; } diff --git a/src/org/kne/cloud/network/klalb/PINGPacket.java b/src/org/kne/cloud/network/klalb/PINGPacket.java index 7310151..685260b 100644 --- a/src/org/kne/cloud/network/klalb/PINGPacket.java +++ b/src/org/kne/cloud/network/klalb/PINGPacket.java @@ -9,16 +9,24 @@ import java.nio.ByteBuffer; public class PINGPacket extends KLALBPacket { - private static final int HEADER_LENGTH=9; + private static final int HEADER_LENGTH=25; public long getTime() { + return klalbHeader.getLong(17); + } + + public long getUpSpeed() { return klalbHeader.getLong(1); } + public long getDownSpeed() { + return klalbHeader.getLong(9); + } - - public PINGPacket(long time) { - super(PING,HEADER_LENGTH,-1); + public PINGPacket(long time,long upSpeed,long downSpeed) { + super(PING,HEADER_LENGTH); + klalbHeader.putLong(upSpeed); + klalbHeader.putLong(downSpeed); klalbHeader.putLong(time); } public PINGPacket(ByteBuffer bb) { diff --git a/src/org/kne/cloud/network/klalb/PONGPacket.java b/src/org/kne/cloud/network/klalb/PONGPacket.java index 01c5ba3..cdf2c6c 100644 --- a/src/org/kne/cloud/network/klalb/PONGPacket.java +++ b/src/org/kne/cloud/network/klalb/PONGPacket.java @@ -9,21 +9,27 @@ import java.nio.ByteBuffer; public class PONGPacket extends KLALBPacket { - private static final int HEADER_LENGTH=25; + private static final int HEADER_LENGTH=41; public long getTimepingsnd() { - return klalbHeader.getLong(1); - } - - public long getTimepingrcv() { - return klalbHeader.getLong(9); - } - - public long getTimepongsnd() { return klalbHeader.getLong(17); } - + public long getTimepingrcv() { + return klalbHeader.getLong(25); + } + + public long getTimepongsnd() { + return klalbHeader.getLong(33); + } + + public long getUpSpeed() { + return klalbHeader.getLong(1); + } + + public long getDownSpeed() { + return klalbHeader.getLong(9); + } @Override @@ -31,8 +37,10 @@ public class PONGPacket extends KLALBPacket { return HEADER_LENGTH; } - public PONGPacket( long timepingsnd,long timepingrcv, long timepongsnd) { - super(PONG,HEADER_LENGTH,-1); + public PONGPacket( long timepingsnd,long timepingrcv, long timepongsnd,long upSpeed,long downSpeed) { + super(PONG,HEADER_LENGTH); + klalbHeader.putLong(upSpeed); + klalbHeader.putLong(downSpeed); klalbHeader.putLong(timepingsnd); klalbHeader.putLong(timepingrcv); klalbHeader.putLong(timepongsnd); diff --git a/src/org/kne/cloud/network/klalb/PacketConsumer.java b/src/org/kne/cloud/network/klalb/PacketConsumer.java index 0c2bb07..8d62a68 100644 --- a/src/org/kne/cloud/network/klalb/PacketConsumer.java +++ b/src/org/kne/cloud/network/klalb/PacketConsumer.java @@ -5,7 +5,8 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; import org.kne.cloud.network.NetworkPacket; +import org.kne.cloud.network.ipv6.IPv6Address; -public interface PacketConsumer extends BiConsumer { +public interface PacketConsumer extends BiConsumer { } diff --git a/src/org/kne/cloud/network/klalb/PortBinder.java b/src/org/kne/cloud/network/klalb/PortBinder.java index 31ecc6b..02627a1 100644 --- a/src/org/kne/cloud/network/klalb/PortBinder.java +++ b/src/org/kne/cloud/network/klalb/PortBinder.java @@ -18,29 +18,24 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; +import org.kne.cloud.network.IPv6SocketAddress; import org.kne.cloud.network.NetworkPacket; +import org.kne.cloud.network.ipv6.IPv6Address; import com.google.gson.internal.Pair; public class PortBinder { - private static Inet6Address ANYLA; - static { - try { - ANYLA=(Inet6Address) Inet6Address.getByAddress(new byte[16]); - } catch (UnknownHostException e) { - } - } private KLALBController controller; public PortBinder(KLALBController controller) { super(); this.controller = controller; } private ReentrantReadWriteLock bindMaplock=new ReentrantReadWriteLock(); - private MapbindMap=new ConcurrentHashMap<>(1024,0.2f); + private MapbindMap=new ConcurrentHashMap<>(1024,0.2f); private ReentrantReadWriteLock listenMaplock=new ReentrantReadWriteLock(); - private MaplistenMap=new ConcurrentHashMap<>(1024,0.2f); + private MaplistenMap=new ConcurrentHashMap<>(1024,0.2f); private ReentrantReadWriteLock connectMaplock=new ReentrantReadWriteLock(); - private Map,BindableKLALBPacketConsumer>connectMap=new ConcurrentHashMap<>(1024,0.2f); + private Map,BindableKLALBPacketConsumer>connectMap=new ConcurrentHashMap<>(1024,0.2f); private volatile int portn=65535; public void bind(BindableKLALBPacketConsumer ks) throws BindException { bindMaplock.writeLock().lock(); @@ -64,10 +59,10 @@ public class PortBinder { } } boolean flag=true; - for (Iterator iterator = bindMap.keySet().iterator(); iterator.hasNext();) { - InetSocketAddress bindableKLALBPacketConsumer = (InetSocketAddress) iterator + for (Iterator iterator = bindMap.keySet().iterator(); iterator.hasNext();) { + IPv6SocketAddress bindableKLALBPacketConsumer = (IPv6SocketAddress) iterator .next(); - if(Objects.equals(ks.getLocalInetAddress(), bindableKLALBPacketConsumer.getAddress())&&portn==bindableKLALBPacketConsumer.getPort()) { + if(Objects.equals(IPv6Address.valueOf( ks.getLocalInetAddress()), bindableKLALBPacketConsumer.getAddress())&&portn==bindableKLALBPacketConsumer.getPort()) { flag=false; break; } @@ -77,15 +72,15 @@ public class PortBinder { } ks.setLocalPort(portn); }else { - for (Iterator iterator = bindMap.keySet().iterator(); iterator.hasNext();) { - InetSocketAddress bindableKLALBPacketConsumer = (InetSocketAddress) iterator + for (Iterator iterator = bindMap.keySet().iterator(); iterator.hasNext();) { + IPv6SocketAddress bindableKLALBPacketConsumer = (IPv6SocketAddress) iterator .next(); - if(Objects.equals(ks.getLocalInetAddress(), bindableKLALBPacketConsumer.getAddress())&&pold==bindableKLALBPacketConsumer.getPort()) { + if(Objects.equals(IPv6Address.valueOf( ks.getLocalInetAddress()), bindableKLALBPacketConsumer.getAddress())&&pold==bindableKLALBPacketConsumer.getPort()) { throw new BindException("port " + pold + " is already bind!"); } } } - bindMap.put(new InetSocketAddress(ks.getLocalInetAddress(), ks.getLocalPort()),ks); + bindMap.put(new IPv6SocketAddress(IPv6Address.valueOf( ks.getLocalInetAddress()), ks.getLocalPort()),ks); }finally { bindMaplock.writeLock().unlock(); } @@ -102,7 +97,7 @@ public class PortBinder { public void connect(BindableKLALBPacketConsumer ks) throws BindException { connectMaplock.writeLock().lock(); try { - connectMap.put(new Pair( new InetSocketAddress(ks.getLocalInetAddress(), ks.getLocalPort()), new InetSocketAddress(ks.getRemoteInetAddress(), ks.getPort())),ks); + connectMap.put(new Pair( new IPv6SocketAddress(IPv6Address.valueOf(ks.getLocalInetAddress()), ks.getLocalPort()), new IPv6SocketAddress(IPv6Address.valueOf(ks.getRemoteInetAddress()), ks.getPort())),ks); }finally { connectMaplock.writeLock().unlock(); } @@ -119,7 +114,7 @@ public class PortBinder { public void listen(BindableKLALBPacketConsumer ks) throws BindException { listenMaplock.writeLock().lock(); try { - listenMap.put(new InetSocketAddress(ks.getLocalInetAddress(), ks.getLocalPort()),ks); + listenMap.put(new IPv6SocketAddress(IPv6Address.valueOf(ks.getLocalInetAddress()), ks.getLocalPort()),ks); }finally { listenMaplock.writeLock().unlock(); } @@ -206,16 +201,16 @@ public class PortBinder { } return b; }*/ - public boolean distributePacketToConsumer(Inet6Address srcAddr,PortPacket packet) { - InetSocketAddress local=new InetSocketAddress(controller.getSelf().getAddress(), packet.getDstPort()); - InetSocketAddress remote=new InetSocketAddress(srcAddr, packet.getSrcPort()); - BindableKLALBPacketConsumer bkc=connectMap.get(new Pair(local, remote)); + public boolean distributePacketToConsumer(IPv6Address srcAddr,PortPacket packet) { + IPv6SocketAddress local=new IPv6SocketAddress(controller.getSelf().getAddress(), packet.getDstPort()); + IPv6SocketAddress remote=new IPv6SocketAddress(srcAddr, packet.getSrcPort()); + BindableKLALBPacketConsumer bkc=connectMap.get(new Pair(local, remote)); if(bkc!=null) { bkc.accept(srcAddr, (NetworkPacket) packet); return true; } - InetSocketAddress localany=new InetSocketAddress(ANYLA, packet.getDstPort()); - bkc=connectMap.get(new Pair(localany, remote)); + IPv6SocketAddress localany=new IPv6SocketAddress(IPv6Address.UNSPECIFIED, packet.getDstPort()); + bkc=connectMap.get(new Pair(localany, remote)); if(bkc!=null) { bkc.accept(srcAddr, (NetworkPacket) packet); return true; @@ -239,7 +234,7 @@ public class PortBinder { return bindMap.containsValue(klalbVirtualSocketImpl); } public boolean checkIsConnect(BindableKLALBPacketConsumer kservers,InetSocketAddress isaf) throws BindException { - return connectMap.containsKey(new Pair( new InetSocketAddress(kservers.getLocalInetAddress(), kservers.getLocalPort()),isaf)); + return connectMap.containsKey(new Pair( new IPv6SocketAddress(IPv6Address.valueOf( kservers.getLocalInetAddress()), kservers.getLocalPort()),IPv6SocketAddress.valueOf( isaf))); } } \ No newline at end of file diff --git a/src/org/kne/cloud/network/klalb/SendItem.java b/src/org/kne/cloud/network/klalb/SendItem.java index 5930fe2..82ef2e4 100644 --- a/src/org/kne/cloud/network/klalb/SendItem.java +++ b/src/org/kne/cloud/network/klalb/SendItem.java @@ -5,8 +5,8 @@ import org.kne.cloud.network.ipv6.IPv6Packet; public class SendItem { - private long packetLength; - private T packet; + private final long packetLength; + private final T packet; private long sendtime=System.nanoTime(); public SendItem(T packet) { @@ -25,5 +25,9 @@ public class SendItem { public long getPacketLength() { return packetLength; } + + public void setSendtime(long sendtimex) { + this.sendtime=sendtimex; + } } diff --git a/src/org/kne/cloud/network/klalb/SocketBridgeConfigItem.java b/src/org/kne/cloud/network/klalb/SocketBridgeConfigItem.java index def9980..ded6ecd 100644 --- a/src/org/kne/cloud/network/klalb/SocketBridgeConfigItem.java +++ b/src/org/kne/cloud/network/klalb/SocketBridgeConfigItem.java @@ -105,7 +105,7 @@ public class SocketBridgeConfigItem extends KLALBConfigItem { if(string.startsWith("SocketBridge")) { return new DefaultSocketBridgeFactory(); }else if(string.startsWith("MinecraftSocketBridge")) { - return new DefaultMinecraftSocketBridgeFactory(controller.getSelf().getAddress(), Integer.parseInt(string.substring(21))); + return new DefaultMinecraftSocketBridgeFactory(controller.getSelf().getAddress().toInet6Address(), Integer.parseInt(string.substring(21))); } throw new IllegalArgumentException("unknown SocketBridge type:"+string); } diff --git a/src/org/kne/cloud/network/klalb/SplitedDatagramKLALBPacketLink.java b/src/org/kne/cloud/network/klalb/SplitedDatagramKLALBPacketLink.java index 406eda6..fecc042 100644 --- a/src/org/kne/cloud/network/klalb/SplitedDatagramKLALBPacketLink.java +++ b/src/org/kne/cloud/network/klalb/SplitedDatagramKLALBPacketLink.java @@ -342,7 +342,6 @@ public class SplitedDatagramKLALBPacketLink extends AbstractKLALBPacketLink impl @Override public void writePacket(ByteBuffer kp) throws IOException { - incOutput(kp.remaining()); pslr.write(kp); } @@ -351,7 +350,6 @@ public class SplitedDatagramKLALBPacketLink extends AbstractKLALBPacketLink impl ByteBuffer bbf=NetworkPacket.bufferAllocator.allocate(65535); pbdr.read(bbf ); bbf.flip(); - incInput(bbf.remaining()); return bbf; } diff --git a/src/org/kne/cloud/network/klalb/StreamChannelKLALBPacketLink.java b/src/org/kne/cloud/network/klalb/StreamChannelKLALBPacketLink.java index f724267..15153f0 100644 --- a/src/org/kne/cloud/network/klalb/StreamChannelKLALBPacketLink.java +++ b/src/org/kne/cloud/network/klalb/StreamChannelKLALBPacketLink.java @@ -37,6 +37,7 @@ import org.kne.cloud.network.TimeoutTimer; import org.kne.io.KNEChannels; public class StreamChannelKLALBPacketLink extends AbstractKLALBPacketLink implements KLALBPacketLink { + private static final boolean debug = false; private volatile long timeoutTimer; private volatile boolean timerenabled=false; private boolean enableBuffer=true; @@ -126,6 +127,7 @@ public class StreamChannelKLALBPacketLink extends AbstractKLALBPacketLink implem @Override public void flush() throws IOException { + checkflush(); } @Override @@ -140,7 +142,6 @@ public class StreamChannelKLALBPacketLink extends AbstractKLALBPacketLink implem ByteBuffer szeWrite=NetworkPacket.bufferAllocator.allocate(4); szeWrite.limit(4); //szeWrite.clear(); - incOutput(kp.limit()); szeWrite.putInt(kp.limit()); szeWrite.flip(); KLALBVirtualSocketChannel obj = null; @@ -150,42 +151,7 @@ public class StreamChannelKLALBPacketLink extends AbstractKLALBPacketLink implem } - private ByteBuffer[] bbfwx=new ByteBuffer[100<<1]; - { - for(int i=0;i<100;i++) { - bbfwx[i<<1]=NetworkPacket.bufferAllocator.allocate(4); - } - } - @Override - public void writePackets(ByteBuffer[] kpp,int off,int len) throws IOException { - if(len>100) { - ByteBuffer[] bbfw=new ByteBuffer[len<<1]; - for(int i=0;i pkts) throws IOException { - KLALBVirtualSocketChannel obj = null; - if(writableChannel instanceof KLALBVirtualSocketChannel) { - obj=(KLALBVirtualSocketChannel) writableChannel; - } - boolean isaflush=false; - if(obj!=null) { - isaflush=obj.isAutoFlush(); - obj.setAutoFlush(false); - } - ByteBuffer szeWrite=NetworkPacket.bufferAllocator.allocate(4); - szeWrite.limit(4); - for(KLALBPacket kp:pkts) { - szeWrite.clear(); - int length=(int) kp.getTotalLength(); - incOutput(length); - szeWrite.putInt(length); - szeWrite.flip(); - - - writableChannel.write(szeWrite); - - KLALBPacket.writeKLALBPacketToChannel(writableChannel, kp); - - } - if(obj!=null) { - obj.flush(); - } - - checkflush(); - if(obj!=null) { - obj.setAutoFlush(isaflush); - } - } + @Override @@ -257,35 +188,25 @@ public class StreamChannelKLALBPacketLink extends AbstractKLALBPacketLink implem szeWrite.limit(4); //szeWrite.clear(); int length=(int) kp.getTotalLength(); - incOutput(length); szeWrite.putInt(length); szeWrite.flip(); - KLALBVirtualSocketChannel obj = null; - if(writableChannel instanceof KLALBVirtualSocketChannel) { - obj=(KLALBVirtualSocketChannel) writableChannel; - } - boolean isaflush=false; - if(obj!=null) { - isaflush=obj.isAutoFlush(); - obj.setAutoFlush(false); - } + + writableChannel.write(szeWrite); + if(debug) { + + AtomicLong al=new AtomicLong(0); + KLALBPacket.writeKLALBPacketToChannel(new MonitoredChannel(writableChannel,null,new AtomicLong[] { al}), kp); + if(length!=al.get()) { + throw new StreamCorruptedException(kp+" packet length error:"+al.get()+"!="+length); + } + }else { + KLALBPacket.writeKLALBPacketToChannel(writableChannel, kp); + } + - KLALBPacket.writeKLALBPacketToChannel(writableChannel, kp); - if(obj!=null) { - obj.flush(); - } - checkflush(); - /*AtomicLong al=new AtomicLong(0); - KLALBPacket.writeKLALBPacketToChannel(new MonitoredChannel(connectSocket,null,new AtomicLong[] { al}), kp); - if(length!=al.get()) { - throw new StreamCorruptedException(kp+" packet length error:"+al.get()+"!="+length); - }*/ - if(obj!=null) { - obj.setAutoFlush(isaflush); - } } private void checkflush() throws IOException { @@ -302,13 +223,13 @@ public class StreamChannelKLALBPacketLink extends AbstractKLALBPacketLink implem KNEChannels.readFully(readableChannel, szeWrite); szeWrite.flip(); int readSize=szeWrite.getInt(); - incInput(readSize); KLALBPacket kp=KLALBPacket.readKLALBPacketFromChannel(readableChannel); - /* - long kpl=kp.getLength(); + if(debug) { + long kpl=kp.getTotalLength(); if(kpl!=readSize) { throw new StreamCorruptedException(kp+" packet length error:"+kpl+"!="+readSize); - }*/ + } + } return kp; } diff --git a/src/org/kne/cloud/network/klalb/VADDRPacket.java b/src/org/kne/cloud/network/klalb/VADDRPacket.java index d31279f..efb5aa8 100644 --- a/src/org/kne/cloud/network/klalb/VADDRPacket.java +++ b/src/org/kne/cloud/network/klalb/VADDRPacket.java @@ -9,24 +9,23 @@ import java.net.Inet6Address; import java.net.UnknownHostException; import java.nio.ByteBuffer; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6Address; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; public class VADDRPacket extends KLALBPacket { private static final int HEADER_LENGTH=18; - public Inet6AddressGroup getVaddr() { - byte[]b=new byte[16]; - klalbHeader.get(1, b); - try { - return new Inet6AddressGroup( (Inet6Address) Inet6Address.getByAddress(b),klalbHeader.get(17)&0xff); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - return null; + public IPv6AddressGroup getVaddr() { + long high=klalbHeader.getLong(1); + long low=klalbHeader.getLong(9); + int perf=klalbHeader.get(17)&0xff; + + return new IPv6AddressGroup(new IPv6Address(high, low), perf); } - public VADDRPacket(Inet6AddressGroup vaddr) { + public VADDRPacket(IPv6AddressGroup vaddr) { super(VADDR,HEADER_LENGTH); - klalbHeader.put(1, vaddr.getAddress().getAddress()); + klalbHeader.putLong(1, vaddr.getAddress().getHigh()); + klalbHeader.putLong(9, vaddr.getAddress().getLow()); klalbHeader.put(17,(byte) vaddr.getPrefixLength()); } diff --git a/src/org/kne/cloud/network/klalb/ui/DialPanel.java b/src/org/kne/cloud/network/klalb/ui/DialPanel.java new file mode 100644 index 0000000..a7d264d --- /dev/null +++ b/src/org/kne/cloud/network/klalb/ui/DialPanel.java @@ -0,0 +1,140 @@ +package org.kne.cloud.network.klalb.ui; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; + +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.border.LineBorder; + +import org.jfree.chart.ChartPanel; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.plot.dial.DialPlot; +import org.jfree.chart.plot.dial.DialPointer; +import org.jfree.chart.plot.dial.DialTextAnnotation; +import org.jfree.chart.plot.dial.StandardDialFrame; +import org.jfree.chart.plot.dial.StandardDialRange; +import org.jfree.chart.plot.dial.StandardDialScale; +import org.jfree.chart.title.TextTitle; +import org.jfree.data.general.DefaultValueDataset; + +public class DialPanel extends JPanel { + + private DialTextAnnotation textAnnotation; + private DialPlot plot; + + public DialPanel(int size,String title,DefaultValueDataset primary, DefaultValueDataset secondary, + Color pointerColor, Color outlineColor) { + plot=createDialPlot(primary,secondary,pointerColor,outlineColor); + textAnnotation = new DialTextAnnotation(""); + textAnnotation.setFont(UIEnv.getFont().deriveFont(20.0f)); + plot.addLayer(textAnnotation); + setLayout(new BorderLayout()); + add(createChartPanel (createChart(plot),new Dimension(size, size)),BorderLayout.CENTER); + JLabel jlb=new JLabel(title); + jlb.setFont(UIEnv.getFont().deriveFont(16.0f)); + jlb.setHorizontalAlignment(SwingConstants.CENTER); + add(jlb,BorderLayout.SOUTH); + } + + public DialTextAnnotation getTextAnnotation() { + return textAnnotation; + } + + /** + * 创建图表面板 + * @param dashSize + */ + private ChartPanel createChartPanel(JFreeChart chart, Dimension dashSize) { + ChartPanel panel = new ChartPanel(chart); + panel.setPreferredSize(dashSize); + panel.setSize(panel.getPreferredSize()); + panel.setBackground(Color.WHITE); + panel.setBorder(new LineBorder(Color.LIGHT_GRAY)); + return panel; + } + /** + * 创建图表 + */ + private JFreeChart createChart(DialPlot plot) { + JFreeChart chart = new JFreeChart(plot); + chart.setBorderPaint(Color.WHITE); + chart.setTitle((TextTitle)null); + plot.setView(0, 0, 1, 1); + return chart; + } + /** + * 创建仪表盘图表 + */ + private DialPlot createDialPlot(DefaultValueDataset primary, DefaultValueDataset secondary, + Color pointerColor, Color outlineColor) { + DialPlot plot = new DialPlot(); + plot.setDataset(1, primary); + plot.setDataset(0, secondary); + + StandardDialFrame frame = new StandardDialFrame(); + frame.setVisible(false); + plot.setDialFrame(frame); + + // 添加刻度 + StandardDialScale scale = new StandardDialScale(0, 100, -120, -300, 10, 5); + scale.setTickRadius(0.80); + scale.setTickLabelsVisible(false); + plot.addScale(0, scale); + + + // 添加指针 + addDialPointers(plot, pointerColor, outlineColor); + + return plot; + } + /** + * 为仪表盘添加颜色范围 + */ + public void addDefaultDialRanges() { + // 绿色范围: 0-70% + StandardDialRange greenRange = new StandardDialRange(0, 70, Color.GREEN); + addDialRange( greenRange); + + // 黄色范围: 70-90% + StandardDialRange yellowRange = new StandardDialRange(70, 90, Color.YELLOW); + addDialRange( yellowRange); + + // 红色范围: 90-100% + StandardDialRange redRange = new StandardDialRange(90, 100, Color.RED); + addDialRange( redRange); + } + + private static final double INNER=0.85; + private static final double OUTER=0.90; + public void addDialRange( StandardDialRange greenRange) { + greenRange.setInnerRadius(INNER); + greenRange.setOuterRadius(OUTER); + plot.addLayer(greenRange); + } + + /** + * 为仪表盘添加指针 + */ + private void addDialPointers(DialPlot plot, Color primaryColor, Color secondaryColor) { + // 次要指针(透明) + DialPointer.Pointer secondaryPointer = new DialPointer.Pointer(); + secondaryPointer.setRadius(0.8); + secondaryPointer.setFillPaint(new Color(secondaryColor.getRed(), secondaryColor.getGreen(), + secondaryColor.getBlue(), 0)); + secondaryPointer.setOutlinePaint(secondaryColor); + secondaryPointer.setDatasetIndex(0); + plot.addLayer(secondaryPointer); + + // 主要指针 + DialPointer.Pointer primaryPointer = new DialPointer.Pointer(); + primaryPointer.setRadius(0.8); + primaryPointer.setFillPaint(primaryColor); + primaryPointer.setOutlinePaint(primaryColor); + primaryPointer.setDatasetIndex(1); + plot.addLayer(primaryPointer); + } +} diff --git a/src/org/kne/cloud/network/klalb/ui/Dials.java b/src/org/kne/cloud/network/klalb/ui/Dials.java deleted file mode 100644 index 7695251..0000000 --- a/src/org/kne/cloud/network/klalb/ui/Dials.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.kne.cloud.network.klalb.ui; - -import org.jfree.chart.ChartPanel; - -public class Dials { - -} diff --git a/src/org/kne/cloud/network/klalb/ui/GraphPanel.java b/src/org/kne/cloud/network/klalb/ui/GraphPanel.java index abee8a0..6a611d5 100644 --- a/src/org/kne/cloud/network/klalb/ui/GraphPanel.java +++ b/src/org/kne/cloud/network/klalb/ui/GraphPanel.java @@ -23,6 +23,7 @@ import java.util.concurrent.ConcurrentHashMap; import javax.imageio.ImageIO; import javax.swing.JPanel; +import org.kne.cloud.network.ipv6.IPv6Address; import org.kne.cloud.network.klalb.KLALBUtils; import org.kne.cloud.network.srv6.KLALBRoutingProtocol.LinkDirection; @@ -110,10 +111,10 @@ public class GraphPanel extends JPanel { - private Map nodes=new ConcurrentHashMap(); + private Map nodes=new ConcurrentHashMap(); private List edgeGroups=new ArrayList(); - public Map getNodes() { + public Map getNodes() { return nodes; } diff --git a/src/org/kne/cloud/network/klalb/ui/KLALBStateGUI.java b/src/org/kne/cloud/network/klalb/ui/KLALBStateGUI.java deleted file mode 100644 index 004adb0..0000000 --- a/src/org/kne/cloud/network/klalb/ui/KLALBStateGUI.java +++ /dev/null @@ -1,200 +0,0 @@ -package org.kne.cloud.network.klalb.ui; - -import java.awt.AWTException; -import java.awt.Color; -import java.awt.Component; -import java.awt.MenuItem; -import java.awt.PopupMenu; -import java.awt.SystemTray; -import java.awt.TrayIcon; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.util.Iterator; -import java.util.Timer; -import java.util.TimerTask; - -import javax.imageio.ImageIO; -import javax.swing.JPanel; -import javax.swing.border.LineBorder; - -import org.kne.cloud.network.ipv6.IPv6NetworkLink; -import org.kne.cloud.network.klalb.CONST; -import org.kne.cloud.network.klalb.KLALBController; -import org.kne.cloud.network.klalb.KLALBRemoteLine; -import org.kne.ui.XFrame; -import org.kne.ui.YScrollPane; - -public class KLALBStateGUI extends XFrame { - private BufferedImage bi; - - private TimerTask tsk; - - private SystemTray st; - - private TrayIcon ti; - - public KLALBStateGUI(KLALBController kpcje) throws IOException { - this(kpcje ,CONST.klalb+" network accelerator V"+CONST.klalbver); - } - public KLALBStateGUI(KLALBController kc,String title) throws IOException { - setResizable(false); - try { - bi = ImageIO.read(KLALBStateGUI.class.getResourceAsStream("/assets/KNEL.png")); - } catch (IOException e) { - e.printStackTrace(); - } - if(bi!=null) - setIconImage(bi); - - setTitleColor(new Color(255, 255, 255, 250)); - //getTitlelabel().setFont(UIEnv.getFont().deriveFont(17.0f)); - getTitlepanel().setBorder(new LineBorder(Color.LIGHT_GRAY)); - /* - setTitleColor(new Color(0,0,0,80)); - getContentPane().setBackground(new Color(0,0,0,80)); - getTitlelabel().setForeground(Color.WHITE);*/ - - - - YScrollPane ysp = new YScrollPane(660); - ysp.setOpaque(false); - getContentPane().add(ysp); - JPanel wv = ysp.getView(); - - /*JProgressBar progressBar = new JProgressBar(); - progressBar.setIndeterminate(true); - progressBar.setForeground(Color.YELLOW); - progressBar.setBorder(null); - progressBar.setPreferredSize(new Dimension(100, 4)); - ysp.add(progressBar, BorderLayout.NORTH);*/ - wv.addComponentListener(new ComponentListener() { - - @Override - public void componentShown(ComponentEvent e) { - // TODO 自动生成的方法存根 - - } - - @Override - public void componentResized(ComponentEvent e) { - // TODO 自动生成的方法存根 - - } - - @Override - public void componentMoved(ComponentEvent e) { - repaint(); - } - - @Override - public void componentHidden(ComponentEvent e) { - // TODO 自动生成的方法存根 - - } - }); - setTitle(title); - setSize(680, 430); - setLocationRelativeTo(null); - - //setVisible(true); - - if (SystemTray.isSupported()) { - st = SystemTray.getSystemTray(); - ti = new TrayIcon(bi); - ti.setImageAutoSize(true); - PopupMenu jpm = new PopupMenu(); - MenuItem mix = new MenuItem("open"); - mix.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - setVisible(true); - } - }); - jpm.add(mix); - MenuItem mi = new MenuItem("exit"); - mi.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - close(); - } - }); - jpm.add(mi); - ti.setPopupMenu(jpm); - try { - st.add(ti); - } catch (AWTException e1) { - e1.printStackTrace(); - } - ti.addActionListener((x) -> { - setVisible(true); - }); - } - - repaint(); - - /*progressBar.setIndeterminate(false); - progressBar.setValue(100); - progressBar.setForeground(Color.GREEN);*/ - Timer t= new Timer("状态刷新线程",true); - tsk=new TimerTask() { - - @Override - public void run() { - synchronized (kc.getLines()) { - loop:for (Iterator iterator = kc.getLines().iterator(); iterator.hasNext();) { - IPv6NetworkLink link=iterator.next(); - if(link instanceof KLALBRemoteLine) { - KLALBRemoteLine ent = (KLALBRemoteLine)link ; - Component[] count=ysp.getView().getComponents(); - for (int i = 0; i < count.length; i++) { - Component tp=count[i]; - if(tp instanceof TPanel) { - if(((TPanel) tp).getTunnel().equals(ent)) { - continue loop; - } - } - } - TPanel tp=new TPanel(ent); - ysp.getView().add(tp); - } - } - Component[] count=ysp.getView().getComponents(); - for (int i = 0; i < count.length; i++) { - Component tp=count[i]; - if(tp instanceof TPanel) { - if(kc.getLines().contains(((TPanel) tp).getTunnel())) { - ((TPanel) tp).updateTraffic(); - }else { - ysp.getView().remove(tp); - } - } - } - - } - repaint(); - } - }; - t.schedule(tsk, 500, 500); - } - - public void close() { - setVisible(false); - if(tsk!=null) { - tsk.cancel(); - } - st.remove(ti); - } - - public static void main(String[] args) throws IOException, InterruptedException {//,new MultipurposeSocketAddress("frp-mom.top:22226"),new MultipurposeSocketAddress("0.0.0.0:26468") - KLALBStateGUI kcg=new KLALBStateGUI(new KLALBController()); - kcg.setVisible(true); - //Thread.sleep(10000); - //kcg.close(); - } -} diff --git a/src/org/kne/cloud/network/klalb/ui/KLALBStateGUI2.java b/src/org/kne/cloud/network/klalb/ui/KLALBStateGUI2.java deleted file mode 100644 index 0eff1c9..0000000 --- a/src/org/kne/cloud/network/klalb/ui/KLALBStateGUI2.java +++ /dev/null @@ -1,1194 +0,0 @@ -package org.kne.cloud.network.klalb.ui; - -import java.awt.AWTException; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.GridLayout; -import java.awt.MenuItem; -import java.awt.Point; -import java.awt.PopupMenu; -import java.awt.Rectangle; -import java.awt.SystemTray; -import java.awt.Toolkit; -import java.awt.TrayIcon; -import java.awt.datatransfer.StringSelection; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionListener; -import java.awt.event.MouseWheelEvent; -import java.awt.event.MouseWheelListener; -import java.io.IOException; -import java.net.Inet6Address; -import java.net.UnknownHostException; -import java.util.Timer; -import java.util.TimerTask; - -import javax.swing.JButton; -import javax.swing.JCheckBoxMenuItem; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTabbedPane; -import javax.swing.JTextField; -import javax.swing.JViewport; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.border.LineBorder; - -import org.jfree.chart.ChartPanel; -import org.jfree.chart.JFreeChart; -import org.jfree.chart.plot.dial.DialPlot; -import org.jfree.chart.plot.dial.DialPointer; -import org.jfree.chart.plot.dial.DialTextAnnotation; -import org.jfree.chart.plot.dial.StandardDialFrame; -import org.jfree.chart.plot.dial.StandardDialRange; -import org.jfree.chart.plot.dial.StandardDialScale; -import org.jfree.chart.ui.RectangleEdge; -import org.jfree.data.general.DefaultValueDataset; -import org.kne.cloud.klalb.uitool.SettingItem; -import org.kne.cloud.klalb.uitool.TextSettingItem; -import org.kne.cloud.network.MultipurposeSocketAddress; -import org.kne.cloud.network.klalb.CONST; -import org.kne.cloud.network.klalb.KLALBController; -import org.kne.cloud.network.klalb.KLALBRemoteLine; -import org.kne.cloud.network.klalb.KLALBUtils; -import org.kne.cloud.network.klalb.ui.GraphPanel.GraphNode; -import org.kne.cloud.network.monitor.MonitorData; -import org.kne.ui.XFrame; -import org.kne.ui.YScrollPane; -import javax.swing.JScrollPane; - -public class KLALBStateGUI2 extends XFrame { - - private TimerTask tsk,tsk2,tsk3,tsk4,tsk5; - - private SystemTray st; - - private TrayIcon ti; - - private Timer t,t2,t3; - - private JCheckBoxMenuItem showoffline; - - - private DefaultValueDataset upSpeed; - - private DialTextAnnotation upSpeedText; - - private DialTextAnnotation downSpeedText; - - private DefaultValueDataset downSpeed; - - - private DefaultValueDataset upPPS; - - private DialTextAnnotation upPPSText; - - private DialTextAnnotation downPPSText; - - private DefaultValueDataset downPPS; - - private DefaultValueDataset upDataSpeed; - - private DefaultValueDataset downDataSpeed; - - private DefaultValueDataset upDataPPS; - - private DefaultValueDataset downDataPPS; - - /*private DefaultValueDataset upEfficiency; - - private DialTextAnnotation upEfficiencyText; - - private DialTextAnnotation downEfficiencyText; - - private DefaultValueDataset downEfficiency;*/ - - private YScrollPane ysp,yspc; - - private JTextField devicesOnline; - private JTextField textField; - private JTextField addressField; - private JTextField addressField2; - private JTextField asnField; - - private NetworkGraphPanel graph; - private JTextField textFieldLocate; - - - /** - * @wbp.parser.constructor - */ - public KLALBStateGUI2(KLALBController kpcje) { - this(kpcje ,CONST.klalb+" SRv6 network accelerator V"+CONST.klalbver); - } - - - public KLALBStateGUI2(KLALBController kc,String title) { - //setResizable(false); - setIconImage(UIEnv.getIcon()); - //setTitleColor(new Color(255, 255, 255, 250)); - setTitleColor(UIEnv.getDefaultTitleColor()); - getContentPane().setBackground(UIEnv.getDefaultBackgroundColor()); - getTitlelabel().setFont(UIEnv.getFont().deriveFont(17.0f)); - getTitlepanel().setBorder(new LineBorder(Color.LIGHT_GRAY)); - getTitlelabel().setForeground(Color.WHITE); - //getContentPane().setBackground(new Color(0,0,0,0)); - /*setTitleColor(new Color(0,0,0,80)); - getContentPane().setBackground(new Color(0,0,0,80)); - getTitlelabel().setForeground(Color.WHITE);*/ - - - JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); - getContentPane().add(tabbedPane, BorderLayout.CENTER); - - JPanel overview = new JPanel(); - overview.setOpaque(false); - tabbedPane.addTab("Overview", null, overview, null); - overview.setLayout(new BorderLayout(0, 0)); - - JPanel dashboard = new JPanel(); - dashboard.setOpaque(false); - dashboard.setBorder(new LineBorder(new Color(0, 0, 0))); - JPanel dashs = new JPanel(); - dashs.setOpaque(false); - overview.add(dashboard,BorderLayout.CENTER); - dashboard.setLayout(new BorderLayout(0, 0)); - dashboard.add(dashs); - { - upSpeed = new DefaultValueDataset(0); - upDataSpeed=new DefaultValueDataset(0); - DialPlot dpup=new DialPlot(); - dpup.setDataset(1,upSpeed); - dpup.setDataset(0, upDataSpeed); - StandardDialFrame sdfs=new StandardDialFrame(); - sdfs.setVisible(false); - dpup.setDialFrame(sdfs); - StandardDialScale sds=new StandardDialScale(0, 100, -120, -300, 10, 5); - sds.setTickRadius(0.8); - sds.setTickLabelsVisible(false); - dpup.addScale(0, sds); - - StandardDialRange sdrr=new StandardDialRange(0, 70,Color.GREEN); - sdrr.setInnerRadius(0.82); - sdrr.setOuterRadius(0.83); - dpup.addLayer(sdrr); - - StandardDialRange sdrr2=new StandardDialRange(70, 90,Color.YELLOW); - sdrr2.setInnerRadius(0.82); - sdrr2.setOuterRadius(0.83); - dpup.addLayer(sdrr2); - - StandardDialRange sdrr3=new StandardDialRange(90, 100,Color.RED); - sdrr3.setInnerRadius(0.82); - sdrr3.setOuterRadius(0.83); - dpup.addLayer(sdrr3); - - DialPointer.Pointer dpd=new DialPointer.Pointer(); - dpd.setRadius(0.7); - dpd.setFillPaint(new Color(127, 0, 0,0)); - dpd.setOutlinePaint(new Color(127, 0, 0)); - dpd.setDatasetIndex(0); - dpup.addLayer(dpd); - - DialPointer.Pointer dp=new DialPointer.Pointer(); - dp.setRadius(0.7); - dp.setFillPaint(Color.RED); - dp.setOutlinePaint(Color.RED); - dp.setDatasetIndex(1); - dpup.addLayer(dp); - - - upSpeedText = new DialTextAnnotation("0%"); - upSpeedText.setFont(UIEnv.getFont().deriveFont(16.0f)); - dpup.addLayer(upSpeedText); - - JFreeChart jfup= new JFreeChart(dpup); - jfup.setBorderPaint(Color.WHITE); - jfup.setTitle("Upload speed"); - jfup.getTitle().setFont(UIEnv.getFont().deriveFont(20.0f)); - jfup.getTitle().setPosition(RectangleEdge.BOTTOM); - dpup.setView(0, 0, 1, 1); - ChartPanel cpup=new ChartPanel(jfup); - cpup.setPreferredSize(new Dimension(150, 165)); - cpup.setSize(cpup.getPreferredSize()); - cpup.setBackground(Color.WHITE); - cpup.setBorder(new LineBorder(Color.LIGHT_GRAY)); - dashs.add(cpup); - - - - - - - downSpeed = new DefaultValueDataset(0); - downDataSpeed=new DefaultValueDataset(0); - DialPlot dpup1=new DialPlot(); - dpup1.setDataset(1,downSpeed); - dpup1.setDataset(0,downDataSpeed); - StandardDialFrame sdfs1=new StandardDialFrame(); - sdfs1.setVisible(false); - dpup1.setDialFrame(sdfs1); - StandardDialScale sds1=new StandardDialScale(0, 100, -120, -300, 10, 5); - sds1.setTickRadius(0.8); - sds1.setTickLabelsVisible(false); - dpup1.addScale(0, sds1); - - StandardDialRange sdrr1=new StandardDialRange(0, 70,Color.GREEN); - sdrr1.setInnerRadius(0.82); - sdrr1.setOuterRadius(0.83); - dpup1.addLayer(sdrr1); - - StandardDialRange sdrr21=new StandardDialRange(70, 90,Color.YELLOW); - sdrr21.setInnerRadius(0.82); - sdrr21.setOuterRadius(0.83); - dpup1.addLayer(sdrr21); - - StandardDialRange sdrr31=new StandardDialRange(90, 100,Color.RED); - sdrr31.setInnerRadius(0.82); - sdrr31.setOuterRadius(0.83); - dpup1.addLayer(sdrr31); - - - DialPointer.Pointer dp11=new DialPointer.Pointer(); - dp11.setRadius(0.7); - dp11.setFillPaint(new Color(0,127,0,0)); - dp11.setOutlinePaint(new Color(0,127,0)); - dp11.setDatasetIndex(0); - dpup1.addLayer(dp11); - - DialPointer.Pointer dp1=new DialPointer.Pointer(); - dp1.setRadius(0.7); - dp1.setFillPaint(Color.GREEN); - dp1.setOutlinePaint(Color.GREEN); - dp1.setDatasetIndex(1); - dpup1.addLayer(dp1); - - downSpeedText = new DialTextAnnotation("0%"); - downSpeedText.setFont(UIEnv.getFont().deriveFont(16.0f)); - dpup1.addLayer(downSpeedText); - - JFreeChart jfup1= new JFreeChart(dpup1); - jfup1.setBorderPaint(Color.WHITE); - jfup1.setTitle("Download speed"); - jfup1.getTitle().setFont(UIEnv.getFont().deriveFont(20.0f)); - jfup1.getTitle().setPosition(RectangleEdge.BOTTOM); - dpup1.setView(0, 0, 1, 1); - ChartPanel cpup1=new ChartPanel(jfup1); - cpup1.setPreferredSize(new Dimension(150, 165)); - cpup1.setSize(cpup1.getPreferredSize()); - cpup1.setBackground(Color.WHITE); - cpup1.setBorder(new LineBorder(Color.LIGHT_GRAY)); - dashs.add(cpup1); - - } - - - { - upPPS = new DefaultValueDataset(0); - upDataPPS=new DefaultValueDataset(0); - DialPlot dpup=new DialPlot(); - dpup.setDataset(1,upPPS); - dpup.setDataset(0,upDataPPS); - StandardDialFrame sdfs=new StandardDialFrame(); - sdfs.setVisible(false); - dpup.setDialFrame(sdfs); - StandardDialScale sds=new StandardDialScale(0, 100, -120, -300, 10, 5); - sds.setTickRadius(0.8); - sds.setTickLabelsVisible(false); - dpup.addScale(0, sds); - - StandardDialRange sdrr=new StandardDialRange(0, 70,Color.GREEN); - sdrr.setInnerRadius(0.82); - sdrr.setOuterRadius(0.83); - dpup.addLayer(sdrr); - - StandardDialRange sdrr2=new StandardDialRange(70, 90,Color.YELLOW); - sdrr2.setInnerRadius(0.82); - sdrr2.setOuterRadius(0.83); - dpup.addLayer(sdrr2); - - StandardDialRange sdrr3=new StandardDialRange(90, 100,Color.RED); - sdrr3.setInnerRadius(0.82); - sdrr3.setOuterRadius(0.83); - dpup.addLayer(sdrr3); - - DialPointer.Pointer dp1=new DialPointer.Pointer(); - dp1.setRadius(0.7); - dp1.setFillPaint(new Color(127,0,0,0)); - dp1.setOutlinePaint(new Color(127,0,0)); - dp1.setDatasetIndex(0); - dpup.addLayer(dp1); - - DialPointer.Pointer dp=new DialPointer.Pointer(); - dp.setRadius(0.7); - dp.setFillPaint(Color.RED); - dp.setOutlinePaint(Color.RED); - dp.setDatasetIndex(1); - dpup.addLayer(dp); - - - upPPSText = new DialTextAnnotation("0PPS"); - upPPSText.setFont(UIEnv.getFont().deriveFont(16.0f)); - dpup.addLayer(upPPSText); - - JFreeChart jfup= new JFreeChart(dpup); - jfup.setBorderPaint(Color.WHITE); - jfup.setTitle("Upload PPS"); - jfup.getTitle().setFont(UIEnv.getFont().deriveFont(20.0f)); - jfup.getTitle().setPosition(RectangleEdge.BOTTOM); - dpup.setView(0, 0, 1, 1); - ChartPanel cpup=new ChartPanel(jfup); - cpup.setPreferredSize(new Dimension(150, 165)); - cpup.setSize(cpup.getPreferredSize()); - cpup.setBackground(Color.WHITE); - cpup.setBorder(new LineBorder(Color.LIGHT_GRAY)); - dashs.add(cpup); - - - - - - - downPPS = new DefaultValueDataset(0); - downDataPPS=new DefaultValueDataset(0); - DialPlot dpup1=new DialPlot(); - dpup1.setDataset(1,downPPS); - dpup1.setDataset(0,downDataPPS); - StandardDialFrame sdfs1=new StandardDialFrame(); - sdfs1.setVisible(false); - dpup1.setDialFrame(sdfs1); - StandardDialScale sds1=new StandardDialScale(0, 100, -120, -300, 10, 5); - sds1.setTickRadius(0.8); - sds1.setTickLabelsVisible(false); - dpup1.addScale(0, sds1); - - StandardDialRange sdrr1=new StandardDialRange(0, 70,Color.GREEN); - sdrr1.setInnerRadius(0.82); - sdrr1.setOuterRadius(0.83); - dpup1.addLayer(sdrr1); - - StandardDialRange sdrr21=new StandardDialRange(70, 90,Color.YELLOW); - sdrr21.setInnerRadius(0.82); - sdrr21.setOuterRadius(0.83); - dpup1.addLayer(sdrr21); - - StandardDialRange sdrr31=new StandardDialRange(90, 100,Color.RED); - sdrr31.setInnerRadius(0.82); - sdrr31.setOuterRadius(0.83); - dpup1.addLayer(sdrr31); - - DialPointer.Pointer dp111=new DialPointer.Pointer(); - dp111.setRadius(0.7); - dp111.setFillPaint(new Color(0,127,0,0)); - dp111.setOutlinePaint(new Color(0,127,0)); - dp111.setDatasetIndex(0); - dpup1.addLayer(dp111); - DialPointer.Pointer dp11=new DialPointer.Pointer(); - dp11.setRadius(0.7); - dp11.setFillPaint(Color.GREEN); - dp11.setOutlinePaint(Color.GREEN); - dp11.setDatasetIndex(1); - dpup1.addLayer(dp11); - - - - downPPSText = new DialTextAnnotation("0PPS"); - downPPSText.setFont(UIEnv.getFont().deriveFont(16.0f)); - dpup1.addLayer(downPPSText); - - JFreeChart jfup1= new JFreeChart(dpup1); - jfup1.setBorderPaint(Color.WHITE); - jfup1.setTitle("Download PPS"); - jfup1.getTitle().setFont(UIEnv.getFont().deriveFont(20.0f)); - jfup1.getTitle().setPosition(RectangleEdge.BOTTOM); - dpup1.setView(0, 0, 1, 1); - ChartPanel cpup1=new ChartPanel(jfup1); - cpup1.setPreferredSize(new Dimension(150, 165)); - cpup1.setSize(cpup1.getPreferredSize()); - cpup1.setBackground(Color.WHITE); - cpup1.setBorder(new LineBorder(Color.LIGHT_GRAY)); - dashs.add(cpup1); - } - - - /*{ - upEfficiency = new DefaultValueDataset(0); - DialPlot dpup=new DialPlot(); - dpup.setDataset(upEfficiency); - StandardDialFrame sdfs=new StandardDialFrame(); - sdfs.setVisible(false); - dpup.setDialFrame(sdfs); - StandardDialScale sds=new StandardDialScale(0, 100, -120, -300, 10, 5); - sds.setTickRadius(0.8); - sds.setTickLabelsVisible(false); - dpup.addScale(0, sds); - - StandardDialRange sdrr=new StandardDialRange(0, 70,Color.RED); - sdrr.setInnerRadius(0.82); - sdrr.setOuterRadius(0.83); - dpup.addLayer(sdrr); - - StandardDialRange sdrr2=new StandardDialRange(70, 90,Color.YELLOW); - sdrr2.setInnerRadius(0.82); - sdrr2.setOuterRadius(0.83); - dpup.addLayer(sdrr2); - - StandardDialRange sdrr3=new StandardDialRange(90, 100,Color.GREEN); - sdrr3.setInnerRadius(0.82); - sdrr3.setOuterRadius(0.83); - dpup.addLayer(sdrr3); - - DialPointer.Pointer dp=new DialPointer.Pointer(); - dp.setRadius(0.7); - dp.setFillPaint(Color.RED); - dp.setOutlinePaint(Color.RED); - dpup.addLayer(dp); - - upEfficiencyText = new DialTextAnnotation("0%"); - upEfficiencyText.setFont(UIEnv.getFont().deriveFont(16.0f)); - dpup.addLayer(upEfficiencyText); - - JFreeChart jfup= new JFreeChart(dpup); - jfup.setBorderPaint(Color.WHITE); - jfup.setTitle("Upload bandwidth efficiency"); - jfup.getTitle().setFont(UIEnv.getFont().deriveFont(20.0f)); - jfup.getTitle().setPosition(RectangleEdge.BOTTOM); - dpup.setView(0, 0, 1, 1); - ChartPanel cpup=new ChartPanel(jfup); - cpup.setPreferredSize(new Dimension(150, 165)); - cpup.setSize(cpup.getPreferredSize()); - cpup.setBackground(Color.WHITE); - cpup.setBorder(new LineBorder(Color.LIGHT_GRAY)); - dashs.add(cpup); - - - - - - - downEfficiency = new DefaultValueDataset(0); - DialPlot dpup1=new DialPlot(); - dpup1.setDataset(downEfficiency); - StandardDialFrame sdfs1=new StandardDialFrame(); - sdfs1.setVisible(false); - dpup1.setDialFrame(sdfs1); - StandardDialScale sds1=new StandardDialScale(0, 100, -120, -300, 10, 5); - sds1.setTickRadius(0.8); - sds1.setTickLabelsVisible(false); - dpup1.addScale(0, sds1); - - StandardDialRange sdrr1=new StandardDialRange(0, 70,Color.RED); - sdrr1.setInnerRadius(0.82); - sdrr1.setOuterRadius(0.83); - dpup1.addLayer(sdrr1); - - StandardDialRange sdrr21=new StandardDialRange(70, 90,Color.YELLOW); - sdrr21.setInnerRadius(0.82); - sdrr21.setOuterRadius(0.83); - dpup1.addLayer(sdrr21); - - StandardDialRange sdrr31=new StandardDialRange(90, 100,Color.GREEN); - sdrr31.setInnerRadius(0.82); - sdrr31.setOuterRadius(0.83); - dpup1.addLayer(sdrr31); - - DialPointer.Pointer dp1=new DialPointer.Pointer(); - dp1.setRadius(0.7); - dp1.setFillPaint(Color.GREEN); - dp1.setOutlinePaint(Color.GREEN); - dpup1.addLayer(dp1); - - downEfficiencyText = new DialTextAnnotation("0%"); - downEfficiencyText.setFont(UIEnv.getFont().deriveFont(16.0f)); - dpup1.addLayer(downEfficiencyText); - - JFreeChart jfup1= new JFreeChart(dpup1); - jfup1.setBorderPaint(Color.WHITE); - jfup1.setTitle("Download bandwidth efficiency"); - jfup1.getTitle().setFont(UIEnv.getFont().deriveFont(20.0f)); - jfup1.getTitle().setPosition(RectangleEdge.BOTTOM); - dpup1.setView(0, 0, 1, 1); - ChartPanel cpup1=new ChartPanel(jfup1); - cpup1.setPreferredSize(new Dimension(150, 165)); - cpup1.setSize(cpup1.getPreferredSize()); - cpup1.setBackground(Color.WHITE); - cpup1.setBorder(new LineBorder(Color.LIGHT_GRAY)); - dashs.add(cpup1); - }*/ - - JLabel ashboard = new JLabel("Dashboard"); - ashboard.setFont(UIEnv.getFont().deriveFont(20.0f)); - ashboard.setHorizontalAlignment(SwingConstants.CENTER); - dashboard.add(ashboard, BorderLayout.NORTH); - JPanel panelp = new JPanel(); - panelp.setOpaque(false); - JPanel panel = new JPanel(); - panel.setOpaque(false); - panel.setBorder(new LineBorder(Color.GRAY)); - overview.add(panelp, BorderLayout.SOUTH); - panelp.setLayout(new GridLayout(0, 1, 0, 0)); - - JPanel panel_2x = new JPanel(); - panel_2x.setOpaque(false); - - - - JPanel panel_2 = new JPanel(); - panel_2.setOpaque(false); - panelp.add(panel_2x); - panel_2x.setLayout(new GridLayout(2, 1, 0, 0)); - JLabel lblNewLabel = new JLabel("IPv6 addresss"); - lblNewLabel.setFont(UIEnv.getFont().deriveFont(20.0f)); - lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); - panel_2x.add(lblNewLabel); - panel_2x.add(panel_2); - panel_2.setLayout(new BorderLayout(0, 0)); - - addressField = new JTextField(); - addressField.setHorizontalAlignment(SwingConstants.CENTER); - addressField.setOpaque(false); - panel_2.add(addressField); - addressField.setColumns(10); - addressField.setFont(UIEnv.getFont().deriveFont(20.0f)); - - JButton btnNewButton_1 = new JButton("Copy"); - btnNewButton_1.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(addressField.getText()), null); - } - }); - panel_2.add(btnNewButton_1, BorderLayout.EAST); - - - panelp.add(panel); - panel.setLayout(new GridLayout(2, 2, 0, 0)); - - JLabel jlb = new JLabel("Devices Online"); - jlb.setHorizontalAlignment(SwingConstants.CENTER); - jlb.setFont(UIEnv.getFont().deriveFont(20.0f)); - panel.add(jlb); - - devicesOnline = new JTextField(); - devicesOnline.setOpaque(false); - devicesOnline.setHorizontalAlignment(SwingConstants.CENTER); - devicesOnline.setFont(UIEnv.getFont().deriveFont(20.0f)); - devicesOnline.setEditable(false); - panel.add(devicesOnline); - devicesOnline.setColumns(10); - - - - - - - - JPanel linesPanel=new JPanel(); - linesPanel.setOpaque(false); - tabbedPane.add(linesPanel); - tabbedPane.setTitleAt(1, "Remote lines"); - linesPanel.setLayout(new BorderLayout()); - - ysp = new YScrollPane(730); - ysp.setOpaque(false); - JPanel wv = ysp.getView(); - linesPanel.add(ysp,BorderLayout.CENTER); - JMenuBar menuBar = new JMenuBar(); - getContentPane().add(menuBar, BorderLayout.NORTH); - - JMenu mnNewMenu = new JMenu("Monitor"); - menuBar.add(mnNewMenu); - /* - JMenu mnNewMenu_1 = new JMenu("Update frequency"); - mnNewMenu.add(mnNewMenu_1); - ButtonGroup bg=new ButtonGroup(); - JRadioButtonMenuItem rdbtnmntmNewRadioItem = new JRadioButtonMenuItem("0.5s"); - mnNewMenu_1.add(rdbtnmntmNewRadioItem); - bg.add(rdbtnmntmNewRadioItem); - rdbtnmntmNewRadioItem.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - rate=500; - - createRefreshTask(kc, ysp); - } - }); - - JRadioButtonMenuItem rdbtnmntmNewRadioItem_1 = new JRadioButtonMenuItem("0.2s"); - mnNewMenu_1.add(rdbtnmntmNewRadioItem_1); - bg.add(rdbtnmntmNewRadioItem_1); - rdbtnmntmNewRadioItem_1.setSelected(true); - rdbtnmntmNewRadioItem_1.addActionListener(new ActionListener() { - - - @Override - public void actionPerformed(ActionEvent e) { - rate=200; - - createRefreshTask(kc, ysp); - } - }); - - JRadioButtonMenuItem rdbtnmntmNewRadioItem_2 = new JRadioButtonMenuItem("0.1s"); - mnNewMenu_1.add(rdbtnmntmNewRadioItem_2); - bg.add(rdbtnmntmNewRadioItem_2); - - rdbtnmntmNewRadioItem_2.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - rate=100; - - createRefreshTask(kc, ysp); - } - }); - - JRadioButtonMenuItem rdbtnmntmNewRadioItem_21 = new JRadioButtonMenuItem("0.05s"); - mnNewMenu_1.add(rdbtnmntmNewRadioItem_21); - bg.add(rdbtnmntmNewRadioItem_21); - rdbtnmntmNewRadioItem_21.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - rate=50; - - createRefreshTask(kc, ysp); - } - });*/ - - - showoffline = new JCheckBoxMenuItem("Show offline remotelines"); - mnNewMenu.add(showoffline); - /*JProgressBar progressBar = new JProgressBar(); - progressBar.setIndeterminate(true); - progressBar.setForeground(Color.YELLOW); - progressBar.setBorder(null); - progressBar.setPreferredSize(new Dimension(100, 4)); - ysp.add(progressBar, BorderLayout.NORTH);*/ - wv.addComponentListener(new ComponentListener() { - - @Override - public void componentShown(ComponentEvent e) { - // TODO 自动生成的方法存根 - - } - - @Override - public void componentResized(ComponentEvent e) { - // TODO 自动生成的方法存根 - - } - - @Override - public void componentMoved(ComponentEvent e) { - repaint(); - } - - @Override - public void componentHidden(ComponentEvent e) { - // TODO 自动生成的方法存根 - - } - }); - setTitle(title); - setSize(770, 490); - setLocationRelativeTo(null); - - //setVisible(true); - if (SystemTray.isSupported()) { - st = SystemTray.getSystemTray(); - ti = new TrayIcon(UIEnv.getIcon()); - ti.setImageAutoSize(true); - PopupMenu jpm = new PopupMenu(); - MenuItem mix = new MenuItem("open"); - mix.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - setVisible(true); - } - }); - jpm.add(mix); - MenuItem mi = new MenuItem("exit"); - mi.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - close(); - } - }); - jpm.add(mi); - ti.setPopupMenu(jpm); - try { - st.add(ti); - } catch (AWTException e1) { - e1.printStackTrace(); - } - ti.addActionListener((x) -> { - setVisible(true); - }); - } - - //repaint(); - - t3 = new Timer("监视器刷新线程",true); - t2 = new Timer("仪表盘刷新线程",true); - t = new Timer("状态刷新线程",true); - createRefreshTask(kc, ysp); - - JPanel panel_1 = new JPanel(); - panel_1.setOpaque(false); - linesPanel.add(panel_1, BorderLayout.NORTH); - panel_1.setLayout(new BorderLayout(0, 0)); - - textField = new JTextField(); - panel_1.add(textField); - textField.setColumns(10); - textField.setToolTipText("Line address:port"); - - JButton btnNewButton = new JButton("Add line"); - btnNewButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - try { - kc.addRemoteLines(new MultipurposeSocketAddress(textField.getText())); - }catch(RuntimeException ex) { - JOptionPane.showMessageDialog(KLALBStateGUI2.this, "Input format error", "Error", JOptionPane.ERROR_MESSAGE); - ex.printStackTrace(); - } - } - }); - panel_1.add(btnNewButton, BorderLayout.EAST); - - JButton btnReconnect = new JButton("ReconnectAll"); - btnReconnect.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - kc.reconnectImmediately(); - } - }); - panel_1.add(btnReconnect, BorderLayout.WEST); - - JPanel panel_3 = new JPanel(); - panel_3.setBackground(new Color(255, 255, 255)); - tabbedPane.addTab("Network graph", null, panel_3, null); - panel_3.setLayout(new BorderLayout(0, 0)); - - JPanel panel_4 = new JPanel(); - panel_3.add(panel_4, BorderLayout.NORTH); - panel_4.setLayout(new BorderLayout(0, 0)); - - - - textFieldLocate = new JTextField(); - panel_4.add(textFieldLocate, BorderLayout.CENTER); - textFieldLocate.setColumns(10); - - graph = new NetworkGraphPanel(kc); - graph.setOpaque(false); - JScrollPane jsp=new JScrollPane();jsp.setWheelScrollingEnabled(false); - jsp.setViewportView(graph); - MouseAdapter ma = new MouseAdapter() { - - private Point origin; - - @Override - public void mousePressed(MouseEvent e) { - origin = new Point(e.getPoint()); - //System.out.println(e); - } - - @Override - public void mouseReleased(MouseEvent e) { - } - - @Override - public void mouseDragged(MouseEvent e) { - if (origin != null) { - //System.out.println(e); - //JViewport viewPort = (JViewport) SwingUtilities.getAncestorOfClass(JViewport.class, jsp); - //if (viewPort != null) { - int deltaX = origin.x - e.getX(); - int deltaY = origin.y - e.getY(); - - Rectangle view = jsp.getViewport().getVisibleRect(); - view.x += deltaX; - view.y += deltaY; - - jsp.getViewport().scrollRectToVisible(view); - // } - } - } - - }; - - - graph.addMouseWheelListener(new MouseWheelListener() { - private double scaleidx=1; - @Override - public void mouseWheelMoved(MouseWheelEvent e) { - int val= e.getWheelRotation(); - double scaleidxold=scaleidx; - scaleidx*=Math.pow(1.1, val); - if(scaleidx>5) { - scaleidx=5; - } - if(scaleidx<0.1) { - scaleidx=0.1; - } - double pow=scaleidx/scaleidxold; - Point pos = jsp.getViewport().getViewPosition(); - double canvasX=e.getX(); - double canvasY=e.getY(); - double w=graph.getWidth(); - double h=graph.getHeight(); - double percentX=canvasX/w; - double percentY=canvasY/h; - graph.setScale(scaleidx); - graph.updateBounds(); - double newcanvasX=percentX*w*pow; - double newcanvasY=percentY*h*pow; - double dx= newcanvasX-canvasX; - double dy=newcanvasY-canvasY; - //System.out.println(dx+" "+dy); - pos.x+=dx; - pos.y+=dy ; - jsp.getViewport().setViewPosition(pos); - } - }); - - - JButton btnLocate = new JButton("Locate"); - btnLocate.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - String text= textFieldLocate.getText(); - try { - Inet6Address addr=(Inet6Address) Inet6Address.getByName(text); - GraphNode node= graph.getNodes().get(addr); - if(node==null) { - JOptionPane.showMessageDialog(KLALBStateGUI2.this, "Address not found", "Warning", JOptionPane.WARNING_MESSAGE); - }else { - Point pos = new Point(); - graph.updateBounds(); - Dimension dim= jsp.getViewport().getExtentSize(); - // System.out.println(dim); - pos.x =(int) ((node.getX()+graph.getTranslateX())*graph.getScale()-dim.width/2); - pos.y =(int) ((node.getY()+graph.getTranslateY())*graph.getScale()-dim.height/2); - jsp.getViewport().setViewPosition(pos); - } - } catch (UnknownHostException e1) { - JOptionPane.showMessageDialog(KLALBStateGUI2.this, "Input format error", "Error", JOptionPane.ERROR_MESSAGE); - e1.printStackTrace(); - } - } - }); - panel_4.add(btnLocate, BorderLayout.EAST); - - JButton btnHome = new JButton("Home"); - btnHome.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - textFieldLocate.setText(addressField.getText()); - btnLocate.doClick(); - } - }); - panel_4.add(btnHome, BorderLayout.WEST); - graph.addMouseListener(ma); - graph.addMouseMotionListener(ma); - panel_3.add(jsp, BorderLayout.CENTER); - yspc = new YScrollPane(730); - yspc.setOpaque(false); - JPanel configsPanel = new JPanel(); - configsPanel.setLayout(new BorderLayout(0, 0)); - configsPanel.add(yspc); - addSettingItems(yspc); - JButton btnSave = new JButton("Save settings"); - yspc.add(btnSave, BorderLayout.NORTH); - tabbedPane.addTab("Settings", null, configsPanel, null); - configsPanel.setOpaque(false); - textField.addKeyListener(new KeyListener() { - - @Override - public void keyTyped(KeyEvent e) { - } - - @Override - public void keyReleased(KeyEvent e) { - } - - @Override - public void keyPressed(KeyEvent e) { - // TODO 自动生成的方法存根 - - if(e.getKeyCode()==KeyEvent.VK_ENTER) { - btnNewButton.doClick(); - } - } - }); -textFieldLocate.addKeyListener(new KeyListener() { - - @Override - public void keyTyped(KeyEvent e) { - } - - @Override - public void keyReleased(KeyEvent e) { - } - - @Override - public void keyPressed(KeyEvent e) { - // TODO 自动生成的方法存根 - - if(e.getKeyCode()==KeyEvent.VK_ENTER) { - btnLocate.doClick(); - } - } - }); - } - private void addSettingItems(YScrollPane settings) { - SettingItem si=new SettingItem("Basic settings",UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD),CONST.itemwidth,CONST.settingheight); - settings.getView().add(si); - - TextSettingItem addr6=new TextSettingItem("IPv6 address",CONST.itemwidth,CONST.settingheight); - addressField2=addr6.getTextField(); - settings.getView().add(addr6); - - TextSettingItem asn=new TextSettingItem("AS number",CONST.itemwidth,CONST.settingheight); - asnField=asn.getTextField(); - settings.getView().add(asn); - - settings.updateScrool(); - - } - - - private void createRefreshTask(KLALBController kc, YScrollPane ysp) { - if(tsk!=null) { - tsk.cancel(); - } - tsk=new TimerTask() { - - @Override - public void run() { - Object[]kll; - kll=kc.getLines().toArray(); - - loop:for (int ix = 0; ix < kll.length; ix++) { - KLALBRemoteLine ent = (KLALBRemoteLine) kll[ix]; - /*if(ent.getMonitor().getState()!=MonitorData.ONLINE) { - continue loop; - }*/ - Component[] count=ysp.getView().getComponents(); - for (int i = 0; i < count.length; i++) { - Component tp=count[i]; - if(tp instanceof TPanel2) { - if(((TPanel2) tp).getTunnel().equals(ent)) { - tp.setVisible(showoffline.isSelected()||ent.getMonitor().getState()==MonitorData.ONLINE); - continue loop; - } - } - } - TPanel2 tp=new TPanel2(ent,kc); - tp.setVisible(showoffline.isSelected()||ent.getMonitor().getState()==MonitorData.ONLINE); - ysp.getView().add(tp); - } - Component[] count=ysp.getView().getComponents(); - for (int i = 0; i < count.length; i++) { - Component tp=count[i]; - if(tp instanceof TPanel2) { - /*if((((TPanel2) tp).getTunnel().getMonitor().getState())!=MonitorData.ONLINE) - { - ysp.getView().remove(tp); - continue; - }*/ - if(kc.getLines().contains(((TPanel2) tp).getTunnel())) { - try { - if(tp.isVisible()) - ((TPanel2) tp).updateTraffic(); - }catch(RuntimeException e) { - e.printStackTrace(); - } - }else { - ysp.getView().remove(tp); - } - } - } - ysp.updateScrool(); - //repaint(); - } - }; - t.scheduleAtFixedRate(tsk, 200, 500); - if(tsk2!=null) { - tsk2.cancel(); - } - tsk2=new TimerTask() { - - @Override - public void run() { - double outload=kc.getLinkMonitor().getOutSpeed()*100.0/kc.getLinkMonitor().getOutSpeedMax2(); - if(Double.isFinite(outload)) { - upSpeedText.setLabel(KLALBUtils.convertIBUint(kc.getLinkMonitor().getOutSpeedAvg())+"/s"); - upSpeed.setValue(Math.min(upSpeed.getValue().doubleValue()*0.98+outload*0.02,101.0)); - } - - double inload=kc.getLinkMonitor().getInSpeed()*100.0/kc.getLinkMonitor().getInSpeedMax2(); - if(Double.isFinite(inload)) { - downSpeedText.setLabel(KLALBUtils.convertIBUint(kc.getLinkMonitor().getInSpeedAvg())+"/s"); - downSpeed.setValue(Math.min(downSpeed.getValue().doubleValue()*0.98+inload*0.02,101.0)); - } - - double outPPSload=kc.getLinkMonitor().getOutPPS()*100.0/kc.getLinkMonitor().getOutPPSMax2(); - if(Double.isFinite(outPPSload)) { - upPPSText.setLabel(KLALBUtils.convertIUintDefalut(kc.getLinkMonitor().getOutPPSAvg())+"PPS"); - upPPS.setValue(Math.min(upPPS.getValue().doubleValue()*0.98+outPPSload*0.02,101.0)); - } - - double inPPSload=kc.getLinkMonitor().getInPPS()*100.0/kc.getLinkMonitor().getInPPSMax2(); - if(Double.isFinite(inPPSload)) { - downPPSText.setLabel(KLALBUtils.convertIUintDefalut(kc.getLinkMonitor().getInPPSAvg())+"PPS"); - downPPS.setValue(Math.min(downPPS.getValue().doubleValue()*0.98+inPPSload*0.02,101.0)); - } - - - - double outload1=kc.getDatatMonitor().getOutSpeed()*100.0/kc.getLinkMonitor().getOutSpeedMax2(); - if(Double.isFinite(outload1)) { - upDataSpeed.setValue(Math.min(upDataSpeed.getValue().doubleValue()*0.98+outload1*0.02,101.0)); - } - - double inload1=kc.getDatatMonitor().getInSpeed()*100.0/kc.getLinkMonitor().getInSpeedMax2(); - if(Double.isFinite(inload1)) { - downDataSpeed.setValue(Math.min(downDataSpeed.getValue().doubleValue()*0.98+inload1*0.02,101.0)); - } - - double outPPSload1=kc.getDatatMonitor().getOutPPS()*100.0/kc.getLinkMonitor().getOutPPSMax2(); - if(Double.isFinite(outPPSload1)) { - upDataPPS.setValue(Math.min(upDataPPS.getValue().doubleValue()*0.98+outPPSload1*0.02,101.0)); - } - - double inPPSload1=kc.getDatatMonitor().getInPPS()*100.0/kc.getLinkMonitor().getInPPSMax2(); - if(Double.isFinite(inPPSload1)) { - downDataPPS.setValue(Math.min(downDataPPS.getValue().doubleValue()*0.98+inPPSload1*0.02,101.0)); - } - - /*double outefi=kc.getDatatMonitor().getOutSpeedAvg2()*100.0D/kc.getLinkMonitor().getOutSpeedAvg2(); - if(Double.isFinite(outefi)) { - upEfficiency.setValue(upEfficiency.getValue().doubleValue()*0.95+ outefi*0.05); - upEfficiencyText.setLabel(String.format("%.1f", upEfficiency.getValue().doubleValue())+"%"); - } - - double inefi=kc.getDatatMonitor().getInSpeedAvg2()*100.0D/kc.getLinkMonitor().getInSpeedAvg2(); - if(Double.isFinite(inefi)) { - downEfficiency.setValue(downEfficiency.getValue().doubleValue()*0.95+ inefi*0.05); - downEfficiencyText.setLabel(String.format("%.1f", downEfficiency.getValue().doubleValue())+"%"); - }*/ - String contt=Long.toString( kc.getIpv6Router().getKlalbRouteProtol().getDevicesFound()); - if(!contt.equals(devicesOnline.getText())) { - devicesOnline.setText(contt); - } - String address=kc.getSelf().getAddress().getHostAddress(); - if(!address.equals(addressField.getText())) { - addressField.setText(address); - } - if(!address.equals(addressField2.getText())) { - addressField2.setText(address); - } - - String asnstr=Long.toString( kc.getIpv6Router().getASN()); - if(!asnstr.equals(asnField.getText())) { - asnField.setText(asnstr); - } - - } - }; - t2.scheduleAtFixedRate(tsk2, 200, 100); - - if(tsk3!=null) { - tsk3.cancel(); - } - tsk3=new TimerTask() { - - @Override - public void run() { - Component[] count=ysp.getView().getComponents(); - for (int i = 0; i < count.length; i++) { - Component tp=count[i]; - if(tp instanceof TPanel2) { - try { - ((TPanel2) tp).getMdg().updateTraffic(); - }catch(RuntimeException e) { - e.printStackTrace(); - } - } - } - } - }; - t3.scheduleAtFixedRate(tsk3, 200, 200); - - if(tsk4!=null) { - tsk4.cancel(); - } - /*tsk4=new TimerTask() { - - @Override - public void run() { - Component[] count=ysp.getView().getComponents(); - for (int i = 0; i < count.length; i++) { - Component tp=count[i]; - if(tp instanceof TPanel2) { - try { - ((TPanel2) tp).getMdg().recordData(); - }catch(RuntimeException e) { - e.printStackTrace(); - } - } - } - } - }; - t3.scheduleAtFixedRate(tsk4, 200, 20);*/ - if(tsk5!=null) { - tsk5.cancel(); - } - tsk5=new TimerTask() { - - @Override - public void run() { - graph.loadNodes(); - for(int i=0;i<5;i++) { - graph.runPhy(); - } - if(graph.isVisible()) { - graph.repaint(); - graph.revalidate(); - } - } - }; - t.scheduleAtFixedRate(tsk5, 200, 100); - //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - } - - public void close() { - setVisible(false); - if(tsk!=null) { - tsk.cancel(); - } - st.remove(ti); - } - - public static void main(String[] args) throws IOException, InterruptedException {//,new MultipurposeSocketAddress("frp-mom.top:22226"),new MultipurposeSocketAddress("0.0.0.0:26468") - KLALBStateGUI2 kcg=new KLALBStateGUI2(new KLALBController()); - kcg.setVisible(true); - //Thread.sleep(10000); - //kcg.close(); - } -} diff --git a/src/org/kne/cloud/network/klalb/ui/KLALBStateGUI3.java b/src/org/kne/cloud/network/klalb/ui/KLALBStateGUI3.java index 1692a9c..7c99bd9 100644 --- a/src/org/kne/cloud/network/klalb/ui/KLALBStateGUI3.java +++ b/src/org/kne/cloud/network/klalb/ui/KLALBStateGUI3.java @@ -1,1418 +1,1557 @@ package org.kne.cloud.network.klalb.ui; -import java.awt.AWTException; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.GridLayout; -import java.awt.Image; -import java.awt.MenuItem; -import java.awt.Point; -import java.awt.PopupMenu; -import java.awt.Rectangle; -import java.awt.SystemTray; -import java.awt.Toolkit; -import java.awt.TrayIcon; +import java.awt.*; import java.awt.datatransfer.StringSelection; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionListener; -import java.awt.event.MouseWheelEvent; -import java.awt.event.MouseWheelListener; +import java.awt.event.*; import java.io.IOException; -import java.net.Inet6Address; -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.net.SocketException; -import java.net.UnknownHostException; +import java.net.*; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; import java.util.function.Consumer; - import javax.imageio.ImageIO; -import javax.swing.Icon; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JCheckBoxMenuItem; -import javax.swing.JComboBox; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTabbedPane; -import javax.swing.JTextArea; -import javax.swing.JTextField; -import javax.swing.JViewport; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; +import javax.swing.*; import javax.swing.border.LineBorder; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; -import org.jfree.chart.plot.dial.DialPlot; -import org.jfree.chart.plot.dial.DialPointer; -import org.jfree.chart.plot.dial.DialTextAnnotation; -import org.jfree.chart.plot.dial.StandardDialFrame; -import org.jfree.chart.plot.dial.StandardDialRange; -import org.jfree.chart.plot.dial.StandardDialScale; +import org.jfree.chart.plot.dial.*; +import org.jfree.chart.title.TextTitle; import org.jfree.chart.ui.RectangleEdge; import org.jfree.data.general.DefaultValueDataset; import org.kne.cloud.clock.HighAccuracyClock; -import org.kne.cloud.klalb.uitool.ComboSettingItem; -import org.kne.cloud.klalb.uitool.SettingItem; -import org.kne.cloud.klalb.uitool.TextAreaSettingItem; -import org.kne.cloud.klalb.uitool.TextSettingItem; -import org.kne.cloud.klalb.uitool.XDefaultListModel; +import org.kne.cloud.klalb.uitool.*; import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.cloud.network.ipv6.IPv6Address; import org.kne.cloud.network.ipv6.IPv6NetworkLink; -import org.kne.cloud.network.klalb.CONST; -import org.kne.cloud.network.klalb.KLALBConfig; -import org.kne.cloud.network.klalb.KLALBConfigItem; -import org.kne.cloud.network.klalb.KLALBController; -import org.kne.cloud.network.klalb.KLALBControllerConfigItem; -import org.kne.cloud.network.klalb.KLALBRemoteLine; -import org.kne.cloud.network.klalb.KLALBUtils; +import org.kne.cloud.network.klalb.*; import org.kne.cloud.network.klalb.ui.GraphPanel.GraphNode; import org.kne.cloud.network.monitor.MonitorData; import org.kne.ui.XFrame; import org.kne.ui.YScrollPane; -import javax.swing.JScrollPane; +/** + * KLALB状态监控GUI界面 - 版本3 + * 提供网络协议栈的监控面板,包括网络图、远程线路、仪表盘和配置管理 + */ public class KLALBStateGUI3 extends XFrame { - private TimerTask tsk, tsk2, tsk3, tsk4, tsk5; - - private SystemTray st; - - private TrayIcon ti; - - private Timer t, t2, t3; - - private JCheckBoxMenuItem showoffline; - - private DefaultValueDataset upSpeed; - - private DialTextAnnotation upSpeedText; - - private DialTextAnnotation downSpeedText; - - private DefaultValueDataset downSpeed; - - private DefaultValueDataset upPPS; - - private DialTextAnnotation upPPSText; - - private DialTextAnnotation downPPSText; - - private DefaultValueDataset downPPS; - - private DefaultValueDataset upDataSpeed; - - private DefaultValueDataset downDataSpeed; - - private DefaultValueDataset upDataPPS; - - private DefaultValueDataset downDataPPS; - - /* - * private DefaultValueDataset upEfficiency; - * - * private DialTextAnnotation upEfficiencyText; - * - * private DialTextAnnotation downEfficiencyText; - * - * private DefaultValueDataset downEfficiency; - */ - - private YScrollPane ysp, yspc; - - private JTextField devicesOnline; - private JTextField textField; - private JTextField addressField; - private JTextField addressFieldSet; - private JTextField asnFieldSet; - - private NetworkGraphPanel graph; - private JTextField textFieldLocate; - - private Dimension dashSize = new Dimension((int) (145 * 0.7), (int) (165 * 0.7)); - - private JTextField asnField2; - - private JTextArea dnsAreaSet; - - private KLALBConfig config; - - private JComboBox comboCongress; - - private JTextField tcpListeningSet; - - private JTextField udpListeningSet; - - private JTextArea openLineTabelSet; - - private JTextArea connectLineTabelSet; - - private Consumer saveComsumer; - - private JComboBox comboLang; - - private XDefaultListModel nilsimdl; - private JTextField textFieldTime; - - private JTextArea ntpServerSet; - - private ClosableTabbedPane tabbedPane; - - - public Consumer getSaveComsumer() { - return saveComsumer; - } - - public void setSaveComsumer(Consumer saveComsumer) { - this.saveComsumer = saveComsumer; - } - - /** - * @wbp.parser.constructor - */ - public KLALBStateGUI3(KLALBController kpcje) { - this(kpcje, CONST.klalb + " "+UIEnv.getRsb().getString("srv6acc")+" V" + CONST.klalbver); - } - - public KLALBStateGUI3(KLALBController kc, String title) { - - // setResizable(false); - setIconImage(UIEnv.getIcon()); - // setTitleColor(new Color(255, 255, 255, 250)); - setTitleColor(UIEnv.getDefaultTitleColor()); - getContentPane().setBackground(UIEnv.getDefaultBackgroundColor()); - getTitlelabel().setFont(UIEnv.getFont().deriveFont(17.0f)); - getTitlepanel().setBorder(new LineBorder(Color.LIGHT_GRAY)); - getTitlelabel().setForeground(Color.WHITE); - // getContentPane().setBackground(new Color(0,0,0,0)); - /* - * setTitleColor(new Color(0,0,0,80)); getContentPane().setBackground(new - * Color(0,0,0,80)); getTitlelabel().setForeground(Color.WHITE); - */ - - tabbedPane = new ClosableTabbedPane(JTabbedPane.TOP); - getContentPane().add(tabbedPane, BorderLayout.CENTER); - - JPanel panel_3 = new JPanel(); - panel_3.setBackground(new Color(255, 255, 255)); - Icon icon=null; - try { - icon=new ImageIcon(ImageIO.read(KLALBStateGUI3.class.getResourceAsStream("/assets/graph.png")).getScaledInstance(15, 15,Image.SCALE_SMOOTH )); - }catch(IOException e) { - e.printStackTrace(); - } - tabbedPane.addTab(UIEnv.getRsb().getString("networkgraph"), icon, panel_3, null,false); - panel_3.setLayout(new BorderLayout(0, 0)); - - JPanel panel_4 = new JPanel(); - panel_3.add(panel_4, BorderLayout.NORTH); - panel_4.setLayout(new BorderLayout(0, 0)); - - textFieldLocate = new JTextField(); - panel_4.add(textFieldLocate, BorderLayout.CENTER); - textFieldLocate.setColumns(10); - - graph = new NetworkGraphPanel(kc,this); - graph.setOpaque(false); - JScrollPane jsp = new JScrollPane(); - jsp.setWheelScrollingEnabled(false); - jsp.setViewportView(graph); - - graph.addMouseWheelListener(new MouseWheelListener() { - private double scaleidx = 1; - - @Override - public void mouseWheelMoved(MouseWheelEvent e) { - int val = e.getWheelRotation(); - double scaleidxold = scaleidx; - scaleidx *= Math.pow(1.1, val); - if (scaleidx > 5) { - scaleidx = 5; - } - if (scaleidx < 0.1) { - scaleidx = 0.1; - } - double pow = scaleidx / scaleidxold; - Point pos = jsp.getViewport().getViewPosition(); - double canvasX = e.getX(); - double canvasY = e.getY(); - double w = graph.getWidth(); - double h = graph.getHeight(); - double percentX = canvasX / w; - double percentY = canvasY / h; - graph.setScale(scaleidx); - graph.updateBounds(); - double newcanvasX = percentX * w * pow; - double newcanvasY = percentY * h * pow; - double dx = newcanvasX - canvasX; - double dy = newcanvasY - canvasY; - // System.out.println(dx+" "+dy); - pos.x += dx; - pos.y += dy; - jsp.getViewport().setViewPosition(pos); - } - }); - - JButton btnLocate = new JButton(UIEnv.getRsb().getString("find")); - btnLocate.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - String text = textFieldLocate.getText(); - try { - Inet6Address addr = (Inet6Address) Inet6Address.getByName(text); - GraphNode node = graph.getNodes().get(addr); - if (node == null) { - JOptionPane.showMessageDialog(KLALBStateGUI3.this, "Address not found", "Warning", - JOptionPane.WARNING_MESSAGE); - } else { - Point pos = new Point(); - graph.updateBounds(); - Dimension dim = jsp.getViewport().getExtentSize(); - // System.out.println(dim); - pos.x = (int) ((node.getX() + graph.getTranslateX()) * graph.getScale() - dim.width / 2); - pos.y = (int) ((node.getY() + graph.getTranslateY()) * graph.getScale() - dim.height / 2); - jsp.getViewport().setViewPosition(pos); - } - } catch (UnknownHostException e1) { - JOptionPane.showMessageDialog(KLALBStateGUI3.this, "Input format error", "Error", - JOptionPane.ERROR_MESSAGE); - e1.printStackTrace(); - } - } - }); - panel_4.add(btnLocate, BorderLayout.EAST); - - JButton btnHome = new JButton(UIEnv.getRsb().getString("home")); - btnHome.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - textFieldLocate.setText(addressField.getText()); - btnLocate.doClick(); - } - }); - panel_4.add(btnHome, BorderLayout.WEST); - panel_3.add(jsp, BorderLayout.CENTER); - - JPanel panel_4_1 = new JPanel(); - panel_3.add(panel_4_1, BorderLayout.SOUTH); - panel_4_1.setLayout(new BorderLayout(0, 0)); - textFieldLocate.addKeyListener(new KeyListener() { - - @Override - public void keyTyped(KeyEvent e) { - } - - @Override - public void keyReleased(KeyEvent e) { - } - - @Override - public void keyPressed(KeyEvent e) { - // TODO 自动生成的方法存根 - - if (e.getKeyCode() == KeyEvent.VK_ENTER) { - btnLocate.doClick(); - } - } - }); - JPanel dashs = new JPanel(); - dashs.setOpaque(false); - // dashboard.add(dashs); - panel_4_1.add(dashs, BorderLayout.EAST); - { - upSpeed = new DefaultValueDataset(0); - upDataSpeed = new DefaultValueDataset(0); - DialPlot dpup = new DialPlot(); - dpup.setDataset(1, upSpeed); - dpup.setDataset(0, upDataSpeed); - StandardDialFrame sdfs = new StandardDialFrame(); - sdfs.setVisible(false); - dpup.setDialFrame(sdfs); - StandardDialScale sds = new StandardDialScale(0, 100, -120, -300, 10, 5); - sds.setTickRadius(0.9); - sds.setTickLabelsVisible(false); - dpup.addScale(0, sds); - - StandardDialRange sdrr = new StandardDialRange(0, 70, Color.GREEN); - sdrr.setInnerRadius(0.92); - sdrr.setOuterRadius(0.93); - dpup.addLayer(sdrr); - - StandardDialRange sdrr2 = new StandardDialRange(70, 90, Color.YELLOW); - sdrr2.setInnerRadius(0.92); - sdrr2.setOuterRadius(0.93); - dpup.addLayer(sdrr2); - - StandardDialRange sdrr3 = new StandardDialRange(90, 100, Color.RED); - sdrr3.setInnerRadius(0.92); - sdrr3.setOuterRadius(0.93); - dpup.addLayer(sdrr3); - - DialPointer.Pointer dpd = new DialPointer.Pointer(); - dpd.setRadius(0.8); - dpd.setFillPaint(new Color(127, 0, 0, 0)); - dpd.setOutlinePaint(new Color(127, 0, 0)); - dpd.setDatasetIndex(0); - dpup.addLayer(dpd); - - DialPointer.Pointer dp = new DialPointer.Pointer(); - dp.setRadius(0.8); - dp.setFillPaint(Color.RED); - dp.setOutlinePaint(Color.RED); - dp.setDatasetIndex(1); - dpup.addLayer(dp); - - upSpeedText = new DialTextAnnotation("0%"); - upSpeedText.setFont(UIEnv.getFont().deriveFont(20.0f)); - dpup.addLayer(upSpeedText); - - JFreeChart jfup = new JFreeChart(dpup); - jfup.setBorderPaint(Color.WHITE); - jfup.setTitle(UIEnv.getRsb().getString("uploadspeed")); - jfup.getTitle().setFont(UIEnv.getFont().deriveFont(22.0f)); - jfup.getTitle().setPosition(RectangleEdge.BOTTOM); - dpup.setView(0, 0, 1, 1); - ChartPanel cpup = new ChartPanel(jfup); - cpup.setPreferredSize(dashSize); - cpup.setSize(cpup.getPreferredSize()); - cpup.setBackground(Color.WHITE); - cpup.setBorder(new LineBorder(Color.LIGHT_GRAY)); - dashs.add(cpup); - - downSpeed = new DefaultValueDataset(0); - downDataSpeed = new DefaultValueDataset(0); - DialPlot dpup1 = new DialPlot(); - dpup1.setDataset(1, downSpeed); - dpup1.setDataset(0, downDataSpeed); - StandardDialFrame sdfs1 = new StandardDialFrame(); - sdfs1.setVisible(false); - dpup1.setDialFrame(sdfs1); - StandardDialScale sds1 = new StandardDialScale(0, 100, -120, -300, 10, 5); - sds1.setTickRadius(0.9); - sds1.setTickLabelsVisible(false); - dpup1.addScale(0, sds1); - - StandardDialRange sdrr1 = new StandardDialRange(0, 70, Color.GREEN); - sdrr1.setInnerRadius(0.92); - sdrr1.setOuterRadius(0.93); - dpup1.addLayer(sdrr1); - - StandardDialRange sdrr21 = new StandardDialRange(70, 90, Color.YELLOW); - sdrr21.setInnerRadius(0.92); - sdrr21.setOuterRadius(0.93); - dpup1.addLayer(sdrr21); - - StandardDialRange sdrr31 = new StandardDialRange(90, 100, Color.RED); - sdrr31.setInnerRadius(0.92); - sdrr31.setOuterRadius(0.93); - dpup1.addLayer(sdrr31); - - DialPointer.Pointer dp11 = new DialPointer.Pointer(); - dp11.setRadius(0.8); - dp11.setFillPaint(new Color(0, 127, 0, 0)); - dp11.setOutlinePaint(new Color(0, 127, 0)); - dp11.setDatasetIndex(0); - dpup1.addLayer(dp11); - - DialPointer.Pointer dp1 = new DialPointer.Pointer(); - dp1.setRadius(0.8); - dp1.setFillPaint(Color.GREEN); - dp1.setOutlinePaint(Color.GREEN); - dp1.setDatasetIndex(1); - dpup1.addLayer(dp1); - - downSpeedText = new DialTextAnnotation("0%"); - downSpeedText.setFont(UIEnv.getFont().deriveFont(20.0f)); - dpup1.addLayer(downSpeedText); - - JFreeChart jfup1 = new JFreeChart(dpup1); - jfup1.setBorderPaint(Color.WHITE); - jfup1.setTitle(UIEnv.getRsb().getString("downloadspeed")); - jfup1.getTitle().setFont(UIEnv.getFont().deriveFont(22.0f)); - jfup1.getTitle().setPosition(RectangleEdge.BOTTOM); - dpup1.setView(0, 0, 1, 1); - ChartPanel cpup1 = new ChartPanel(jfup1); - cpup1.setPreferredSize(dashSize); - cpup1.setSize(cpup1.getPreferredSize()); - cpup1.setBackground(Color.WHITE); - cpup1.setBorder(new LineBorder(Color.LIGHT_GRAY)); - dashs.add(cpup1); - - } - - { - upPPS = new DefaultValueDataset(0); - upDataPPS = new DefaultValueDataset(0); - DialPlot dpup = new DialPlot(); - dpup.setDataset(1, upPPS); - dpup.setDataset(0, upDataPPS); - StandardDialFrame sdfs = new StandardDialFrame(); - sdfs.setVisible(false); - dpup.setDialFrame(sdfs); - StandardDialScale sds = new StandardDialScale(0, 100, -120, -300, 10, 5); - sds.setTickRadius(0.9); - sds.setTickLabelsVisible(false); - dpup.addScale(0, sds); - - StandardDialRange sdrr = new StandardDialRange(0, 70, Color.GREEN); - sdrr.setInnerRadius(0.92); - sdrr.setOuterRadius(0.93); - dpup.addLayer(sdrr); - - StandardDialRange sdrr2 = new StandardDialRange(70, 90, Color.YELLOW); - sdrr2.setInnerRadius(0.92); - sdrr2.setOuterRadius(0.93); - dpup.addLayer(sdrr2); - - StandardDialRange sdrr3 = new StandardDialRange(90, 100, Color.RED); - sdrr3.setInnerRadius(0.92); - sdrr3.setOuterRadius(0.93); - dpup.addLayer(sdrr3); - - DialPointer.Pointer dp1 = new DialPointer.Pointer(); - dp1.setRadius(0.8); - dp1.setFillPaint(new Color(127, 0, 0, 0)); - dp1.setOutlinePaint(new Color(127, 0, 0)); - dp1.setDatasetIndex(0); - dpup.addLayer(dp1); - - DialPointer.Pointer dp = new DialPointer.Pointer(); - dp.setRadius(0.8); - dp.setFillPaint(Color.RED); - dp.setOutlinePaint(Color.RED); - dp.setDatasetIndex(1); - dpup.addLayer(dp); - - upPPSText = new DialTextAnnotation("0PPS"); - upPPSText.setFont(UIEnv.getFont().deriveFont(20.0f)); - dpup.addLayer(upPPSText); - - JFreeChart jfup = new JFreeChart(dpup); - jfup.setBorderPaint(Color.WHITE); - jfup.setTitle(UIEnv.getRsb().getString("uploadpps")); - jfup.getTitle().setFont(UIEnv.getFont().deriveFont(22.0f)); - jfup.getTitle().setPosition(RectangleEdge.BOTTOM); - dpup.setView(0, 0, 1, 1); - ChartPanel cpup = new ChartPanel(jfup); - cpup.setPreferredSize(dashSize); - cpup.setSize(cpup.getPreferredSize()); - cpup.setBackground(Color.WHITE); - cpup.setBorder(new LineBorder(Color.LIGHT_GRAY)); - dashs.add(cpup); - - downPPS = new DefaultValueDataset(0); - downDataPPS = new DefaultValueDataset(0); - DialPlot dpup1 = new DialPlot(); - dpup1.setDataset(1, downPPS); - dpup1.setDataset(0, downDataPPS); - StandardDialFrame sdfs1 = new StandardDialFrame(); - sdfs1.setVisible(false); - dpup1.setDialFrame(sdfs1); - StandardDialScale sds1 = new StandardDialScale(0, 100, -120, -300, 10, 5); - sds1.setTickRadius(0.9); - sds1.setTickLabelsVisible(false); - dpup1.addScale(0, sds1); - - StandardDialRange sdrr1 = new StandardDialRange(0, 70, Color.GREEN); - sdrr1.setInnerRadius(0.92); - sdrr1.setOuterRadius(0.93); - dpup1.addLayer(sdrr1); - - StandardDialRange sdrr21 = new StandardDialRange(70, 90, Color.YELLOW); - sdrr21.setInnerRadius(0.92); - sdrr21.setOuterRadius(0.93); - dpup1.addLayer(sdrr21); - - StandardDialRange sdrr31 = new StandardDialRange(90, 100, Color.RED); - sdrr31.setInnerRadius(0.92); - sdrr31.setOuterRadius(0.93); - dpup1.addLayer(sdrr31); - - DialPointer.Pointer dp111 = new DialPointer.Pointer(); - dp111.setRadius(0.8); - dp111.setFillPaint(new Color(0, 127, 0, 0)); - dp111.setOutlinePaint(new Color(0, 127, 0)); - dp111.setDatasetIndex(0); - dpup1.addLayer(dp111); - DialPointer.Pointer dp11 = new DialPointer.Pointer(); - dp11.setRadius(0.8); - dp11.setFillPaint(Color.GREEN); - dp11.setOutlinePaint(Color.GREEN); - dp11.setDatasetIndex(1); - dpup1.addLayer(dp11); - - downPPSText = new DialTextAnnotation("0PPS"); - downPPSText.setFont(UIEnv.getFont().deriveFont(20.0f)); - dpup1.addLayer(downPPSText); - - JFreeChart jfup1 = new JFreeChart(dpup1); - jfup1.setBorderPaint(Color.WHITE); - jfup1.setTitle(UIEnv.getRsb().getString("downloadpps")); - jfup1.getTitle().setFont(UIEnv.getFont().deriveFont(22.0f)); - jfup1.getTitle().setPosition(RectangleEdge.BOTTOM); - dpup1.setView(0, 0, 1, 1); - ChartPanel cpup1 = new ChartPanel(jfup1); - cpup1.setPreferredSize(dashSize); - cpup1.setSize(cpup1.getPreferredSize()); - cpup1.setBackground(Color.WHITE); - cpup1.setBorder(new LineBorder(Color.LIGHT_GRAY)); - dashs.add(cpup1); - } - JPanel panelp = new JPanel(); - panelp.setOpaque(false); - JPanel panel = new JPanel(); - panel.setOpaque(false); - panel.setBorder(new LineBorder(Color.GRAY)); - panel_4_1.add(panelp, BorderLayout.CENTER); - panelp.setLayout(new GridLayout(4, 1, 0, 0)); - - JPanel panel_2x = new JPanel(); - panel_2x.setOpaque(false); - - JPanel panel_2 = new JPanel(); - panel_2.setOpaque(false); - panelp.add(panel_2x); - panel_2x.setLayout(new BorderLayout(0, 0)); - - JPanel panel_2x_1 = new JPanel(); - panel_2x_1.setOpaque(false); - panelp.add(panel_2x_1); - panel_2x_1.setLayout(new BorderLayout(0, 0)); - - JLabel lblNewLabel_1 = new JLabel(UIEnv.getRsb().getString("asnumber")); - lblNewLabel_1.setFont(UIEnv.getFont().deriveFont(18.0f)); - panel_2x_1.add(lblNewLabel_1, BorderLayout.WEST); - - asnField2 = new JTextField(); - asnField2.setFont(UIEnv.getFont().deriveFont(18.0f)); - asnField2.setHorizontalAlignment(SwingConstants.CENTER); - asnField2.setEditable(false); - panel_2x_1.add(asnField2, BorderLayout.CENTER); - asnField2.setColumns(10); - - JButton btnNewButton_2 = new JButton(UIEnv.getRsb().getString("copy")); - btnNewButton_2.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - - Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(asnField2.getText()), - null); - } - }); - panel_2x_1.add(btnNewButton_2, BorderLayout.EAST); - - JLabel lblNewLabel = new JLabel(UIEnv.getRsb().getString("ipv6addr")); - lblNewLabel.setFont(UIEnv.getFont().deriveFont(18.0f)); - lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); - panel_2x.add(lblNewLabel, BorderLayout.WEST); - panel_2x.add(panel_2); - panel_2.setLayout(new BorderLayout(0, 0)); - - addressField = new JTextField(); - addressField.setEditable(false); - addressField.setHorizontalAlignment(SwingConstants.CENTER); - addressField.setOpaque(false); - panel_2.add(addressField); - addressField.setColumns(10); - addressField.setFont(UIEnv.getFont().deriveFont(18.0f)); - - JButton btnNewButton_1 = new JButton(UIEnv.getRsb().getString("copy")); - btnNewButton_1.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - Toolkit.getDefaultToolkit().getSystemClipboard() - .setContents(new StringSelection(addressField.getText()), null); - } - }); - panel_2.add(btnNewButton_1, BorderLayout.EAST); - - panelp.add(panel); - panel.setLayout(new BorderLayout(0, 0)); - - JLabel jlb = new JLabel(UIEnv.getRsb().getString("onlinedevices")); - jlb.setHorizontalAlignment(SwingConstants.CENTER); - jlb.setFont(UIEnv.getFont().deriveFont(18.0f)); - panel.add(jlb, BorderLayout.WEST); - - devicesOnline = new JTextField(); - devicesOnline.setOpaque(false); - devicesOnline.setHorizontalAlignment(SwingConstants.CENTER); - devicesOnline.setFont(UIEnv.getFont().deriveFont(18.0f)); - devicesOnline.setEditable(false); - panel.add(devicesOnline); - devicesOnline.setColumns(10); + // ==================== 定时任务相关 ==================== + private TimerTask tsk, tsk2, tsk3, tsk4, tsk5; // 各种定时任务 + private Timer t, t2, t3; // 定时器 + + // ==================== 系统托盘相关 ==================== + private SystemTray st; // 系统托盘 + private TrayIcon ti; // 托盘图标 + + // ==================== 仪表盘数据集 ==================== + private DefaultValueDataset upSpeed; // 上行速度数据集 + private DefaultValueDataset downSpeed; // 下行速度数据集 + private DefaultValueDataset upPPS; // 上行包速率数据集 + private DefaultValueDataset downPPS; // 下行包速率数据集 + private DefaultValueDataset upDataSpeed; // 上行数据速度 + private DefaultValueDataset downDataSpeed; // 下行数据速度 + private DefaultValueDataset upDataPPS; // 上行数据包速率 + private DefaultValueDataset downDataPPS; // 下行数据包速率 + private DefaultValueDataset backplaneDelay; + private DefaultValueDataset backplanePPS; + + // ==================== 仪表盘文本标注 ==================== + private DialTextAnnotation upSpeedText; // 上行速度文本标注 + private DialTextAnnotation downSpeedText; // 下行速度文本标注 + private DialTextAnnotation upPPSText; // 上行包速率文本标注 + private DialTextAnnotation downPPSText; // 下行包速率文本标注 + private DialTextAnnotation backplaneDelayText; + private DialTextAnnotation backplanePPSText; + + // ==================== UI组件 ==================== + private YScrollPane ysp, yspc; // 可垂直滚动的面板 + private JTextField devicesOnline; // 在线设备数显示 + private JTextField textField; // 通用文本框 + private JTextField addressField; // 地址显示框 + private JTextField addressFieldSet; // 地址设置框 + private JTextField asnFieldSet; // ASN设置框 + private JTextField tunDeviceName; // 虚拟网卡名称设置框 + private NetworkGraphPanel graph; // 网络图面板 + private JTextField textFieldLocate; // 定位地址输入框 + private JTextField asnField2; // ASN显示框 + private JTextArea dnsAreaSet; // DNS服务器设置区域 + private JComboBox comboCongress; // 拥塞控制算法选择框 + private JTextField tcpListeningSet; // TCP监听设置 + private JTextField udpListeningSet; // UDP监听设置 + private JTextArea openLineTabelSet; // 开放线路表设置 + private JTextArea connectLineTabelSet; // 自动连接线路表设置 + private JComboBox comboLang; // 语言选择框 + private XDefaultListModel nilsimdl; // 网络接口排除列表模型 + private JTextField textFieldTime; // 当前时间显示框 + private JTextArea ntpServerSet; // NTP服务器设置区域 + private JCheckBox denyBroadcast; + private JCheckBox denyQuery; + private ClosableTabbedPane tabbedPane; // 可关闭的标签页面板 + private JCheckBox nogui; + + // ==================== 配置和回调 ==================== + private KLALBConfig config; // 配置文件 + private Consumer saveComsumer; // 保存配置的回调函数 + + // ==================== 尺寸常量 ==================== + private Dimension dashSize = new Dimension((int) (145 * 0.7), (int) (165 * 0.7)); // 仪表盘尺寸 + + // ==================== 菜单项 ==================== + private JCheckBoxMenuItem showoffline; // 显示离线设备菜单项 + private SliderSettingItem linkConnectionsCount; + private SliderSettingItem nagleDelayTime; + private SliderSettingItem linkNagleDelayTime; + private SliderSettingItem delayHbound; + private SliderSettingItem delayLbound; + private ComboSettingItem congestions; + + // ==================== 构造方法 ==================== + /** + * 默认构造方法,使用默认标题 + * @param kpcje KLALB控制器 + */ + public KLALBStateGUI3(KLALBController kpcje) { + this(kpcje, CONST.klalb + " " + UIEnv.getRsb().getString("srv6acc") + " V" + CONST.klalbver); + } + + /** + * 主构造方法 + * @param kc KLALB控制器 + * @param title 窗口标题 + */ + public KLALBStateGUI3(KLALBController kc, String title) { + initUI(kc, title); + initSystemTray(); + initTimers(kc); + } + + // ==================== UI初始化方法 ==================== + /** + * 初始化UI界面 + */ + private void initUI(KLALBController kc, String title) { + // 设置窗口基本属性 + setIconImage(UIEnv.getIcon()); + setTitleColor(UIEnv.getDefaultTitleColor()); + getContentPane().setBackground(UIEnv.getDefaultBackgroundColor()); + getTitlelabel().setFont(UIEnv.getFont().deriveFont(17.0f)); + getTitlepanel().setBorder(new LineBorder(Color.LIGHT_GRAY)); + getTitlelabel().setForeground(Color.WHITE); + + // 创建标签页面板 + tabbedPane = new ClosableTabbedPane(JTabbedPane.TOP); + getContentPane().add(tabbedPane, BorderLayout.CENTER); + + // 创建网络图面板 + createNetworkGraphPanel(kc); + + + // 创建仪表盘面板 + createDashboardPanel(kc); + + // 创建远程线路面板 + createRemoteLinesPanel(kc); + + // 创建设置面板 + createSettingsPanel(); + + // 创建菜单栏 + createMenuBar(); + + // 设置窗口属性 + setTitle(title); + setSize(1200, 780); + setLocationRelativeTo(null); + } + /** + * 创建仪表盘面板 + */ + private void createDashboardPanel(KLALBController kc) { + JPanel panel_3 = new JPanel(); + panel_3.setBackground(Color.WHITE); + panel_3.setOpaque(false); + // 创建图标 + Icon icon = createIcon("/assets/dashboard.png", 15, 15); + tabbedPane.addTab(UIEnv.getRsb().getString("dashboard"), icon, panel_3, null, false); + panel_3.setLayout(new BorderLayout()); + + // 添加时间显示 + createTimeInfoPanel(panel_3); + + JPanel panel_4=new JPanel(); + panel_4.setOpaque(false); + panel_4.setLayout(new FlowLayout(FlowLayout.LEADING)); + panel_3.add(panel_4,BorderLayout.CENTER); + + // 添加上行下行速度仪表盘 + createSpeedDials(panel_4); + + // 添加上行下行包速率仪表盘 + createPPSDials(panel_4); + + //添加背板仪表盘 + createBackplaneDials(panel_4); + } + /** + * 创建网络图面板 + */ + private void createNetworkGraphPanel(KLALBController kc) { + JPanel panel_3 = new JPanel(); + panel_3.setBackground(Color.WHITE); + + // 创建图标 + Icon icon = createIcon("/assets/graph.png", 15, 15); + tabbedPane.addTab(UIEnv.getRsb().getString("networkgraph"), icon, panel_3, null, false); + panel_3.setLayout(new BorderLayout(0, 0)); + + // 创建顶部控制面板 + JPanel panel_4 = new JPanel(); + panel_3.add(panel_4, BorderLayout.NORTH); + panel_4.setLayout(new BorderLayout(0, 0)); + + // 地址定位输入框 + textFieldLocate = new JTextField(); + panel_4.add(textFieldLocate, BorderLayout.CENTER); + textFieldLocate.setColumns(10); + + // 创建网络图面板 + graph = new NetworkGraphPanel(kc, this); + graph.setOpaque(false); + JScrollPane jsp = new JScrollPane(); + jsp.setWheelScrollingEnabled(false); + jsp.setViewportView(graph); + initEventListeners(kc,jsp); + + // 添加鼠标滚轮缩放支持 + addGraphZoomSupport(jsp); + + // 创建定位按钮 + JButton btnLocate = new JButton(UIEnv.getRsb().getString("find")); + btnLocate.addActionListener(e -> locateAddressInGraph(jsp)); + panel_4.add(btnLocate, BorderLayout.EAST); + + // 创建首页按钮 + JButton btnHome = new JButton(UIEnv.getRsb().getString("home")); + btnHome.addActionListener(e -> { + textFieldLocate.setText(addressField.getText()); + btnLocate.doClick(); + }); + panel_4.add(btnHome, BorderLayout.WEST); + + // 添加网络图到面板 + panel_3.add(jsp, BorderLayout.CENTER); + + // 创建底部面板 + JPanel panel_4_1 = new JPanel(); + panel_3.add(panel_4_1, BorderLayout.SOUTH); + panel_4_1.setLayout(new BorderLayout(0, 0)); + + // 添加回车键监听 + textFieldLocate.addKeyListener(createEnterKeyListener(btnLocate)); + + + + // 创建信息面板 + JPanel panelp = new JPanel(); + panelp.setOpaque(false); + panel_4_1.add(panelp, BorderLayout.CENTER); + panelp.setLayout(new GridLayout(1, 2, 0, 0)); + + // 添加在线设备显示 + createOnlineDevicesPanel(panelp); + // 添加IP地址显示 + createAddressInfoPanel(panelp); + + + + } + + /** + * 为网络图添加缩放支持 + */ + private void addGraphZoomSupport(JScrollPane jsp) { + graph.addMouseWheelListener(new MouseWheelListener() { + private double scaleidx = 1; + + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + int val = e.getWheelRotation(); + double scaleidxold = scaleidx; + scaleidx *= Math.pow(1.1, val); + + // 限制缩放范围 + scaleidx = Math.max(0.1, Math.min(5, scaleidx)); + + double pow = scaleidx / scaleidxold; + Point pos = jsp.getViewport().getViewPosition(); + double canvasX = e.getX(); + double canvasY = e.getY(); + double w = graph.getWidth(); + double h = graph.getHeight(); + + // 计算缩放中心点 + double percentX = canvasX / w; + double percentY = canvasY / h; + graph.setScale(scaleidx); + graph.updateBounds(); + + // 调整视图位置以保持缩放中心 + double newcanvasX = percentX * w * pow; + double newcanvasY = percentY * h * pow; + double dx = newcanvasX - canvasX; + double dy = newcanvasY - canvasY; + pos.x += dx; + pos.y += dy; + jsp.getViewport().setViewPosition(pos); + } + }); + } + + /** + * 在网络图中定位地址 + */ + private void locateAddressInGraph(JScrollPane jsp) { + String text = textFieldLocate.getText(); + try { + GraphNode node = graph.getNodes().get(new IPv6Address((Inet6Address) InetAddress.getByName(text))); + if (node == null) { + JOptionPane.showMessageDialog(KLALBStateGUI3.this, "Address not found", + UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); + } else { + Point pos = new Point(); + graph.updateBounds(); + Dimension dim = jsp.getViewport().getExtentSize(); + // 计算节点在视口中的位置 + pos.x = (int) ((node.getX() + graph.getTranslateX()) * graph.getScale() - dim.width / 2); + pos.y = (int) ((node.getY() + graph.getTranslateY()) * graph.getScale() - dim.height / 2); + jsp.getViewport().setViewPosition(pos); + } + } catch (UnknownHostException e1) { + JOptionPane.showMessageDialog(KLALBStateGUI3.this, "Input format error", + UIEnv.getRsb().getString("error"), JOptionPane.ERROR_MESSAGE); + e1.printStackTrace(); + } + } + + /** + * 创建速度仪表盘 + */ + private void createSpeedDials(JPanel dashs) { + // 上行速度仪表盘 + upSpeed = new DefaultValueDataset(0); + upDataSpeed = new DefaultValueDataset(0); + DialPanel dialup=new DialPanel(CONST.dialwidth, UIEnv.getRsb().getString("uploadspeed"), upSpeed, upDataSpeed, Color.RED, new Color(127, 0, 0)); + dialup.addDefaultDialRanges(); + upSpeedText =dialup.getTextAnnotation(); + + + dashs.add(dialup); + + // 下行速度仪表盘 + downSpeed = new DefaultValueDataset(0); + downDataSpeed = new DefaultValueDataset(0); + DialPanel dialdown=new DialPanel(CONST.dialwidth, UIEnv.getRsb().getString("downloadspeed"), downSpeed, downDataSpeed, Color.GREEN, new Color(0, 127, 0)); + dialdown.addDefaultDialRanges(); + downSpeedText =dialdown.getTextAnnotation(); + + dashs.add(dialdown); + } + + /** + * 创建包速率仪表盘 + */ + private void createPPSDials(JPanel dashs) { + // 上行包速率仪表盘 + upPPS = new DefaultValueDataset(0); + upDataPPS = new DefaultValueDataset(0); + DialPanel dialupPPS=new DialPanel(CONST.dialwidth, UIEnv.getRsb().getString("uploadpps"), upPPS, upDataPPS, Color.RED, new Color(127, 0, 0)); + dialupPPS.addDefaultDialRanges(); + upPPSText = dialupPPS.getTextAnnotation(); + + dashs.add(dialupPPS); + + // 下行包速率仪表盘 + downPPS = new DefaultValueDataset(0); + downDataPPS = new DefaultValueDataset(0); + DialPanel dialdownPPS=new DialPanel(CONST.dialwidth, UIEnv.getRsb().getString("downloadpps"), downPPS, downDataPPS, Color.GREEN, new Color(0, 127, 0)); + dialdownPPS.addDefaultDialRanges(); + downPPSText = dialdownPPS.getTextAnnotation(); + + dashs.add(dialdownPPS); + } + + /** + * 创建背板仪表盘 + */ + private void createBackplaneDials(JPanel dashs) { + // 背板转发延迟仪表盘 + backplaneDelay = new DefaultValueDataset(0); + DialPanel dialupPPS=new DialPanel(CONST.dialwidth, UIEnv.getRsb().getString("backplanedelay"), backplaneDelay, null, Color.BLUE, new Color(0, 0, 127)); + // 绿色范围: 0-1% + StandardDialRange greenRange = new StandardDialRange(0, 1, Color.GREEN); + dialupPPS.addDialRange( greenRange); - JPanel panel_5 = new JPanel(); - panel_5.setOpaque(false); - panel_5.setBorder(new LineBorder(Color.GRAY)); - panelp.add(panel_5); - panel_5.setLayout(new BorderLayout(0, 0)); + // 黄色范围: 1-10% + StandardDialRange yellowRange = new StandardDialRange(1, 10, Color.YELLOW); + dialupPPS.addDialRange( yellowRange); - JLabel jlb_1 = new JLabel(UIEnv.getRsb().getString("currenttime")); - jlb_1.setHorizontalAlignment(SwingConstants.CENTER); - jlb_1.setFont(jlb_1.getFont().deriveFont(18.0f)); - panel_5.add(jlb_1, BorderLayout.WEST); - - textFieldTime = new JTextField(); - textFieldTime.setOpaque(false); - textFieldTime.setHorizontalAlignment(SwingConstants.CENTER); - textFieldTime.setFont(textFieldTime.getFont().deriveFont(18.0f)); - textFieldTime.setEditable(false); - textFieldTime.setColumns(10); - panel_5.add(textFieldTime, BorderLayout.CENTER); + // 红色范围: 10-50% + StandardDialRange redRange = new StandardDialRange(10, 50, Color.RED); + dialupPPS.addDialRange( redRange); + - JPanel linesPanel = new JPanel(); - linesPanel.setOpaque(false); - Icon icon2=null; - try { - icon2=new ImageIcon(ImageIO.read(KLALBStateGUI3.class.getResourceAsStream("/assets/ethnet.png")).getScaledInstance(15, 15,Image.SCALE_SMOOTH )); - }catch(IOException e) { - e.printStackTrace(); - } - tabbedPane.addTab (UIEnv.getRsb().getString("remotelines"), icon2, linesPanel,null,false); - linesPanel.setLayout(new BorderLayout()); + StandardDialRange redblackRange = new StandardDialRange(50, 100, new Color(128, 0, 0)); + dialupPPS.addDialRange( redblackRange); + backplaneDelayText = dialupPPS.getTextAnnotation(); - ysp = new YScrollPane(730); - ysp.setOpaque(false); - JPanel wv = ysp.getView(); - linesPanel.add(ysp, BorderLayout.CENTER); - JMenuBar menuBar = new JMenuBar(); - getContentPane().add(menuBar, BorderLayout.NORTH); + dashs.add(dialupPPS); - JMenu mnNewMenu = new JMenu(UIEnv.getRsb().getString("monitor")); - menuBar.add(mnNewMenu); - + // 背板PPS仪表盘 + backplanePPS = new DefaultValueDataset(0); + DialPanel backPPS=new DialPanel(CONST.dialwidth, UIEnv.getRsb().getString("backplanepps"), backplanePPS, null, Color.BLUE, new Color(0, 0, 127)); + backPPS.addDefaultDialRanges(); + backplanePPSText = backPPS.getTextAnnotation(); - showoffline = new JCheckBoxMenuItem(UIEnv.getRsb().getString("showofflines")); - mnNewMenu.add(showoffline); - - wv.addComponentListener(new ComponentListener() { + dashs.add(backPPS); + } - @Override - public void componentShown(ComponentEvent e) { - // TODO 自动生成的方法存根 + - } + - @Override - public void componentResized(ComponentEvent e) { - // TODO 自动生成的方法存根 + - } + /** + * 创建地址信息面板 + */ + private void createAddressInfoPanel(JPanel parent) { + JPanel panel_2x = new JPanel(); + panel_2x.setOpaque(false); + parent.add(panel_2x); + panel_2x.setLayout(new BorderLayout(0, 0)); + + JLabel lblNewLabel = new JLabel(UIEnv.getRsb().getString("ipv6addr")); + lblNewLabel.setFont(UIEnv.getFont().deriveFont(18.0f)); + lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); + panel_2x.add(lblNewLabel, BorderLayout.WEST); + + JPanel panel_2 = new JPanel(); + panel_2.setOpaque(false); + panel_2x.add(panel_2, BorderLayout.CENTER); + panel_2.setLayout(new BorderLayout(0, 0)); + + addressField = new JTextField(); + addressField.setEditable(false); + addressField.setHorizontalAlignment(SwingConstants.CENTER); + addressField.setOpaque(false); + addressField.setFont(UIEnv.getFont().deriveFont(18.0f)); + panel_2.add(addressField, BorderLayout.CENTER); + addressField.setColumns(10); + + // 添加复制按钮 + JButton btnCopyAddress = new JButton(UIEnv.getRsb().getString("copy")); + btnCopyAddress.addActionListener(e -> { + Toolkit.getDefaultToolkit().getSystemClipboard() + .setContents(new StringSelection(addressField.getText()), null); + }); + panel_2.add(btnCopyAddress, BorderLayout.EAST); + } - @Override - public void componentMoved(ComponentEvent e) { - repaint(); - } + /** + * 创建ASN信息面板 + */ + private void createASNInfoPanel(JPanel parent) { + JPanel panel_2x_1 = new JPanel(); + panel_2x_1.setOpaque(false); + parent.add(panel_2x_1); + panel_2x_1.setLayout(new BorderLayout(0, 0)); + + JLabel lblNewLabel_1 = new JLabel(UIEnv.getRsb().getString("asnumber")); + lblNewLabel_1.setFont(UIEnv.getFont().deriveFont(18.0f)); + panel_2x_1.add(lblNewLabel_1, BorderLayout.WEST); + + asnField2 = new JTextField(); + asnField2.setFont(UIEnv.getFont().deriveFont(18.0f)); + asnField2.setHorizontalAlignment(SwingConstants.CENTER); + asnField2.setEditable(false); + panel_2x_1.add(asnField2, BorderLayout.CENTER); + asnField2.setColumns(10); + + // 添加复制按钮 + JButton btnCopyASN = new JButton(UIEnv.getRsb().getString("copy")); + btnCopyASN.addActionListener(e -> { + Toolkit.getDefaultToolkit().getSystemClipboard() + .setContents(new StringSelection(asnField2.getText()), null); + }); + panel_2x_1.add(btnCopyASN, BorderLayout.EAST); + } - @Override - public void componentHidden(ComponentEvent e) { - // TODO 自动生成的方法存根 + /** + * 创建在线设备面板 + */ + private void createOnlineDevicesPanel(JPanel parent) { + JPanel panel = new JPanel(); + panel.setOpaque(false); + panel.setBorder(new LineBorder(Color.GRAY)); + parent.add(panel); + panel.setLayout(new BorderLayout(0, 0)); + + JLabel jlb = new JLabel(UIEnv.getRsb().getString("onlinedevices")); + jlb.setHorizontalAlignment(SwingConstants.CENTER); + jlb.setFont(UIEnv.getFont().deriveFont(18.0f)); + panel.add(jlb, BorderLayout.WEST); + + devicesOnline = new JTextField(); + devicesOnline.setOpaque(false); + devicesOnline.setHorizontalAlignment(SwingConstants.CENTER); + devicesOnline.setFont(UIEnv.getFont().deriveFont(18.0f)); + devicesOnline.setEditable(false); + panel.add(devicesOnline, BorderLayout.CENTER); + devicesOnline.setColumns(10); + } - } - }); - setTitle(title); - setSize(1200, 780); - setLocationRelativeTo(null); + /** + * 创建时间信息面板 + */ + private void createTimeInfoPanel(JPanel parent) { + JPanel panel_5 = new JPanel(); + panel_5.setOpaque(false); + panel_5.setBorder(new LineBorder(Color.GRAY)); + parent.add(panel_5,BorderLayout.NORTH); + panel_5.setLayout(new BorderLayout(0, 0)); + + JLabel jlb_1 = new JLabel(UIEnv.getRsb().getString("currenttime")); + jlb_1.setHorizontalAlignment(SwingConstants.CENTER); + jlb_1.setFont(jlb_1.getFont().deriveFont(18.0f)); + panel_5.add(jlb_1, BorderLayout.WEST); + + textFieldTime = new JTextField(); + textFieldTime.setOpaque(false); + textFieldTime.setHorizontalAlignment(SwingConstants.CENTER); + textFieldTime.setFont(textFieldTime.getFont().deriveFont(18.0f)); + textFieldTime.setEditable(false); + textFieldTime.setColumns(10); + panel_5.add(textFieldTime, BorderLayout.CENTER); + } - // setVisible(true); - if (SystemTray.isSupported()) { - st = SystemTray.getSystemTray(); - ti = new TrayIcon(UIEnv.getIcon()); - ti.setImageAutoSize(true); - PopupMenu jpm = new PopupMenu(); - MenuItem mix = new MenuItem("open"); - mix.addActionListener(new ActionListener() { + /** + * 创建远程线路面板 + */ + private void createRemoteLinesPanel(KLALBController kc) { + JPanel linesPanel = new JPanel(); + linesPanel.setOpaque(false); + + Icon icon2 = createIcon("/assets/ethnet.png", 15, 15); + tabbedPane.addTab(UIEnv.getRsb().getString("remotelines"), icon2, linesPanel, null, false); + linesPanel.setLayout(new BorderLayout()); - @Override - public void actionPerformed(ActionEvent e) { - setVisible(true); - } - }); - jpm.add(mix); - MenuItem mi = new MenuItem("exit"); - mi.addActionListener(new ActionListener() { + // 创建滚动面板 + ysp = new YScrollPane(CONST.itemwidth + 5); + ysp.setOpaque(false); + JPanel wv = ysp.getView(); + linesPanel.add(ysp, BorderLayout.CENTER); + + // 添加组件监听器 + wv.addComponentListener(new ComponentListener() { + @Override + public void componentShown(ComponentEvent e) {} - @Override - public void actionPerformed(ActionEvent e) { - close(); - } - }); - jpm.add(mi); - ti.setPopupMenu(jpm); - try { - st.add(ti); - } catch (AWTException e1) { - e1.printStackTrace(); - } - ti.addActionListener((x) -> { - setVisible(true); - }); - } + @Override + public void componentResized(ComponentEvent e) {} - // repaint(); + @Override + public void componentMoved(ComponentEvent e) { + repaint(); + } - t3 = new Timer("监视器刷新线程", true); - t2 = new Timer("仪表盘刷新线程", true); - t = new Timer("状态刷新线程", true); - createRefreshTask(kc, ysp); + @Override + public void componentHidden(ComponentEvent e) {} + }); - JPanel panel_1 = new JPanel(); - panel_1.setOpaque(false); - linesPanel.add(panel_1, BorderLayout.NORTH); - panel_1.setLayout(new BorderLayout(0, 0)); + // 创建顶部控制面板 + JPanel panel_1 = new JPanel(); + panel_1.setOpaque(false); + linesPanel.add(panel_1, BorderLayout.NORTH); + panel_1.setLayout(new BorderLayout(0, 0)); - textField = new JTextField(); - panel_1.add(textField); - textField.setColumns(10); - textField.setToolTipText(UIEnv.getRsb().getString("lineaddressport")); + // 线路地址输入框 + textField = new JTextField(); + panel_1.add(textField, BorderLayout.CENTER); + textField.setColumns(10); + textField.setToolTipText(UIEnv.getRsb().getString("lineaddressport")); - JButton btnNewButton = new JButton(UIEnv.getRsb().getString("addline")); - btnNewButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - try { - kc.addRemoteLines(new MultipurposeSocketAddress(textField.getText())); - } catch (RuntimeException ex) { - JOptionPane.showMessageDialog(KLALBStateGUI3.this, "Input format error", "Error", - JOptionPane.ERROR_MESSAGE); - ex.printStackTrace(); - } - } - }); - panel_1.add(btnNewButton, BorderLayout.EAST); + // 添加线路按钮 + JButton btnNewButton = new JButton(UIEnv.getRsb().getString("addline")); + btnNewButton.addActionListener(e -> { + try { + kc.addRemoteLines(new MultipurposeSocketAddress(textField.getText())); + } catch (RuntimeException ex) { + JOptionPane.showMessageDialog(KLALBStateGUI3.this, "Input format error", "Error", + JOptionPane.ERROR_MESSAGE); + ex.printStackTrace(); + } + }); + panel_1.add(btnNewButton, BorderLayout.EAST); - JButton btnReconnect = new JButton(UIEnv.getRsb().getString("reconnectall")); - btnReconnect.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - kc.reconnectImmediately(); - } - }); - panel_1.add(btnReconnect, BorderLayout.WEST); - MouseAdapter ma = new MouseAdapter() { + // 重连所有按钮 + JButton btnReconnect = new JButton(UIEnv.getRsb().getString("reconnectall")); + btnReconnect.addActionListener(e -> kc.reconnectImmediately()); + panel_1.add(btnReconnect, BorderLayout.WEST); - private Point origin; + // 添加回车键监听 + textField.addKeyListener(createEnterKeyListener(btnNewButton)); + } - @Override - public void mousePressed(MouseEvent e) { - origin = new Point(e.getPoint()); - // System.out.println(e); - } + /** + * 创建设置面板 + */ + private void createSettingsPanel() { + yspc = new YScrollPane(CONST.itemwidth + 5); + yspc.setOpaque(false); + JPanel configsPanel = new JPanel(); + configsPanel.setLayout(new BorderLayout(0, 0)); + configsPanel.add(yspc); + + // 添加设置项 + addSettingItems(yspc); + + // 添加保存按钮 + JButton btnSave = new JButton(UIEnv.getRsb().getString("savesettings")); + btnSave.addActionListener(e -> saveConfig()); + yspc.add(btnSave, BorderLayout.SOUTH); + + Icon icon3 = createIcon("/assets/settings.png", 15, 15); + tabbedPane.addTab(UIEnv.getRsb().getString("settings"), icon3, configsPanel, null, false); + configsPanel.setOpaque(false); + } - @Override - public void mouseReleased(MouseEvent e) { - } + /** + * 创建菜单栏 + */ + private void createMenuBar() { + JMenuBar menuBar = new JMenuBar(); + getContentPane().add(menuBar, BorderLayout.NORTH); - @Override - public void mouseDragged(MouseEvent e) { - if (origin != null) { - // System.out.println(e); - // JViewport viewPort = (JViewport) - // SwingUtilities.getAncestorOfClass(JViewport.class, jsp); - // if (viewPort != null) { - int deltaX = origin.x - e.getX(); - int deltaY = origin.y - e.getY(); + JMenu mnNewMenu = new JMenu(UIEnv.getRsb().getString("monitor")); + menuBar.add(mnNewMenu); - Rectangle view = jsp.getViewport().getVisibleRect(); + showoffline = new JCheckBoxMenuItem(UIEnv.getRsb().getString("showofflines")); + mnNewMenu.add(showoffline); + } + + // ==================== 系统托盘初始化 ==================== + /** + * 初始化系统托盘 + */ + private void initSystemTray() { + if (SystemTray.isSupported()) { + st = SystemTray.getSystemTray(); + ti = new TrayIcon(UIEnv.getIcon()); + ti.setImageAutoSize(true); + + // 创建弹出菜单 + PopupMenu jpm = new PopupMenu(); + + // 打开菜单项 + MenuItem mix = new MenuItem("open"); + mix.addActionListener(e -> setVisible(true)); + jpm.add(mix); + + // 退出菜单项 + MenuItem mi = new MenuItem("exit"); + mi.addActionListener(e -> close()); + jpm.add(mi); + + ti.setPopupMenu(jpm); + + try { + st.add(ti); + } catch (AWTException e1) { + e1.printStackTrace(); + } + + // 添加托盘图标点击事件 + ti.addActionListener(x -> setVisible(true)); + } + } + + // ==================== 定时器初始化 ==================== + /** + * 初始化定时器 + */ + private void initTimers(KLALBController kc) { + t3 = new Timer("监视器刷新线程", true); + t2 = new Timer("仪表盘刷新线程", true); + t = new Timer("状态刷新线程", true); + + // 创建刷新任务 + createRefreshTask(kc, ysp); + } + + // ==================== 事件监听器初始化 ==================== + /** + * 初始化事件监听器 + */ + private void initEventListeners(KLALBController kc,JScrollPane jsp) { + // 创建鼠标拖拽监听器 + MouseAdapter ma = new MouseAdapter() { + private Point origin; + + @Override + public void mousePressed(MouseEvent e) { + origin = new Point(e.getPoint()); + } + + @Override + public void mouseReleased(MouseEvent e) {} + + @Override + public void mouseDragged(MouseEvent e) { + if (origin != null) { + int deltaX = origin.x - e.getX(); + int deltaY = origin.y - e.getY(); + + Rectangle view = jsp.getViewport().getVisibleRect(); view.x += deltaX; view.y += deltaY; jsp.getViewport().scrollRectToVisible(view); - // } - } - } + } + } + }; + + // 为网络图添加鼠标监听器 + graph.addMouseListener(ma); + graph.addMouseMotionListener(ma); + } - }; - yspc = new YScrollPane(730); - yspc.setOpaque(false); - JPanel configsPanel = new JPanel(); - configsPanel.setLayout(new BorderLayout(0, 0)); - configsPanel.add(yspc); - addSettingItems(yspc); - JButton btnSave = new JButton(UIEnv.getRsb().getString("savesettings")); - btnSave.addActionListener(new ActionListener() { + // ==================== 设置项添加 ==================== + /** + * 添加设置项到设置面板 + */ + private void addSettingItems(YScrollPane settings) { + // UI设置标题 + SettingItem siui = new SettingItem(UIEnv.getRsb().getString("uisettings"), + UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD), CONST.itemwidth, CONST.settingheight); + settings.getView().add(siui); + + // 语言设置 + ComboSettingItem lang = new ComboSettingItem(UIEnv.getRsb().getString("language"), + CONST.itemwidth, CONST.settingheight); + comboLang = lang.getComboBox(); + comboLang.addItem(Language.EN_US); + comboLang.addItem(Language.ZH_CN); + settings.getView().add(lang); + settings.updateScrool(); + + CheckBoxSettingItem noguic = new CheckBoxSettingItem(UIEnv.getRsb().getString("nogui"), + CONST.itemwidth, CONST.settingheight); + nogui=noguic.getCheckBox(); + settings.getView().add(noguic); + + // 虚拟网络设置标题 + SettingItem si = new SettingItem(UIEnv.getRsb().getString("virtualnetsettings"), + UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD), CONST.itemwidth, CONST.settingheight); + settings.getView().add(si); - public void actionPerformed(ActionEvent e) { - saveConfig(); - } - }); - yspc.add(btnSave, BorderLayout.SOUTH); - Icon icon3=null; - try { - icon3=new ImageIcon(ImageIO.read(KLALBStateGUI3.class.getResourceAsStream("/assets/settings.png")).getScaledInstance(15, 15,Image.SCALE_SMOOTH )); - }catch(IOException e) { - e.printStackTrace(); - } - tabbedPane.addTab (UIEnv.getRsb().getString("settings"), icon3, configsPanel,null,false); - configsPanel.setOpaque(false); - textField.addKeyListener(new KeyListener() { - - @Override - public void keyTyped(KeyEvent e) { - } - - @Override - public void keyReleased(KeyEvent e) { - } - - @Override - public void keyPressed(KeyEvent e) { - // TODO 自动生成的方法存根 - - if (e.getKeyCode() == KeyEvent.VK_ENTER) { - btnNewButton.doClick(); - } - } - }); - graph.addMouseListener(ma); - graph.addMouseMotionListener(ma); - } - private void saveConfig() { - if(config==null) { - config=new KLALBConfig(); - config.add(new KLALBControllerConfigItem("KLALBController")); - } - for (KLALBConfigItem item : config) { - if (item instanceof KLALBControllerConfigItem) { - KLALBControllerConfigItem kck = (KLALBControllerConfigItem) item; - - kck.setLanguage(((Language)comboLang.getSelectedItem()).name()); - - String ttext=addressFieldSet.getText().trim(); - if(ttext.equals("")) { - kck.setVirtualAddress(null); - }else { - try { - kck.setVirtualAddress(Inet6Address.getByName(ttext).getHostAddress()); - } catch (UnknownHostException e1) { - e1.printStackTrace(); - JOptionPane.showMessageDialog(this,UIEnv.getRsb().getString("invaildipv6addr") , UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); - return; - } - } - String[]splt=dnsAreaSet.getText().split("\n"); - Listiaddr=new ArrayList(); - boolean show=true; - for (int i = 0; i < splt.length; i++) { - try { - String str=splt[i].trim(); - if(!str.isEmpty()) - iaddr.add( Inet6Address.getByName(str)); - } catch (UnknownHostException e) { - e.printStackTrace(); - if(show) { - show=false; - JOptionPane.showMessageDialog(this,UIEnv.getRsb().getString("invailddnsserver") , UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); - return; - } - } - } - kck.setDNS(iaddr); - - String asntext=asnFieldSet.getText(); - if(asntext.equals("")) { - kck.setVirtualASN(null); - }else { - try { - kck.setVirtualASN(Long.parseLong(asntext)); - }catch (NumberFormatException e) { - e.printStackTrace(); - JOptionPane.showMessageDialog(this,UIEnv.getRsb().getString("invaildasnumber") , UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); - return; - } - } - - String tcptext=tcpListeningSet.getText(); - if(tcptext.equals("")) { - kck.setTCPListen(null); - }else { - try { - kck.setTCPListen(new MultipurposeSocketAddress(tcptext)); - }catch (RuntimeException e) { - e.printStackTrace(); - JOptionPane.showMessageDialog(this,UIEnv.getRsb().getString("invaildtcplisten") , UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); - return; - } - } - - String udptext=udpListeningSet.getText(); - if(udptext.equals("")) { - kck.setUDPListen(null); - }else { - try { - kck.setUDPListen(new MultipurposeSocketAddress(udptext)); - }catch (RuntimeException e) { - e.printStackTrace(); - JOptionPane.showMessageDialog(this,UIEnv.getRsb().getString("invaildudplisten") , UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); - return; - } - } - - String[]splt1=openLineTabelSet.getText().split("\n"); - Listiaddr1=new ArrayList(); - boolean show1=true; - for (int i = 0; i < splt1.length; i++) { - try { - String str=splt1[i].trim(); - if(!str.isEmpty()) - iaddr1.add( new MultipurposeSocketAddress(str)); - } catch (RuntimeException e) { - e.printStackTrace(); - if(show1) { - show1=false; - JOptionPane.showMessageDialog(this,UIEnv.getRsb().getString("invaildopenlinetable") , UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); - return; - } - } - } - kck.setLineTable(iaddr1); - - String[]splt11=connectLineTabelSet.getText().split("\n"); - Listiaddr11=new ArrayList(); - boolean show11=true; - for (int i = 0; i < splt11.length; i++) { - try { - String str=splt11[i].trim(); - if(!str.isEmpty()) - iaddr11.add( new MultipurposeSocketAddress(str)); - } catch (RuntimeException e) { - e.printStackTrace(); - if(show11) { - show11=false; - JOptionPane.showMessageDialog(this,UIEnv.getRsb().getString("invaildconnectlinetable") , UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); - return; - } - } - } - kck.setConnectLineTable(iaddr11); - - String[]splt111=ntpServerSet.getText().split("\n"); - Listiaddr111=new ArrayList(); - boolean show111=true; - for (int i = 0; i < splt111.length; i++) { - try { - String str=splt111[i].trim(); - if(!str.isEmpty()) - iaddr111.add( new MultipurposeSocketAddress(str)); - } catch (RuntimeException e) { - e.printStackTrace(); - if(show111) { - show111=false; - JOptionPane.showMessageDialog(this,UIEnv.getRsb().getString("invaildntpservertable") , UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); - return; - } - } - } - kck.setNtpServerTable(iaddr111); - - Listnie= new ArrayList<>(); - for(int i=0;i< nilsimdl.getSize();i++) { - nie.add(nilsimdl.getElementAt(i).getName()); - } - kck.setNetworkInterfaceExcepts(nie); - } - } - if(saveComsumer!=null) { - saveComsumer.accept(config); - JOptionPane.showMessageDialog(this,UIEnv.getRsb().getString("saveconfigsuccess")); - } - } - - private void addSettingItems(YScrollPane settings) { - - ComboSettingItem lang = new ComboSettingItem(UIEnv.getRsb().getString("language"), CONST.itemwidth, CONST.settingheight); - comboLang = lang.getComboBox(); - comboLang.addItem(Language.EN_US); - comboLang.addItem(Language.ZH_CN); - settings.getView().add(lang); - settings.updateScrool(); - - SettingItem si = new SettingItem(UIEnv.getRsb().getString("virtualnetsettings"), UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD), - CONST.itemwidth, CONST.settingheight); - settings.getView().add(si); - - TextSettingItem addr6 = new TextSettingItem(UIEnv.getRsb().getString("ipv6addr"), CONST.itemwidth, CONST.settingheight); - addressFieldSet = addr6.getTextField(); - settings.getView().add(addr6); - - TextAreaSettingItem dns = new TextAreaSettingItem(UIEnv.getRsb().getString("dnsserver"), CONST.itemwidth, CONST.settingheight * 5); - dnsAreaSet = dns.getTextArea(); - settings.getView().add(dns); - - TextSettingItem asn = new TextSettingItem(UIEnv.getRsb().getString("asnumber"), CONST.itemwidth, CONST.settingheight); - asnFieldSet = asn.getTextField(); - settings.getView().add(asn); - - SettingItem six = new SettingItem(UIEnv.getRsb().getString("linksettings"), UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD), - CONST.itemwidth, CONST.settingheight); - settings.getView().add(six); - - TextSettingItem tcpl = new TextSettingItem(UIEnv.getRsb().getString("tcplistening"), CONST.itemwidth, CONST.settingheight); - tcpListeningSet = tcpl.getTextField(); - settings.getView().add(tcpl); - - TextSettingItem udpl = new TextSettingItem(UIEnv.getRsb().getString("udplistening"), CONST.itemwidth, CONST.settingheight); - udpListeningSet = udpl.getTextField(); - settings.getView().add(udpl); - - TextAreaSettingItem olinet = new TextAreaSettingItem(UIEnv.getRsb().getString("openlinetable"), CONST.itemwidth, - CONST.settingheight * 5); - openLineTabelSet = olinet.getTextArea(); - settings.getView().add(olinet); - - TextAreaSettingItem clinet = new TextAreaSettingItem(UIEnv.getRsb().getString("autoconnectlinetable"), CONST.itemwidth, - CONST.settingheight * 5); - connectLineTabelSet = clinet.getTextArea(); - settings.getView().add(clinet); - - nilsimdl=new XDefaultListModel<>(); - NetworkInterfaceListSettingItem nilsi=new NetworkInterfaceListSettingItem(UIEnv.getRsb().getString("networkinterfaceexcept"), CONST.itemwidth, - CONST.settingheight * 5,nilsimdl); - settings.getView().add(nilsi); - - SettingItem hit = new SettingItem(UIEnv.getRsb().getString("timesyncsettings"), UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD), - CONST.itemwidth, CONST.settingheight); - settings.getView().add(hit); - - TextAreaSettingItem ntps = new TextAreaSettingItem(UIEnv.getRsb().getString("ntpservers"), CONST.itemwidth, - CONST.settingheight * 5); - ntpServerSet = ntps.getTextArea(); - settings.getView().add(ntps); - - SettingItem hi = new SettingItem(UIEnv.getRsb().getString("advancedsettings"), UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD), - CONST.itemwidth, CONST.settingheight); - settings.getView().add(hi); - - ComboSettingItem congress = new ComboSettingItem(UIEnv.getRsb().getString("congresscontrolalgorithm"), CONST.itemwidth, CONST.settingheight); - comboCongress = congress.getComboBox(); - comboCongress.addItem("BBR"); - comboCongress.addItem("Vegas"); - comboCongress.addItem("BBR-Vegas"); - settings.getView().add(congress); - settings.updateScrool(); - - - } - - private void createRefreshTask(KLALBController kc, YScrollPane ysp) { - if (tsk != null) { - tsk.cancel(); - } - tsk = new TimerTask() { - - @Override - public void run() { - Object[] kll; - kll = kc.getLines().toArray(); - - loop: for (int ix = 0; ix < kll.length; ix++) { - IPv6NetworkLink link=(IPv6NetworkLink) kll[ix]; - if(!(link instanceof KLALBRemoteLine)) { - continue; - } - KLALBRemoteLine ent = (KLALBRemoteLine) link; - /* - * if(ent.getMonitor().getState()!=MonitorData.ONLINE) { continue loop; } - */ - Component[] count = ysp.getView().getComponents(); - for (int i = 0; i < count.length; i++) { - Component tp = count[i]; - if (tp instanceof TPanel2) { - if (((TPanel2) tp).getTunnel().equals(ent)) { - tp.setVisible( - showoffline.isSelected() || ent.getMonitor().getState() == MonitorData.ONLINE); - continue loop; - } - } - } - TPanel2 tp = new TPanel2(ent, kc); - tp.setVisible(showoffline.isSelected() || ent.getMonitor().getState() == MonitorData.ONLINE); - ysp.getView().add(tp); - } - Component[] count = ysp.getView().getComponents(); - for (int i = 0; i < count.length; i++) { - Component tp = count[i]; - if (tp instanceof TPanel2) { - /* - * if((((TPanel2) tp).getTunnel().getMonitor().getState())!=MonitorData.ONLINE) - * { ysp.getView().remove(tp); continue; } - */ - if (kc.getLines().contains(((TPanel2) tp).getTunnel())) { - try { - if (tp.isVisible()) - ((TPanel2) tp).updateTraffic(); - } catch (RuntimeException e) { - e.printStackTrace(); - } - } else { - ysp.getView().remove(tp); - } - } - } - ysp.updateScrool(); - // repaint(); - } - }; - t.scheduleAtFixedRate(tsk, 500, 500); - if (tsk2 != null) { - tsk2.cancel(); - } - tsk2 = new TimerTask() { - - @Override - public void run() { - - if (isVisible()) { - double outload = kc.getLinkMonitor().getOutSpeed() * 100.0 / kc.getLinkMonitor().getOutSpeedMax2(); - if (Double.isFinite(outload)) { - upSpeedText.setLabel(KLALBUtils.convertIBUint(kc.getLinkMonitor().getOutSpeedAvg()) + "/s"); - upSpeed.setValue(Math.min(upSpeed.getValue().doubleValue() * 0.98 + outload * 0.02, 101.0)); - } - - double inload = kc.getLinkMonitor().getInSpeed() * 100.0 / kc.getLinkMonitor().getInSpeedMax2(); - if (Double.isFinite(inload)) { - downSpeedText.setLabel(KLALBUtils.convertIBUint(kc.getLinkMonitor().getInSpeedAvg()) + "/s"); - downSpeed.setValue(Math.min(downSpeed.getValue().doubleValue() * 0.98 + inload * 0.02, 101.0)); - } - - double outPPSload = kc.getLinkMonitor().getOutPPS() * 100.0 / kc.getLinkMonitor().getOutPPSMax2(); - if (Double.isFinite(outPPSload)) { - upPPSText.setLabel(KLALBUtils.convertUintDefalut(kc.getLinkMonitor().getOutPPSAvg()) + "PPS"); - upPPS.setValue(Math.min(upPPS.getValue().doubleValue() * 0.98 + outPPSload * 0.02, 101.0)); - } - - double inPPSload = kc.getLinkMonitor().getInPPS() * 100.0 / kc.getLinkMonitor().getInPPSMax2(); - if (Double.isFinite(inPPSload)) { - downPPSText.setLabel(KLALBUtils.convertUintDefalut(kc.getLinkMonitor().getInPPSAvg()) + "PPS"); - downPPS.setValue(Math.min(downPPS.getValue().doubleValue() * 0.98 + inPPSload * 0.02, 101.0)); - } - - double outload1 = kc.getDatatMonitor().getOutSpeed() * 100.0 / kc.getLinkMonitor().getOutSpeedMax2(); - if (Double.isFinite(outload1)) { - upDataSpeed - .setValue(Math.min(upDataSpeed.getValue().doubleValue() * 0.98 + outload1 * 0.02, 101.0)); - } - - double inload1 = kc.getDatatMonitor().getInSpeed() * 100.0 / kc.getLinkMonitor().getInSpeedMax2(); - if (Double.isFinite(inload1)) { - downDataSpeed - .setValue(Math.min(downDataSpeed.getValue().doubleValue() * 0.98 + inload1 * 0.02, 101.0)); - } - - double outPPSload1 = kc.getDatatMonitor().getOutPPS() * 100.0 / kc.getLinkMonitor().getOutPPSMax2(); - if (Double.isFinite(outPPSload1)) { - upDataPPS.setValue(Math.min(upDataPPS.getValue().doubleValue() * 0.98 + outPPSload1 * 0.02, 101.0)); - } - - double inPPSload1 = kc.getDatatMonitor().getInPPS() * 100.0 / kc.getLinkMonitor().getInPPSMax2(); - if (Double.isFinite(inPPSload1)) { - downDataPPS - .setValue(Math.min(downDataPPS.getValue().doubleValue() * 0.98 + inPPSload1 * 0.02, 101.0)); - } - - /* - * double - * outefi=kc.getDatatMonitor().getOutSpeedAvg2()*100.0D/kc.getLinkMonitor(). - * getOutSpeedAvg2(); if(Double.isFinite(outefi)) { - * upEfficiency.setValue(upEfficiency.getValue().doubleValue()*0.95+ - * outefi*0.05); upEfficiencyText.setLabel(String.format("%.1f", - * upEfficiency.getValue().doubleValue())+"%"); } - * - * double - * inefi=kc.getDatatMonitor().getInSpeedAvg2()*100.0D/kc.getLinkMonitor(). - * getInSpeedAvg2(); if(Double.isFinite(inefi)) { - * downEfficiency.setValue(downEfficiency.getValue().doubleValue()*0.95+ - * inefi*0.05); downEfficiencyText.setLabel(String.format("%.1f", - * downEfficiency.getValue().doubleValue())+"%"); } - */ - String contt = Long.toString(kc.getIpv6Router().getKlalbRouteProtol().getDevicesFound()); - if (!contt.equals(devicesOnline.getText())) { - devicesOnline.setText(contt); - } - String address = kc.getSelf().getAddress().getHostAddress(); - if (!address.equals(addressField.getText())) { - addressField.setText(address); - } - - String asnstr = Long.toString(kc.getIpv6Router().getASN()); - - if (!asnstr.equals(asnField2.getText())) { - asnField2.setText(asnstr); - } - HighAccuracyClock hac=kc.getClock(); - long delta=hac.getFrequency()-1000000000; - double ppm=delta/1000.0; - String ppmstr=String.format("%.2f", ppm); - if(delta>0) { - ppmstr="+"+ppmstr; - } - textFieldTime.setText(hac.toString()+" "+ppmstr+"ppm"); - } - } - }; - t2.scheduleAtFixedRate(tsk2, 100, 100); - - /*if(tsk3!=null) { - tsk3.cancel(); - } - tsk3=new TimerTask() { + // IPv6地址设置 + TextButtonSettingItem addr6 = new TextButtonSettingItem(UIEnv.getRsb().getString("ipv6addr"), + CONST.itemwidth, CONST.settingheight); + addr6.getButton().setText(UIEnv.getRsb().getString("random"));; + addr6.getButton().addActionListener(new ActionListener() { @Override - public void run() { - - if (isVisible()) { - } + public void actionPerformed(ActionEvent e) { + addr6.getTextField().setText(KLALBUtils.randomKLALBIPv6Address().toString()); } - }; - t2.scheduleAtFixedRate(tsk3, 20, 20);*/ + }); + addressFieldSet = addr6.getTextField(); + settings.getView().add(addr6); - - if (tsk5 != null) { - tsk5.cancel(); - } - tsk5 = new TimerTask() { + // DNS服务器设置 + TextAreaSettingItem dns = new TextAreaSettingItem(UIEnv.getRsb().getString("dnsserver"), + CONST.itemwidth, CONST.settingheight * 5); + dnsAreaSet = dns.getTextArea(); + settings.getView().add(dns); + // ASN设置 + TextSettingItem asn = new TextSettingItem(UIEnv.getRsb().getString("asnumber"), + CONST.itemwidth, CONST.settingheight); + asnFieldSet = asn.getTextField(); + settings.getView().add(asn); + + TextSettingItem tunName = new TextSettingItem(UIEnv.getRsb().getString("tunname"), + CONST.itemwidth, CONST.settingheight); + tunDeviceName = tunName.getTextField(); + settings.getView().add(tunName); + + // 链接设置标题 + SettingItem six = new SettingItem(UIEnv.getRsb().getString("linksettings"), + UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD), CONST.itemwidth, CONST.settingheight); + settings.getView().add(six); + + // TCP监听设置 + TextSettingItem tcpl = new TextSettingItem(UIEnv.getRsb().getString("tcplistening"), + CONST.itemwidth, CONST.settingheight); + tcpListeningSet = tcpl.getTextField(); + settings.getView().add(tcpl); + + // UDP监听设置 + TextSettingItem udpl = new TextSettingItem(UIEnv.getRsb().getString("udplistening"), + CONST.itemwidth, CONST.settingheight); + udpListeningSet = udpl.getTextField(); + settings.getView().add(udpl); + + // 开放线路表设置 + TextAreaSettingItem olinet = new TextAreaSettingItem(UIEnv.getRsb().getString("openlinetable"), + CONST.itemwidth, CONST.settingheight * 5); + openLineTabelSet = olinet.getTextArea(); + settings.getView().add(olinet); + + // 自动连接线路表设置 + TextAreaSettingItem clinet = new TextAreaSettingItem(UIEnv.getRsb().getString("autoconnectlinetable"), + CONST.itemwidth, CONST.settingheight * 5); + connectLineTabelSet = clinet.getTextArea(); + settings.getView().add(clinet); + + // 网络接口排除设置 + nilsimdl = new XDefaultListModel<>(); + NetworkInterfaceListSettingItem nilsi = new NetworkInterfaceListSettingItem( + UIEnv.getRsb().getString("networkinterfaceexcept"), CONST.itemwidth, + CONST.settingheight * 5, nilsimdl); + settings.getView().add(nilsi); + + linkConnectionsCount = new SliderSettingItem(UIEnv.getRsb().getString("linkconnectionscount"), + CONST.itemwidth, CONST.settingheight); + linkConnectionsCount.getSlider().setMaximum(10); + linkConnectionsCount.getSlider().setValue(1); + linkConnectionsCount.getSlider().setMinimum(1); + settings.getView().add(linkConnectionsCount); + ChangeListener cons= new ChangeListener() { + @Override - public void run() { - if (isVisible()) { - graph.loadNodes(); - for (int i = 0; i < 100; i++) { - graph.runPhy(); - } - graph.repaint(); - graph.revalidate(); - } + public void stateChanged(ChangeEvent e) { + int val=linkConnectionsCount.getSlider().getValue(); + linkConnectionsCount.getLabelx().setText(Integer.toString( val)); } }; - t.scheduleAtFixedRate(tsk5, 1000, 1000); - // setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - } + cons.stateChanged(null); + linkConnectionsCount.getSlider().addChangeListener(cons); + + // 时间同步设置标题 + SettingItem hit = new SettingItem(UIEnv.getRsb().getString("timesyncsettings"), + UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD), CONST.itemwidth, CONST.settingheight); + settings.getView().add(hit); + + // NTP服务器设置 + TextAreaSettingItem ntps = new TextAreaSettingItem(UIEnv.getRsb().getString("ntpservers"), + CONST.itemwidth, CONST.settingheight * 5); + ntpServerSet = ntps.getTextArea(); + settings.getView().add(ntps); + + // 安全设置标题 + SettingItem shi = new SettingItem(UIEnv.getRsb().getString("securitysettings"), + UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD), CONST.itemwidth, CONST.settingheight); + settings.getView().add(shi); + + CheckBoxSettingItem denyQueryc = new CheckBoxSettingItem(UIEnv.getRsb().getString("denyaddrquery"), + CONST.itemwidth, CONST.settingheight); + denyQuery=denyQueryc.getCheckBox(); + settings.getView().add(denyQueryc); + - public void loadConfig(KLALBConfig config) { - this.config = config; - for (KLALBConfigItem item : config) { - if (item instanceof KLALBControllerConfigItem) { - KLALBControllerConfigItem kck = (KLALBControllerConfigItem) item; - - String lg=kck.getLanguage(); - if(lg!=null) { - Language l=Language.valueOf( lg); - if(l!=null) { - comboLang.setSelectedItem(l); - } - } - String vaddr = kck.getVirtualAddress(); - if (vaddr != null) { - addressFieldSet.setText(vaddr); - } else { - addressFieldSet.setText(""); - } + CheckBoxSettingItem denyBroadcastc = new CheckBoxSettingItem(UIEnv.getRsb().getString("denyaddrbroadcast"), + CONST.itemwidth, CONST.settingheight); + denyBroadcast=denyBroadcastc.getCheckBox(); + settings.getView().add(denyBroadcastc); + + // 高级设置标题 + SettingItem hi = new SettingItem(UIEnv.getRsb().getString("advancedsettings"), + UIEnv.getFont().deriveFont(20.0f).deriveFont(Font.BOLD), CONST.itemwidth, CONST.settingheight); + settings.getView().add(hi); - List dns = kck.getDNS(); - String str=listToStr(dns); - - dnsAreaSet.setText(str); - Long vasn = kck.getVirtualASN(); - if (vasn != null) { - asnFieldSet.setText(vasn.toString()); - } else { - asnFieldSet.setText(""); - } - - MultipurposeSocketAddress mpat= kck.getTCPListen(); - if(mpat!=null) { - tcpListeningSet.setText(mpat.toString()); - }else { - tcpListeningSet.setText(""); - } - - MultipurposeSocketAddress mpau= kck.getUDPListen(); - if(mpau!=null) { - udpListeningSet.setText(mpau.toString()); - }else { - udpListeningSet.setText(""); - } - - List linet =kck.getLineTable(); - String str1=listToStr2(linet); - openLineTabelSet.setText(str1); - - List clinet =kck.getConnectLineTable(); - String str2=listToStr2(clinet); - connectLineTabelSet.setText(str2); - - List ntps =kck.getNtpServerTable(); - String str3=listToStr2(ntps); - ntpServerSet.setText(str3); - - List strexc=kck.getNetworkInterfaceExcepts(); - nilsimdl.clear(); - if(strexc!=null) { - for(String strexci:strexc) { - try { - nilsimdl.addElement(NetworkInterface.getByName(strexci)); - } catch (SocketException e) { - e.printStackTrace(); - } - } - } - + nagleDelayTime = new SliderSettingItem(UIEnv.getRsb().getString("transmitnagledelaytime"), + CONST.itemwidth, CONST.settingheight); + nagleDelayTime.getSlider().setMaximum(100); + nagleDelayTime.getSlider().setValue(10); + settings.getView().add(nagleDelayTime); + ChangeListener clhs= new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent e) { + int val=nagleDelayTime.getSlider().getValue(); + nagleDelayTime.getLabelx().setText(String.format("%.2f",val/10.0)); } - } - } - - private String listToStr(List dns) { - StringBuilder sbdr = new StringBuilder(); - if (dns != null) - for (InetAddress addrdns : dns) { - sbdr.append(addrdns.getHostAddress()); - sbdr.append('\n'); + }; + clhs.stateChanged(null); + nagleDelayTime.getSlider().addChangeListener(clhs); + + + linkNagleDelayTime = new SliderSettingItem(UIEnv.getRsb().getString("linknagledelaytime"), + CONST.itemwidth, CONST.settingheight); + linkNagleDelayTime.getSlider().setMaximum(100); + linkNagleDelayTime.getSlider().setValue(10); + settings.getView().add(linkNagleDelayTime); + ChangeListener clhse= new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent e) { + int val=linkNagleDelayTime.getSlider().getValue(); + linkNagleDelayTime.getLabelx().setText(String.format("%.2f",val/10.0)); } - return sbdr.toString(); - } + }; + clhse.stateChanged(null); + linkNagleDelayTime.getSlider().addChangeListener(clhse); + + congestions = new ComboSettingItem(UIEnv.getRsb().getString("congresscontrolalgorithm"), + CONST.itemwidth, CONST.settingheight); + comboCongress = congestions.getComboBox(); + comboCongress.addItem("BBR"); + comboCongress.addItem("Vegas2"); + settings.getView().add(congestions); + settings.updateScrool(); + + + + delayHbound = new SliderSettingItem(UIEnv.getRsb().getString("delayupperbound"), + CONST.itemwidth, CONST.settingheight); + delayHbound.getSlider().setMaximum(1000); + delayHbound.getSlider().setValue(200); + settings.getView().add(delayHbound); + - private String listToStr2(List objs) { - StringBuilder sbdr = new StringBuilder(); - if (objs != null) - for (Object addrdns : objs) { - sbdr.append(addrdns); - sbdr.append('\n'); + delayLbound = new SliderSettingItem(UIEnv.getRsb().getString("delaylowerbound"), + CONST.itemwidth, CONST.settingheight); + delayLbound.getSlider().setMaximum(500); + delayLbound.getSlider().setValue(150); + settings.getView().add(delayLbound); + + ChangeListener clh= new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent e) { + int val=delayHbound.getSlider().getValue(); + if(valdelayHbound.getSlider().getValue()) { + delayHbound.getSlider().setValue(val); + } + delayLbound.getLabelx().setText(String.format("%.3f",1.0+val/1000.0)); + } + }; + cll.stateChanged(null); + delayLbound.getSlider().addChangeListener(cll); + } - public static void main(String[] args) throws IOException, InterruptedException {// ,new - // MultipurposeSocketAddress("frp-mom.top:22226"),new - // MultipurposeSocketAddress("0.0.0.0:26468") - KLALBStateGUI3 kcg = new KLALBStateGUI3(new KLALBController()); - kcg.setVisible(true); - // Thread.sleep(10000); - // kcg.close(); - } -} + // ==================== 配置保存方法 ==================== + /** + * 保存配置到文件 + */ + private void saveConfig() { + if (config == null) { + config = new KLALBConfig(); + config.add(new KLALBControllerConfigItem("KLALBController")); + } + + for (KLALBConfigItem item : config) { + if (item instanceof KLALBControllerConfigItem) { + KLALBControllerConfigItem kck = (KLALBControllerConfigItem) item; + + // 保存语言设置 + kck.setLanguage(((Language) comboLang.getSelectedItem()).name()); + + kck.setNogui(nogui.isSelected()); + + // 保存IPv6地址 + String ttext = addressFieldSet.getText().trim(); + if (ttext.equals("")) { + kck.setVirtualAddress(null); + } else { + try { + kck.setVirtualAddress(Inet6Address.getByName(ttext).getHostAddress()); + } catch (UnknownHostException e1) { + e1.printStackTrace(); + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("invaildipv6addr"), + UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); + return; + } + } + + // 保存DNS服务器列表 + String[] splt = dnsAreaSet.getText().split("\n"); + List iaddr = new ArrayList<>(); + boolean show = true; + for (String str : splt) { + try { + str = str.trim(); + if (!str.isEmpty()) + iaddr.add(Inet6Address.getByName(str)); + } catch (UnknownHostException e) { + e.printStackTrace(); + if (show) { + show = false; + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("invailddnsserver"), + UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); + return; + } + } + } + kck.setDNS(iaddr); + + // 保存ASN + String asntext = asnFieldSet.getText(); + if (asntext.equals("")) { + kck.setVirtualASN(null); + } else { + try { + kck.setVirtualASN(Long.parseLong(asntext)); + } catch (NumberFormatException e) { + e.printStackTrace(); + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("invaildasnumber"), + UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); + return; + } + } + + String tunNameText=tunDeviceName.getText(); + if(tunNameText.equals("")) { + kck.setTUNName(null); + }else { + kck.setTUNName(tunNameText); + } + + // 保存TCP监听设置 + String tcptext = tcpListeningSet.getText(); + if (tcptext.equals("")) { + kck.setTCPListen(null); + } else { + try { + kck.setTCPListen(new MultipurposeSocketAddress(tcptext)); + } catch (RuntimeException e) { + e.printStackTrace(); + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("invaildtcplisten"), + UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); + return; + } + } + + // 保存UDP监听设置 + String udptext = udpListeningSet.getText(); + if (udptext.equals("")) { + kck.setUDPListen(null); + } else { + try { + kck.setUDPListen(new MultipurposeSocketAddress(udptext)); + } catch (RuntimeException e) { + e.printStackTrace(); + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("invaildudplisten"), + UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); + return; + } + } + + // 保存开放线路表 + String[] splt1 = openLineTabelSet.getText().split("\n"); + List iaddr1 = new ArrayList<>(); + boolean show1 = true; + for (String str : splt1) { + try { + str = str.trim(); + if (!str.isEmpty()) + iaddr1.add(new MultipurposeSocketAddress(str)); + } catch (RuntimeException e) { + e.printStackTrace(); + if (show1) { + show1 = false; + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("invaildopenlinetable"), + UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); + return; + } + } + } + kck.setLineTable(iaddr1); + + // 保存自动连接线路表 + String[] splt11 = connectLineTabelSet.getText().split("\n"); + List iaddr11 = new ArrayList<>(); + boolean show11 = true; + for (String str : splt11) { + try { + str = str.trim(); + if (!str.isEmpty()) + iaddr11.add(new MultipurposeSocketAddress(str)); + } catch (RuntimeException e) { + e.printStackTrace(); + if (show11) { + show11 = false; + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("invaildconnectlinetable"), + UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); + return; + } + } + } + kck.setConnectLineTable(iaddr11); + + // 保存NTP服务器表 + String[] splt111 = ntpServerSet.getText().split("\n"); + List iaddr111 = new ArrayList<>(); + boolean show111 = true; + for (String str : splt111) { + try { + str = str.trim(); + if (!str.isEmpty()) + iaddr111.add(new MultipurposeSocketAddress(str)); + } catch (RuntimeException e) { + e.printStackTrace(); + if (show111) { + show111 = false; + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("invaildntpservertable"), + UIEnv.getRsb().getString("warning"), JOptionPane.WARNING_MESSAGE); + return; + } + } + } + kck.setNtpServerTable(iaddr111); + + // 保存网络接口排除列表 + List nie = new ArrayList<>(); + for (int i = 0; i < nilsimdl.getSize(); i++) { + nie.add(nilsimdl.getElementAt(i).getName()); + } + kck.setNetworkInterfaceExcepts(nie); + + kck.setLinkConnectionsCount(linkConnectionsCount.getSlider().getValue()); + + kck.setDenyLineTableQuery(denyQuery.isSelected()); + + kck.setDenyLineTableBroadcast(denyBroadcast.isSelected()); + + kck.setCongestionAlgorithm((String) congestions.getComboBox().getSelectedItem()); + + kck.setDelayUpperBound(1.0+delayHbound.getSlider().getValue()/1000.0); + + kck.setDelayLowerBound(1.0+delayLbound.getSlider().getValue()/1000.0); + + kck.setNagleDelayTime(nagleDelayTime.getSlider().getValue()*100000L); + + kck.setLinkNagleDelayTime(linkNagleDelayTime.getSlider().getValue()*100000L); + } + } + + // 调用保存回调 + if (saveComsumer != null) { + saveComsumer.accept(config); + JOptionPane.showMessageDialog(this, UIEnv.getRsb().getString("saveconfigsuccess")); + } + } + + // ==================== 刷新任务创建 ==================== + /** + * 创建刷新任务 + */ + private void createRefreshTask(KLALBController kc, YScrollPane ysp) { + // 线路状态刷新任务 + if (tsk != null) { + tsk.cancel(); + } + tsk = new TimerTask() { + @Override + public void run() { + Object[] kll = kc.getLines().toArray(); + + // 遍历所有线路,更新或添加TPanel2 + for (Object obj : kll) { + IPv6NetworkLink link = (IPv6NetworkLink) obj; + if (!(link instanceof KLALBRemoteLine)) { + continue; + } + KLALBRemoteLine ent = (KLALBRemoteLine) link; + + Component[] count = ysp.getView().getComponents(); + boolean found = false; + + // 查找是否已有对应线路的面板 + for (Component tp : count) { + if (tp instanceof TPanel2) { + if (((TPanel2) tp).getTunnel().equals(ent)) { + tp.setVisible(showoffline.isSelected() || ( + ent.getMonitor().getState() != MonitorData.DOWN)); + found = true; + break; + } + } + } + + // 如果没有找到,创建新面板 + if (!found) { + TPanel2 tp = new TPanel2(ent, kc); + tp.setVisible(showoffline.isSelected() || ( + ent.getMonitor().getState()!= MonitorData.DOWN)); + ysp.getView().add(tp); + } + } + + // 更新所有面板并移除不存在的线路 + Component[] count = ysp.getView().getComponents(); + for (Component tp : count) { + if (tp instanceof TPanel2) { + if (kc.getLines().contains(((TPanel2) tp).getTunnel())) { + try { + if (tp.isVisible()) + ((TPanel2) tp).updateTraffic(); + } catch (RuntimeException e) { + e.printStackTrace(); + } + } else { + ysp.getView().remove(tp); + } + } + } + + ysp.updateScrool(); + } + }; + t.scheduleAtFixedRate(tsk, 1000, 1000); + + // 仪表盘数据刷新任务 + if (tsk2 != null) { + tsk2.cancel(); + } + tsk2 = new TimerTask() { + @Override + public void run() { + if (isVisible()) { + updateDashboardData(kc); + } + } + }; + t2.scheduleAtFixedRate(tsk2, 100, 100); + + // 网络图刷新任务 + if (tsk5 != null) { + tsk5.cancel(); + } + tsk5 = new TimerTask() { + @Override + public void run() { + if (isVisible()) { + graph.loadNodes(); + for (int i = 0; i < 100; i++) { + graph.runPhy(); + } + graph.repaint(); + graph.revalidate(); + } + } + }; + t.scheduleAtFixedRate(tsk5, 1000, 1000); + } + + /** + * 更新仪表盘数据 + */ + private void updateDashboardData(KLALBController kc) { + // 更新上行速度 + double outload = kc.getLinkMonitor().getOutSpeed() * 100.0 / kc.getLinkMonitor().getOutSpeedMax(); + if (Double.isFinite(outload)) { + upSpeedText.setLabel(KLALBUtils.convertIBUint(kc.getLinkMonitor().getOutSpeed()) + "/s"); + upSpeed.setValue(Math.min(upSpeed.getValue().doubleValue() * 0.98 + outload * 0.02, 101.0)); + } + + // 更新下行速度 + double inload = kc.getLinkMonitor().getInSpeed() * 100.0 / kc.getLinkMonitor().getInSpeedMax(); + if (Double.isFinite(inload)) { + downSpeedText.setLabel(KLALBUtils.convertIBUint(kc.getLinkMonitor().getInSpeed()) + "/s"); + downSpeed.setValue(Math.min(downSpeed.getValue().doubleValue() * 0.98 + inload * 0.02, 101.0)); + } + + // 更新上行包速率 + double outPPSload = kc.getLinkMonitor().getOutPPS() * 100.0 / kc.getLinkMonitor().getOutPPSMax(); + if (Double.isFinite(outPPSload)) { + upPPSText.setLabel(KLALBUtils.convertUintDefalut(kc.getLinkMonitor().getOutPPS()) + "PPS"); + upPPS.setValue(Math.min(upPPS.getValue().doubleValue() * 0.98 + outPPSload * 0.02, 101.0)); + } + + // 更新下行包速率 + double inPPSload = kc.getLinkMonitor().getInPPS() * 100.0 / kc.getLinkMonitor().getInPPSMax(); + if (Double.isFinite(inPPSload)) { + downPPSText.setLabel(KLALBUtils.convertUintDefalut(kc.getLinkMonitor().getInPPS()) + "PPS"); + downPPS.setValue(Math.min(downPPS.getValue().doubleValue() * 0.98 + inPPSload * 0.02, 101.0)); + } + + // 更新上行数据速度 + double outload1 = kc.getDatatMonitor().getOutSpeed() * 100.0 / kc.getLinkMonitor().getOutSpeedMax(); + if (Double.isFinite(outload1)) { + upDataSpeed.setValue(Math.min(upDataSpeed.getValue().doubleValue() * 0.98 + outload1 * 0.02, 101.0)); + } + + // 更新下行数据速度 + double inload1 = kc.getDatatMonitor().getInSpeed() * 100.0 / kc.getLinkMonitor().getInSpeedMax(); + if (Double.isFinite(inload1)) { + downDataSpeed.setValue(Math.min(downDataSpeed.getValue().doubleValue() * 0.98 + inload1 * 0.02, 101.0)); + } + + // 更新上行数据包速率 + double outPPSload1 = kc.getDatatMonitor().getOutPPS() * 100.0 / kc.getLinkMonitor().getOutPPSMax(); + if (Double.isFinite(outPPSload1)) { + upDataPPS.setValue(Math.min(upDataPPS.getValue().doubleValue() * 0.98 + outPPSload1 * 0.02, 101.0)); + } + + // 更新下行数据包速率 + double inPPSload1 = kc.getDatatMonitor().getInPPS() * 100.0 / kc.getLinkMonitor().getInPPSMax(); + if (Double.isFinite(inPPSload1)) { + downDataPPS.setValue(Math.min(downDataPPS.getValue().doubleValue() * 0.98 + inPPSload1 * 0.02, 101.0)); + } + + // 更新在线设备数 + String contt = Long.toString(kc.getIpv6Router().getKlalbRouteProtol().getDevicesFound()); + if (!contt.equals(devicesOnline.getText())) { + devicesOnline.setText(contt); + } + + // 更新IP地址显示 + String address = kc.getSelf().getAddress().toString(); + if (!address.equals(addressField.getText())) { + addressField.setText(address); + } +/* + // 更新ASN显示 + String asnstr = Long.toString(kc.getIpv6Router().getASN()); + if (!asnstr.equals(asnField2.getText())) { + asnField2.setText(asnstr); + } +*/ + // 更新时间显示 + HighAccuracyClock hac = kc.getClock(); + long delta = hac.getFrequency() - 1000000000; + double ppm = delta / 1000.0; + String ppmstr = String.format("%.2f", ppm); + if (delta > 0) { + ppmstr = "+" + ppmstr; + } + textFieldTime.setText(hac.toString2() + " " + ppmstr + "ppm"); + } + + // ==================== 配置加载方法 ==================== + /** + * 加载配置文件 + */ + public void loadConfig(KLALBConfig config) { + this.config = config; + for (KLALBConfigItem item : config) { + if (item instanceof KLALBControllerConfigItem) { + KLALBControllerConfigItem kck = (KLALBControllerConfigItem) item; + + // 加载语言设置 + String lg = kck.getLanguage(); + if (lg != null) { + Language l = Language.valueOf(lg); + if (l != null) { + comboLang.setSelectedItem(l); + } + } + + nogui.setSelected( kck.isNogui()); + + // 加载IPv6地址 + String vaddr = kck.getVirtualAddress(); + addressFieldSet.setText(vaddr != null ? vaddr : ""); + + // 加载DNS服务器 + List dns = kck.getDNS(); + dnsAreaSet.setText(listToStr(dns)); + + // 加载ASN + Long vasn = kck.getVirtualASN(); + asnFieldSet.setText(vasn != null ? vasn.toString() : ""); + + String tunname=kck.getTUNName(); + tunDeviceName.setText(tunname!=null?tunname:""); + + // 加载TCP监听 + MultipurposeSocketAddress mpat = kck.getTCPListen(); + tcpListeningSet.setText(mpat != null ? mpat.toString() : ""); + + // 加载UDP监听 + MultipurposeSocketAddress mpau = kck.getUDPListen(); + udpListeningSet.setText(mpau != null ? mpau.toString() : ""); + + // 加载开放线路表 + List linet = kck.getLineTable(); + openLineTabelSet.setText(listToStr2(linet)); + + // 加载自动连接线路表 + List clinet = kck.getConnectLineTable(); + connectLineTabelSet.setText(listToStr2(clinet)); + + // 加载NTP服务器表 + List ntps = kck.getNtpServerTable(); + ntpServerSet.setText(listToStr2(ntps)); + + // 加载网络接口排除列表 + List strexc = kck.getNetworkInterfaceExcepts(); + nilsimdl.clear(); + if (strexc != null) { + for (String strexci : strexc) { + try { + nilsimdl.addElement(NetworkInterface.getByName(strexci)); + } catch (SocketException e) { + e.printStackTrace(); + } + } + } + int conc=kck.getLinkConnectionsCount(); + if(conc<=0) { + conc=1; + } + linkConnectionsCount.getSlider().setValue(conc); + + denyQuery.setSelected( kck.isDenyLineTableQuery()); + + denyBroadcast.setSelected( kck.isDenyLineTableBroadcast()); + + String con=kck.getCongestionAlgorithm(); + if(con==null) { + congestions.getComboBox().setSelectedItem("BBR"); + }else { + congestions.getComboBox().setSelectedItem(con); + } + double ub=kck.getDelayUpperBound(); + if(ub!=0) + delayHbound.getSlider().setValue((int) Math.round((ub-1.0)*1000)); + + double lb=kck.getDelayLowerBound(); + if(lb!=0) + delayLbound.getSlider().setValue((int) Math.round ((lb-1.0)*1000)); + + long del=kck.getNagleDelayTime(); + nagleDelayTime.getSlider().setValue((int)(del/100000L)); + + long delr=kck.getLinkNagleDelayTime(); + linkNagleDelayTime.getSlider().setValue((int)(delr/100000L)); + } + } + } + + // ==================== 辅助方法 ==================== + /** + * 创建图标 + */ + private Icon createIcon(String path, int width, int height) { + try { + Image img = ImageIO.read(KLALBStateGUI3.class.getResourceAsStream(path)); + return new ImageIcon(img.getScaledInstance(width, height, Image.SCALE_SMOOTH)); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 创建回车键监听器 + */ + private KeyListener createEnterKeyListener(JButton button) { + return new KeyListener() { + @Override + public void keyTyped(KeyEvent e) {} + + @Override + public void keyReleased(KeyEvent e) {} + + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ENTER) { + button.doClick(); + } + } + }; + } + + /** + * 将InetAddress列表转换为字符串 + */ + private String listToStr(List list) { + StringBuilder sbdr = new StringBuilder(); + if (list != null) { + for (InetAddress addr : list) { + sbdr.append(addr.getHostAddress()); + sbdr.append('\n'); + } + } + return sbdr.toString(); + } + + /** + * 将对象列表转换为字符串 + */ + private String listToStr2(List list) { + StringBuilder sbdr = new StringBuilder(); + if (list != null) { + for (Object obj : list) { + sbdr.append(obj); + sbdr.append('\n'); + } + } + return sbdr.toString(); + } + + // ==================== 公开方法 ==================== + /** + * 获取保存配置的回调函数 + */ + public Consumer getSaveComsumer() { + return saveComsumer; + } + + /** + * 设置保存配置的回调函数 + */ + public void setSaveComsumer(Consumer saveComsumer) { + this.saveComsumer = saveComsumer; + } + + /** + * 添加节点信息面板到标签页 + */ + public void addNodeInformationPanel(NodeInformationPanel panel) { + tabbedPane.addTab(panel.getAddress().toString(), panel.getIcon(), panel, null, true); + tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1); + } + + /** + * 关闭窗口并清理资源 + */ + public void close() { + setVisible(false); + if (tsk != null) { + tsk.cancel(); + } + if (st != null) { + st.remove(ti); + } + } + + // ==================== 主方法(测试用) ==================== + /** + * 主方法,用于测试 + */ + public static void main(String[] args) throws IOException, InterruptedException { + KLALBStateGUI3 kcg = new KLALBStateGUI3(new KLALBController()); + kcg.setVisible(true); + } +} \ No newline at end of file diff --git a/src/org/kne/cloud/network/klalb/ui/KperfGUI.java b/src/org/kne/cloud/network/klalb/ui/KperfGUI.java index f25ac62..712ecb3 100644 --- a/src/org/kne/cloud/network/klalb/ui/KperfGUI.java +++ b/src/org/kne/cloud/network/klalb/ui/KperfGUI.java @@ -18,7 +18,7 @@ import org.jfree.chart.ui.RectangleEdge; import org.jfree.data.general.DefaultValueDataset; import org.kne.cloud.network.MultipurposeSocketAddress; import org.kne.cloud.network.klalb.KLALBUtils; -import org.kne.cloud.network.monitor.QueueingMonitorDataImpl; +import org.kne.cloud.network.monitor.SpeedAndTrafficAndDelayMonitorDataImpl; import org.kne.cloud.network.perf.Kperf; import org.kne.cloud.network.perf.KperfReports; import org.kne.ui.XFrame; @@ -65,7 +65,7 @@ public class KperfGUI extends XFrame{ private DialTextAnnotation downSpeedText; private JTextField sourceAddressField; - private QueueingMonitorDataImpl monitor; + private SpeedAndTrafficAndDelayMonitorDataImpl monitor; private DefaultValueDataset upPPS; @@ -94,7 +94,7 @@ public class KperfGUI extends XFrame{ updateButton(); } @Override - public void updateDial(QueueingMonitorDataImpl mdt) { + public void updateDial(SpeedAndTrafficAndDelayMonitorDataImpl mdt) { monitor=mdt; } @Override @@ -504,27 +504,27 @@ public class KperfGUI extends XFrame{ @Override public void run() { if(monitor!=null) { - double outload = monitor.getOutSpeed() * 100.0 / monitor.getOutSpeedMax2(); + double outload = monitor.getOutSpeed() * 100.0 / monitor.getOutSpeedMax(); if (Double.isFinite(outload)) { - upSpeedText.setLabel(KLALBUtils.convertIBUint(monitor.getOutSpeedAvg()) + "/s"); + upSpeedText.setLabel(KLALBUtils.convertIBUint(monitor.getOutSpeed()) + "/s"); upSpeed.setValue(Math.min(upSpeed.getValue().doubleValue() * 0.98 + outload * 0.02, 101.0)); } - double inload = monitor.getInSpeed() * 100.0 / monitor.getInSpeedMax2(); + double inload = monitor.getInSpeed() * 100.0 / monitor.getInSpeedMax(); if (Double.isFinite(inload)) { - downSpeedText.setLabel(KLALBUtils.convertIBUint(monitor.getInSpeedAvg()) + "/s"); + downSpeedText.setLabel(KLALBUtils.convertIBUint(monitor.getInSpeed()) + "/s"); downSpeed.setValue(Math.min(downSpeed.getValue().doubleValue() * 0.98 + inload * 0.02, 101.0)); } - double outPPSload = monitor.getOutPPS() * 100.0 / monitor.getOutPPSMax2(); + double outPPSload = monitor.getOutPPS() * 100.0 / monitor.getOutPPSMax(); if (Double.isFinite(outPPSload)) { - upPPSText.setLabel(KLALBUtils.convertUintDefalut(monitor.getOutPPSAvg()) + "PPS"); + upPPSText.setLabel(KLALBUtils.convertUintDefalut(monitor.getOutPPS()) + "PPS"); upPPS.setValue(Math.min(upPPS.getValue().doubleValue() * 0.98 + outPPSload * 0.02, 101.0)); } - double inPPSload = monitor.getInPPS() * 100.0 / monitor.getInPPSMax2(); + double inPPSload = monitor.getInPPS() * 100.0 / monitor.getInPPSMax(); if (Double.isFinite(inPPSload)) { - downPPSText.setLabel(KLALBUtils.convertUintDefalut(monitor.getInPPSAvg()) + "PPS"); + downPPSText.setLabel(KLALBUtils.convertUintDefalut(monitor.getInPPS()) + "PPS"); downPPS.setValue(Math.min(downPPS.getValue().doubleValue() * 0.98 + inPPSload * 0.02, 101.0)); } } diff --git a/src/org/kne/cloud/network/klalb/ui/LineMonitorGUI.java b/src/org/kne/cloud/network/klalb/ui/LineMonitorGUI.java index 0397b30..fbecc29 100644 --- a/src/org/kne/cloud/network/klalb/ui/LineMonitorGUI.java +++ b/src/org/kne/cloud/network/klalb/ui/LineMonitorGUI.java @@ -28,9 +28,12 @@ import org.jfree.data.time.RegularTimePeriod; import org.jfree.data.time.TimePeriod; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6Address; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; import org.kne.cloud.network.klalb.KLALBRemoteLine; import org.kne.cloud.network.monitor.MonitorData; +import org.kne.cloud.network.monitor.TimestampMonitorValue; +import org.kne.math.Long128; import org.kne.ui.XFrame; import java.awt.BasicStroke; @@ -48,186 +51,186 @@ import java.awt.Font; import javax.swing.SwingConstants; import javax.swing.JSlider; -public class LineMonitorGUI extends XFrame{ +public class LineMonitorGUI extends XFrame { private Timer timer; private Timer timer1; private Timer timer2; - private TimerTask tsk3 ; + private TimerTask tsk3; + + private TimerTask tsk4, tsk5; + private TimerTask d1; + private TimerTask d2; + + private TimeSeries spdup = new TimeSeries(UIEnv.getRsb().getString("uploadspeed")); + private TimeSeries spddown = new TimeSeries(UIEnv.getRsb().getString("downloadspeed")); + + private TimeSeries delayup = new TimeSeries(UIEnv.getRsb().getString("uploaddelay")); + private TimeSeries delaydown = new TimeSeries(UIEnv.getRsb().getString("downloaddelay")); + // private TimeSeries delayupmin=new TimeSeries("Upload delay minimum"); + // private TimeSeries delaydownmin=new TimeSeries("Download delay minimum"); - - private TimerTask tsk4 ,tsk5; - private TimerTask d1 ; - private TimerTask d2 ; - - private TimeSeries spdup=new TimeSeries(UIEnv.getRsb().getString("uploadspeed")); - private TimeSeries spddown=new TimeSeries(UIEnv.getRsb().getString("downloadspeed")); - - private TimeSeries delayup=new TimeSeries(UIEnv.getRsb().getString("uploaddelay")); - private TimeSeries delaydown=new TimeSeries(UIEnv.getRsb().getString("downloaddelay")); - - //private TimeSeries delayupmin=new TimeSeries("Upload delay minimum"); - //private TimeSeries delaydownmin=new TimeSeries("Download delay minimum"); - private KLALBRemoteLine tr; - private JTextField vaddrs; private JFreeChart jfc; private JFreeChart jfce; private JLabel spdp; private JLabel delp; - private long timeRange=5000; - private long[]values=new long[] {1000,2000,5000,10000,20000,50000,100000,200000,500000,1000000}; + private long timeRange = 5000; + private long[] values = new long[] { 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000 }; private JPanel panel_1; private JLabel lblNewLabel; - //private ChartPanel delp; - //private ChartPanel spdp; + + // private ChartPanel delp; + // private ChartPanel spdp; public LineMonitorGUI(KLALBRemoteLine t) { - this.tr=t; + this.tr = t; setSize(1200, 780); setLocationRelativeTo(null); - + setIconImage(UIEnv.getIcon()); - setTitle("Line Monitor:"+t.getMonitor().getName()); + setTitle("Line Monitor:" + t.getMonitor().getName()); setTitleColor(UIEnv.getDefaultTitleColor()); getContentPane().setBackground(UIEnv.getDefaultBackgroundColor()); getTitlelabel().setFont(UIEnv.getFont().deriveFont(17.0f)); getTitlepanel().setBorder(new LineBorder(Color.LIGHT_GRAY)); - - JPanel jp=new JPanel(); + + JPanel jp = new JPanel(); jp.setLayout(new GridLayout(2, 1)); getContentPane().add(jp); - - TimeSeriesCollection tsc=new TimeSeriesCollection(); + + TimeSeriesCollection tsc = new TimeSeriesCollection(); tsc.addSeries(spdup); tsc.addSeries(spddown); - jfc = ChartFactory.createTimeSeriesChart(UIEnv.getRsb().getString("speermonitor"), UIEnv.getRsb().getString("time")+"(s)", UIEnv.getRsb().getString("speed")+"(KiB/s)", tsc); + jfc = ChartFactory.createTimeSeriesChart(UIEnv.getRsb().getString("speermonitor"), + UIEnv.getRsb().getString("time") + "(s)", UIEnv.getRsb().getString("speed") + "(KiB/s)", tsc); jfc.getXYPlot().setBackgroundPaint(Color.BLACK); - jfc.getXYPlot().getRenderer().setSeriesPaint(0,Color.RED); - jfc.getXYPlot().getRenderer().setSeriesPaint(1,Color.GREEN); + jfc.getXYPlot().getRenderer().setSeriesPaint(0, Color.RED); + jfc.getXYPlot().getRenderer().setSeriesPaint(1, Color.GREEN); changeFont(jfc); spdp = new JLabel(); spdp.setBorder(new LineBorder(Color.DARK_GRAY)); jp.add(spdp); - - TimeSeriesCollection tsce=new TimeSeriesCollection(); + + TimeSeriesCollection tsce = new TimeSeriesCollection(); tsce.addSeries(delayup); tsce.addSeries(delaydown); - - //tsce.addSeries(delayupmin); - //tsce.addSeries(delaydownmin); - jfce = ChartFactory.createTimeSeriesChart(UIEnv.getRsb().getString("delaymonitor"), UIEnv.getRsb().getString("time")+"(s)", UIEnv.getRsb().getString("delay")+"(ms)", tsce); - jfce.getXYPlot().setBackgroundPaint(Color.BLACK); - jfce.getXYPlot().getRenderer().setSeriesPaint(0,Color.RED); - jfce.getXYPlot().getRenderer().setSeriesPaint(1,Color.GREEN); - BasicStroke dotted = new BasicStroke(2, BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND, 0, new float[]{0,6,0,6}, 0); - /*jfce.getXYPlot().getRenderer().setSeriesPaint(2,Color.RED); - jfce.getXYPlot().getRenderer().setSeriesStroke(2, dotted); - jfce.getXYPlot().getRenderer().setSeriesPaint(3,Color.GREEN); - jfce.getXYPlot().getRenderer().setSeriesStroke(3, dotted);*/ + // tsce.addSeries(delayupmin); + // tsce.addSeries(delaydownmin); + jfce = ChartFactory.createTimeSeriesChart(UIEnv.getRsb().getString("delaymonitor"), + UIEnv.getRsb().getString("time") + "(s)", UIEnv.getRsb().getString("delay") + "(ms)", tsce); + jfce.getXYPlot().setBackgroundPaint(Color.BLACK); + jfce.getXYPlot().getRenderer().setSeriesPaint(0, Color.RED); + jfce.getXYPlot().getRenderer().setSeriesPaint(1, Color.GREEN); + + BasicStroke dotted = new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 0, + new float[] { 0, 6, 0, 6 }, 0); + /* + * jfce.getXYPlot().getRenderer().setSeriesPaint(2,Color.RED); + * jfce.getXYPlot().getRenderer().setSeriesStroke(2, dotted); + * jfce.getXYPlot().getRenderer().setSeriesPaint(3,Color.GREEN); + * jfce.getXYPlot().getRenderer().setSeriesStroke(3, dotted); + */ changeFont(jfce); delp = new JLabel(); delp.setBorder(new LineBorder(Color.DARK_GRAY)); jp.add(delp); - + JPanel panel = new JPanel(); panel.setOpaque(false); getContentPane().add(panel, BorderLayout.NORTH); - panel.setLayout(new GridLayout(2, 1, 0, 0)); - - vaddrs = new JTextField(); - vaddrs.setHorizontalAlignment(SwingConstants.CENTER); - vaddrs.setFont(new Font("宋体", Font.PLAIN, 14)); - vaddrs.setEditable(false); - panel.add(vaddrs); - vaddrs.setColumns(10); - + panel.setLayout(new GridLayout(1, 1, 0, 0)); + panel_1 = new JPanel(); panel.add(panel_1); panel_1.setLayout(new BorderLayout(0, 0)); - + JSlider windowSlider = new JSlider(); windowSlider.setValue(2); windowSlider.setMaximum(9); panel_1.add(windowSlider, BorderLayout.CENTER); JLabel windowSelect = new JLabel("5s"); windowSlider.addChangeListener(new ChangeListener() { - + @Override public void stateChanged(ChangeEvent e) { - updateTimeRange(windowSlider,windowSelect); + updateTimeRange(windowSlider, windowSelect); } }); - updateTimeRange(windowSlider,windowSelect); + updateTimeRange(windowSlider, windowSelect); panel_1.add(windowSelect, BorderLayout.EAST); - + lblNewLabel = new JLabel(UIEnv.getRsb().getString("timerange")); panel_1.add(lblNewLabel, BorderLayout.WEST); - Dimension dms=new Dimension(140, 20); - - /*JButton btnNewButton_2 = new JButton("Pressure test"); - btnNewButton_2.setPreferredSize(dms); - btnNewButton_2.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - tr.pressureTest(); - } - }); - panel_1.add(btnNewButton_2); - btnNewButton_2.setForeground(Color.BLUE);*/ + Dimension dms = new Dimension(140, 20); + + /* + * JButton btnNewButton_2 = new JButton("Pressure test"); + * btnNewButton_2.setPreferredSize(dms); btnNewButton_2.addActionListener(new + * ActionListener() { public void actionPerformed(ActionEvent e) { + * tr.pressureTest(); } }); panel_1.add(btnNewButton_2); + * btnNewButton_2.setForeground(Color.BLUE); + */ addWindowListener(new WindowListener() { - + @Override public void windowOpened(WindowEvent e) { - + } - + @Override public void windowIconified(WindowEvent e) { // TODO 自动生成的方法存根 - + } - + @Override public void windowDeiconified(WindowEvent e) { // TODO 自动生成的方法存根 - + } - + @Override public void windowDeactivated(WindowEvent e) { // TODO 自动生成的方法存根 - + } - + @Override public void windowClosing(WindowEvent e) { - + } - + @Override public void windowClosed(WindowEvent e) { // TODO 自动生成的方法存根 - + } - + @Override public void windowActivated(WindowEvent e) { // TODO 自动生成的方法存根 - + } }); } - protected void updateTimeRange(JSlider windowSlider,JLabel windowSelect) { - timeRange=values[windowSlider.getValue()]; + + protected void updateTimeRange(JSlider windowSlider, JLabel windowSelect) { + timeRange = values[windowSlider.getValue()]; synchronized (jfc) { - - jfc.getXYPlot().getDomainAxis().setFixedAutoRange(timeRange); + + jfc.getXYPlot().getDomainAxis().setFixedAutoRange(timeRange); + spdup.setMaximumItemCount((int) timeRange); + spddown.setMaximumItemCount((int) timeRange); } synchronized (jfce) { - - jfce.getXYPlot().getDomainAxis().setFixedAutoRange(timeRange); + + jfce.getXYPlot().getDomainAxis().setFixedAutoRange(timeRange); + delayup.setMaximumItemCount((int) timeRange); + delaydown.setMaximumItemCount((int) timeRange); } - windowSelect.setText(timeRange/1000+"s"); + windowSelect.setText(timeRange / 1000 + "s"); } + private void changeFont(JFreeChart jfc2) { jfc2.getTitle().setFont(UIEnv.getFont().deriveFont(16.0f)); jfc2.getLegend().setItemFont(UIEnv.getFont()); @@ -236,152 +239,157 @@ public class LineMonitorGUI extends XFrame{ jfc2.getXYPlot().getDomainAxis().setLabelFont(UIEnv.getFont()); jfc2.getXYPlot().getDomainAxis().setTickLabelFont(UIEnv.getFont()); } + private void recordSpeedData() { - if(isVisible()) { - Millisecond ms= new Millisecond(); - + if (isVisible()) { + Millisecond ms = new Millisecond( + new Date(tr.getMonitor().getClock().getCurrentTimeMillis())); synchronized (jfc) { - spdup.addOrUpdate(ms, tr.getMonitor().getOutSpeed()/1024.0); - spddown.addOrUpdate(ms, tr.getMonitor().getInSpeed()/1024.0); + spdup.addOrUpdate(ms, tr.getMonitor().getOutSpeed() / 1024.0); + spddown.addOrUpdate(ms, tr.getMonitor().getInSpeed() / 1024.0); } - } } - + private void recordDelayData() { - if(isVisible()) { - Millisecond ms= new Millisecond(); + if (isVisible()) { - - synchronized (jfce) { - delayup.addOrUpdate(ms, (tr.getMonitor().getOutDelay()+tr.getMonitor().getQueueingDelay())/1000000.0); - delaydown.addOrUpdate(ms, tr.getMonitor().getInDelay()/1000000.0); + TimestampMonitorValue valup = tr.getMonitor().getUploadBandwidth().getRecentDelayEntry(); + if (valup != null) { + Millisecond ms = new Millisecond( + new Date(valup.getTimestamp().divide(new Long128(1000000L)).longValue())); + //System.out.println(ms+" "+new Millisecond()); + delayup.addOrUpdate(ms, valup.getDelay() / 1000000.0); + } + TimestampMonitorValue valdown = tr.getMonitor().getDownloadBandwidth().getRecentDelayEntry(); + if (valdown != null) { + Millisecond ms2 = new Millisecond( + new Date(valdown.getTimestamp().divide(new Long128(1000000L)).longValue())); + delaydown.addOrUpdate(ms2, valdown.getDelay() / 1000000.0); + } } - + } } + @Override public void setVisible(boolean b) { - if(b) { - if(timer==null) { - timer=new Timer(); - timer1=new Timer(); - timer2=new Timer(); - tsk3= new TimerTask() { + if (b) { + if (timer == null) { + timer = new Timer(); + timer1 = new Timer(); + timer2 = new Timer(); + tsk3 = new TimerTask() { - @Override - public void run() { - updateTraffic(); - } - }; - tsk4= new TimerTask() { - - @Override - public void run() { - recordSpeedData(); - } - }; - - tsk5= new TimerTask() { - - @Override - public void run() { - recordDelayData(); - } - }; - d1= new TimerTask() { - - @Override - public void run() { - if(isVisible()) { - synchronized (jfc) { - ImageIcon i1=new ImageIcon(jfc.createBufferedImage(spdp.getWidth(), spdp.getHeight())); - spdp.setIcon(i1); - } + @Override + public void run() { + updateTraffic(); } - } - }; - d2= new TimerTask() { + }; + tsk4 = new TimerTask() { - @Override - public void run() { - if(isVisible()) { - synchronized (jfce) { - ImageIcon i2=new ImageIcon(jfce.createBufferedImage(delp.getWidth(), delp.getHeight())); - delp.setIcon(i2); + @Override + public void run() { + recordSpeedData(); + } + }; + + tsk5 = new TimerTask() { + + @Override + public void run() { + recordDelayData(); + } + }; + d1 = new TimerTask() { + + @Override + public void run() { + if (isVisible()) { + synchronized (jfc) { + ImageIcon i1 = new ImageIcon( + jfc.createBufferedImage(spdp.getWidth(), spdp.getHeight())); + spdp.setIcon(i1); + } } - - } - } - }; - timer.scheduleAtFixedRate(tsk3, 25, 25); - timer1.scheduleAtFixedRate(tsk4, 5, 5); - timer1.scheduleAtFixedRate(d1, 25, 25); - timer2.scheduleAtFixedRate(tsk5, 5, 5); - timer2.scheduleAtFixedRate(d2, 25, 25); - } - - }else { - if(tsk3!=null) - tsk3.cancel(); - if(tsk4!=null) - tsk4.cancel(); - if(tsk5!=null) - tsk5.cancel(); - if(d1!=null) - d1.cancel(); - if(d2!=null) - d2.cancel(); - if(timer!=null) - timer.cancel(); - if(timer1!=null) - timer1.cancel(); + }; + d2 = new TimerTask() { - if(timer2!=null) - timer2.cancel(); - timer=null; + @Override + public void run() { + if (isVisible()) { + synchronized (jfce) { + ImageIcon i2 = new ImageIcon( + jfce.createBufferedImage(delp.getWidth(), delp.getHeight())); + delp.setIcon(i2); + } + + } + } + }; + timer.scheduleAtFixedRate(tsk3, 25, 25); + timer1.scheduleAtFixedRate(tsk4, 5, 5); + timer1.scheduleAtFixedRate(d1, 25, 25); + timer2.scheduleAtFixedRate(tsk5, 1, 1); + timer2.scheduleAtFixedRate(d2, 25, 25); + } + + } else { + if (tsk3 != null) + tsk3.cancel(); + if (tsk4 != null) + tsk4.cancel(); + if (tsk5 != null) + tsk5.cancel(); + if (d1 != null) + d1.cancel(); + if (d2 != null) + d2.cancel(); + if (timer != null) + timer.cancel(); + if (timer1 != null) + timer1.cancel(); + + if (timer2 != null) + timer2.cancel(); + timer = null; } super.setVisible(b); } + public void updateTraffic() { switch (tr.getMonitor().getState()) { - case MonitorData.OFFLINE: - getTitlelabel().setForeground(Color.RED); - break; - case MonitorData.CONNECTING: - getTitlelabel().setForeground(Color.YELLOW); - break; - case MonitorData.ONLINE: - getTitlelabel().setForeground(Color.GREEN); - - - break; - default: - break; - } - if(isVisible()) { - //spddown.fireSeriesChanged(); - //delaydown.fireSeriesChanged(); - Inet6AddressGroup irg=tr.getRemoteVaddr(); - String text; - if(irg==null) { - - text="unknown"; - }else { - Inet6Address i6a= irg.getAddress(); - - text=i6a.getHostAddress(); - - } - if(!vaddrs.getText().equals(text)) { - vaddrs.setText(text); - } + case MonitorData.DOWN: + getTitlelabel().setForeground(Color.RED); + break; + case MonitorData.UNSTABLE: + getTitlelabel().setForeground(Color.YELLOW); + break; + case MonitorData.UP: + getTitlelabel().setForeground(Color.GREEN); + + break; + default: + break; } - - - + if (isVisible()) { + // spddown.fireSeriesChanged(); + // delaydown.fireSeriesChanged(); + IPv6AddressGroup irg = tr.getRemoteVaddr(); + String text; + if (irg == null) { + + text = "unknown"; + } else { + IPv6Address i6a = irg.getAddress(); + + text = i6a.toString(); + + } + } + } } diff --git a/src/org/kne/cloud/network/klalb/ui/NetworkGraphPanel.java b/src/org/kne/cloud/network/klalb/ui/NetworkGraphPanel.java index 275371b..6e59e08 100644 --- a/src/org/kne/cloud/network/klalb/ui/NetworkGraphPanel.java +++ b/src/org/kne/cloud/network/klalb/ui/NetworkGraphPanel.java @@ -39,6 +39,7 @@ import javax.swing.JPopupMenu; import javax.swing.border.LineBorder; import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.cloud.network.ipv6.IPv6Address; import org.kne.cloud.network.klalb.KLALBController; import org.kne.cloud.network.klalb.KLALBUtils; import org.kne.cloud.network.srv6.KLALBRoutingProtocol; @@ -60,7 +61,7 @@ public class NetworkGraphPanel extends GraphPanel { private class InetGraphNode extends GraphNode{ - private InetAddress address; + private IPv6Address address; private JPopupMenu popupMenu; public InetGraphNode() { @@ -68,7 +69,7 @@ public class NetworkGraphPanel extends GraphPanel { initign(); } - public InetGraphNode(InetAddress address, Color color, double x, double y, boolean ismarked) { + public InetGraphNode(IPv6Address address, Color color, double x, double y, boolean ismarked) { super(getText(address), color, x, y, ismarked); this.address=address; initign(); @@ -82,7 +83,7 @@ public class NetworkGraphPanel extends GraphPanel { @Override public void actionPerformed(ActionEvent e) { - Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(address.getHostAddress()), null); + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(address.toString()), null); } }); popupMenu.add(mcpyitm); @@ -104,8 +105,8 @@ public class NetworkGraphPanel extends GraphPanel { public void actionPerformed(ActionEvent e) { KperfGUI kpfg=new KperfGUI(); kpfg.setVisible(true); - MultipurposeSocketAddress source=new MultipurposeSocketAddress("KLALB_Stream",controller.getIpv6Router().getLocator().getAddress().getHostAddress(),0); - MultipurposeSocketAddress target=new MultipurposeSocketAddress("KLALB_Stream", address.getHostAddress(), 4564); + MultipurposeSocketAddress source=new MultipurposeSocketAddress("KLALB_Stream",controller.getIpv6Router().getLocator().getAddress().toString(),0); + MultipurposeSocketAddress target=new MultipurposeSocketAddress("KLALB_Stream", address.toString(), 4564); kpfg.setTarget(target,source); } }); @@ -116,7 +117,7 @@ public class NetworkGraphPanel extends GraphPanel { @Override public void mouseReleased(MouseEvent e) { - if(e.isPopupTrigger()) + if(e.getButton()==MouseEvent.BUTTON3) popupMenu.show(NetworkGraphPanel.this,e.getX(),e.getY()); } @@ -155,21 +156,15 @@ public class NetworkGraphPanel extends GraphPanel { - private static String getText(InetAddress address2) { - String text; - if(address2 instanceof Inet6Address) { - text=KLALBUtils.parseAbbrIPv6(address2.getHostAddress()); - }else { - text=address2.getHostAddress(); - } - return text; + private static String getText(IPv6Address address2) { + return address2.toCompressedString(); } - public InetAddress getAddress() { + public IPv6Address getAddress() { return address; } - public void setAddress(InetAddress address) { + public void setAddress(IPv6Address address) { this.address = address; super.setText(getText(address)); } @@ -192,18 +187,18 @@ public class NetworkGraphPanel extends GraphPanel { } } protected void loadNodes() { - Map addr= controller.getIpv6Router().getKlalbRouteProtol().getAddresses(); - Set ks=addr.keySet(); - for (Iterator iterator = ks.iterator(); iterator.hasNext();) { - Inet6Address inet6Address = (Inet6Address) iterator.next(); + Map addr= controller.getIpv6Router().getKlalbRouteProtol().getAddresses(); + Set ks=addr.keySet(); + for (Iterator iterator = ks.iterator(); iterator.hasNext();) { + IPv6Address inet6Address = (IPv6Address) iterator.next(); if(!getNodes().containsKey(inet6Address)) { Vector2 v2pos=super.getRandomPos(); getNodes().put(inet6Address,new InetGraphNode(inet6Address,Color.BLACK,v2pos.x,v2pos.y,inet6Address.equals(controller.getIpv6Router().getLocator().getAddress()))); } } - Set kns=getNodes().keySet(); - for (Iterator iterator = kns.iterator(); iterator.hasNext();) { - Inet6Address inet6Address = (Inet6Address) iterator.next(); + Set kns=getNodes().keySet(); + for (Iterator iterator = kns.iterator(); iterator.hasNext();) { + IPv6Address inet6Address = (IPv6Address) iterator.next(); if(!addr.containsKey(inet6Address)) { iterator.remove(); } @@ -212,10 +207,10 @@ public class NetworkGraphPanel extends GraphPanel { synchronized (getEdgeGroups()) { getEdgeGroups().clear(); - Map> addr1= controller.getIpv6Router().getKlalbRouteProtol().getPaths(); - Set>> salink=addr1.entrySet(); - for (Iterator>> iterator = salink.iterator(); iterator.hasNext();) { - Entry> entry = (Entry>) iterator.next(); + Map> addr1= controller.getIpv6Router().getKlalbRouteProtol().getPaths(); + Set>> salink=addr1.entrySet(); + for (Iterator>> iterator = salink.iterator(); iterator.hasNext();) { + Entry> entry = (Entry>) iterator.next(); Listlps=entry.getValue(); for (Iterator iterator2 = lps.iterator(); iterator2.hasNext();) { LinkDirection linkPath = (LinkDirection) iterator2.next(); @@ -240,15 +235,15 @@ public class NetworkGraphPanel extends GraphPanel { } private GraphEdgeGroup getGroup(InetGraphNode a,InetGraphNode b) { - for (Iterator iterator = getEdgeGroups().iterator(); iterator.hasNext();) { + for (Iterator iterator = getEdgeGroups().iterator(); iterator.hasNext();) { GraphEdgeGroup graphEdgeGroup = (GraphEdgeGroup) iterator.next(); if(graphEdgeGroup.match(a,b)) { return graphEdgeGroup; } } GraphEdgeGroup ng=new InetGraphEdgeGroup(a, b); - Inet6Address aprev= controller.getIpv6Router().getKlalbRouteProtol().getDijkstraPrevNode((Inet6Address) a.getAddress()); - Inet6Address bprev= controller.getIpv6Router().getKlalbRouteProtol().getDijkstraPrevNode((Inet6Address) b.getAddress()); + IPv6Address aprev= controller.getIpv6Router().getKlalbRouteProtol().getDijkstraPrevNode( a.getAddress()); + IPv6Address bprev= controller.getIpv6Router().getKlalbRouteProtol().getDijkstraPrevNode( b.getAddress()); if( b.getAddress().equals(aprev)||a.getAddress().equals(bprev)) { ng.setShortest(true); diff --git a/src/org/kne/cloud/network/klalb/ui/NodeInformationPanel.java b/src/org/kne/cloud/network/klalb/ui/NodeInformationPanel.java index 3abb48a..fff0c2a 100644 --- a/src/org/kne/cloud/network/klalb/ui/NodeInformationPanel.java +++ b/src/org/kne/cloud/network/klalb/ui/NodeInformationPanel.java @@ -23,6 +23,7 @@ import javax.swing.event.ListSelectionListener; import org.kne.cloud.klalb.uitool.XDefaultListModel; import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.cloud.network.ipv6.IPv6Address; import org.kne.cloud.network.klalb.KLALBController; import org.kne.cloud.network.srv6.KLALBRoutingProtocol; import org.kne.cloud.network.srv6.KLALBRoutingProtocolAPIClient; @@ -37,7 +38,7 @@ import java.awt.event.MouseListener; import java.awt.event.ActionEvent; public class NodeInformationPanel extends JPanel { - private InetAddress address; + private IPv6Address address; private KLALBRoutingProtocolAPIClient client; private KLALBController controller; private Image image; @@ -46,14 +47,14 @@ public class NodeInformationPanel extends JPanel { public KLALBController getController() { return controller; } - public InetAddress getAddress() { + public IPv6Address getAddress() { return address; } public Image getImage() { return image; } - public NodeInformationPanel (KLALBController controller,InetAddress address,Image image) { + public NodeInformationPanel (KLALBController controller,IPv6Address address,Image image) { this.controller=controller; this.address=address; this.image=image; @@ -115,16 +116,14 @@ public class NodeInformationPanel extends JPanel { @Override public void mouseReleased(MouseEvent e) { - if(e.isPopupTrigger()) { + if(e.getButton()==MouseEvent.BUTTON3) { jpop.show(list, e.getX(), e.getY()); } } @Override public void mousePressed(MouseEvent e) { - if(e.isPopupTrigger()) { jpop.show(list, e.getX(), e.getY()); - } } @Override @@ -151,7 +150,7 @@ public class NodeInformationPanel extends JPanel { client=new KLALBRoutingProtocolAPIClient(controller.getIpv6Router().getKlalbRouteProtol()); try { - client.requestOpenLines(new InetSocketAddress(address, KLALBRoutingProtocol.DEFAULT_PORT), (result)->{ + client.requestOpenLines(new InetSocketAddress( address.toInet6Address(), KLALBRoutingProtocol.DEFAULT_PORT), (result)->{ listModel.clear(); for (MultipurposeSocketAddress multipurposeSocketAddress : result) { listModel.addElement(multipurposeSocketAddress); diff --git a/src/org/kne/cloud/network/klalb/ui/TPanel.java b/src/org/kne/cloud/network/klalb/ui/TPanel.java deleted file mode 100644 index 121db5d..0000000 --- a/src/org/kne/cloud/network/klalb/ui/TPanel.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.kne.cloud.network.klalb.ui; - -import javax.swing.JPanel; -import javax.swing.JLabel; -import java.awt.BorderLayout; -import java.awt.Color; - -import javax.swing.SwingConstants; -import javax.swing.border.LineBorder; - -import org.kne.cloud.network.klalb.KLALBRemoteLine; -import org.kne.cloud.network.monitor.MonitorData; - -import java.awt.Font; -import java.util.Objects; - -public class TPanel extends JPanel { - private JLabel tname; - private JLabel targ; - private KLALBRemoteLine tunnel; - - @Override - public int hashCode() { - return Objects.hash(tunnel); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - TPanel other = (TPanel) obj; - return Objects.equals(tunnel, other.tunnel); - } - - public JLabel getTname() { - return tname; - } - - public JLabel getTarg() { - return targ; - } - - /** - * @wbp.parser.constructor - */ - public TPanel(KLALBRemoteLine t) { - this.tunnel = t; - setOpaque(false); - setLayout(new BorderLayout(0, 0)); - - tname = new JLabel(); - tname.setText(t.getMonitor().getName()); - tname.setFont(new Font("宋体", Font.BOLD, 16)); - add(tname, BorderLayout.WEST); - - targ = new JLabel(); - targ.setFont(new Font("宋体", Font.PLAIN, 13)); - targ.setHorizontalAlignment(SwingConstants.TRAILING); - targ.setForeground(Color.YELLOW); - add(targ, BorderLayout.CENTER); - - setBorder(new LineBorder(Color.BLACK)); - setSize(650, 25); - setPreferredSize(getSize()); - } - - private volatile long up, down, ups, downs; - private volatile long delay=Long.MAX_VALUE; - - public long getDelay() { - return delay; - } - - private void updateText() { - String dl; - if (delay == Long.MIN_VALUE) - dl = "??"; - else - dl = Long.toString(delay / 1000000L); - targ.setText(bytesUnit(up) + "\u2191 " + bytesUnit(down) + "\u2193 " + bytesUnit(ups) + "/s\u2191 " - + bytesUnit(downs) + "/s\u2193 " + dl + "ms"); - } - - public KLALBRemoteLine getTunnel() { - return tunnel; - } - - private String bytesUnit(long v) { - if (v >= 1024L * 1024 * 1024 * 1024 * 1024) { - return String.format("%.1f", v / (1024.0 * 1024.0 * 1024.0 * 1024.0 * 1024.0)) + "PB"; - } else if (v >= 1024L * 1024 * 1024 * 1024) { - return String.format("%.1f", v / (1024.0 * 1024.0 * 1024.0 * 1024.0)) + "TB"; - } else if (v >= 1024L * 1024 * 1024) { - return String.format("%.1f", v / (1024.0 * 1024.0 * 1024.0)) + "GB"; - } else if (v >= 1024L * 1024) { - return String.format("%.1f", v / (1024.0 * 1024.0)) + "MB"; - } else if (v >= 1024L) { - return String.format("%.1f", v / (1024.0)) + "KB"; - } else { - return v + "B"; - } - } - - public void updateTraffic() { - switch (tunnel.getMonitor().getState()) { - case MonitorData.OFFLINE: - tname.setForeground(Color.RED); - break; - case MonitorData.CONNECTING: - tname.setForeground(Color.YELLOW); - break; - case MonitorData.ONLINE: - tname.setForeground(Color.GREEN); - break; - default: - break; - } - up = tunnel.getMonitor().getOutTraffic(); - down = tunnel.getMonitor().getInTraffic(); - this.ups = tunnel.getMonitor().getOutSpeed(); - this.downs = tunnel.getMonitor().getInSpeed(); - this.delay = tunnel.getMonitor().getLatency(); - //System.out.println(delay); - updateText(); - } - -} diff --git a/src/org/kne/cloud/network/klalb/ui/TPanel2.java b/src/org/kne/cloud/network/klalb/ui/TPanel2.java index 9a40886..44ddf93 100644 --- a/src/org/kne/cloud/network/klalb/ui/TPanel2.java +++ b/src/org/kne/cloud/network/klalb/ui/TPanel2.java @@ -3,6 +3,7 @@ package org.kne.cloud.network.klalb.ui; import javax.swing.JPanel; import javax.swing.JLabel; import java.awt.BorderLayout; +import java.awt.Button; import java.awt.Color; import java.awt.Dimension; @@ -10,6 +11,8 @@ import javax.swing.SwingConstants; import javax.swing.border.LineBorder; import org.kne.cloud.network.MultipurposeSocketAddress; +import org.kne.cloud.network.ipv6.IPv6Address; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; import org.kne.cloud.network.klalb.CONST; import org.kne.cloud.network.klalb.KLALBController; import org.kne.cloud.network.klalb.KLALBRemoteLine; @@ -80,7 +83,7 @@ public class TPanel2 extends JPanel { tname = new JLabel(); tname.setText(t.getMonitor().getName()); - tname.setFont(new Font("宋体", Font.BOLD, 16)); + tname.setFont(new Font("宋体", Font.BOLD, 14)); targup = new JLabel(); try { @@ -134,10 +137,13 @@ public class TPanel2 extends JPanel { panel_2.setLayout(null); lblNewLabel = new JLabel(); - lblNewLabel.setBounds(0, 0, 50, 45); + lblNewLabel.setBounds(0, 0, 50, 40); + lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); + lblNewLabel.setVerticalAlignment(SwingConstants.CENTER); panel_2.add(lblNewLabel); try { - lblNewLabel.setIcon(new ImageIcon(getImgEth())); + double scalex=1.0; + lblNewLabel.setIcon(new ImageIcon(getImgEth().getScaledInstance((int)(getImgEth().getWidth(null)*scalex), (int)(getImgEth().getHeight(null)*scalex), Image.SCALE_FAST))); } catch (IOException e1) { e1.printStackTrace(); } @@ -145,13 +151,13 @@ public class TPanel2 extends JPanel { lblNewLabel_1 = new JLabel(); lblNewLabel_1.setOpaque(true); lblNewLabel_1.setBackground(Color.LIGHT_GRAY); - lblNewLabel_1.setBounds(6, 9, 7, 4); + lblNewLabel_1.setBounds(8, 7, 7, 4); panel_2.add(lblNewLabel_1); lblNewLabel_2 = new JLabel(); lblNewLabel_2.setOpaque(true); lblNewLabel_2.setBackground(Color.LIGHT_GRAY); - lblNewLabel_2.setBounds(35, 9, 7, 4); + lblNewLabel_2.setBounds(37, 7, 7, 4); panel_2.add(lblNewLabel_2); @@ -234,7 +240,7 @@ public class TPanel2 extends JPanel { @Override public void mouseReleased(MouseEvent e) { - if(e.isPopupTrigger()) + if(e.getButton()==MouseEvent.BUTTON3) popupMenu.show(TPanel2.this,e.getX(),e.getY()); } @@ -305,8 +311,8 @@ public class TPanel2 extends JPanel { private void updateText() { - targup.setText(KLALBUtils. convertIBUint(tunnel.getMonitor().getOutTraffic()) + " " + KLALBUtils. convertIBUint(tunnel.getMonitor().getOutSpeedAvg()) + "/s "+ KLALBUtils.convertUintNanoDefalut(tunnel.getMonitor().getOutDelay()) + "s"); - targdown.setText(KLALBUtils. convertIBUint(tunnel.getMonitor().getInTraffic()) + " " + KLALBUtils. convertIBUint(tunnel.getMonitor().getInSpeedAvg()) + "/s " + KLALBUtils.convertUintNanoDefalut( tunnel.getMonitor().getInDelay()) + "s"); + targup.setText(KLALBUtils. convertIBUint(tunnel.getMonitor().getOutTraffic()) + " " + KLALBUtils. convertIBUint(tunnel.getMonitor().getOutSpeed()) + "/s "+ KLALBUtils.convertUintNanoDefalut(tunnel.getMonitor().getOutDelay()) + "s"); + targdown.setText(KLALBUtils. convertIBUint(tunnel.getMonitor().getInTraffic()) + " " + KLALBUtils. convertIBUint(tunnel.getMonitor().getInSpeed()) + "/s " + KLALBUtils.convertUintNanoDefalut( tunnel.getMonitor().getInDelay()) + "s"); if(tunnel.getMonitor().getOutSpeed()>4096||tunnel.getMonitor().getInSpeed()>4096) { lblNewLabel_2.setBackground(Color.ORANGE); @@ -322,32 +328,35 @@ public class TPanel2 extends JPanel { public void updateTraffic() { switch (tunnel.getMonitor().getState()) { - case MonitorData.OFFLINE: + case MonitorData.DOWN: tname.setForeground(Color.RED); lblNewLabel_1.setBackground(Color.LIGHT_GRAY); break; - case MonitorData.CONNECTING: + case MonitorData.UNSTABLE: tname.setForeground(Color.YELLOW); lblNewLabel_1.setBackground(Color.LIGHT_GRAY); break; - case MonitorData.ONLINE: + case MonitorData.UP: tname.setForeground(Color.GREEN); lblNewLabel_1.setBackground(Color.GREEN); - - - Inet6Address unvar=tunnel.getRemoteVaddr().getAddress(); - if(unvar==null) { - this.vaddr.setText("unknown"); - }else { - this.vaddr.setText(unvar.getHostAddress()); - } - - updateText(); break; default: break; } + if(tunnel.getMonitor().getState()!=MonitorData.DOWN) { + + + IPv6AddressGroup unvar=tunnel.getRemoteVaddr(); + if(unvar==null) { + this.vaddr.setText("unknown"); + }else { + this.vaddr.setText(unvar.getAddress().toString()); + } + + + updateText(); + } //mdg.updateTraffic(); } diff --git a/src/org/kne/cloud/network/monitor/ArrayListTimestampMonitor.java b/src/org/kne/cloud/network/monitor/ArrayListTimestampMonitor.java index 365967e..60a18a6 100644 --- a/src/org/kne/cloud/network/monitor/ArrayListTimestampMonitor.java +++ b/src/org/kne/cloud/network/monitor/ArrayListTimestampMonitor.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.LongAdder; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -14,447 +15,500 @@ import org.kne.cloud.clock.HighAccuracyClock; import org.kne.cloud.network.klalb.KLALBUtils; import org.kne.math.Long128; -public class ArrayListTimestampMonitor implements TimestampMonitor{ - - +public class ArrayListTimestampMonitor implements TimestampMonitor { private HighAccuracyClock clock; - private String name; - - // 使用LongAdder替代AtomicLong,在高并发下性能更好 - private final LongAdder totalDataSize = new LongAdder(); - private final LongAdder totalPackets = new LongAdder(); - - // 配置参数 - private final int maxRetry; - private final long cleanupThreshold; - - // 使用ArrayList存储数据 - private final List entries = new ArrayList<>(); - - // 读写锁用于保护ArrayList的并发访问 - private final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(); - - // 时间戳验证容差(纳秒),考虑到网络延迟和时钟同步 - private static final long TIMESTAMP_TOLERANCE_NS = 10_000_000L; // 10毫秒 - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public HighAccuracyClock getClock() { + private String name; + + // 使用LongAdder替代AtomicLong,在高并发下性能更好 + private final LongAdder totalDataSize = new LongAdder(); + private final LongAdder totalPackets = new LongAdder(); + + // 配置参数 + private final int maxRetry; + private final long cleanupThreshold; + + // 使用ArrayList存储数据 + private final List entries = new ArrayList<>(); + + // 读写锁用于保护ArrayList的并发访问 + private final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(); + + // 时间戳验证容差(纳秒),考虑到网络延迟和时钟同步 + private static final long TIMESTAMP_TOLERANCE_NS = 10_000_000L; // 10毫秒 + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public HighAccuracyClock getClock() { return clock; } - protected ArrayListTimestampMonitor(HighAccuracyClock clock, String name, int maxRetry, long cleanupThreshold) { - super(); - this.clock = clock; - this.name = name; - this.maxRetry = maxRetry; - this.cleanupThreshold = cleanupThreshold; - } - - public ArrayListTimestampMonitor() { - this(new HighAccuracyClock(), "TimestampMonitor", 100, 1000000000L); - } - - public ArrayListTimestampMonitor(HighAccuracyClock clock, String name) { - this(clock, name, 100, 1000000000L); - } - - private volatile long prev = System.nanoTime(); - - public boolean recordPacket(K key, int length) { - return recordPacket(key, clock.getCurrentTimeNanos(), length); - } - - /** - * 记录数据包 - 使用插入排序保持列表有序,添加时间戳验证 - */ - public boolean recordPacket(K key, Long128 timestamp, int length) { - // 验证时间戳的合理性 - validateTimestamp(timestamp); - - // 快速路径:尝试sequence=0 - TimestampMonitorKey monitorKey = new TimestampMonitorKey<>(key, 0); - TimestampMonitorValue monitorValue = new TimestampMonitorValue(monitorKey, timestamp, length); - autoCleanup(cleanupThreshold); - - rwLock.writeLock().lock(); - try { - // 使用二分查找插入排序,保持列表有序 - insertSorted(monitorValue); - totalDataSize.add(length); - totalPackets.increment(); - return true; - } finally { - rwLock.writeLock().unlock(); - } - } - - /** - * 验证时间戳的合理性 - */ - private void validateTimestamp(Long128 timestamp) { - /* BigInteger currentTime = clock.getCurrentTimeNanos(); - BigInteger maxAllowedTime = currentTime.add(BigInteger.valueOf(TIMESTAMP_TOLERANCE_NS)); - - if (timestamp.compareTo(maxAllowedTime) > 0) { - throw new IllegalArgumentException( - String.format("Timestamp %s is in the future (current time: %s, tolerance: %d ns)", - timestamp, currentTime, TIMESTAMP_TOLERANCE_NS)); - } - - */ - } - - /** - * 使用二分查找进行插入排序,保持列表有序 - */ - private void insertSorted(TimestampMonitorValue newValue) { - if (entries.isEmpty()) { - entries.add(newValue); - return; - } - - // 优化:检查是否可以快速添加到末尾(大部分数据包是按时间顺序到达的) - TimestampMonitorValue lastValue = entries.get(entries.size() - 1); - if (newValue.getTimestamp().compareTo(lastValue.getTimestamp()) >= 0) { - entries.add(newValue); - return; - } - - // 使用二分查找找到插入位置 - int insertIndex = findInsertIndex(newValue.getTimestamp()); - entries.add(insertIndex, newValue); - } - - /** - * 使用二分查找找到插入位置 - */ - private int findInsertIndex(Long128 timestamp) { - int low = 0; - int high = entries.size() - 1; - - while (low <= high) { - int mid = (low + high) >>> 1; - Long128 midTimestamp = entries.get(mid).getTimestamp(); - int cmp = timestamp.compareTo(midTimestamp); - - if (cmp < 0) { - high = mid - 1; - } else if (cmp > 0) { - low = mid + 1; - } else { - // 时间戳相等,插入到相同时间戳的后面 - return findLastEqualIndex(mid, timestamp) + 1; - } - } - - return low; - } - - /** - * 找到相同时间戳的最后一个元素的索引 - */ - private int findLastEqualIndex(int startIndex, Long128 timestamp) { - int index = startIndex; - while (index < entries.size() - 1 && - entries.get(index + 1).getTimestamp().equals(timestamp)) { - index++; - } - return index; - } - - private void autoCleanup(long th) { - long curr = System.nanoTime(); - if (curr - prev > th) { - prev = curr; - cleanup(); - } - } - - public void cleanup() { - cleanup(clock.getCurrentTimeNanos(), cleanupThreshold); - } - - /** - * 清理旧记录 - 由于列表已排序,直接使用二分查找 - */ - public void cleanup(Long128 currentTime, long timeWindowNs) { - Long128 startTime = currentTime.subtract(Long128.valueOf(timeWindowNs)); - - rwLock.writeLock().lock(); - try { - // 使用二分查找找到第一个不过期的元素位置 - int firstValidIndex = findFirstValidIndex(startTime); - - if (firstValidIndex > 0) { - // 删除所有过期的元素 - entries.subList(0, firstValidIndex).clear(); - } - } finally { - rwLock.writeLock().unlock(); - } - prev=System.nanoTime(); - } - - /** - * 使用二分查找找到第一个时间戳 >= startTime 的元素索引 - */ - private int findFirstValidIndex(Long128 startTime) { - int low = 0; - int high = entries.size(); - - while (low < high) { - int mid = (low + high) >>> 1; - Long128 midTimestamp = entries.get(mid).getTimestamp(); - - if (midTimestamp.compareTo(startTime) < 0) { - low = mid + 1; - } else { - high = mid; - } - } - - return low; - } - - public long calculateDataVolume(long timeWindowNs) { - return calculateDataVolume(clock.getCurrentTimeNanos(), timeWindowNs); - } - - /** - * 高性能数据量计算 - 优化:由于数据包不会来自未来,只需要查找startTime - */ - public long calculateDataVolume(Long128 currentTime, long timeWindowNs) { - Long128 startTime = currentTime.subtract(Long128.valueOf(timeWindowNs)); - - rwLock.readLock().lock(); - try { - return calculateDataVolumeFromSortedList(entries, startTime); - } finally { - rwLock.readLock().unlock(); - } - } - - /** - * 从已排序的列表中计算数据量 - 优化版本,只需要startTime - */ - private long calculateDataVolumeFromSortedList(List sortedList, - Long128 startTime) { - if (sortedList.isEmpty()) { - return 0; - } - - // 使用二分查找找到第一个 >= startTime 的元素位置 - int startIndex = findFirstValidIndexFromSorted(sortedList, startTime); - - if (startIndex >= sortedList.size()) { - return 0; - } - - // 计算从startIndex到末尾的所有数据量(因为数据包不会来自未来) - long sum = 0; - for (int i = startIndex; i < sortedList.size(); i++) { - sum += sortedList.get(i).getLength(); - } - - return sum; - } - - /** - * 在已排序列表中找到第一个时间戳 >= startTime 的索引 - */ - private int findFirstValidIndexFromSorted(List sortedList, Long128 startTime) { - int low = 0; - int high = sortedList.size(); - - while (low < high) { - int mid = (low + high) >>> 1; - Long128 midTimestamp = sortedList.get(mid).getTimestamp(); - - if (midTimestamp.compareTo(startTime) < 0) { - low = mid + 1; - } else { - high = mid; - } - } - - return low; - } - - public long calculatePacketCount(long timeWindowNs) { - return calculatePacketCount(clock.getCurrentTimeNanos(), timeWindowNs); - } - - /** - * 高性能包数计算 - 优化:由于数据包不会来自未来,只需要查找startTime - */ - public long calculatePacketCount(Long128 currentTime, long timeWindowNs) { - Long128 startTime = currentTime.subtract(Long128.valueOf(timeWindowNs)); - - rwLock.readLock().lock(); - try { - return calculatePacketCountFromSortedList(entries, startTime); - } finally { - rwLock.readLock().unlock(); - } - } - - /** - * 从已排序的列表中计算包数 - 优化版本,只需要startTime - */ - private long calculatePacketCountFromSortedList(List sortedList, - Long128 startTime) { - if (sortedList.isEmpty()) { - return 0; - } - - int startIndex = findFirstValidIndexFromSorted(sortedList, startTime); - - if (startIndex >= sortedList.size()) { - return 0; - } - - // 计算从startIndex到末尾的所有包数(因为数据包不会来自未来) - return sortedList.size() - startIndex; - } - - public long calculateBandwidth(long timeWindowNs) { - return calculateBandwidth(clock.getCurrentTimeNanos(), timeWindowNs); - } - - /** - * 计算带宽 - */ - public long calculateBandwidth(Long128 currentTime, long timeWindowNs) { - if (timeWindowNs <= 0) { - return 0; - } - - long dataVolume = calculateDataVolume(currentTime, timeWindowNs); - return (long) (dataVolume * 1000000000.0 / timeWindowNs); - } - - public TrafficStats calculateTrafficStats(long timeWindowNs) { - return calculateTrafficStats(clock.getCurrentTimeNanos(), timeWindowNs); - } - - /** - * 计算流量统计信息 - 优化:由于数据包不会来自未来,只需要查找startTime - */ - public TrafficStats calculateTrafficStats(Long128 currentTime, long timeWindowNs) { - Long128 startTime = currentTime.subtract(Long128.valueOf(timeWindowNs)); - - rwLock.readLock().lock(); - try { - return calculateTrafficStatsFromSortedList(entries, startTime, currentTime, timeWindowNs); - } finally { - rwLock.readLock().unlock(); - } - } - - /** - * 从已排序的列表中计算流量统计 - 优化版本 - */ - private TrafficStats calculateTrafficStatsFromSortedList(List sortedList, - Long128 startTime, Long128 currentTime, - long timeWindowNs) { - TrafficStats stats = new TrafficStats(); - stats.timeWindowNs = timeWindowNs; - stats.currentTime = currentTime; - - if (sortedList.isEmpty()) { - return stats; - } - - int startIndex = findFirstValidIndexFromSorted(sortedList, startTime); - - if (startIndex >= sortedList.size()) { - return stats; - } - - // 计算从startIndex到末尾的所有数据(因为数据包不会来自未来) - for (int i = startIndex; i < sortedList.size(); i++) { - TimestampMonitorValue value = sortedList.get(i); - stats.packetCount++; - stats.totalBytes += value.getLength(); - - if (stats.earliestTimestamp.equals(BigInteger.ZERO) || - value.getTimestamp().compareTo(stats.earliestTimestamp) < 0) { - stats.earliestTimestamp = value.getTimestamp(); - } - if (value.getTimestamp().compareTo(stats.latestTimestamp) > 0) { - stats.latestTimestamp = value.getTimestamp(); - } - } - - return stats; - } - - // Getters - public long getTotalDataSize() { return totalDataSize.sum(); } - public long getTotalPackets() { return totalPackets.sum(); } - public int getEntryCount() { - rwLock.readLock().lock(); - try { - return entries.size(); - } finally { - rwLock.readLock().unlock(); - } - } - - public void reset() { - rwLock.writeLock().lock(); - try { - totalDataSize.reset(); - totalPackets.reset(); - entries.clear(); - } finally { - rwLock.writeLock().unlock(); - } - } + protected ArrayListTimestampMonitor(HighAccuracyClock clock, String name, int maxRetry, long cleanupThreshold) { + super(); + this.clock = clock; + this.name = name; + this.maxRetry = maxRetry; + this.cleanupThreshold = cleanupThreshold; + } + + public ArrayListTimestampMonitor(HighAccuracyClock clock, String name) { + this(clock, name, 100, 1000000000L); + } + + private volatile long prev = System.nanoTime(); + + public boolean recordPacket(K key, int length) { + return recordPacket(key, clock.getCurrentTimeNanos(), length, Long.MAX_VALUE / 1024); + } + + public boolean recordPacket(K key, int length, long delay) { + return recordPacket(key, clock.getCurrentTimeNanos(), length, delay); + } + + public boolean recordPacket(K key, Long128 timestamp, int length) { + return recordPacket(key, timestamp, length, Long.MAX_VALUE / 1024); + } + + /** + * 记录数据包 - 使用插入排序保持列表有序,添加时间戳验证 + */ + public boolean recordPacket(K key, Long128 timestamp, int length, long delay) { + // 验证时间戳的合理性 + validateTimestamp(timestamp); + + // 快速路径:尝试sequence=0 + TimestampMonitorKey monitorKey = new TimestampMonitorKey<>(key, 0); + TimestampMonitorValue monitorValue = new TimestampMonitorValue(monitorKey, timestamp, length, delay); + autoCleanup(cleanupThreshold); + + rwLock.writeLock().lock(); + try { + // 使用二分查找插入排序,保持列表有序 + insertSorted(monitorValue); + totalDataSize.add(length); + totalPackets.increment(); + } finally { + rwLock.writeLock().unlock(); + } + return true; + } + + /** + * 验证时间戳的合理性 + */ + private void validateTimestamp(Long128 timestamp) { + /*Long128 currentTime = clock.getCurrentTimeNanos(); + Long128 maxAllowedTime = currentTime.add(Long128.valueOf(TIMESTAMP_TOLERANCE_NS)); + + if (timestamp.compareTo(maxAllowedTime) > 0) { + throw new IllegalArgumentException( + String.format("Timestamp %s is in the future (current time: %s, tolerance: %d ns)", timestamp, + currentTime, TIMESTAMP_TOLERANCE_NS)); + } + */ + } + + /** + * 使用二分查找进行插入排序,保持列表有序 + */ + private void insertSorted(TimestampMonitorValue newValue) { + if(newValue.getDelay()= 0) { + entries.add(newValue); + return; + } + + // 使用二分查找找到插入位置 + int insertIndex = findInsertIndex(newValue.getTimestamp()); + entries.add(insertIndex, newValue); + + + } + + /** + * 使用二分查找找到插入位置 + */ + private int findInsertIndex(Long128 timestamp) { + int low = 0; + int high = entries.size() - 1; + + while (low <= high) { + int mid = (low + high) >>> 1; + Long128 midTimestamp = entries.get(mid).getTimestamp(); + int cmp = timestamp.compareTo(midTimestamp); + + if (cmp < 0) { + high = mid - 1; + } else if (cmp > 0) { + low = mid + 1; + } else { + // 时间戳相等,插入到相同时间戳的后面 + return findLastEqualIndex(mid, timestamp) + 1; + } + } + + return low; + } + + /** + * 找到相同时间戳的最后一个元素的索引 + */ + private int findLastEqualIndex(int startIndex, Long128 timestamp) { + int index = startIndex; + while (index < entries.size() - 1 && entries.get(index + 1).getTimestamp().equals(timestamp)) { + index++; + } + return index; + } + + private void autoCleanup(long th) { + long curr = System.nanoTime(); + if (curr - prev > th) { + prev = curr; + cleanup(); + } + } + + public void cleanup() { + cleanup(clock.getCurrentTimeNanos(), cleanupThreshold); + } + + /** + * 清理旧记录 - 由于列表已排序,直接使用二分查找 + */ + private Long128 prevTime; + + public void cleanup(Long128 currentTime, long timeWindowNs) { + Long128 startTime = currentTime.subtract(Long128.valueOf(timeWindowNs)); + Long128 maxAllowedTime = currentTime.add(Long128.valueOf(TIMESTAMP_TOLERANCE_NS)); + rwLock.writeLock().lock(); + try { + if (prevTime != null && prevTime.compareTo(maxAllowedTime) > 0) { + + //System.out.println("Time change detected!"); + entries.clear(); + } else { + // 使用二分查找找到第一个不过期的元素位置 + int firstValidIndex = findFirstValidIndex(startTime); + + if (firstValidIndex > 0) { + // 删除所有过期的元素 + entries.subList(0, firstValidIndex).clear(); + } + } + prevTime = currentTime; + } finally { + rwLock.writeLock().unlock(); + } + prev = System.nanoTime(); + } + + /** + * 使用二分查找找到第一个时间戳 >= startTime 的元素索引 + */ + private int findFirstValidIndex(Long128 startTime) { + int low = 0; + int high = entries.size(); + + while (low < high) { + int mid = (low + high) >>> 1; + Long128 midTimestamp = entries.get(mid).getTimestamp(); + + if (midTimestamp.compareTo(startTime) < 0) { + low = mid + 1; + } else { + high = mid; + } + } + + return low; + } + + public long calculateDataVolume(long timeWindowNs) { + return calculateDataVolume(clock.getCurrentTimeNanos(), timeWindowNs); + } + + /** + * 高性能数据量计算 - 优化:由于数据包不会来自未来,只需要查找startTime + */ + public long calculateDataVolume(Long128 currentTime, long timeWindowNs) { + Long128 startTime = currentTime.subtract(Long128.valueOf(timeWindowNs)); + + rwLock.readLock().lock(); + try { + return calculateDataVolumeFromSortedList(entries, startTime); + } finally { + rwLock.readLock().unlock(); + } + } + + /** + * 从已排序的列表中计算数据量 - 优化版本,只需要startTime + */ + private long calculateDataVolumeFromSortedList(List sortedList, Long128 startTime) { + if (sortedList.isEmpty()) { + return 0; + } + + // 使用二分查找找到第一个 >= startTime 的元素位置 + int startIndex = findFirstValidIndexFromSorted(sortedList, startTime); + + if (startIndex >= sortedList.size()) { + return 0; + } + + // 计算从startIndex到末尾的所有数据量(因为数据包不会来自未来) + long sum = 0; + for (int i = startIndex; i < sortedList.size(); i++) { + sum += sortedList.get(i).getLength(); + } + + return sum; + } + + /** + * 在已排序列表中找到第一个时间戳 >= startTime 的索引 + */ + private int findFirstValidIndexFromSorted(List sortedList, Long128 startTime) { + int low = 0; + int high = sortedList.size(); + //int x=0; + while (low < high) { + int mid = (low + high) >>> 1; + Long128 midTimestamp = sortedList.get(mid).getTimestamp(); + + if (midTimestamp.compareTo(startTime) < 0) { + low = mid + 1; + } else { + high = mid; + } + //x++; + } + //System.out.println(x+" "+sortedList.size()); + return low; + } + + public long calculatePacketCount(long timeWindowNs) { + return calculatePacketCount(clock.getCurrentTimeNanos(), timeWindowNs); + } + + /** + * 高性能包数计算 - 优化:由于数据包不会来自未来,只需要查找startTime + */ + public long calculatePacketCount(Long128 currentTime, long timeWindowNs) { + Long128 startTime = currentTime.subtract(Long128.valueOf(timeWindowNs)); + + rwLock.readLock().lock(); + try { + return calculatePacketCountFromSortedList(entries, startTime); + } finally { + rwLock.readLock().unlock(); + } + } + + /** + * 从已排序的列表中计算包数 - 优化版本,只需要startTime + */ + private long calculatePacketCountFromSortedList(List sortedList, Long128 startTime) { + if (sortedList.isEmpty()) { + return 0; + } + + int startIndex = findFirstValidIndexFromSorted(sortedList, startTime); + + if (startIndex >= sortedList.size()) { + return 0; + } + + // 计算从startIndex到末尾的所有包数(因为数据包不会来自未来) + return sortedList.size() - startIndex; + } + + public long calculateBandwidth(long timeWindowNs) { + return calculateBandwidth(clock.getCurrentTimeNanos(), timeWindowNs); + } + + /** + * 计算带宽 + */ + public long calculateBandwidth(Long128 currentTime, long timeWindowNs) { + if (timeWindowNs <= 0) { + return 0; + } + + long dataVolume = calculateDataVolume(currentTime, timeWindowNs); + return (long) (dataVolume * 1000000000.0 / timeWindowNs); + } + + public TrafficStats calculateTrafficStats(long timeWindowNs) { + return calculateTrafficStats(clock.getCurrentTimeNanos(), timeWindowNs); + } + + @Override + public long calculatePacketRate(long timeWindowNs) { + return calculatePacketRate(clock.getCurrentTimeNanos(), timeWindowNs); + } + + @Override + public long calculatePacketRate(Long128 currentTime, long timeWindowNs) { + if (timeWindowNs <= 0) { + return 0; + } + + long dataVolume = calculatePacketCount(currentTime, timeWindowNs); + return (long) (dataVolume * 1000000000.0 / timeWindowNs); + } + + /** + * 计算流量统计信息 - 优化:由于数据包不会来自未来,只需要查找startTime + */ + public TrafficStats calculateTrafficStats(Long128 currentTime, long timeWindowNs) { + Long128 startTime = currentTime.subtract(Long128.valueOf(timeWindowNs)); + + rwLock.readLock().lock(); + try { + return calculateTrafficStatsFromSortedList(entries, startTime, currentTime, timeWindowNs); + } finally { + rwLock.readLock().unlock(); + } + } + + /** + * 从已排序的列表中计算流量统计 - 优化版本 + */ + private TrafficStats calculateTrafficStatsFromSortedList(List sortedList, Long128 startTime, + Long128 currentTime, long timeWindowNs) { + TrafficStats stats = new TrafficStats(); + stats.timeWindowNs = timeWindowNs; + stats.currentTime = currentTime; + + if (sortedList.isEmpty()) { + return stats; + } + + int startIndex = findFirstValidIndexFromSorted(sortedList, startTime); + + if (startIndex >= sortedList.size()) { + return stats; + } + + // 计算从startIndex到末尾的所有数据(因为数据包不会来自未来) + for (int i = startIndex; i < sortedList.size(); i++) { + TimestampMonitorValue value = sortedList.get(i); + stats.packetCount++; + stats.totalBytes += value.getLength(); + + if (stats.earliestTimestamp.equals(Long128.ZERO) + || value.getTimestamp().compareTo(stats.earliestTimestamp) < 0) { + stats.earliestTimestamp = value.getTimestamp(); + } + if (value.getTimestamp().compareTo(stats.latestTimestamp) > 0) { + stats.latestTimestamp = value.getTimestamp(); + } + } + + return stats; + } + + @Override + public long getRecentDelay() { + TimestampMonitorValue val= getRecentDelayEntry(); + if(val!=null) { + return val.getDelay(); + }else { + return Long.MAX_VALUE / 1024; + } + } + + private volatile TimestampMonitorValue recent=null; + @Override + public TimestampMonitorValue getRecentDelayEntry() { + return recent; + } + + // Getters + public long getTotalDataSize() { + return totalDataSize.sum(); + } + + public long getTotalPackets() { + return totalPackets.sum(); + } + + public int getEntryCount() { + rwLock.readLock().lock(); + try { + return entries.size(); + } finally { + rwLock.readLock().unlock(); + } + } + + public void reset() { + rwLock.writeLock().lock(); + try { + totalDataSize.reset(); + totalPackets.reset(); + entries.clear(); + } finally { + rwLock.writeLock().unlock(); + } + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(name); + sb.append('\n'); + sb.append(KLALBUtils.convertIBUint(totalDataSize.sum())).append("\t") + .append(KLALBUtils.convertIBUint(calculateBandwidth(Math.min(cleanupThreshold, 1000000000L)))) + .append("/s\t"); + return sb.toString(); + } + + public static void main(String[] args) throws InterruptedException { + AtomicLong along = new AtomicLong(0); + ArrayListTimestampMonitor monitor = new ArrayListTimestampMonitor<>(new HighAccuracyClock(), "Monitor", + 100, 200000000L); + Thread t = new Thread(() -> { + while (true) { + monitor.recordPacket(along.getAndIncrement(), 1000); + } + }); + t.start(); + Timer tx = new Timer(); + tx.scheduleAtFixedRate(new TimerTask() { - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(name); - sb.append('\n'); - sb.append(KLALBUtils.convertIBUint(totalDataSize.sum())).append("\t") - .append(KLALBUtils.convertIBUint(calculateBandwidth(Math.min(cleanupThreshold,1000000000L)))).append("/s\t"); - return sb.toString(); - } - - public static void main(String[] args) throws InterruptedException { - AtomicLong along=new AtomicLong(0); - ArrayListTimestampMonitor monitor = new ArrayListTimestampMonitor<>(new HighAccuracyClock(),"Monitor",100,200000000L); - Thread t=new Thread(()->{ - while(true) { - monitor.recordPacket(along.getAndIncrement(), 1000); - } - }); - t.start(); - Timer tx=new Timer(); - tx.scheduleAtFixedRate(new TimerTask() { - @Override public void run() { - // 计算带宽 - long testEndTime = System.nanoTime(); - monitor.cleanup(); - // 计算统计信息 - // TrafficStats stats = monitor.calculateTrafficStats(1000000000L); - System.out.println(monitor); - System.out.println(KLALBUtils.convertUintNanoDefalut( System.nanoTime()-testEndTime)); + // 计算带宽 + long testEndTime = System.nanoTime(); + monitor.cleanup(); + // 计算统计信息 + // TrafficStats stats = monitor.calculateTrafficStats(1000000000L); + System.out.println(monitor); + System.out.println(KLALBUtils.convertUintNanoDefalut(System.nanoTime() - testEndTime)); } }, 100, 100); - - - - } + + } + } \ No newline at end of file diff --git a/src/org/kne/cloud/network/monitor/DelayMonitorData.java b/src/org/kne/cloud/network/monitor/DelayMonitorData.java index 23fb615..c7caffe 100644 --- a/src/org/kne/cloud/network/monitor/DelayMonitorData.java +++ b/src/org/kne/cloud/network/monitor/DelayMonitorData.java @@ -2,14 +2,9 @@ package org.kne.cloud.network.monitor; public interface DelayMonitorData extends MonitorData { public long getOutDelay(); - public void setOutDelay(long delay); public long getOutJitter(); public long getInDelay(); - public void setInDelay(long delay); public long getInJitter(); - public long getLatency(); - public void setLatency(long latency); - public long getTotalJitter(); } diff --git a/src/org/kne/cloud/network/monitor/HashMapTimestampMonitor.java b/src/org/kne/cloud/network/monitor/HashMapTimestampMonitor.java index 8997cd0..b46adca 100644 --- a/src/org/kne/cloud/network/monitor/HashMapTimestampMonitor.java +++ b/src/org/kne/cloud/network/monitor/HashMapTimestampMonitor.java @@ -42,16 +42,17 @@ private String name; public HighAccuracyClock getClock() { return clock; } - protected HashMapTimestampMonitor(HighAccuracyClock clock,String name, int maxRetry, long cleanupThreshold) { + public HashMapTimestampMonitor(HighAccuracyClock clock,String name, int maxRetry, long cleanupThreshold) { super(); this.clock=clock; this.name = name; this.maxRetry = maxRetry; this.cleanupThreshold = cleanupThreshold; } -public HashMapTimestampMonitor() { - this(new HighAccuracyClock(),"TimestampMonitor",100, 1000000000L); // 默认最大重试100次,清理阈值1秒 - } + + public HashMapTimestampMonitor(HighAccuracyClock clock) { + this(clock,"HashMapTimestampMonitor"); + } public HashMapTimestampMonitor(HighAccuracyClock clock,String name) { this(clock,name,100, 1000000000L); // 默认最大重试100次,清理阈值1秒 @@ -62,17 +63,29 @@ public HashMapTimestampMonitor() { private volatile long prev=System.nanoTime(); + + public boolean recordPacket(K key, int length) { return recordPacket(key,clock.getCurrentTimeNanos(),length); } + + @Override + public boolean recordPacket(K key, Long128 timestamp, int length) { + return recordPacket(key, timestamp, length, Long.MAX_VALUE/1024); + } + @Override + public boolean recordPacket(K key, int length, long delay) { + return recordPacket(key,clock.getCurrentTimeNanos(),length,delay); + } + /** * 超高性能记录数据包 - 针对路由器优化 */ - public boolean recordPacket(K key, Long128 timestamp, int length) { + public boolean recordPacket(K key, Long128 timestamp, int length, long delay) { autoCleanup(cleanupThreshold); // 快速路径:尝试sequence=0 TimestampMonitorKey monitorKey = new TimestampMonitorKey<>(key, 0); - TimestampMonitorValue monitorValue = new TimestampMonitorValue(monitorKey,timestamp, length); + TimestampMonitorValue monitorValue = new TimestampMonitorValue(monitorKey,timestamp, length,delay); if (entries.putIfAbsent(monitorKey, monitorValue) == null) { totalDataSize.add(length); @@ -159,7 +172,7 @@ public HashMapTimestampMonitor() { public long calculatePacketCount(Long128 currentTime, long timeWindowNs) { Long128 startTime = currentTime .subtract(Long128.valueOf( timeWindowNs)); - return entries.values().parallelStream() + return entries.values().stream() .filter(value -> (value.getTimestamp() .compareTo( startTime )>=0)&& (value.getTimestamp().compareTo( currentTime) <=0) ) .count(); @@ -182,6 +195,22 @@ public HashMapTimestampMonitor() { return (long) (dataVolume*1000000000.0/timeWindowNs); } + @Override + public long calculatePacketRate(long timeWindowNs) { + return calculatePacketRate(clock.getCurrentTimeNanos(),timeWindowNs); + } + @Override + public long calculatePacketRate(Long128 currentTime, long timeWindowNs) { + if (timeWindowNs <= 0) { + return 0; + } + + long dataVolume = calculatePacketCount(currentTime, timeWindowNs); + // System.out.println(dataVolume); + return (long) (dataVolume*1000000000.0/timeWindowNs); + } + + public TrafficStats calculateTrafficStats(long timeWindowNs) { return calculateTrafficStats(clock.getCurrentTimeNanos(),timeWindowNs); } @@ -270,6 +299,19 @@ public HashMapTimestampMonitor() { } + @Override + public long getRecentDelay() { + // TODO 自动生成的方法存根 + return 0; + } + @Override + public TimestampMonitorValue getRecentDelayEntry() { + // TODO 自动生成的方法存根 + return null; + } + + + } \ No newline at end of file diff --git a/src/org/kne/cloud/network/monitor/MonitorData.java b/src/org/kne/cloud/network/monitor/MonitorData.java index 699192a..ee1f083 100644 --- a/src/org/kne/cloud/network/monitor/MonitorData.java +++ b/src/org/kne/cloud/network/monitor/MonitorData.java @@ -3,9 +3,9 @@ package org.kne.cloud.network.monitor; import java.util.function.Consumer; public interface MonitorData extends Cloneable { - public static final int OFFLINE=0; - public static final int CONNECTING=1; - public static final int ONLINE=2; + public static final int DOWN=0; + public static final int UNSTABLE=1; + public static final int UP=2; public Consumer getChangeListener(); public void setChangeListener(Consumer changeListener); public String getName(); @@ -20,11 +20,11 @@ public double getReliability(); public static String parseStateToString(int state) { switch (state) { - case OFFLINE: + case DOWN: return "offline"; - case CONNECTING: - return "connecting"; - case ONLINE: + case UNSTABLE: + return "unstable"; + case UP: return "online"; default: throw new IllegalArgumentException("Unknown state:"+state); diff --git a/src/org/kne/cloud/network/monitor/MonitorDataImpl.java b/src/org/kne/cloud/network/monitor/MonitorDataImpl.java index cc5c56d..97c7741 100644 --- a/src/org/kne/cloud/network/monitor/MonitorDataImpl.java +++ b/src/org/kne/cloud/network/monitor/MonitorDataImpl.java @@ -26,7 +26,7 @@ private TimerTask ptt=new TimerTask() { @Override public void run() { - reliability=(reliability*999+(state==ONLINE?1:0))/1000; + reliability=(reliability*999+(state==UP?1:0))/1000; } }; @@ -58,11 +58,11 @@ private TimerTask ptt=new TimerTask() { } private String getDsc() { switch(state) { - case OFFLINE: + case DOWN: return "○离线"; - case CONNECTING: - return "◐连接中"; - case ONLINE: + case UNSTABLE: + return "◐不稳定"; + case UP: return "●在线"; } return null; diff --git a/src/org/kne/cloud/network/monitor/QueueingMonitorDataImpl.java b/src/org/kne/cloud/network/monitor/QueueingMonitorDataImpl.java deleted file mode 100644 index 1494bba..0000000 --- a/src/org/kne/cloud/network/monitor/QueueingMonitorDataImpl.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.kne.cloud.network.monitor; - -public class QueueingMonitorDataImpl extends SpeedAndTrafficAndDelayMonitorDataImpl { - private long queueingDelay; - - public long getQueueingDelay() { - return queueingDelay; - } - - public void setQueueingDelay(long queueingDelay) { - this.queueingDelay = queueingDelay; - } -} diff --git a/src/org/kne/cloud/network/monitor/SpeedAndTrafficAndDelayMonitorDataImpl.java b/src/org/kne/cloud/network/monitor/SpeedAndTrafficAndDelayMonitorDataImpl.java index 289d72b..ef0c017 100644 --- a/src/org/kne/cloud/network/monitor/SpeedAndTrafficAndDelayMonitorDataImpl.java +++ b/src/org/kne/cloud/network/monitor/SpeedAndTrafficAndDelayMonitorDataImpl.java @@ -1,181 +1,79 @@ package org.kne.cloud.network.monitor; +import java.util.TimerTask; +import java.util.UUID; + +import org.kne.cloud.clock.HighAccuracyClock; +import org.kne.cloud.network.ipv6.PacketID; import org.kne.cloud.network.klalb.KLALBUtils; public class SpeedAndTrafficAndDelayMonitorDataImpl extends SpeedAndTrafficMonitorDataImpl implements SpeedAndTrafficMonitorData,DelayMonitorData{ + private long timewindowmax=500000000L; - - private volatile long outDelay=Long.MAX_VALUE/1024; - private volatile long outDelayMin=Long.MAX_VALUE; - private volatile long outDelayAvg=Long.MAX_VALUE; - private long outDelayOld; - private volatile long outJitter; - - - private volatile long inDelay=Long.MAX_VALUE/1024; - private volatile long inDelayMin=Long.MAX_VALUE; - private volatile long inDelayAvg=Long.MAX_VALUE; - private long inDelayOld; - private volatile long inJitter; - - - private volatile long latency=Long.MAX_VALUE/1024; - private volatile long latencyMin=Long.MAX_VALUE; - private volatile long latencyAvg=Long.MAX_VALUE; - private long latencyOld; - private volatile long totalJitter; - - private volatile long outDelayPredicted; - private volatile long inDelayPredicted; - - private volatile long recentPingNanoTime; - - - - public long getOutDelayAvg() { - return outDelayAvg; - } - public long getInDelayAvg() { - return inDelayAvg; - } - public long getLatencyAvg() { - return latencyAvg; - } - - - public long getRecentPingNanoTime() { - return recentPingNanoTime; - } - public void setRecentPingNanoTime(long recentPingNanoTime) { - this.recentPingNanoTime = recentPingNanoTime; - } - @Override - public long getOutDelay() { - return outDelay; - } - - @Override - public void setOutDelay(long delay) { - this.outDelay=delay; - if(outDelayAvg==Long.MAX_VALUE) { - outDelayAvg=delay; - }else { - outDelayAvg=(outDelayAvg*9999+delay)/10000; - } - if(outDelayMin==Long.MAX_VALUE||delay<=outDelayMin) { - outDelayMin=delay; - }else{ - outDelayMin=(outDelayMin*9999+delay)/10000; - } - this.latency=outDelay+inDelay; - - if(latencyAvg==Long.MAX_VALUE) { - latencyAvg=latency; - }else { - latencyAvg=(latencyAvg*9999+latency)/10000; - } - if(latencyMin==Long.MAX_VALUE||latency<= latencyMin) { - latencyMin=latency; - }else { - latencyMin=(latencyMin*9999+latency)/10000; - } - outDelayPredicted=outDelay; - updateOutJitter(); - updateTotalJitter(); - } - - @Override - public long getInDelay() { - return inDelay; - } - - @Override - public void setInDelay(long delay) { - this.inDelay=delay; - if(inDelayAvg==Long.MAX_VALUE) { - inDelayAvg=latency; - }else { - inDelayAvg=(inDelayAvg*9999+delay)/10000; - } - if(inDelayMin==Long.MAX_VALUE||delay<=inDelayMin) { - inDelayMin=delay; - }else{ - inDelayMin=(inDelayMin*9999+delay)/10000; - } - this.latency=outDelay+inDelay; - if(latencyAvg==Long.MAX_VALUE) { - latencyAvg=latency; - }else { - latencyAvg=(latencyAvg*9999+latency)/10000; - } - if(latencyMin==Long.MAX_VALUE||latency<= latencyMin) { - latencyMin=latency; - }else { - latencyMin=(latencyMin*9999+latency)/10000; - } - inDelayPredicted=inDelay; - updateInJitter(); - updateTotalJitter(); - } - - - @Override - public long getLatency() { - return latency; - } - - @Override - public void setLatency(long latency) { - this.latency=latency; - if(latencyAvg==Long.MAX_VALUE) { - latencyAvg=latency; - }else { - latencyAvg=(latencyAvg*9999+latency)/10000; - } - if(latencyMin==Long.MAX_VALUE||latency<= latencyMin) { - latencyMin=latency; - }else { - latencyMin=(latencyMin*9999+latency)/10000; - } - long tmp= latency>>1; - this.inDelay=tmp; - if(inDelayAvg==Long.MAX_VALUE) { - inDelayAvg=latency; - }else { - inDelayAvg=(inDelayAvg*9999+tmp)/10000; - } - if(inDelayMin==Long.MAX_VALUE||tmp<=inDelayMin) { - inDelayMin=tmp; - }else{ - inDelayMin=(inDelayMin*9999+tmp)/10000; - } +private TimerTask pttxr=new TimerTask() { - this.outDelay=tmp; - if(outDelayAvg==Long.MAX_VALUE) { - outDelayAvg=latency; - }else { - outDelayAvg=(outDelayAvg*9999+tmp)/10000; + @Override + public void run() { + long idelay=getInDelay(); + if(inDelayMin==Long.MAX_VALUE||idelay<=inDelayMin) { + inDelayMin=idelay; + }else{ + inDelayMin=(inDelayMin*9999+idelay)/10000; + } + long odelay=getOutDelay(); + if(outDelayMin==Long.MAX_VALUE||odelay<=outDelayMin) { + outDelayMin=odelay; + }else{ + outDelayMin=(outDelayMin*9999+odelay)/10000; + } } - if(outDelayMin==Long.MAX_VALUE||tmp<=outDelayMin) { - outDelayMin=tmp; - }else{ - outDelayMin=(outDelayMin*9999+tmp)/10000; - } - outDelayPredicted=outDelay; - inDelayPredicted=inDelay; - updateOutJitter(); - updateInJitter(); - updateTotalJitter(); + }; + { + getTimer().scheduleAtFixedRate(pttxr, timewindowmax/1000000, timewindowmax/1000000); } - + @Override + protected void finalize() throws Throwable { + pttxr.cancel(); + } + @Override public String toString() { StringBuilder sb=new StringBuilder(super.toString()); - sb.append(KLALBUtils.convertUintNanoDefalut( outDelay) ).append("s").append("\t").append(KLALBUtils.convertUintNanoDefalut( inDelay) ).append("s").append("\t").append(KLALBUtils.convertUintNanoDefalut( outJitter) ).append("s\t").append(KLALBUtils.convertUintNanoDefalut( inJitter) ).append("s\t"); + sb.append(KLALBUtils.convertUintNanoDefalut( getOutDelay()) ).append("s").append("\t").append(KLALBUtils.convertUintNanoDefalut( getInDelay()) ).append("s").append("\t").append(KLALBUtils.convertUintNanoDefalut( getOutJitter()) ).append("s\t").append(KLALBUtils.convertUintNanoDefalut( getInJitter()) ).append("s\t"); return sb.toString(); } + public SpeedAndTrafficAndDelayMonitorDataImpl(HighAccuracyClock clock) { + super(clock); + // TODO 自动生成的构造函数存根 + } + + public SpeedAndTrafficAndDelayMonitorDataImpl(TimestampMonitor uploadBandwidth, + TimestampMonitor downloadBandwidth) { + super(uploadBandwidth, downloadBandwidth); + // TODO 自动生成的构造函数存根 + } + + @Override + public long getOutDelay() { + return super.getUploadBandwidth().getRecentDelay(); + } + + + + + + @Override + public long getInDelay() { + return super.getDownloadBandwidth().getRecentDelay(); + } + + private volatile long outDelayMin=Long.MAX_VALUE; + private volatile long outJitter; + private volatile long inDelayMin=Long.MAX_VALUE; + private volatile long inJitter; + @Override public long getOutJitter() { return outJitter; @@ -185,11 +83,7 @@ public class SpeedAndTrafficAndDelayMonitorDataImpl extends SpeedAndTrafficMonit public long getInJitter() { return inJitter; } - - @Override - public long getTotalJitter() { - return totalJitter; - } + public long getOutDelayMin() { return outDelayMin; } @@ -198,35 +92,6 @@ public class SpeedAndTrafficAndDelayMonitorDataImpl extends SpeedAndTrafficMonit return inDelayMin; } - public long getLatencyMin() { - return latencyMin; - } - private void updateOutJitter() { - - long vj=Math.abs( outDelay-outDelayOld); - outJitter=(outJitter*9+vj)/10; - outDelayOld =outDelay; - } - private void updateInJitter() { - long vj=Math.abs( inDelay-inDelayOld); - inJitter=(inJitter*9+vj)/10; - inDelayOld =inDelay; - } - private void updateTotalJitter() { - long vj=Math.abs( latency-latencyOld); - totalJitter=(totalJitter*9+vj)/10; - latencyOld =latency; - - } - - - public long getOutDelayPredicted() { - return outDelayPredicted; - } - - public long getInDelayPredicted() { - return inDelayPredicted; - } } diff --git a/src/org/kne/cloud/network/monitor/SpeedAndTrafficMonitorData.java b/src/org/kne/cloud/network/monitor/SpeedAndTrafficMonitorData.java index b2a1e11..9d0edc3 100644 --- a/src/org/kne/cloud/network/monitor/SpeedAndTrafficMonitorData.java +++ b/src/org/kne/cloud/network/monitor/SpeedAndTrafficMonitorData.java @@ -1,35 +1,27 @@ package org.kne.cloud.network.monitor; +import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.LongAdder; +import org.kne.cloud.network.ipv6.PacketID; + public interface SpeedAndTrafficMonitorData extends MonitorData{ -public long getInTraffic(); -public long getOutTraffic(); - -public LongAdder getInTrafficAL(); - -public LongAdder getOutTrafficAL(); - -public long getInSpeed(); + public TimestampMonitor getUploadBandwidth(); -public long getOutSpeed(); - - -public long getInPPS(); - -public long getOutPPS(); - -public LongAdder getInPacketCounterAL(); - -public LongAdder getOutPacketCounterAL(); - -public long getInPacketCounter(); - - -public long getOutPacketCounter(); - + public TimestampMonitor getDownloadBandwidth(); + public long getOutSpeed(); + public long getInSpeed(); + public long getOutTraffic(); + public long getInTraffic(); + public long getOutPPS() ; + public long getInPPS() ; + + public long getOutSpeedMax(); + public long getInSpeedMax(); + public long getOutPPSMax(); + public long getInPPSMax(); } diff --git a/src/org/kne/cloud/network/monitor/SpeedAndTrafficMonitorDataImpl.java b/src/org/kne/cloud/network/monitor/SpeedAndTrafficMonitorDataImpl.java index 212341e..c8a49b2 100644 --- a/src/org/kne/cloud/network/monitor/SpeedAndTrafficMonitorDataImpl.java +++ b/src/org/kne/cloud/network/monitor/SpeedAndTrafficMonitorDataImpl.java @@ -1,294 +1,78 @@ package org.kne.cloud.network.monitor; import java.util.TimerTask; +import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.LongAdder; +import org.kne.cloud.clock.HighAccuracyClock; +import org.kne.cloud.network.ipv6.PacketID; import org.kne.cloud.network.klalb.KLALBUtils; public class SpeedAndTrafficMonitorDataImpl extends MonitorDataImpl implements SpeedAndTrafficMonitorData { - private long updatetime=System.nanoTime(); - private long updatetime1=System.nanoTime(); - private long updatetime2=System.nanoTime(); + private TimestampMonitoruploadBandwidth; + private TimestampMonitordownloadBandwidth; + private long timewindow=200000000L; + private long timewindowmax=200000000L; - private volatile LongAdder inTraffic=new LongAdder(); - private volatile LongAdder outTraffic=new LongAdder(); + private static final long CALC_TIMEOUT=50000000; - - private long inTrafficOld=0; - private long outTrafficOld=0; - private long inTrafficOld1=0; - private long outTrafficOld1=0; - private long inTrafficOld2=0; - private long outTrafficOld2=0; - - private volatile long inSpeed; - private volatile long outSpeed; - - private volatile long inSpeedAvg; - private volatile long outSpeedAvg; - private volatile long inSpeedAvg2; - private volatile long outSpeedAvg2; - - private volatile long inSpeedMax; - private volatile long outSpeedMax; - private volatile long inSpeedMax2; - private volatile long outSpeedMax2; - - public SpeedAndTrafficMonitorDataImpl() { + public SpeedAndTrafficMonitorDataImpl(HighAccuracyClock clock) { super(); - createTask(); - createTask1(); - createTask2(); + this.clock=clock; + uploadBandwidth=new ArrayListTimestampMonitor(clock,"UploadMonitor", 100, 500000000L); + downloadBandwidth=new ArrayListTimestampMonitor(clock,"DownloadMonitor", 100, 500000000L); + + getTimer().scheduleAtFixedRate(pttx, timewindowmax/1000000, timewindowmax/1000000); } - protected void createTask() { - getTimer().scheduleAtFixedRate(tmt, 0, 20); + private HighAccuracyClock clock; + public HighAccuracyClock getClock() { + return clock; } - protected void createTask1() { - getTimer().scheduleAtFixedRate(tmt1, 0, 500); - } - protected void createTask2() { - getTimer().scheduleAtFixedRate(tmt2, 0, 5000); - } - public long getInSpeedAvg2() { - return inSpeedAvg2; - } - - public long getOutSpeedAvg2() { - return outSpeedAvg2; - } - - public long getInTraffic() { - return inTraffic.sum(); - } - - public long getOutTraffic() { - return outTraffic.sum(); - } - - public LongAdder getInTrafficAL() { - return inTraffic; - } - - public LongAdder getOutTrafficAL() { - return outTraffic; - } - - public long getInSpeed() { - return inSpeed; - } - - - public long getOutSpeed() { - return outSpeed; - } - - public long getInSpeedAvg() { - return inSpeedAvg; - } - - - public long getOutSpeedAvg() { - return outSpeedAvg; - } - - public long getInSpeedMax() { - return inSpeedMax; - } - - - public long getOutSpeedMax() { - return outSpeedMax; - } - public long getInSpeedMax2() { - return inSpeedMax2; + + + public SpeedAndTrafficMonitorDataImpl(TimestampMonitor uploadBandwidth, + TimestampMonitor downloadBandwidth) { + super(); + this.uploadBandwidth = uploadBandwidth; + this.downloadBandwidth = downloadBandwidth; + + getTimer().scheduleAtFixedRate(pttx, timewindowmax/1000000, timewindowmax/1000000); } - public long getOutSpeedMax2() { - return outSpeedMax2; + + + + + public TimestampMonitor getUploadBandwidth() { + return uploadBandwidth; } + + + + + + + public TimestampMonitor getDownloadBandwidth() { + return downloadBandwidth; + } + - - protected TimerTask tmt=new TimerTask() { - - @Override - public void run() { - long d=System.nanoTime()-updatetime; - if(d!=0) { - if(inTraffic!=null) { - long inTrafficSum=inTraffic.sum(); - long i=inTrafficSum-inTrafficOld; - inTrafficOld =inTrafficSum; - inSpeed= (long) (i*1000000000.0/d); - } - - if(outTraffic!=null) { - long outTrafficSum=outTraffic.sum(); - long o=outTrafficSum-outTrafficOld; - outTrafficOld =outTrafficSum; - outSpeed= (long) (o*1000000000.0/d); - } - - if(inCounter!=null) { - long inCounterSum=inCounter.sum(); - long i=inCounterSum-inCounterOld; - inCounterOld =inCounterSum; - inPPS= (long) (i*1000000000.0/d); - } - if(outCounter!=null) { - long outCounterSum=outCounter.sum(); - long i=outCounterSum-outCounterOld; - outCounterOld =outCounterSum; - outPPS= (long) (i*1000000000.0/d); - } - } - if(outSpeed>=outSpeedMax) { - outSpeedMax=outSpeed; - }else { - outSpeedMax=(outSpeedMax*99+outSpeed)/100; - } - - if(inSpeed>=inSpeedMax) { - inSpeedMax=inSpeed; - }else { - inSpeedMax=(inSpeedMax*99+inSpeed)/100; - } - - if(outPPS>=outPPSMax) { - outPPSMax=outPPS; - }else { - outPPSMax=(outPPSMax*99+outPPS)/100; - } - - if(inPPS>=inPPSMax) { - inPPSMax=inPPS; - }else { - inPPSMax=(inPPSMax*99+inPPS)/100; - } - - updatetime=System.nanoTime(); - - } - }; - - protected TimerTask tmt1=new TimerTask() { - - @Override - public void run() { - long d=System.nanoTime()-updatetime1; - if(d!=0) { - if(inTraffic!=null) { - long inTrafficSum=inTraffic.sum(); - long i=inTrafficSum-inTrafficOld1; - inTrafficOld1 =inTrafficSum; - inSpeedAvg= (long) (i*1000000000.0/d); - } - - if(outTraffic!=null) { - long outTrafficSum=outTraffic.sum(); - long o=outTrafficSum-outTrafficOld1; - outTrafficOld1 =outTrafficSum; - outSpeedAvg= (long) (o*1000000000.0/d); - } - if(inCounter!=null) { - long inCounterSum=inCounter.sum(); - long i=inCounterSum-inCounterOld1; - inCounterOld1 =inCounterSum; - inPPSAvg= (long) (i*1000000000.0/d); - } - - if(outCounter!=null) { - long outCounterSum=outCounter.sum(); - long o=outCounterSum-outCounterOld1; - outCounterOld1 =outCounterSum; - outPPSAvg= (long) (o*1000000000.0/d); - } - } - - updatetime1=System.nanoTime(); - - } - }; - protected TimerTask tmt2=new TimerTask() { - - @Override - public void run() { - long d=System.nanoTime()-updatetime2; - if(d!=0) { - if(inTraffic!=null) { - long inTrafficSum=inTraffic.sum(); - long i=inTrafficSum-inTrafficOld2; - inTrafficOld2 =inTrafficSum; - inSpeedAvg2= (long) (i*1000000000.0/d); - } - - if(outTraffic!=null) { - long outTrafficSum=outTraffic.sum(); - long o=outTrafficSum-outTrafficOld2; - outTrafficOld2 =outTrafficSum; - outSpeedAvg2= (long) (o*1000000000.0/d); - } - - - if(inCounter!=null) { - long inCounterSum=inCounter.sum(); - long i=inCounterSum-inCounterOld2; - inCounterOld2 =inCounterSum; - inPPSAvg2= (long) (i*1000000000.0/d); - } - - if(outCounter!=null) { - long outCounterSum=outCounter.sum(); - long o=outCounterSum-outCounterOld2; - outCounterOld2 =outCounterSum; - outPPSAvg2= (long) (o*1000000000.0/d); - } - } - - if(outSpeedAvg2>=outSpeedMax2) { - outSpeedMax2=outSpeedAvg2; - }else { - outSpeedMax2=(outSpeedMax2*999+outSpeedAvg2)/1000; - } - - if(inSpeedAvg2>=inSpeedMax2) { - inSpeedMax2=inSpeedAvg2; - }else { - inSpeedMax2=(inSpeedMax2*999+inSpeedAvg2)/1000; - } - - - if(outPPSAvg2>=outPPSMax2) { - outPPSMax2=outPPSAvg2; - }else { - outPPSMax2=(outPPSMax2*999+outPPSAvg2)/1000; - } - - if(inPPSAvg2>=inPPSMax2) { - inPPSMax2=inPPSAvg2; - }else { - inPPSMax2=(inPPSMax2*999+inPPSAvg2)/1000; - } - - updatetime2=System.nanoTime(); - - } - }; @Override public String toString() { StringBuilder sb=new StringBuilder(super.toString()); sb.append('\t'); - sb.append(KLALBUtils. convertIBUint(outTraffic.sum())).append("\t").append(KLALBUtils.convertIBUint(inTraffic.sum())).append("\t").append(KLALBUtils.convertIBUint(outSpeed)).append("/s\t").append(KLALBUtils.convertIBUint(inSpeed)).append("/s\t"); + sb.append(KLALBUtils. convertIBUint(uploadBandwidth.getTotalDataSize())).append("\t").append(KLALBUtils.convertIBUint(downloadBandwidth.getTotalDataSize())).append("\t").append(KLALBUtils.convertIBUint(uploadBandwidth.calculateBandwidth(timewindow))).append("/s\t").append(KLALBUtils.convertIBUint(downloadBandwidth.calculateBandwidth(timewindow))).append("/s\t"); /*if(getState()==OFFLINE) { sb.append((coolingTime-(System.currentTimeMillis()-mls))/1000L); @@ -301,84 +85,116 @@ public class SpeedAndTrafficMonitorDataImpl extends MonitorDataImpl implements S return sb.toString(); } + + + + + + private volatile long outspeedTimeout=System.nanoTime(); + public long getOutSpeed() { + long curr=System.nanoTime(); + if(curr-outspeedTimeout>CALC_TIMEOUT) { + outspeedTimeout=curr; + outSpeed=uploadBandwidth.calculateBandwidth(timewindow); + } + return outSpeed; + } + private volatile long inspeedTimeout=System.nanoTime(); + public long getInSpeed() { + long curr=System.nanoTime(); + if(curr-inspeedTimeout>CALC_TIMEOUT) { + inspeedTimeout=curr; + inSpeed=downloadBandwidth.calculateBandwidth(timewindow); + } + return inSpeed; + } + + + + + + + public long getOutTraffic() { + return uploadBandwidth.getTotalDataSize(); + } + + + + + + + public long getInTraffic() { + return downloadBandwidth.getTotalDataSize(); + } + + + + + + + public long getOutPPS() { + return uploadBandwidth.calculatePacketRate(timewindow); + } + + + public long getInPPS() { + return downloadBandwidth.calculatePacketRate(timewindow); + } + private long inSpeed; + private long outSpeed; + + private long outSpeeedMax=0; + private long inSpeedMax=0; + private long outPPSMax=0; + private long inPPSMax=0; + + public long getOutSpeedMax() { + return outSpeeedMax; + } + public long getInSpeedMax() { + return inSpeedMax; + } + public long getOutPPSMax() { + return outPPSMax; + } + public long getInPPSMax() { + return inPPSMax; + } + +private TimerTask pttx=new TimerTask() { + + @Override + public void run() { + long os=uploadBandwidth.calculateBandwidth(timewindowmax); + long is=downloadBandwidth.calculateBandwidth(timewindowmax); + long op=uploadBandwidth.calculatePacketRate(timewindowmax); + long ip=uploadBandwidth.calculatePacketRate(timewindowmax); + if(os>outSpeeedMax) { + outSpeeedMax=(outSpeeedMax+os)/2; + }else { + outSpeeedMax=(outSpeeedMax*999+os)/1000; + } + if(is>inSpeedMax) { + inSpeedMax=(inSpeedMax+is)/2; + }else { + inSpeedMax=(inSpeedMax*999+is)/1000; + } + if(op>outPPSMax) { + outPPSMax=(outPPSMax+op)/2; + }else { + outPPSMax=(outPPSMax*999+op)/1000; + } + if(ip>inPPSMax) { + inPPSMax=(inPPSMax+ip)/2; + }else { + inPPSMax=(inPPSMax*999+ip)/1000; + } + } + }; + + @Override protected void finalize() throws Throwable { - super.finalize(); - tmt.cancel(); - tmt1.cancel(); - tmt2.cancel(); + pttx.cancel(); } - - - - private volatile LongAdder inCounter=new LongAdder(); - private volatile LongAdder outCounter=new LongAdder(); - - private long inCounterOld; - private long outCounterOld; - private long inCounterOld1; - private long outCounterOld1; - private long inCounterOld2; - private long outCounterOld2; - - private volatile long inPPS; - private volatile long outPPS; - - - private volatile long inPPSMax; - private volatile long outPPSMax; - private volatile long inPPSMax2; - private volatile long outPPSMax2; - - private volatile long inPPSAvg; - private volatile long outPPSAvg; - private volatile long inPPSAvg2; - private volatile long outPPSAvg2; - - @Override - public long getInPPS() { - return inPPS; - } - - @Override - public long getOutPPS() { - return outPPS; - } - - @Override - public LongAdder getInPacketCounterAL() { - return inCounter; - } - - @Override - public LongAdder getOutPacketCounterAL() { - return outCounter; - } - - @Override - public long getInPacketCounter() { - return inCounter.sum(); - } - - @Override - public long getOutPacketCounter() { - return outCounter.sum(); - } - - public double getOutPPSMax2() { - return outPPSMax2; - } - - public double getInPPSMax2() { - return inPPSMax2; - } - - public long getOutPPSAvg() { - return outPPSAvg; - } - - public long getInPPSAvg() { - return inPPSAvg; - } - } diff --git a/src/org/kne/cloud/network/monitor/TimestampMonitor.java b/src/org/kne/cloud/network/monitor/TimestampMonitor.java index 2d667d0..810861b 100644 --- a/src/org/kne/cloud/network/monitor/TimestampMonitor.java +++ b/src/org/kne/cloud/network/monitor/TimestampMonitor.java @@ -1,6 +1,7 @@ package org.kne.cloud.network.monitor; import org.kne.cloud.clock.HighAccuracyClock; +import org.kne.cloud.network.ipv6.PacketID; import org.kne.math.Long128; /** @@ -45,6 +46,11 @@ public interface TimestampMonitor { */ boolean recordPacket(K key, Long128 timestamp, int length); + + boolean recordPacket(K key, Long128 timestamp, int length, long dsndDelay); + + boolean recordPacket(K key, int length, long dsndDelay); + // ==================== 清理维护方法 ==================== /** @@ -106,6 +112,22 @@ public interface TimestampMonitor { */ long calculateBandwidth(Long128 currentTime, long timeWindowNs); + /** + * 计算转发率(使用当前时间) + * @param timeWindowNs 时间窗口(纳秒) + * @return 转发率(包/秒) + */ + long calculatePacketRate(long timeWindowNs); + + /** + * 计算转发率(使用指定时间) + * @param currentTime 当前时间 + * @param timeWindowNs 时间窗口(纳秒) + * @return 转发率(包/秒) + */ + long calculatePacketRate(Long128 currentTime, long timeWindowNs); + + /** * 计算流量统计信息(使用当前时间) * @param timeWindowNs 时间窗口(纳秒) @@ -121,6 +143,12 @@ public interface TimestampMonitor { */ TrafficStats calculateTrafficStats(Long128 currentTime, long timeWindowNs); + long getRecentDelay(); + + + TimestampMonitorValue getRecentDelayEntry(); + + // ==================== 全局统计方法 ==================== /** @@ -153,4 +181,6 @@ public interface TimestampMonitor { * @return 监控器状态字符串 */ String toString(); + + } \ No newline at end of file diff --git a/src/org/kne/cloud/network/monitor/TimestampMonitorValue.java b/src/org/kne/cloud/network/monitor/TimestampMonitorValue.java index 71aa017..70df7a7 100644 --- a/src/org/kne/cloud/network/monitor/TimestampMonitorValue.java +++ b/src/org/kne/cloud/network/monitor/TimestampMonitorValue.java @@ -8,51 +8,68 @@ public class TimestampMonitorValue implements Comparable private final Long128 timestamp; private final int length; private final TimestampMonitorKey key; - + private long delay; public TimestampMonitorValue(TimestampMonitorKey key, Long128 timestamp, int length) { + this(key,timestamp,length,Long.MAX_VALUE/1024); + } + public TimestampMonitorValue(TimestampMonitorKey key, Long128 timestamp, int length,long delay) { this.key = key; this.timestamp = timestamp; this.length = length; + this.delay=delay; } @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + length; - result = prime * result + ((timestamp == null) ? 0 : timestamp.hashCode()); - return result; - } + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (int) (delay ^ (delay >>> 32)); + result = prime * result + length; + result = prime * result + ((timestamp == null) ? 0 : timestamp.hashCode()); + return result; + } @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - TimestampMonitorValue other = (TimestampMonitorValue) obj; - if (length != other.length) - return false; - if (timestamp == null) { - if (other.timestamp != null) - return false; - } else if (!timestamp.equals(other.timestamp)) - return false; - return true; - } + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TimestampMonitorValue other = (TimestampMonitorValue) obj; + if (delay != other.delay) + return false; + if (length != other.length) + return false; + if (timestamp == null) { + if (other.timestamp != null) + return false; + } else if (!timestamp.equals(other.timestamp)) + return false; + return true; + } @Override - public String toString() { - return "TimestampMonitorValue [timestamp=" + timestamp + ", length=" + length + "]"; - } + public String toString() { + return "TimestampMonitorValue [timestamp=" + timestamp + ", length=" + length + ", key=" + key + ", delay=" + + delay + "]"; + } public Long128 getTimestamp() { return timestamp; } public int getLength() { return length; } public TimestampMonitorKey getKey() { return key; } - @Override + + public long getDelay() { + return delay; + } + + public void setDelay(long delay) { + this.delay = delay; + } + + @Override public int compareTo(TimestampMonitorValue other) { return this.timestamp.compareTo(other.timestamp); } diff --git a/src/org/kne/cloud/network/ntp/NTPContext.java b/src/org/kne/cloud/network/ntp/NTPContext.java index 910894e..5ea4a6e 100644 --- a/src/org/kne/cloud/network/ntp/NTPContext.java +++ b/src/org/kne/cloud/network/ntp/NTPContext.java @@ -3,7 +3,6 @@ package org.kne.cloud.network.ntp; import java.io.Closeable; import java.io.IOException; import java.math.BigDecimal; -import java.math.BigInteger; import java.net.InetSocketAddress; import java.security.Timestamp; import java.util.ArrayList; @@ -33,12 +32,14 @@ import org.kne.math.Long128; public class NTPContext implements Closeable, AutoCloseable { private HighAccuracyClock clock; - private static final boolean debug = true; + private static final boolean debug = false; private static final int REQUEST_COUNT = 10; - private BigInteger systemFrequencyOffset = NTPTimestamps.nanosToNtp128BitTimeInterval(BigInteger.valueOf(5000)); - private BigInteger localPrecision = NTPTimestamps.nanosToNtp128BitTimeInterval(BigInteger.valueOf(1000)); - private static final BigInteger adjustThreshold = BigInteger.valueOf(2000000L); + private Long128 systemFrequencyOffset = NTPTimestamps.nanosToNtp128BitTimeInterval(new Long128(5000)); + private Long128 localPrecision = NTPTimestamps.nanosToNtp128BitTimeInterval(new Long128(1000)); + private static final Long128 adjustThreshold0 = Long128.valueOf(1000000000L); + private static final Long128 adjustThreshold1 = Long128.valueOf(2000000L); + private AtomicBoolean firstSync=new AtomicBoolean(true); private int minStratum = 16; private volatile PeerInfo currentClock = new PeerInfo(); @@ -49,6 +50,7 @@ public class NTPContext implements Closeable, AutoCloseable { public void run() { while (!closed) { try { + clearPackets(); Map> mlp = new HashMap<>(); ios.forEach((v) -> { mlp.put(v, v.getPeersWillSend()); @@ -117,6 +119,10 @@ public class NTPContext implements Closeable, AutoCloseable { private ConcurrentHashMap> recvmap = new ConcurrentHashMap>(); + protected void clearPackets() { + recvmap.clear(); + } + protected void putPacket(NTPv4Packet nv4, MultipurposeSocketAddress inetSocketAddress) { checkIP(); List newv = new Vector(); @@ -127,7 +133,7 @@ public class NTPContext implements Closeable, AutoCloseable { synchronized (oldv) { oldv.add(nv4); - while (oldv.size() > 8) { + while (oldv.size() > 10) { oldv.remove(0); } } @@ -162,10 +168,10 @@ public class NTPContext implements Closeable, AutoCloseable { private byte precision; private long rootDelay = Integer.MAX_VALUE; private long rootDispersion = Integer.MAX_VALUE; - private BigInteger referenceTimestamp = BigInteger.ZERO; - private BigInteger uploadDelay; - private BigInteger downloadDelay; - private BigInteger rtt; + private Long128 referenceTimestamp = Long128.ZERO; + private Long128 uploadDelay; + private Long128 downloadDelay; + private Long128 rtt; @Override public String toString() { @@ -185,12 +191,12 @@ public class NTPContext implements Closeable, AutoCloseable { return Long.compare(getRootDistance(), o.getRootDistance()); } - public BigInteger getCurrentSelfDispersion128() { - BigInteger vk = (clock.getCurrentTimeNTP128().subtract(referenceTimestamp)).multiply(systemFrequencyOffset) - .divide(BigInteger.TWO.pow(64)); - BigInteger vkl; + public Long128 getCurrentSelfDispersion128() { + Long128 vk = (clock.getCurrentTimeNTP128().subtract(referenceTimestamp)).multiply(systemFrequencyOffset) + .divide(Long128.ONE.shiftLeft(64)); + Long128 vkl; if (vk.signum() < 0) { - vkl = BigInteger.ZERO; + vkl = Long128.ZERO; } else { vkl = vk; } @@ -198,7 +204,7 @@ public class NTPContext implements Closeable, AutoCloseable { } public long getCurrentRootDispersion() { - BigInteger vkl = getCurrentSelfDispersion128().shiftRight(16 + 32); + Long128 vkl = getCurrentSelfDispersion128().shiftRight(16 + 32); long rez = rootDispersion + vkl.longValue(); if (rez > Integer.MAX_VALUE) { rez = Integer.MAX_VALUE; @@ -206,7 +212,7 @@ public class NTPContext implements Closeable, AutoCloseable { return rez; } - public BigInteger getAdj() { + public Long128 getAdj() { return NTPTimestamps.ntp128BitToNanosInterval(uploadDelay.subtract(downloadDelay).shiftRight(1)); } } @@ -217,7 +223,7 @@ public class NTPContext implements Closeable, AutoCloseable { } private AtomicLong prevAdjustTime = new AtomicLong(System.nanoTime()); - private volatile BigInteger deltaRemaining; + private volatile Long128 deltaRemaining; private long avgAdj=0; private void selectAndApply(List peerInfo) { Collections.sort(peerInfo); @@ -228,32 +234,35 @@ public class NTPContext implements Closeable, AutoCloseable { currentClock = pix; int i; int m = Math.min(peerInfo.size(), 3); - BigInteger bi = BigInteger.ZERO; + Long128 bi = Long128.ZERO; for (i = 0; i < m; i++) { PeerInfo pi = peerInfo.get(i); - BigInteger adjt = pi.getAdj(); + Long128 adjt = pi.getAdj(); bi = bi.add(adjt); } - BigInteger adj = bi.divide(BigInteger.valueOf(i)); + Long128 adj = bi.divide(Long128.valueOf(i)); avgAdj=(avgAdj*7+adj.abs().longValue())/8; - BigInteger adjustment; - if (adj.abs().compareTo(adjustThreshold) > 0) { - adjustment = new BigDecimal(adj).multiply(BigDecimal.valueOf(0.5)).toBigInteger(); + Long128 adjustment; + Long128 adjabs=adj.abs(); + if (adjabs.compareTo(adjustThreshold0) > 0&&firstSync.compareAndSet(true, false)) { + adjustment=adj; + }else if (adjabs.compareTo(adjustThreshold1) > 0) { + adjustment = Long128.valueOf(new BigDecimal(adj.toBigInteger()).multiply(BigDecimal.valueOf(0.5)).toBigInteger()); } else { - adjustment = new BigDecimal(adj).multiply(BigDecimal.valueOf(0.0625)).toBigInteger(); + adjustment = Long128.valueOf(new BigDecimal(adj.toBigInteger()).multiply(BigDecimal.valueOf(0.0625/2)).toBigInteger()); if (deltaRemaining != null) { long curr = System.nanoTime(); long old = prevAdjustTime.getAndSet(curr); - BigInteger fadj = adjustment.multiply(BigInteger.valueOf(TimeUnit.SECONDS.toNanos(1))) - .divide(BigInteger.valueOf(curr - old)); - BigInteger fadjustment = new BigDecimal(fadj).multiply(BigDecimal.valueOf(0.015625/4)).toBigInteger(); + Long128 fadj = adjustment.multiply(Long128.valueOf(TimeUnit.SECONDS.toNanos(1))) + .divide(Long128.valueOf(curr - old)); + Long128 fadjustment = Long128.valueOf( new BigDecimal(fadj.toBigInteger()).multiply(BigDecimal.valueOf(0.015625/4)).toBigInteger()); clock.adjustFrequency(fadjustment.longValue()); if(debug) System.out.println("fadj:" + fadjustment + " f:" + clock.getFrequency()); } deltaRemaining = adj.subtract(adjustment); } - clock.adjustClock(Long128.valueOf( adjustment)); + clock.adjustClock( adjustment); if(debug) System.out.println("delta:" + adjustment + " deltaRemaining:" + deltaRemaining); } @@ -305,9 +314,9 @@ public class NTPContext implements Closeable, AutoCloseable { pi.rootDelay = pack.getRootDelay();// (1/65536.0*1000000000) pi.rootDispersion = pack.getRootDispersion(); pi.referenceTimestamp = pack.getReferenceTimestamp128(); - BigInteger uploadD = pack.getReceiveTimestamp128().subtract(pack.getOriginateTimestamp128()); - BigInteger downloadD = pack.getDestinationTimestamp128().subtract(pack.getTransmitTimestamp128()); - BigInteger rtt = uploadD.add(downloadD); + Long128 uploadD = pack.getReceiveTimestamp128().subtract(pack.getOriginateTimestamp128()); + Long128 downloadD = pack.getDestinationTimestamp128().subtract(pack.getTransmitTimestamp128()); + Long128 rtt = uploadD.add(downloadD); if (pi.uploadDelay == null) { pi.uploadDelay = uploadD; } else { @@ -353,19 +362,19 @@ public class NTPContext implements Closeable, AutoCloseable { + NTPTimestamps.ntp128ToString(currentClock.referenceTimestamp) + "]"; } - public BigInteger getSystemFrequencyOffset() { + public Long128 getSystemFrequencyOffset() { return systemFrequencyOffset; } - public void setSystemFrequencyOffset(BigInteger systemFrequencyOffset) { + public void setSystemFrequencyOffset(Long128 systemFrequencyOffset) { this.systemFrequencyOffset = systemFrequencyOffset; } - public BigInteger getLocalPrecision() { + public Long128 getLocalPrecision() { return localPrecision; } - public void setLocalPrecision(BigInteger localPrecision) { + public void setLocalPrecision(Long128 localPrecision) { this.localPrecision = localPrecision; } @@ -389,15 +398,15 @@ public class NTPContext implements Closeable, AutoCloseable { return currentClock.rootDispersion; } - public BigInteger getReferenceTimestamp() { + public Long128 getReferenceTimestamp() { return currentClock.referenceTimestamp; } - public BigInteger getReferenceTimestamp64() { + public Long128 getReferenceTimestamp64() { return NTPTimestamps.ntp128To64(currentClock.referenceTimestamp); } - public BigInteger getCurrentSelfDispersion128() { + public Long128 getCurrentSelfDispersion128() { return currentClock.getCurrentSelfDispersion128(); } diff --git a/src/org/kne/cloud/network/ntp/NTPv4Packet.java b/src/org/kne/cloud/network/ntp/NTPv4Packet.java index be7a8c7..814b166 100644 --- a/src/org/kne/cloud/network/ntp/NTPv4Packet.java +++ b/src/org/kne/cloud/network/ntp/NTPv4Packet.java @@ -1,7 +1,6 @@ package org.kne.cloud.network.ntp; import java.io.IOException; -import java.math.BigInteger; import java.nio.ByteBuffer; import java.nio.channels.ReadableByteChannel; import java.nio.channels.WritableByteChannel; @@ -13,6 +12,7 @@ import org.kne.cloud.clock.HighAccuracyClock; import org.kne.cloud.clock.NTPTimestamps; import org.kne.cloud.network.NetworkPacket; import org.kne.io.KNEChannels; +import org.kne.math.Long128; public class NTPv4Packet extends NetworkPacket { public static final int NTP_VERSION_NUMBER = 4; @@ -29,14 +29,14 @@ public class NTPv4Packet extends NetworkPacket { public static final int BASE_HEADER_LENGTH = 48; // 基本头部长度 public static final int AUTH_FIELD_LENGTH = 20; // 认证字段长度 - private static final BigInteger TWO_POW_64 = BigInteger.TWO.pow(64); + private static final Long128 TWO_POW_64 = Long128.ONE.shiftLeft(64); private ByteBuffer header = NetworkPacket.bufferAllocator.allocate(BASE_HEADER_LENGTH); private List extensionFields = new ArrayList<>(); private AuthenticationField authField; - private BigInteger destinationTimeStamp; + private Long128 destinationTimeStamp; private HighAccuracyClock clock; public NTPv4Packet(HighAccuracyClock clock) { @@ -275,48 +275,48 @@ public class NTPv4Packet extends NetworkPacket { - public void setReferenceTimestamp64(BigInteger longValue) { + public void setReferenceTimestamp64(Long128 longValue) { setReferenceTimestamp(longValue.longValue()); } - public void setOriginateTimestamp64(BigInteger originateTimestamp) { + public void setOriginateTimestamp64(Long128 originateTimestamp) { setOriginateTimestamp(originateTimestamp.longValue()); } - public void setReceiveTimestamp64(BigInteger longValue) { + public void setReceiveTimestamp64(Long128 longValue) { setReceiveTimestamp(longValue.longValue()); } - public void setTransmitTimestamp64(BigInteger longValue) { + public void setTransmitTimestamp64(Long128 longValue) { setTransmitTimestamp(longValue.longValue()); } - public BigInteger getReferenceTimestamp64() { - BigInteger rez=BigInteger.valueOf(getReferenceTimestamp()); + public Long128 getReferenceTimestamp64() { + Long128 rez=Long128.valueOf(getReferenceTimestamp()); if(rez.signum()<0) { rez=rez.add(TWO_POW_64); } return rez; } - public BigInteger getOriginateTimestamp64() { - BigInteger rez=BigInteger.valueOf(getOriginateTimestamp()); + public Long128 getOriginateTimestamp64() { + Long128 rez=Long128.valueOf(getOriginateTimestamp()); if(rez.signum()<0) { rez=rez.add(TWO_POW_64); } return rez; } - public BigInteger getReceiveTimestamp64() { - BigInteger rez=BigInteger.valueOf(getReceiveTimestamp()); + public Long128 getReceiveTimestamp64() { + Long128 rez=Long128.valueOf(getReceiveTimestamp()); if(rez.signum()<0) { rez=rez.add(TWO_POW_64); } return rez; } - public BigInteger getTransmitTimestamp64() { - BigInteger rez=BigInteger.valueOf(getTransmitTimestamp()); + public Long128 getTransmitTimestamp64() { + Long128 rez=Long128.valueOf(getTransmitTimestamp()); if(rez.signum()<0) { rez=rez.add(TWO_POW_64); } @@ -367,7 +367,7 @@ public class NTPv4Packet extends NetworkPacket { - public BigInteger getDestinationTimestamp128() { + public Long128 getDestinationTimestamp128() { return destinationTimeStamp; } @@ -493,19 +493,19 @@ public class NTPv4Packet extends NetworkPacket { } } - public BigInteger getReceiveTimestamp128() { + public Long128 getReceiveTimestamp128() { return NTPTimestamps.inferNtp64To128(getReceiveTimestamp64(),clock.getCurrentTimeNTP128()); } - public BigInteger getOriginateTimestamp128() { + public Long128 getOriginateTimestamp128() { return NTPTimestamps.inferNtp64To128(getOriginateTimestamp64(),clock.getCurrentTimeNTP128()); } - public BigInteger getTransmitTimestamp128() { + public Long128 getTransmitTimestamp128() { return NTPTimestamps.inferNtp64To128(getTransmitTimestamp64(),clock.getCurrentTimeNTP128()); } - public BigInteger getReferenceTimestamp128() { + public Long128 getReferenceTimestamp128() { return NTPTimestamps.inferNtp64To128(getReferenceTimestamp64(),clock.getCurrentTimeNTP128()); } diff --git a/src/org/kne/cloud/network/ntp/NTPv4Protocol.java b/src/org/kne/cloud/network/ntp/NTPv4Protocol.java index 4524f73..f7db548 100644 --- a/src/org/kne/cloud/network/ntp/NTPv4Protocol.java +++ b/src/org/kne/cloud/network/ntp/NTPv4Protocol.java @@ -25,6 +25,7 @@ import org.kne.cloud.clock.HighAccuracyClock; import org.kne.cloud.clock.NTPTimestamps; import org.kne.cloud.network.MultipurposeSocketAddress; import org.kne.io.KNEChannels; +import org.kne.math.Long128; public class NTPv4Protocol implements Closeable, AutoCloseable { private static final boolean showPacket = false; @@ -134,10 +135,10 @@ public class NTPv4Protocol implements Closeable, AutoCloseable { private static class CheckListItem { private NTPPeer peer; - private BigInteger timeStamp; + private Long128 timeStamp; private long createTime = System.nanoTime(); - private CheckListItem(BigInteger timeStamp, NTPPeer peer) { + private CheckListItem(Long128 timeStamp, NTPPeer peer) { this.timeStamp = timeStamp; this.peer = peer; } @@ -188,7 +189,7 @@ public class NTPv4Protocol implements Closeable, AutoCloseable { stratum = 0; } nv4.setStratum(stratum); - BigInteger precision = context.getLocalPrecision(); + Long128 precision = context.getLocalPrecision(); byte b = (byte) Math.ceil(log(precision.doubleValue() / (Math.pow(2, 64)), 2)); nv4.setPrecision(b); nv4.setRootDelay((int) context.getRootDelay()); @@ -253,7 +254,7 @@ public class NTPv4Protocol implements Closeable, AutoCloseable { private NTPPeer checkOriginTimestamp(NTPv4Packet nv4) { checkLock.lock(); try { - BigInteger ori = nv4.getOriginateTimestamp128(); + Long128 ori = nv4.getOriginateTimestamp128(); removeTimeoutTimestamp(); for (Iterator iterator = checkList.iterator(); iterator.hasNext();) { CheckListItem item = (CheckListItem) iterator.next(); diff --git a/src/org/kne/cloud/network/perf/Kperf.java b/src/org/kne/cloud/network/perf/Kperf.java index b947e3b..3ae42e9 100644 --- a/src/org/kne/cloud/network/perf/Kperf.java +++ b/src/org/kne/cloud/network/perf/Kperf.java @@ -10,11 +10,14 @@ import java.util.concurrent.PriorityBlockingQueue; import java.util.concurrent.locks.LockSupport; import org.kne.cloud.clock.AdjustedNanoClock; +import org.kne.cloud.clock.HighAccuracyClock; import org.kne.cloud.network.MultipurposeSocketAddress; import org.kne.cloud.network.SpeedLimiter; import org.kne.cloud.network.ThreadTool; import org.kne.cloud.network.ipv6.IPv6Packet; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.PacketID; +import org.kne.cloud.network.ipv6.PacketIDGenerator; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; import org.kne.cloud.network.klalb.ADDRPacket; import org.kne.cloud.network.klalb.ADDRREQPacket; import org.kne.cloud.network.klalb.BWINFPacket; @@ -28,7 +31,9 @@ import org.kne.cloud.network.klalb.VADDRACKPacket; import org.kne.cloud.network.klalb.VADDRPacket; import org.kne.cloud.network.klalb.VADDRREQPacket; import org.kne.cloud.network.monitor.MonitorData; -import org.kne.cloud.network.monitor.QueueingMonitorDataImpl; +import org.kne.cloud.network.monitor.SpeedAndTrafficAndDelayMonitorDataImpl; + +import com.github.f4b6a3.uuid.UuidCreator; public class Kperf implements Runnable{ @@ -47,7 +52,7 @@ public class Kperf implements Runnable{ private MultipurposeSocketAddress bindAddress; private volatile boolean connected=false; private volatile KLALBPacketLink link; - private QueueingMonitorDataImpl monitor=new QueueingMonitorDataImpl(); + private SpeedAndTrafficAndDelayMonitorDataImpl monitor=new SpeedAndTrafficAndDelayMonitorDataImpl(HighAccuracyClock.SYSTEM_CLOCK); private volatile boolean closed = false; @@ -117,11 +122,11 @@ public class Kperf implements Runnable{ Thread.sleep(1000); updateUsedTime(); } - System.out.printf("上传延迟 最小:%.3fms 平均:%.3fms 抖动:%.3fms\n",monitor.getOutDelayMin()/1000000.0,monitor.getOutDelayAvg()/1000000.0,monitor.getOutJitter()/1000000.0); - System.out.printf("下载延迟 最小:%.3fms 平均:%.3fms 抖动:%.3fms\n",monitor.getInDelayMin()/1000000.0,monitor.getInDelayAvg()/1000000.0,monitor.getInJitter()/1000000.0); + System.out.printf("上传延迟 最小:%.3fms 平均:%.3fms 抖动:%.3fms\n",monitor.getOutDelay()/1000000.0,monitor.getOutDelay()/1000000.0,monitor.getOutJitter()/1000000.0); + System.out.printf("下载延迟 最小:%.3fms 平均:%.3fms 抖动:%.3fms\n",monitor.getInDelay()/1000000.0,monitor.getInDelay()/1000000.0,monitor.getInJitter()/1000000.0); if(reports!=null) { - monitor.setOutDelay(monitor.getOutDelayAvg()); - monitor.setInDelay(monitor.getInDelayAvg()); + reports.uploadDelayFinish(monitor.getOutDelay()); + reports.downloadDelayFinish(monitor.getInDelay()); } System.out.println("等待时间"+wtimes+"s"); Thread.sleep(wtimes*1000); @@ -134,13 +139,13 @@ public class Kperf implements Runnable{ testPacket=new TESTNPacket(60000); for (int i = 0; i < 20; i++) { System.out.printf("%.2fs\t", (System.nanoTime()- startTime)/1000000000.0); - System.out.printf("下载带宽:%s/s\n", KLALBUtils.convertIBUint(monitor.getInSpeedAvg())); + System.out.printf("下载带宽:%s/s\n", KLALBUtils.convertIBUint(monitor.getInSpeed())); Thread.sleep(1000); } - System.out.printf("下载带宽 平均:%s/s 最大:%s/s\n",KLALBUtils.convertIBUint(monitor.getInSpeedAvg2()),KLALBUtils.convertIBUint(monitor.getInSpeedMax2())); + System.out.printf("下载带宽:%s/s",KLALBUtils.convertIBUint(monitor.getInSpeed())); if(reports!=null) { - reports.downloadSpeedFinish(monitor.getInSpeedAvg2()); + reports.downloadSpeedFinish(monitor.getInSpeed()); } }else { System.out.println("测试2/5:上传带宽测试"); @@ -148,12 +153,12 @@ public class Kperf implements Runnable{ testPacket=new TESTNPacket(60000); for (int i = 0; i < 20; i++) { System.out.printf("%.2fs\t", (System.nanoTime()- startTime)/1000000000.0); - System.out.printf("上传带宽:%s/s\n", KLALBUtils.convertIBUint(monitor.getOutSpeedAvg())); + System.out.printf("上传带宽:%s/s\n", KLALBUtils.convertIBUint(monitor.getOutSpeed())); Thread.sleep(1000); } - System.out.printf("上传带宽 平均:%s/s 最大:%s/s\n",KLALBUtils.convertIBUint(monitor.getOutSpeedAvg2()),KLALBUtils.convertIBUint(monitor.getOutSpeedMax2())); + System.out.printf("上传带宽:%s/s\n",KLALBUtils.convertIBUint(monitor.getOutSpeed())); if(reports!=null) { - reports.uploadSpeedFinish(monitor.getOutSpeedAvg2()); + reports.uploadSpeedFinish(monitor.getOutSpeed()); } } System.out.println("等待时间"+wtimes+"s"); @@ -168,12 +173,12 @@ public class Kperf implements Runnable{ testPacket=new TESTNPacket(60000); for (int i = 0; i < 20; i++) { System.out.printf("%.2fs\t", (System.nanoTime()- startTime)/1000000000.0); - System.out.printf("上传带宽:%s/s\n", KLALBUtils.convertIBUint(monitor.getOutSpeedAvg())); + System.out.printf("上传带宽:%s/s\n", KLALBUtils.convertIBUint(monitor.getOutSpeed())); Thread.sleep(1000); } - System.out.printf("上传带宽 平均:%s/s 最大:%s/s\n",KLALBUtils.convertIBUint(monitor.getOutSpeedAvg2()),KLALBUtils.convertIBUint(monitor.getOutSpeedMax2())); + System.out.printf("上传带宽:%s/s\n",KLALBUtils.convertIBUint(monitor.getOutSpeed())); if(reports!=null) { - reports.uploadSpeedFinish(monitor.getOutSpeedAvg2()); + reports.uploadSpeedFinish(monitor.getOutSpeed()); } }else { System.out.println("测试3/5:下载带宽测试"); @@ -181,12 +186,12 @@ public class Kperf implements Runnable{ testPacket=new TESTNPacket(60000); for (int i = 0; i < 20; i++) { System.out.printf("%.2fs\t", (System.nanoTime()- startTime)/1000000000.0); - System.out.printf("下载带宽:%s/s\n", KLALBUtils.convertIBUint(monitor.getInSpeedAvg())); + System.out.printf("下载带宽:%s/s\n", KLALBUtils.convertIBUint(monitor.getInSpeed())); Thread.sleep(1000); } - System.out.printf("下载带宽 平均:%s/s 最大:%s/s\n",KLALBUtils.convertIBUint(monitor.getInSpeedAvg2()),KLALBUtils.convertIBUint(monitor.getInSpeedMax2())); + System.out.printf("下载带宽:%s/s\n",KLALBUtils.convertIBUint(monitor.getInSpeed())); if(reports!=null) { - reports.downloadSpeedFinish(monitor.getInSpeedAvg2()); + reports.downloadSpeedFinish(monitor.getInSpeed()); } } @@ -204,7 +209,7 @@ public class Kperf implements Runnable{ Thread.sleep(1000); } if(reports!=null) { - reports.downloadPPSFinish(monitor.getInPPSAvg()); + reports.downloadPPSFinish(monitor.getInPPS()); } }else { System.out.println("测试4/5:上传包转发率测试"); @@ -216,7 +221,7 @@ public class Kperf implements Runnable{ Thread.sleep(1000); } if(reports!=null) { - reports.uploadPPSFinish(monitor.getOutPPSAvg()); + reports.uploadPPSFinish(monitor.getOutPPS()); } } System.out.println("等待时间"+wtimes+"s"); @@ -234,7 +239,7 @@ public class Kperf implements Runnable{ } if(reports!=null) { - reports.uploadPPSFinish(monitor.getOutPPSAvg()); + reports.uploadPPSFinish(monitor.getOutPPS()); } }else { System.out.println("测试5/5:下载包转发率测试"); @@ -246,7 +251,7 @@ public class Kperf implements Runnable{ Thread.sleep(1000); } if(reports!=null) { - reports.downloadPPSFinish(monitor.getInPPSAvg()); + reports.downloadPPSFinish(monitor.getInPPS()); } } @@ -264,7 +269,7 @@ public class Kperf implements Runnable{ } }); try { - monitor.setState(MonitorData.CONNECTING); + monitor.setState(MonitorData.UNSTABLE); if(link==null) link=KLALBUtils.createKLALBPacketLink(bindAddress, targetAddress,false,20000); @@ -281,10 +286,10 @@ public class Kperf implements Runnable{ // TimeDebugger tdb=new TimeDebugger(); // tdb.putTime("start"); if(checkBandwidthReportTime()) { - writePacketToKPL(new BWINFPacket(monitor.getOutSpeedAvg(), monitor.getInSpeedAvg())); + writePacketToKPL(new BWINFPacket(monitor.getOutSpeed(), monitor.getInSpeed())); } if (checkPingTimeSleep()) { - writePacketToKPL(new PINGPacket(System.nanoTime())); + writePacketToKPL(new PINGPacket(System.nanoTime(),monitor.getOutSpeed(), monitor.getInSpeed())); }else { KLALBPacket kpip = IsendDequeList.poll(); @@ -329,13 +334,13 @@ public class Kperf implements Runnable{ } switch (kpp.getType()) { case KLALBPacket.PING: - sendIPacket(new PONGPacket(((PINGPacket) kpp).getTime() ,kpp.getRcvtime(), System.nanoTime())); + sendIPacket(new PONGPacket(((PINGPacket) kpp).getTime() ,kpp.getRcvtime(), System.nanoTime(),monitor.getOutSpeed(), monitor.getInSpeed())); break; case KLALBPacket.PONG: if (fst) { // coll.resetCoolingTime(); - monitor.setState(MonitorData.ONLINE); + monitor.setState(MonitorData.UP); connected=true; if(targetAddress!=null) { System.out.println("连接地址"+targetAddress+"成功!"); @@ -379,9 +384,6 @@ public class Kperf implements Runnable{ } if (DsndDelayFactor >= 0 && DrcvDelayFactor >= 0) { - monitor.setOutDelay(DsndDelayFactor); - monitor.setInDelay(DrcvDelayFactor); - monitor.setRecentPingNanoTime(png.getTimepingsnd()); //pingInterval = monitor.getLatencyAvg()+2000000L; //double load = 1 - monitor.getOutDelayMin() / (double) monitor.getOutDelay(); @@ -409,13 +411,13 @@ public class Kperf implements Runnable{ Thread.yield(); } } catch (IOException e) { - if(monitor.getState()==MonitorData.CONNECTING) + if(monitor.getState()==MonitorData.UNSTABLE) System.out.println("连接目标地址失败!"); if(debug) e.printStackTrace(); }finally { - monitor.setState(MonitorData.OFFLINE); + monitor.setState(MonitorData.DOWN); if(link!=null) { try { link.close(); @@ -483,7 +485,7 @@ public class Kperf implements Runnable{ public void close() { closed = true; - monitor.setState(MonitorData.OFFLINE); + monitor.setState(MonitorData.DOWN); try { if (link != null) link.close(); @@ -504,7 +506,6 @@ public class Kperf implements Runnable{ LockSupport.unpark(tlock); } - private KLALBPacket readPacketFromKPL() throws IOException { KLALBPacket packet = link.readKLALBPacket(); if (showpacket) { @@ -514,16 +515,14 @@ public class Kperf implements Runnable{ if (packet != null) { packet.putTimePassport("received"); long length=packet.getTotalLength(); - monitor.getInTrafficAL().add(length); - monitor.getInPacketCounterAL().add(1); + monitor.getDownloadBandwidth().recordPacket(KLALBUtils.createGlobalUUID(), (int)length); } return packet; } private void writePacketToKPL(KLALBPacket packet) throws IOException { long length=packet.getTotalLength(); - monitor.getOutTrafficAL().add(length); - monitor.getOutPacketCounterAL().add(1); + monitor.getUploadBandwidth().recordPacket(KLALBUtils.createGlobalUUID(), (int)length); link.writeKLALBPacket(packet); link.flush(); packet.putTimePassport("sended"); diff --git a/src/org/kne/cloud/network/perf/KperfReports.java b/src/org/kne/cloud/network/perf/KperfReports.java index ba87e45..381a4a8 100644 --- a/src/org/kne/cloud/network/perf/KperfReports.java +++ b/src/org/kne/cloud/network/perf/KperfReports.java @@ -1,11 +1,11 @@ package org.kne.cloud.network.perf; -import org.kne.cloud.network.monitor.QueueingMonitorDataImpl; +import org.kne.cloud.network.monitor.SpeedAndTrafficAndDelayMonitorDataImpl; public interface KperfReports { public void testProcess(double d); public void testFinish(); - public void updateDial(QueueingMonitorDataImpl mdt); + public void updateDial(SpeedAndTrafficAndDelayMonitorDataImpl mdt); public void uploadSpeedFinish(long uploadSpeed); public void downloadSpeedFinish(long downloadSpeed); public void uploadPPSFinish(long uploadPPS); diff --git a/src/org/kne/cloud/network/perf/MemcpyBenchmark.java b/src/org/kne/cloud/network/perf/MemcpyBenchmark.java deleted file mode 100644 index 42e640f..0000000 --- a/src/org/kne/cloud/network/perf/MemcpyBenchmark.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.kne.cloud.network.perf; - -import java.nio.ByteBuffer; - -import org.kne.cloud.network.NetworkPacket; - -public class MemcpyBenchmark { - public static void testArrayCopySpeed(int i) { - byte[]a=new byte[i]; - byte[]b=new byte[i]; - long start=System.nanoTime(); - System.arraycopy(a, 0, b, 0, i); - long time=System.nanoTime()-start; - long speed=i*1000000000L/time; - System.out.println(speed/1024L/1024L+" MB/s"); - } - public static void testByteBufferCopySpeed(int i) { - ByteBuffer a=ByteBuffer.allocateDirect(i); - ByteBuffer b=ByteBuffer.allocateDirect(i); - long start=System.nanoTime(); - a.put(b); - long time=System.nanoTime()-start; - long speed=i*1000000000L/time; - System.out.println(speed/1024L/1024L+" MB/s"); - } - public static Object un; - public static void testDirectByteBufferAllocateSpeed(int i) { - long start=System.nanoTime(); - for(int ix=0;ix<10000;ix++) { - ByteBuffer a=ByteBuffer.allocateDirect(i); - un=a; - } - long time=System.nanoTime()-start; - long speed=i*1000000000L/time*10000L; - System.out.println(speed/1024L/1024L+" MB/s"); - } - public static void testByteBufferAllocateSpeed(int i) { - long start=System.nanoTime(); - for(int ix=0;ix<10000;ix++) { - ByteBuffer a=ByteBuffer.allocate(i); - un=a; - } - long time=System.nanoTime()-start; - long speed=i*1000000000L/time*10000L; - System.out.println(speed/1024L/1024L+" MB/s"); - } - public static void testByteBufferAllocatorSpeed(int i) { - long start=System.nanoTime(); - for(int ix=0;ix<10000;ix++) { - ByteBuffer a=NetworkPacket.bufferAllocator.allocate(i); - un=a; - } - long time=System.nanoTime()-start; - long speed=i*1000000000L/time*10000L; - System.out.println(speed/1024L/1024L+" MB/s"); - } -} diff --git a/src/org/kne/cloud/network/perf/NodeBenchmark.java b/src/org/kne/cloud/network/perf/NodeBenchmark.java index 4b38b6e..996e18e 100644 --- a/src/org/kne/cloud/network/perf/NodeBenchmark.java +++ b/src/org/kne/cloud/network/perf/NodeBenchmark.java @@ -49,7 +49,7 @@ for (int i = 0; i < nodes; i++) { SocketChannelListener scl=new SocketChannelListener(ServerSocketChannel.open().bind(new InetSocketAddress("127.0.0.8",0))); scl.setCon((c)->{ try { - kct.addRemoteLine(new KLALBRemoteLine(new StreamChannelKLALBPacketLink(c))); + kct.addRemoteLine(new KLALBRemoteLine(klalbController,new StreamChannelKLALBPacketLink(c))); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/org/kne/cloud/network/srv6/ACKSEQSSegmentRoutingTLV.java b/src/org/kne/cloud/network/srv6/ACKSEQSSegmentRoutingTLV.java index b0079e3..a273e71 100644 --- a/src/org/kne/cloud/network/srv6/ACKSEQSSegmentRoutingTLV.java +++ b/src/org/kne/cloud/network/srv6/ACKSEQSSegmentRoutingTLV.java @@ -9,7 +9,7 @@ import java.nio.channels.ReadableByteChannel; import java.nio.channels.WritableByteChannel; import java.util.UUID; -import org.kne.cloud.network.klalb.IPSequence; +import org.kne.cloud.network.ipv6.PacketID; public class ACKSEQSSegmentRoutingTLV extends IPv6SegmentRoutingTLV { public ACKSEQSSegmentRoutingTLV(ByteBuffer klalbHeader) { @@ -21,17 +21,15 @@ public class ACKSEQSSegmentRoutingTLV extends IPv6SegmentRoutingTLV { return "ACKSEQSSegmentRoutingTLV [getSequence()=" + getSequence() + "]"; } - public ACKSEQSSegmentRoutingTLV(UUID ackid, boolean promise) { + public ACKSEQSSegmentRoutingTLV(UUID ackid,long sequence) { super(IPv6SegmentRoutingTLV.ACKSEQS); setUUID(ackid); - setPromise(promise); - getData().limit(22); + getData().limit(30); } - public ACKSEQSSegmentRoutingTLV(IPSequence ackid, boolean promise) { + public ACKSEQSSegmentRoutingTLV(PacketID ackid) { super(IPv6SegmentRoutingTLV.ACKSEQS); - setIPSequence(ackid); - setPromise(promise); - getData().limit(22); + setPacketID(ackid); + getData().limit(30); } public void setUUID(UUID uuid) { getData().putLong(6,uuid.getMostSignificantBits()); @@ -41,12 +39,13 @@ public class ACKSEQSSegmentRoutingTLV extends IPv6SegmentRoutingTLV { public UUID getUUID() { return new UUID(getData().getLong(6),getData().getLong(14)); } - public void setIPSequence(IPSequence ackid) { - setUUID(ackid.getUuid()); + public void setPacketID(PacketID ackid) { + setUUID(ackid.getFlowuuid()); + setSequence(ackid.getSequence()); } - public IPSequence getIPSequence() { - return new IPSequence(getUUID(),isPromise()); + public PacketID getPacketID() { + return new PacketID(getUUID(),getSequence()); } @Override @@ -63,10 +62,10 @@ public class ACKSEQSSegmentRoutingTLV extends IPv6SegmentRoutingTLV { } public long getSequence() { - return getData().getLong(6); + return getData().getLong(22); } public void setSequence(long sequence) { - getData().putLong(6,sequence); + getData().putLong(22,sequence); } public int getFlowNumber() { return getData().getInt(2); @@ -74,28 +73,6 @@ public class ACKSEQSSegmentRoutingTLV extends IPv6SegmentRoutingTLV { public void setFlowNumber(int flowsequence) { getData().putInt(2,flowsequence); } - public void setACKIP(Inet6Address ip) { - getData().put(14, ip.getAddress()); - } - public Inet6Address getACKIP() { - byte[]arr=new byte[16]; - getData().get(14,arr); - try { - return (Inet6Address) Inet6Address.getByAddress(arr); - } catch (UnknownHostException e) { - e.printStackTrace(); - return null; - } - } - public boolean isPromise() { - return getData().get(0)!=0?true:false; - } + - public void setPromise(boolean promise) { - if(promise) { - getData().put(0, (byte) 1); - }else { - getData().put(0, (byte) 0); - } - } } diff --git a/src/org/kne/cloud/network/srv6/DetNetSRv6TLV.java b/src/org/kne/cloud/network/srv6/DetNetSRv6TLV.java new file mode 100644 index 0000000..2dde991 --- /dev/null +++ b/src/org/kne/cloud/network/srv6/DetNetSRv6TLV.java @@ -0,0 +1,129 @@ +package org.kne.cloud.network.srv6; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.ReadableByteChannel; +import java.nio.channels.WritableByteChannel; + +public class DetNetSRv6TLV extends IPv6SegmentRoutingTLV { + + // 标志位掩码定义 + public static final int FLAG_GUARANTEED_DELIVERY = 0x01; // 第1位: 承诺送达 + public static final int FLAG_AVOID_REORDERING = 0x02; // 第2位: 避免乱序 + public static final int FLAG_RESOURCE_RESERVED = 0x04; // 第3位: 资源预留 + public static final int FLAG_EXPLICIT_ROUTE = 0x08; // 第4位: 显式路由 + + // 保留其他位用于未来扩展 (0x10, 0x20, 0x40, 0x80) + + public DetNetSRv6TLV(ByteBuffer buffer) { + super(buffer); + } + + /** + * 构造方法 + */ + public DetNetSRv6TLV(boolean guaranteedDelivery, boolean avoidReordering, + boolean resourceReserved, boolean explicitRoute) { + super(IPv6SegmentRoutingTLV.DETNET); // 使用建议的TLV类型编号 + + int flags = 0; + if (guaranteedDelivery) flags |= FLAG_GUARANTEED_DELIVERY; + if (avoidReordering) flags |= FLAG_AVOID_REORDERING; + if (resourceReserved) flags |= FLAG_RESOURCE_RESERVED; + if (explicitRoute) flags |= FLAG_EXPLICIT_ROUTE; + + setFlags(flags); + + // DetNet TLV数据部分:1字节标志位 + 5字节保留 + getData().put(1, (byte) 0); // 保留 + getData().put(2, (byte) 0); // 保留 + getData().put(3, (byte) 0); // 保留 + getData().put(4, (byte) 0); // 保留 + getData().put(5, (byte) 0); // 保留 + + getData().limit(6); // 总数据长度4字节 + } + + public int getFlags() { + return getData().get(0) & 0xff; + } + + public void setFlags(int flags) { + getData().put(0, (byte) flags); + } + // 标志位getter/setter方法 + public boolean isGuaranteedDelivery() { + return (getData().get(0) & FLAG_GUARANTEED_DELIVERY) != 0; + } + + public void setGuaranteedDelivery(boolean enabled) { + byte flags = getData().get(0); + if (enabled) { + flags |= FLAG_GUARANTEED_DELIVERY; + } else { + flags &= ~FLAG_GUARANTEED_DELIVERY; + } + getData().put(0, flags); + } + + public boolean isAvoidReordering() { + return (getData().get(0) & FLAG_AVOID_REORDERING) != 0; + } + + public void setAvoidReordering(boolean enabled) { + byte flags = getData().get(0); + if (enabled) { + flags |= FLAG_AVOID_REORDERING; + } else { + flags &= ~FLAG_AVOID_REORDERING; + } + getData().put(0, flags); + } + + public boolean isResourceReserved() { + return (getData().get(0) & FLAG_RESOURCE_RESERVED) != 0; + } + + public void setResourceReserved(boolean enabled) { + byte flags = getData().get(0); + if (enabled) { + flags |= FLAG_RESOURCE_RESERVED; + } else { + flags &= ~FLAG_RESOURCE_RESERVED; + } + getData().put(0, flags); + } + + public boolean isExplicitRoute() { + return (getData().get(0) & FLAG_EXPLICIT_ROUTE) != 0; + } + + public void setExplicitRoute(boolean enabled) { + byte flags = getData().get(0); + if (enabled) { + flags |= FLAG_EXPLICIT_ROUTE; + } else { + flags &= ~FLAG_EXPLICIT_ROUTE; + } + getData().put(0, flags); + } + + @Override + public String toString() { + return "DetNetSRv6TLV [" + + "guaranteedDelivery=" + isGuaranteedDelivery() + + ", avoidReordering=" + isAvoidReordering() + + ", resourceReserved=" + isResourceReserved() + + ", explicitRoute=" + isExplicitRoute() + "]"; + } + + @Override + public void writeToChannel(WritableByteChannel dto) throws IOException { + super.writeToChannel(dto); + } + + @Override + public void readFromChannel(ReadableByteChannel din, long length) throws IOException { + super.readFromChannel(din, length); + } +} \ No newline at end of file diff --git a/src/org/kne/cloud/network/srv6/IPv6SegmentRoutingTLV.java b/src/org/kne/cloud/network/srv6/IPv6SegmentRoutingTLV.java index 9d4c47c..420d48b 100644 --- a/src/org/kne/cloud/network/srv6/IPv6SegmentRoutingTLV.java +++ b/src/org/kne/cloud/network/srv6/IPv6SegmentRoutingTLV.java @@ -14,6 +14,7 @@ public class IPv6SegmentRoutingTLV extends TLV { public static final int PAD1=0; public static final int PADN=4; public static final int HMAC=5; + public static final int DETNET=6; public static final int SEQS=7; public static final int ACKSEQS=8; @@ -56,14 +57,14 @@ public class IPv6SegmentRoutingTLV extends TLV { rtlv=new PADNSegmentRoutingTLV(bbf); rtlv.readFromChannel(din); return rtlv; - case SEQS: - rtlv=new SEQSSegmentRoutingTLV(bbf); - rtlv.readFromChannel(din); - return rtlv; case ACKSEQS: rtlv=new ACKSEQSSegmentRoutingTLV(bbf); rtlv.readFromChannel(din); return rtlv; + case DETNET: + rtlv=new DetNetSRv6TLV(bbf); + rtlv.readFromChannel(din); + return rtlv; default: rtlv=new IPv6SegmentRoutingTLV(bbf); rtlv.readFromChannel(din); diff --git a/src/org/kne/cloud/network/srv6/JsonDataPacket.java b/src/org/kne/cloud/network/srv6/JsonDataPacket.java index 88d33b4..e94d640 100644 --- a/src/org/kne/cloud/network/srv6/JsonDataPacket.java +++ b/src/org/kne/cloud/network/srv6/JsonDataPacket.java @@ -23,7 +23,7 @@ import java.util.Set; import org.kne.cloud.network.MultipurposeSocketAddress; import org.kne.cloud.network.NetworkPacket; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; import com.google.gson.Gson; import com.google.gson.GsonBuilder; diff --git a/src/org/kne/cloud/network/srv6/KLALBRoutingProtocol.java b/src/org/kne/cloud/network/srv6/KLALBRoutingProtocol.java index 19bd7f5..f5f032a 100644 --- a/src/org/kne/cloud/network/srv6/KLALBRoutingProtocol.java +++ b/src/org/kne/cloud/network/srv6/KLALBRoutingProtocol.java @@ -33,8 +33,9 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; import org.kne.cloud.network.ByteBufferAllocator; +import org.kne.cloud.network.ipv6.IPv6Address; import org.kne.cloud.network.ipv6.IPv6NetworkLink; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; import org.kne.cloud.network.ipv6.Neighbor; import org.kne.cloud.network.klalb.KLALBVirtualRawSocket; import org.kne.cloud.network.monitor.DelayMonitorData; @@ -52,12 +53,12 @@ public class KLALBRoutingProtocol extends Thread{ private static final boolean debug = false; private RouterInfo selfRouterInfo; - private Map netmap=new ConcurrentHashMap<>(); + private Map netmap=new ConcurrentHashMap<>(); - private volatile Mapaddresses; + private volatile Mapaddresses; - private volatile Map> paths; + private volatile Map> paths; @@ -105,7 +106,7 @@ public class KLALBRoutingProtocol extends Thread{ Thread.currentThread().setName("KLALB路由协议接收线程"); getSelfRouterInfo(); try{ - ds=new KLALBVirtualRawSocket(router.getinLoopback(),router.getLocator().getAddress(), DEFAULT_PROTOCOL_NUMBER); + ds=new KLALBVirtualRawSocket(router.getinLoopback(),router.getLocator().getAddress().toInet6Address(), DEFAULT_PROTOCOL_NUMBER); new Thread(()->{ Thread.currentThread().setName("KLALB路由协议发送线程"); @@ -138,7 +139,7 @@ public class KLALBRoutingProtocol extends Thread{ floodPacket( null, new RouterInfoPacket(selfRouterInfo,true,-1)); } - if(cur-floodTimer2>1000000000L) { + if(cur-floodTimer2>2000000000L) { if(debug) System.out.println("update1"); floodTimer2=cur; @@ -146,8 +147,8 @@ public class KLALBRoutingProtocol extends Thread{ } //Set requestSet=new HashSet<>(); - for (Iterator> iterator = netmap.entrySet().iterator(); iterator.hasNext();) { - Entry type = (Entry) iterator.next(); + for (Iterator> iterator = netmap.entrySet().iterator(); iterator.hasNext();) { + Entry type = (Entry) iterator.next(); RouterInfo val=type.getValue(); long timeout=30000000000L; if(val.getAsn()==router.getASN()) { @@ -191,8 +192,8 @@ public class KLALBRoutingProtocol extends Thread{ }*/ - for (Iterator> iterator = hotspots.entrySet().iterator(); iterator.hasNext();) { - Entry type = (Entry) iterator.next(); + for (Iterator> iterator = hotspots.entrySet().iterator(); iterator.hasNext();) { + Entry type = (Entry) iterator.next(); //if(type.getValue().checkReportTime()) { //System.out.println("hotspot address:"+type.getKey()); //writePacket(ds2, new RouterInfoPacket( netmap.get(router.getLocator().getAddress()),false,-1), new InetSocketAddress(type.getKey(), DEFAULT_PORT)); @@ -203,7 +204,7 @@ public class KLALBRoutingProtocol extends Thread{ } - Thread.sleep(1); + Thread.sleep(20); } catch (InterruptedException e) { @@ -217,7 +218,7 @@ public class KLALBRoutingProtocol extends Thread{ while(true) { try { - byte[]ca=ByteBufferAllocator.allocateArray(65535); + byte[]ca=ByteBufferAllocator.allocateUninitializedArray(65535); DatagramPacket dgp=new DatagramPacket(ca, ca.length); ds.receive(dgp); //System.out.println(Arrays.toString( Arrays.copyOf( dgp.getData(),dgp.getLength()))); @@ -286,15 +287,19 @@ public class KLALBRoutingProtocol extends Thread{ private void floodPacket(SocketAddress except,RouterInfoPacket rifp) throws IOException { long asn=rifp.getASN(); Listln= router.getNeighbors(); + Setist=new HashSet(); for(Neighbor addresses :ln) { if(addresses.getLocator()==null) continue; - InetSocketAddress isa=new InetSocketAddress(addresses.getLocator().getAddress(),DEFAULT_PORT); + InetSocketAddress isa=new InetSocketAddress(addresses.getLocator().getAddress().toInet6Address(),DEFAULT_PORT); + if(!ist.add(isa)) { + continue; + } if(!isa.equals(except)) { if(asn==-1) { writePacket( rifp, isa); }else{ - RouterInfo nif= netmap.get(isa.getAddress()); + RouterInfo nif= netmap.get( IPv6Address.valueOf( isa.getAddress())); if(nif!=null&&nif.getAsn()==asn) { writePacket( rifp, isa); } @@ -332,29 +337,41 @@ public class KLALBRoutingProtocol extends Thread{ private static class NetmapDirections{ - public NetmapDirections(long[] direction, List rias, - Map direction_airs) { + public NetmapDirections(long[] direction, List rias, + Map direction_airs) { super(); this.direction = direction; this.direction_rias = rias; this.direction_airs = direction_airs; } + public NetmapDirections(long[] direction, List rias, Map airs,Object obj) { + this.direction = direction; + this.direction_rias=new ArrayList(); + rias.forEach((addr)->{ + direction_rias.add(new IPv6Address(addr)); + }); + this.direction_airs=new HashMap<>(); + airs.forEach((k,v)->{ + direction_airs.put(new IPv6Address(k), v); + }); + } + private long[] direction; - private List direction_rias; + private List direction_rias; - private Map direction_airs; + private Map direction_airs; public long[] getDirection() { return direction; } - public List getDirection_rias() { + public List getDirection_rias() { return direction_rias; } - public Map getDirection_airs() { + public Map getDirection_airs() { return direction_airs; } @@ -380,14 +397,14 @@ public class KLALBRoutingProtocol extends Thread{ if(netmap.get(router.getLocator().getAddress())==null) { return; } - Set> s=netmap.entrySet(); - Mapairs=new HashMap<>(netmap.size()*2,0.4f); + Set> s=netmap.entrySet(); + Mapairs=new HashMap<>(netmap.size()*2,0.4f); - Listrias=new ArrayList<>(netmap.size()+1); + Listrias=new ArrayList<>(netmap.size()+1); - Map>paths=new HashMap<>(); + Map>paths=new HashMap<>(); long number=0; - for(Entry entry:s) { + for(Entry entry:s) { if(!airs.containsKey(entry.getKey())) { airs.put(entry.getKey(),number); rias.add( entry.getKey()); @@ -395,7 +412,7 @@ public class KLALBRoutingProtocol extends Thread{ } List ni= entry.getValue().getNeighborAddresses(); for(NeighborInfo neighborInfo :ni) { - Inet6Address ias2=neighborInfo.getLocator().getAddress(); + IPv6Address ias2=neighborInfo.getLocator().getAddress(); if(!airs.containsKey(ias2)) { airs.put(ias2,number); rias.add( ias2); @@ -423,7 +440,7 @@ public class KLALBRoutingProtocol extends Thread{ long[][]pointers=new long[(int) airs.size()][2]; long heappos=0; long linknumber=0; - for(Entry> entry:paths.entrySet()) { + for(Entry> entry:paths.entrySet()) { /*for (Iterator>> iterator = paths.entrySet().iterator(); iterator.hasNext();) { Entry> entry = (Entry>) iterator.next();*/ linknumber+=entry.getValue().size(); @@ -432,7 +449,7 @@ public class KLALBRoutingProtocol extends Thread{ for (long i = 0; i < number; i++) { long heapindex=0; pointers[(int) i][0]=heappos; - InetAddress ia=rias.get((int) i); + IPv6Address ia=rias.get((int) i); Listlks=paths.get(ia); if(lks!=null) for(LinkDirection linkPath:lks) { @@ -464,10 +481,10 @@ public class KLALBRoutingProtocol extends Thread{ //System.out.println(Arrays.toString( algorithm.getDirection())); } public static class LinkDirection{ - private Inet6AddressGroup fromAddress; - private Inet6AddressGroup toAddress; - private Inet6Address fromLocator; - private Inet6Address toLocator; + private IPv6AddressGroup fromAddress; + private IPv6AddressGroup toAddress; + private IPv6Address fromLocator; + private IPv6Address toLocator; private long delay; private long delayMin; private long speed; @@ -475,10 +492,10 @@ public class KLALBRoutingProtocol extends Thread{ return speed; } private long bandwidth; - public Inet6AddressGroup getFromAddress() { + public IPv6AddressGroup getFromAddress() { return fromAddress; } - public Inet6AddressGroup getToAddress() { + public IPv6AddressGroup getToAddress() { return toAddress; } public long getDelay() { @@ -492,8 +509,8 @@ public class KLALBRoutingProtocol extends Thread{ return delayMin; } - public LinkDirection(Inet6AddressGroup fromAddress, Inet6AddressGroup toAddress, Inet6Address fromLocator, - Inet6Address toLocator, long delay, long delayMin, long speed, long bandwidth) { + public LinkDirection(IPv6AddressGroup fromAddress, IPv6AddressGroup toAddress, IPv6Address fromLocator, + IPv6Address toLocator, long delay, long delayMin, long speed, long bandwidth) { super(); this.fromAddress = fromAddress; this.toAddress = toAddress; @@ -510,7 +527,7 @@ public class KLALBRoutingProtocol extends Thread{ + fromLocator + ", toLocator=" + toLocator + ", delay=" + delay + ", delayMin=" + delayMin + ", speed=" + speed + ", bandwidth=" + bandwidth + "]"; } - public Inet6Address getFromLocator() { + public IPv6Address getFromLocator() { return fromLocator; } @Override @@ -528,7 +545,7 @@ public class KLALBRoutingProtocol extends Thread{ LinkDirection other = (LinkDirection) obj; return Objects.equals(fromAddress, other.fromAddress) && Objects.equals(toAddress, other.toAddress); } - public Inet6Address getToLocator() { + public IPv6Address getToLocator() { return toLocator; } public long getWeight() { @@ -569,8 +586,8 @@ public class KLALBRoutingProtocol extends Thread{ downloadspeed=((SpeedAndTrafficMonitorData) md).getInSpeed(); if(md instanceof SpeedAndTrafficMonitorDataImpl) { SpeedAndTrafficMonitorDataImpl smd=(SpeedAndTrafficMonitorDataImpl) md; - uploadspeedmax=smd.getOutSpeedMax2(); - downloadspeedmax=smd.getInSpeedMax2(); + uploadspeedmax=smd.getOutSpeedMax(); + downloadspeedmax=smd.getInSpeedMax(); } } } @@ -586,13 +603,13 @@ public class KLALBRoutingProtocol extends Thread{ return ri; } - public Map getAddresses() { + public Map getAddresses() { return addresses; } - public Map> getPaths() { + public Map> getPaths() { return paths; } - public List createSegmentList(Inet6Address dest) { + public List createSegmentList(IPv6Address dest) { NetmapDirections directionsx=directions; if(directionsx==null) { return null; @@ -601,7 +618,7 @@ public class KLALBRoutingProtocol extends Thread{ if(dn==null) { return null; } - Listsegments=new ArrayList<>(); + Listsegments=new ArrayList<>(); while(true) { long idx=directionsx.getDirection()[(int) dn.longValue()]; if(idx==-1) { @@ -638,28 +655,28 @@ public class KLALBRoutingProtocol extends Thread{ } } - private Map hotspots=new ConcurrentHashMap<>(); - public void putHotspotAddress(Inet6Address sourceAddress) { + private Map hotspots=new ConcurrentHashMap<>(); + public void putHotspotAddress(IPv6Address iPv6Address) { if(true) { - HotspotAddressTimer hat=hotspots.get(sourceAddress); + HotspotAddressTimer hat=hotspots.get(iPv6Address); if(hat==null) { - hotspots.put(sourceAddress,hat= new HotspotAddressTimer()); + hotspots.put(iPv6Address,hat= new HotspotAddressTimer()); }else { hat.refreshTimeout(); } if(hat.checkReportTime()) { //System.out.println("hotspot address:"+sourceAddress); - try { - writePacket( new RouterInfoPacket( netmap.get(router.getLocator().getAddress()),false,-1), new InetSocketAddress(sourceAddress, DEFAULT_PORT)); + /* try { + writePacket( new RouterInfoPacket( netmap.get(router.getLocator().getAddress()),false,-1), new InetSocketAddress(iPv6Address.toInet6Address(), DEFAULT_PORT)); } catch (IOException e) { e.printStackTrace(); - } + }*/ } } } - private Map toIpBandwidth=new ConcurrentHashMap(); + private Map toIpBandwidth=new ConcurrentHashMap(); - public void updateTotalRequestBandwidth(Inet6Address targetaAddress, Long treq) { + public void updateTotalRequestBandwidth(IPv6Address targetaAddress, Long treq) { Objects.requireNonNull(targetaAddress); //System.out.println("到"+targetaAddress.getHostAddress()+"请求带宽更新:"+treq); if(treq<=0) { @@ -673,7 +690,7 @@ public class KLALBRoutingProtocol extends Thread{ } } } - public Inet6Address getDijkstraPrevNode(Inet6Address text) { + public IPv6Address getDijkstraPrevNode(IPv6Address text) { NetmapDirections directionsx=directions; if(directionsx==null) return null; diff --git a/src/org/kne/cloud/network/srv6/KLALBRoutingProtocolAPIClient.java b/src/org/kne/cloud/network/srv6/KLALBRoutingProtocolAPIClient.java index c33a556..f0f1e64 100644 --- a/src/org/kne/cloud/network/srv6/KLALBRoutingProtocolAPIClient.java +++ b/src/org/kne/cloud/network/srv6/KLALBRoutingProtocolAPIClient.java @@ -12,15 +12,15 @@ import java.util.function.Consumer; import org.kne.cloud.network.MultipurposeSocketAddress; import org.kne.cloud.network.ThreadTool; -import org.kne.cloud.network.congress.ECNCongressAlgorithm; -import org.kne.cloud.network.congress.EmptyCongressAlgorithm; -import org.kne.cloud.network.congress.SendPacketSlidingWindow; +import org.kne.cloud.network.congestion.DCTCPCongestionAlgorithm; +import org.kne.cloud.network.congestion.EmptyCongestionAlgorithm; +import org.kne.cloud.network.congestion.SendPacketSlidingWindow; import org.kne.opencl64.Releaser; public class KLALBRoutingProtocolAPIClient { private KLALBRoutingProtocol routingProtocol; private SendPacketSlidingWindow window = new SendPacketSlidingWindow( - new EmptyCongressAlgorithm(3000000000L), 1024 * 1024); + new EmptyCongestionAlgorithm(3000000000L), 1024 * 1024); private static final Cleaner clr = Cleaner.create(); diff --git a/src/org/kne/cloud/network/srv6/KLALBRoutingProtocolAPIServer.java b/src/org/kne/cloud/network/srv6/KLALBRoutingProtocolAPIServer.java index 7336d19..f6440f7 100644 --- a/src/org/kne/cloud/network/srv6/KLALBRoutingProtocolAPIServer.java +++ b/src/org/kne/cloud/network/srv6/KLALBRoutingProtocolAPIServer.java @@ -10,7 +10,7 @@ import java.util.function.BiConsumer; import org.kne.cloud.network.MultipurposeSocketAddress; import org.kne.cloud.network.ThreadTool; -import org.kne.cloud.network.congress.SendPacketSlidingWindow; +import org.kne.cloud.network.congestion.SendPacketSlidingWindow; import org.kne.cloud.network.klalb.KLALBController; import org.kne.opencl64.Releaser; @@ -27,8 +27,10 @@ public class KLALBRoutingProtocolAPIServer { InetSocketAddress addrs=(InetSocketAddress) addr; switch(dataobj.getType()){ case KLALBRoutingProtocolJsonData.OPEN_LINES_REQ: + if(controller.getConfigItem()==null||(!controller.getConfigItem().isDenyLineTableQuery())) { KLALBRoutingProtocolJsonData json=new KLALBRoutingProtocolJsonData(KLALBRoutingProtocolJsonData.OPEN_LINES_RESP,dataobj.getUuid(),controller.getSelflineTable()); routingProtocol.sendJsonPacketToAddress(new JsonDataPacket(json),addr); + } break; } } catch (IOException e) { diff --git a/src/org/kne/cloud/network/srv6/NeighborInfo.java b/src/org/kne/cloud/network/srv6/NeighborInfo.java index 0eb8dd8..84df0c3 100644 --- a/src/org/kne/cloud/network/srv6/NeighborInfo.java +++ b/src/org/kne/cloud/network/srv6/NeighborInfo.java @@ -10,7 +10,7 @@ import java.io.Serializable; import java.net.Inet6Address; import java.util.Objects; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; import org.kne.cloud.network.ipv6.Neighbor; public class NeighborInfo implements Serializable { @@ -24,11 +24,11 @@ public class NeighborInfo implements Serializable { * */ private static final long serialVersionUID = 1L; - private Inet6AddressGroup local; - private Inet6AddressGroup neighbor; - private Inet6AddressGroup locator; + private IPv6AddressGroup local; + private IPv6AddressGroup neighbor; + private IPv6AddressGroup locator; private transient Neighbor context; - public NeighborInfo(Inet6AddressGroup local,Inet6AddressGroup neighbor,Inet6AddressGroup locator, long uploadDelay, long downloadDelay,long uploadDelayMin, long downloadDelayMin, long uploadSpeed, long downloadSpeed, long uploadspeedmax, long downloadspeedmax) { + public NeighborInfo(IPv6AddressGroup local,IPv6AddressGroup neighbor,IPv6AddressGroup locator, long uploadDelay, long downloadDelay,long uploadDelayMin, long downloadDelayMin, long uploadSpeed, long downloadSpeed, long uploadspeedmax, long downloadspeedmax) { super(); this.local=local; this.neighbor = neighbor; @@ -62,10 +62,10 @@ public class NeighborInfo implements Serializable { public Neighbor getContext() { return context; } - public Inet6AddressGroup getNeighbor() { + public IPv6AddressGroup getNeighbor() { return neighbor; } - public void setNeighbor(Inet6AddressGroup neighbor) { + public void setNeighbor(IPv6AddressGroup neighbor) { this.neighbor = neighbor; } public long getUploadDelay() { @@ -104,16 +104,16 @@ public class NeighborInfo implements Serializable { public void setDownloadSpeed(long downloadSpeed) { this.downloadSpeed = downloadSpeed; } - public Inet6AddressGroup getLocal() { + public IPv6AddressGroup getLocal() { return local; } - public void setLocal(Inet6AddressGroup local) { + public void setLocal(IPv6AddressGroup local) { this.local = local; } - public Inet6AddressGroup getLocator() { + public IPv6AddressGroup getLocator() { return locator; } - public void setLocator(Inet6AddressGroup locator) { + public void setLocator(IPv6AddressGroup locator) { this.locator = locator; } @@ -148,9 +148,9 @@ public class NeighborInfo implements Serializable { } public void readFromStream(DataInputStream in) throws IOException { - local=new Inet6AddressGroup(in); - neighbor=new Inet6AddressGroup( in); - locator=new Inet6AddressGroup(in); + local=new IPv6AddressGroup(in); + neighbor=new IPv6AddressGroup( in); + locator=new IPv6AddressGroup(in); uploadDelay=in.readLong(); downloadDelay=in.readLong(); uploadDelayMin=in.readLong(); diff --git a/src/org/kne/cloud/network/srv6/RouterInfo.java b/src/org/kne/cloud/network/srv6/RouterInfo.java index 6993df1..ceffabd 100644 --- a/src/org/kne/cloud/network/srv6/RouterInfo.java +++ b/src/org/kne/cloud/network/srv6/RouterInfo.java @@ -20,7 +20,7 @@ import java.util.Objects; import java.util.Set; import org.kne.cloud.network.NetworkPacket; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; public class RouterInfo implements Serializable{ @@ -29,12 +29,12 @@ public class RouterInfo implements Serializable{ * */ private static final long serialVersionUID = 1L; - private Inet6AddressGroup locator; + private IPv6AddressGroup locator; private long asn; - public Inet6AddressGroup getLocator() { + public IPv6AddressGroup getLocator() { return locator; } - public void setLocator(Inet6AddressGroup locator) { + public void setLocator(IPv6AddressGroup locator) { this.locator = locator; } @@ -90,7 +90,7 @@ public class RouterInfo implements Serializable{ return neighborAddresses; } - public RouterInfo( long createTime,Inet6AddressGroup locator,long asn) { + public RouterInfo( long createTime,IPv6AddressGroup locator,long asn) { this.createTime = createTime; this.locator=locator; this.asn=asn; @@ -115,7 +115,7 @@ public class RouterInfo implements Serializable{ readFromStream(new DataInputStream(Channels.newInputStream(din))); } public void readFromStream(DataInputStream in) throws IOException { - locator=new Inet6AddressGroup(in); + locator=new IPv6AddressGroup(in); asn=in.readLong(); createTime=in.readLong(); int size=in.readInt(); diff --git a/src/org/kne/cloud/network/srv6/RouterInfoPacket.java b/src/org/kne/cloud/network/srv6/RouterInfoPacket.java index e1d125d..31ef280 100644 --- a/src/org/kne/cloud/network/srv6/RouterInfoPacket.java +++ b/src/org/kne/cloud/network/srv6/RouterInfoPacket.java @@ -20,7 +20,7 @@ import java.util.Objects; import java.util.Set; import org.kne.cloud.network.NetworkPacket; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; public class RouterInfoPacket extends KLALBRoutingProtocolPacket implements Serializable{ diff --git a/src/org/kne/cloud/network/srv6/SEQSSegmentRoutingTLV.java b/src/org/kne/cloud/network/srv6/SEQSSegmentRoutingTLV.java deleted file mode 100644 index eb3c89f..0000000 --- a/src/org/kne/cloud/network/srv6/SEQSSegmentRoutingTLV.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.kne.cloud.network.srv6; - -import java.io.EOFException; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.channels.ReadableByteChannel; -import java.nio.channels.WritableByteChannel; -import java.util.UUID; - -public class SEQSSegmentRoutingTLV extends IPv6SegmentRoutingTLV { - public SEQSSegmentRoutingTLV(ByteBuffer klalbHeader) { - super(klalbHeader); - } - - @Override - public String toString() { - return "SEQSSegmentRoutingTLV [getSequence()=" + getSequence() + "]"; - } - - public SEQSSegmentRoutingTLV(long sequence,UUID uuid, boolean promise,boolean keeporder/*,int flownumber,long flowsequence*/) { - super(IPv6SegmentRoutingTLV.SEQS); - setSequence(sequence); - setUUID(uuid); - setPromise(promise); - setKeepOrder(keeporder); - //setFlowNumber(flownumber); - //setFlowSequence(flowsequence); - //getData().limit(14); - //getData().limit(22); - getData().limit(30); - } - - public void setUUID(UUID uuid) { - getData().putLong(14,uuid.getMostSignificantBits()); - getData().putLong(22,uuid.getLeastSignificantBits()); - } - - public UUID getUUID() { - return new UUID(getData().getLong(14),getData().getLong(22)); - } - - @Override - public void writeToChannel(WritableByteChannel dto) throws IOException { - - super.writeToChannel(dto); - - } - - @Override - public void readFromChannel(ReadableByteChannel din, long length) throws IOException { - super.readFromChannel(din, length); - - } - - public long getSequence() { - return getData().getLong(6); - } - public void setSequence(long sequence) { - getData().putLong(6,sequence); - } - - public int getFlowNumber() { - return getData().getInt(2); - } - public void setFlowNumber(int flowsequence) { - getData().putInt(2,flowsequence); - } - - /*public long getFlowSequence() { - return getData().getLong(14); - } - public void setFlowSequence(long flowsequence) { - getData().putLong(14,flowsequence); - }*/ - - public boolean isPromise() { - return getData().get(0)!=0?true:false; - } - - public void setPromise(boolean promise) { - if(promise) { - getData().put(0, (byte) 1); - }else { - getData().put(0, (byte) 0); - } - } - public boolean isKeepOrder() { - return getData().get(1)!=0?true:false; - } - - public void setKeepOrder(boolean keeporder) { - if(keeporder) { - getData().put(1, (byte) 1); - }else { - getData().put(1, (byte) 0); - } - } -} diff --git a/src/org/kne/cloud/network/srv6/SRv6PacketReorder.java b/src/org/kne/cloud/network/srv6/SRv6PacketReorder.java index 68c6345..f2c1055 100644 --- a/src/org/kne/cloud/network/srv6/SRv6PacketReorder.java +++ b/src/org/kne/cloud/network/srv6/SRv6PacketReorder.java @@ -57,7 +57,7 @@ public class SRv6PacketReorder { while(true) { PacketTimeEntry i6p=map.remove(seqptr.get()); if(i6p!=null) { - //System.out.println("Ord:"+i6p.getFlowLabel()+" "+seqptr.get()); + System.out.println("Ord:"+i6p.packet.getFlowLabel()+" "+seqptr.get()); seqptr.getAndIncrement(); orderTime=System.nanoTime(); if(packetConsumer!=null&&(!i6p.accepted)) { @@ -65,7 +65,7 @@ public class SRv6PacketReorder { packetConsumer.accept(i6p.packet); } }else { - for(int i=1;i<5;i++) { + /*for(int i=1;i<3;i++) { PacketTimeEntry i6px=map.get(seqptr.get()+i); if(i6px!=null) { if(packetConsumer!=null&&(!i6px.accepted)) { @@ -73,7 +73,7 @@ public class SRv6PacketReorder { packetConsumer.accept(i6px.packet); } } - } + }*/ break; } } diff --git a/src/org/kne/cloud/network/srv6/SRv6PacketSeqMarker.java b/src/org/kne/cloud/network/srv6/SRv6PacketSeqMarker.java deleted file mode 100644 index 40986bd..0000000 --- a/src/org/kne/cloud/network/srv6/SRv6PacketSeqMarker.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.kne.cloud.network.srv6; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicLong; - -import org.kne.cloud.network.ipv6.FlowSession; -import org.kne.cloud.network.ipv6.IPv6Packet; - -public class SRv6PacketSeqMarker { - private Map flowseqMap=new ConcurrentHashMap(); - public void mark(IPv6Packet ipp) { - AtomicLong nal=new AtomicLong(); - AtomicLong rez=flowseqMap.putIfAbsent(ipp.getFlowSession(), nal); - if(rez==null) { - rez=nal; - } - ipp.setFlowSeqMark(rez.getAndIncrement()); - } -} diff --git a/src/org/kne/cloud/network/srv6/SRv6Router.java b/src/org/kne/cloud/network/srv6/SRv6Router.java index a33f58d..43f070c 100644 --- a/src/org/kne/cloud/network/srv6/SRv6Router.java +++ b/src/org/kne/cloud/network/srv6/SRv6Router.java @@ -3,7 +3,6 @@ package org.kne.cloud.network.srv6; import java.io.IOException; import java.net.Inet6Address; import java.net.UnknownHostException; -import java.nio.ByteBuffer; import java.security.SecureRandom; import java.util.ArrayList; import java.util.Collections; @@ -12,39 +11,60 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; import java.util.Set; import java.util.UUID; +import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; +import java.util.function.BiConsumer; import java.util.function.Consumer; +import java.util.function.Supplier; -import org.kne.cloud.network.NetworkPacket; +import javax.swing.plaf.synth.SynthOptionPaneUI; + +import org.kne.cloud.clock.HighAccuracyClock; +import org.kne.cloud.network.ThreadTool; +import org.kne.cloud.network.congestion.ArrayListMessageBatcher; +import org.kne.cloud.network.congestion.MessageBatcher; +import org.kne.cloud.network.ipv6.ControlledIPv6NetworkLink; +import org.kne.cloud.network.ipv6.FlowSession; +import org.kne.cloud.network.ipv6.ICMPv6Packet; +import org.kne.cloud.network.ipv6.ICMPv6PostcardPacket; import org.kne.cloud.network.ipv6.ICMPv6TimeExceededPacket; +import org.kne.cloud.network.ipv6.IPv6Address; import org.kne.cloud.network.ipv6.IPv6HopByHopTLV; import org.kne.cloud.network.ipv6.IPv6LinkStateListener; import org.kne.cloud.network.ipv6.IPv6NetworkLink; import org.kne.cloud.network.ipv6.IPv6Packet; import org.kne.cloud.network.ipv6.IPv6Packet.IPv6HopByHopHeader; -import org.kne.cloud.network.ipv6.IPv6Packet.IPv6Payload; import org.kne.cloud.network.ipv6.IPv6Packet.IPv6SegmentRoutingHeader; -import org.kne.cloud.network.ipv6.IPv6RouteTableKey; -import org.kne.cloud.network.ipv6.Inet6AddressGroup; +import org.kne.cloud.network.ipv6.IPv6TUNLoopbackNetworkLink; +import org.kne.cloud.network.ipv6.IPv6AddressGroup; +import org.kne.cloud.network.ipv6.KLALBOAMHopByHopTLV; +import org.kne.cloud.network.ipv6.KLALBPassportHopByHopTLV; import org.kne.cloud.network.ipv6.LoopbackIPv6NetworkLink; import org.kne.cloud.network.ipv6.Neighbor; +import org.kne.cloud.network.ipv6.PacketID; +import org.kne.cloud.network.ipv6.PacketIDGenerator; import org.kne.cloud.network.ipv6.PadNHopByHopTLV; +import org.kne.cloud.network.ipv6.PostcardEntry; import org.kne.cloud.network.ipv6.RouteItem; -import org.kne.io.KNEChannels; -import org.pcap4j.packet.IcmpV6CommonPacket; -import org.pcap4j.packet.IcmpV6TimeExceededPacket; +import org.kne.cloud.network.klalb.KLALBRemoteLine; +import org.kne.cloud.network.klalb.KLALBUtils; +import org.kne.concurrent.HighPerformanceExecutor; +import org.kne.concurrent.TimeoutConcurrentHashMap; import org.pcap4j.packet.IllegalRawDataException; -import org.pcap4j.packet.IpV6ExtHopByHopOptionsPacket.IpV6ExtHopByHopOptionsHeader; -import org.pcap4j.packet.IpV6Packet; -import org.pcap4j.packet.namednumber.IcmpV6Code; -import org.pcap4j.packet.namednumber.IcmpV6Type; -import org.pcap4j.packet.namednumber.IpNumber; + +import com.github.f4b6a3.uuid.UuidCreator; +import com.google.gson.internal.Pair; // SRv6路由器主类,实现IPv6段路由功能 public class SRv6Router { @@ -54,11 +74,16 @@ public class SRv6Router { public static final int MTU = 16384; // 最大传输单元 public static final int MAX_REROUTE_COUNT = 2;// 1 // 最大重路由次数 - private static final Inet6Address LOOPBACK_ADDRESS = getLoopbackAddress(); // 环回地址 - private static final Inet6Address ANY_LOCAL_ADDRESS = getAnyLocalAddress(); // 任意本地地址 - private static final int IPv6_BITS = 128; // IPv6地址位数 - + + /*private TimeoutConcurrentHashMap flowIDmap = new TimeoutConcurrentHashMap( + 60000000000L); +*/ + private Set unduplicateSet = Collections + .newSetFromMap(new TimeoutConcurrentHashMap(3000000000L, 1024, 0.5f)); + + private HighAccuracyClock clock; + // 获取环回地址 ::1 private static Inet6Address getLoopbackAddress() { try { @@ -88,7 +113,7 @@ public class SRv6Router { } // 环回网络链路 - private final LoopbackIPv6NetworkLink inLoopBack ; + private final LoopbackIPv6NetworkLink inLoopBack; // 获取路由表 public List getRouteTabel() { @@ -106,70 +131,120 @@ public class SRv6Router { @Override public void accept(IPv6Packet t) { // HighPerformanceExecutor.defaultExecutor.execute(() -> { - routePacket(t, true); // 执行重路由 + routePacket(null, t, true); // 执行重路由 t.putTimePassport("rerouted"); // 标记重路由时间点 // }); } }; - + + private boolean unduplicate(IPv6Packet pack) { + IPv6HopByHopHeader hbh = pack.getHopByHopHeader(); + KLALBOAMHopByHopTLV oamtlv = null; + if (hbh != null) { + List tlvs = hbh.getTlvs(); + + for (IPv6HopByHopTLV tlv : tlvs) { + if (tlv instanceof KLALBOAMHopByHopTLV) { + oamtlv = (KLALBOAMHopByHopTLV) tlv; + break; + } + } + } + if (oamtlv == null) + return true; + boolean bool = unduplicateSet.add(oamtlv.getUUID()); + // System.out.println(bool); + return bool; + } // 默认接收处理器 - private Consumer defaultReceive = new Consumer() { + /* + * private BiConsumer defaultReceive = new + * BiConsumer() { + * + * @Override public void accept(IPv6NetworkLink link,IPv6Packet t) { // + * HighPerformanceExecutor.defaultExecutor.execute(() -> { if(unduplicate(t)) { + * routePacket(t); // 执行路由 t.putTimePassport("routed"); // 标记路由时间点 } // }); } }; + */ - @Override - public void accept(IPv6Packet t) { - // HighPerformanceExecutor.defaultExecutor.execute(() -> { - routePacket(t); // 执行路由 - t.putTimePassport("routed"); // 标记路由时间点 - // }); - } - }; - // SRH接收处理器 - private Consumer srhReceive = new Consumer() { + private BiConsumer> srhReceive = new BiConsumer>() { @Override - public void accept(IPv6Packet t) { - // HighPerformanceExecutor.defaultExecutor.execute(() -> { - insertSRHandRoutePacket(t); // 插入SRH并路由数据包 - // }); + public void accept(IPv6NetworkLink link, Supplier pack) { + enqueuePacketReceiveTask(link, pack); } - }; - private volatile UUID suid = UUID.randomUUID(); // 会话唯一标识 + }; // 链路状态监听器实现 - private class LinkListener implements IPv6LinkStateListener{ + private class LinkListener implements IPv6LinkStateListener { @Override public void onOnlineStateUpdate(IPv6NetworkLink link) { - srListeners.forEach((v)->{v.onLinkChanged(SRv6Router.this,link);}); // 通知所有监听器链路状态变化 + srListeners.forEach((v) -> { + v.onLinkChanged(SRv6Router.this, link); + }); // 通知所有监听器链路状态变化 } @Override public void onAddressUpdate(IPv6NetworkLink link) { - srListeners.forEach((v)->{v.onLinkChanged(SRv6Router.this,link);}); // 通知所有监听器地址更新 + srListeners.forEach((v) -> { + v.onLinkChanged(SRv6Router.this, link); + }); // 通知所有监听器地址更新 } @Override public void onLocatorUpdate(IPv6NetworkLink link) { - srListeners.forEach((v)->{v.onLinkChanged(SRv6Router.this,link);}); // 通知所有监听器定位器更新 + srListeners.forEach((v) -> { + v.onLinkChanged(SRv6Router.this, link); + }); // 通知所有监听器定位器更新 } - + } - private IPv6LinkStateListener listener=new LinkListener(); // 链路状态监听器实例 - - private Set srListeners=new CopyOnWriteArraySet(); // SRv6路由器监听器集合 - + + private IPv6LinkStateListener listener = new LinkListener(); // 链路状态监听器实例 + + private Set srListeners = new CopyOnWriteArraySet(); // SRv6路由器监听器集合 + // 添加SRv6路由器监听器 public void addSRv6RouterListener(SRv6RouterListener listener) { srListeners.add(listener); } - + // 移除SRv6路由器监听器 public void removeSRv6RouterListener(SRv6RouterListener listener) { srListeners.remove(listener); } - + public void sortRouteTabel() { + + // 构建前缀长度索引的路由表 + List>> routeTabel1x = new ArrayList>>( + IPv6_BITS + 1); + for (int i = 0; i < IPv6_BITS + 1; i++) { + routeTabel1x.add(new HashMap>(1024, 0.5f)); + } + List routeTabel0x=routeTable0; + // 按前缀长度组织路由表 + for (RouteItem item : routeTabel0x) { + IPv6AddressGroup iag = item.getDestination(); + Map> map = routeTabel1x.get(iag.getPrefixLength()); + List newlist = new ArrayList(); + List oldlist = map.putIfAbsent(iag.getAddress(), newlist); + if (oldlist == null) { + oldlist = newlist; + } + oldlist.add(item); + } + for(Map> map:routeTabel1x) { + for(Listv:map.values()) { + Collections.sort(v); + } + } + // System.out.println(routeTabel1x); + routeTabel1 = routeTabel1x; // 更新索引路由表 + + + } // 更新路由表 public void updateRouteTabel() { List routeTabel0x = new ArrayList<>(); @@ -177,14 +252,17 @@ public class SRv6Router { // 遍历所有网络链路,收集路由信息 for (Iterator iterator = linkTabel.iterator(); iterator.hasNext();) { IPv6NetworkLink nlink = (IPv6NetworkLink) iterator.next(); - + List routes = nlink.getRouteItems(); // 获取链路的路由项 routeTabel0x.addAll(routes); // 添加到路由表 - + + nlink.setSRv6Router(this); nlink.addIPv6LinkStateListener(listener); // 添加链路状态监听器 nlink.setReceiveConsumer(srhReceive); // 设置接收处理器 - nlink.setRerouteConsumer(defaultReroute); // 设置重路由处理器 - nlink.setCongressCondition(congressLock, congressCondition); // 设置拥塞条件 + if (nlink instanceof ControlledIPv6NetworkLink) { + ((ControlledIPv6NetworkLink) nlink).setRerouteConsumer(defaultReroute); // 设置重路由处理器 + ((ControlledIPv6NetworkLink) nlink).setCongressCondition(congressLock, congressCondition); // 设置拥塞条件 + } } // 预处理和排序路由项 @@ -193,34 +271,34 @@ public class SRv6Router { routeItem.preSort(); // 预排序 } Collections.sort(routeTabel0x); // 排序路由表 - + // 构建前缀长度索引的路由表 - ArrayList>> routeTabel1x=new ArrayList>>(IPv6_BITS+1); - for (int i = 0; i < IPv6_BITS+1; i++) { - routeTabel1x.add(new HashMap>()); + ArrayList>> routeTabel1x = new ArrayList>>( + IPv6_BITS + 1); + for (int i = 0; i < IPv6_BITS + 1; i++) { + routeTabel1x.add(new HashMap>(1024, 0.5f)); } - + // 按前缀长度组织路由表 - for (RouteItem item: routeTabel0x) { - Inet6AddressGroup iag= item.getDestination(); - Map> map= routeTabel1x.get(iag.getPrefixLength()); - Listnewlist=new ArrayList(); - Listoldlist=map.putIfAbsent(new IPv6RouteTableKey( iag.getAddress()), newlist); - if(oldlist==null) { - oldlist=newlist; + for (RouteItem item : routeTabel0x) { + IPv6AddressGroup iag = item.getDestination(); + Map> map = routeTabel1x.get(iag.getPrefixLength()); + List newlist = new ArrayList(); + List oldlist = map.putIfAbsent(iag.getAddress(), newlist); + if (oldlist == null) { + oldlist = newlist; } oldlist.add(item); } - //System.out.println(routeTabel1x); + // System.out.println(routeTabel1x); routeTable0 = routeTabel0x; // 更新平面路由表 - routeTabel1=routeTabel1x; // 更新索引路由表 - suid = UUID.randomUUID(); // 更新会话ID + routeTabel1 = routeTabel1x; // 更新索引路由表 } - private Inet6AddressGroup locator; // SRv6定位器 + private IPv6AddressGroup locator; // SRv6定位器 private long asn = new SecureRandom().nextLong(1, Long.MAX_VALUE); // 自治系统号 - public Inet6AddressGroup getLocator() { + public IPv6AddressGroup getLocator() { return locator; } @@ -233,48 +311,57 @@ public class SRv6Router { } // 设置定位器并更新路由表 - public void setLocator(Inet6AddressGroup locator) { + public void setLocator(IPv6AddressGroup locator) { this.locator = locator; updateRouteTabel(); } // 插入SRH并路由数据包 - public void insertSRHandRoutePacket(IPv6Packet ipp) { - insertSRH(ipp); // 插入段路由头 + public void insertSRHandRoutePacket(IPv6NetworkLink link, IPv6Packet ipp) { + insertHopByHopHeader(ipp); + ipp.putTimePassport("Hop inserted"); + insertSRHeader(ipp); // 插入段路由头 ipp.putTimePassport("SRH inserted"); // 标记SRH插入时间点 - routePacket(ipp); // 路由数据包 + routePacket(link, ipp); // 路由数据包 ipp.putTimePassport("routed"); // 标记路由时间点 } + + private PacketIDGenerator defaultGen = new PacketIDGenerator(); + private static final PadNHopByHopTLV pad4 = new PadNHopByHopTLV(4); + + // 插入逐跳路由头 + public boolean insertHopByHopHeader(IPv6Packet ipp) { + if (ipp.getHopByHopHeader() != null) { + return false; + } + IPv6HopByHopHeader hbh = new IPv6HopByHopHeader(); + hbh.getTlvs().add(pad4); + UUID pid = KLALBUtils.createGlobalUUID(); + hbh.getTlvs().add(new KLALBOAMHopByHopTLV(0, ipp.getHopLimit(), true, false, true, pid, + clock.getCurrentTimeNTP64().longValue())); + ipp.getHeaders().add(0, hbh); // 添加Hop头 + ipp.setHopByHopHeader(hbh); + return true; + } + // 插入段路由头 - public boolean insertSRH(IPv6Packet ipp) { + public boolean insertSRHeader(IPv6Packet ipp) { // 如果已有SRH,返回false - if (ipp.getSRHHeader() != null) { + if (ipp.getSegmentRoutingHeader() != null) { return false; } // 如果KLALB路由协议可用,创建段列表 if (klalbRouteProtol != null) { - List segs = klalbRouteProtol.createSegmentList(ipp.getDestinationAddress()); + List segs = klalbRouteProtol.createSegmentList(ipp.getDestinationAddress()); // System.out.println(segs); if (segs != null && (!segs.isEmpty())) { - IPv6HopByHopHeader hbh=new IPv6HopByHopHeader(); - hbh.getTlvs().add(new PadNHopByHopTLV(4)); - ipp.getHeaders().add(hbh); // 添加Hop头 + // 创建SRH头 IPv6SegmentRoutingHeader irh = new IPv6SegmentRoutingHeader(segs); - // System.out.println(ipp.getFlowLabel()); - ThreadLocalRandom tlr = ThreadLocalRandom.current(); - // System.out.println(ipp.getFlowSeqMark()); - // 添加序列号TLV - irh.getTlvs() - .add(new SEQSSegmentRoutingTLV(ipp.getFlowSeqMark(), - new UUID(suid.getMostSignificantBits() ^ tlr.nextLong(), - suid.getMostSignificantBits() ^ tlr.nextLong()), - ipp.isPromise(), ipp.getFlowSeqMark() != -1)); - ipp.getHeaders().add(irh); // 添加SRH头 - + ipp.setRoutingHeader(irh); ipp.setDestinationAddress(segs.get(segs.size() - 1)); // 更新目的地址为最后一个段 return true; @@ -286,21 +373,26 @@ public class SRv6Router { private volatile List routeTable0 = new ArrayList<>(); // 当前路由表 // 前缀长度索引的路由表 - private volatile ArrayList>> routeTabel1=new ArrayList>>(IPv6_BITS+1); + private volatile List>> routeTabel1 = new ArrayList>>( + IPv6_BITS + 1); { // 初始化索引路由表 - for (int i = 0; i < IPv6_BITS+1; i++) { - routeTabel1.add(new HashMap>()); + for (int i = 0; i < IPv6_BITS + 1; i++) { + routeTabel1.add(new HashMap>(1024, 0.5f)); } } - // 路由数据包(默认非重路由) private void routePacket(IPv6Packet iPv6Packet) { - routePacket(iPv6Packet, false); + routePacket(null, iPv6Packet, false); + } + + // 路由数据包(默认非重路由) + private void routePacket(IPv6NetworkLink linkfrom, IPv6Packet iPv6Packet) { + routePacket(linkfrom, iPv6Packet, false); } // 路由数据包主方法 - private void routePacket(IPv6Packet iPv6Packet, boolean reroute) { + private void routePacket(IPv6NetworkLink linkfrom, IPv6Packet iPv6Packet, boolean reroute) { StringBuilder dbg = null; if (debug) { dbg = new StringBuilder(); // 调试信息 @@ -309,18 +401,18 @@ public class SRv6Router { int hop = iPv6Packet.getHopLimit(); // 获取跳数限制 if (hop > 0) { // 检查TTL值,只有大于0才会被转发 // 搜索匹配的路由表项 - ListsearchResult=searchTable(iPv6Packet, reroute, dbg); + List searchResult = searchTable(iPv6Packet, reroute, dbg); if (!searchResult.isEmpty()) { // 匹配到路由表,执行负载均衡路由 - routingLoadBalance(iPv6Packet, reroute, dbg, searchResult); + routingLoadBalance(linkfrom, iPv6Packet, reroute, dbg, searchResult); return; } if (debug) dbg.append("noroute\n"); - + // 未找到路由,尝试FRR(快速重路由)保护 - IPv6SegmentRoutingHeader srh = iPv6Packet.getSRHHeader(); + IPv6SegmentRoutingHeader srh = iPv6Packet.getSegmentRoutingHeader(); if (srh != null) { System.out.println("原SRH:" + srh); int segmentsLeft = srh.getSegmentsLeft(); @@ -329,12 +421,12 @@ public class SRv6Router { segmentsLeft--; } // 创建修复段列表 - List repairSegments = klalbRouteProtol + List repairSegments = klalbRouteProtol .createSegmentList(srh.getAddresses().get(segmentsLeft)); if (repairSegments == null || repairSegments.isEmpty()) { System.out.println("FRR保护失败"); return; - } + } repairSegments.remove(0); // 移除第一个段(当前节点) srh.getAddresses().addAll(segmentsLeft + 1, repairSegments); // 添加修复段 segmentsLeft += repairSegments.size(); // 更新剩余段数 @@ -345,9 +437,9 @@ public class SRv6Router { } System.out.println("FRR修复SRH:" + srh); // 重新搜索路由表 - ListsearchResult2=searchTable(iPv6Packet, reroute, dbg); + List searchResult2 = searchTable(iPv6Packet, reroute, dbg); if (!searchResult2.isEmpty()) { - routingLoadBalance(iPv6Packet, reroute, dbg, searchResult2); + routingLoadBalance(linkfrom, iPv6Packet, reroute, dbg, searchResult2); return; } @@ -356,7 +448,7 @@ public class SRv6Router { sendTTLExceedPacket(iPv6Packet); } } catch (Exception e) { - e.printStackTrace(); + e.printStackTrace(); } finally { if (debug) { System.out.println(dbg.toString()); // 输出调试信息 @@ -369,28 +461,19 @@ public class SRv6Router { throws IllegalRawDataException, IOException { if (debug) { dbg.append("----------------------------------------\n"); - dbg.append("packet:" + iPv6Packet.getSourceAddress().getHostAddress() + " -> " - + iPv6Packet.getDestinationAddress().getHostAddress() + "\n"); + dbg.append("packet:" + iPv6Packet.getSourceAddress() + " -> " + iPv6Packet.getDestinationAddress() + "\n"); } - - List table = null; - IPv6RouteTableKey rk6= iPv6Packet.getDestinationRouteTableKey(); - // 最长前缀匹配搜索 - for(int i=128;i>=0;i--) { - rk6.applyMask(i); // 应用掩码 - table=routeTabel1.get(i).get(rk6); // 查找匹配的路由表 - if(table!=null) { - break; // 找到匹配 - } - } - + + IPv6Address rk6 = iPv6Packet.getDestinationAddress(); + List table = getTabelByAddress(rk6); + RouteItem prevr = null; List routes = new ArrayList<>(); - - if(table ==null) { + + if (table == null) { return routes; // 无匹配路由 } - + // 遍历路由表,筛选可用路由 for (RouteItem tri : table) { if (!tri.getDestlink().isUp()) { // 检查链路状态 @@ -415,99 +498,105 @@ public class SRv6Router { } return routes; } - - private ReentrantLock congressLock=new ReentrantLock(); // 拥塞锁 - private Condition congressCondition=congressLock.newCondition(); // 拥塞条件 - + + private List getTabelByAddress(IPv6Address rk6) { + List table = null; + // 最长前缀匹配搜索 + for (int i = 128; i >= 0; i--) { + rk6 = rk6.maskWith(IPv6Address.createMask(i)); // 应用掩码 + table = routeTabel1.get(i).get(rk6); // 查找匹配的路由表 + if (table != null) { + break; // 找到匹配 + } + } + return table; + } + + private ReentrantLock congressLock = new ReentrantLock(); // 拥塞锁 + private Condition congressCondition = congressLock.newCondition(); // 拥塞条件 + // 负载均衡路由 - private boolean routingLoadBalance(IPv6Packet iPv6Packet, boolean reroute, StringBuilder dbg, - List routes) throws IllegalRawDataException, IOException { + private boolean routingLoadBalance(IPv6NetworkLink linkfrom, IPv6Packet iPv6Packet, boolean reroute, + StringBuilder dbg, List routes) throws IllegalRawDataException, IOException { double cscale = 1.0; // 拥塞检测比例因子 if (iPv6Packet.getPayload().getProtocolNumber() == 6) { // TCP协议 cscale = 15.0; // TCP使用更高的拥塞检测阈值 } - - - if(iPv6Packet.getPreviousLink()!=null) { - List prev=new ArrayList<>(); - for (Iterator iterator = routes.iterator(); iterator.hasNext();) { - RouteItem routeItem = (RouteItem) iterator.next(); - if(routeItem.getDestlink().equals(iPv6Packet.getPreviousLink())) { - prev.add(routeItem); - iterator.remove(); - } + if (iPv6Packet.getPreviousLink() != null) { + List prev = new ArrayList<>(); + for (Iterator iterator = routes.iterator(); iterator.hasNext();) { + RouteItem routeItem = (RouteItem) iterator.next(); + if (routeItem.getDestlink().equals(iPv6Packet.getPreviousLink())) { + prev.add(routeItem); + iterator.remove(); } - routes.addAll(prev); } - for(double i=1;i<10;i+=0.1) { - if(loadBalance(iPv6Packet,reroute,dbg,routes,cscale*i,i==1)) { + routes.addAll(prev); + } + for (double i = 1; i < 10; i += 0.1) { + if (loadBalance(linkfrom, iPv6Packet, reroute, dbg, routes, cscale * i)) { return true; } - + if (iPv6Packet.isEnableECN()) { // 启用ECN iPv6Packet.markCE(); // 标记拥塞 if (debug) { dbg.append("ECN enabled.\n"); } } - } - System.out.println("Send failed:"+iPv6Packet); + } + System.out.println("Send failed:" + iPv6Packet); if (debug) { dbg.append("miss.\n"); // 路由失败 } return false; // 路由失败 } - private boolean loadBalance(IPv6Packet iPv6Packet, boolean reroute, StringBuilder dbg, List routes, - double cscale, boolean checkSpeedLimit) throws IllegalRawDataException, IOException { + private boolean loadBalance(IPv6NetworkLink linkfrom, IPv6Packet iPv6Packet, boolean reroute, StringBuilder dbg, + List routes, double cscale) + throws IllegalRawDataException, IOException { // 遍历可用路由进行负载均衡 - for (RouteItem tri : routes) { - IPv6NetworkLink link = tri.getDestlink(); - if (!link.isUp()) { // 检查链路状态 - if (debug) { - dbg.append(tri + "\n"); - dbg.append("linkdown.\n"); - } - continue; // 跳过断开链路 - } - if (link.isCongress(iPv6Packet, cscale)) { // 检查拥塞 - if (debug) { - dbg.append(tri + "\n"); - dbg.append("congress.\n"); - } - continue; // 跳过拥塞链路 - } - - if (link.isReachSpeedLimit(iPv6Packet)&&checkSpeedLimit) { // 检查速度限制 - if (debug) { - dbg.append(tri + "\n"); - dbg.append("reachspeedlimit.\n"); - } - continue; // 跳过达到限速的链路 - } - - if (debug) { - dbg.append(tri + "\n"); - dbg.append("matched.\n"); - } - // 找到可用链路,处理数据包 - processPacket(iPv6Packet, tri, reroute); - return true; + for (RouteItem tri : routes) { + IPv6NetworkLink link = tri.getDestlink(); + if (!link.isUp()) { // 检查链路状态 + if (debug) { + dbg.append(tri + "\n"); + dbg.append("linkdown.\n"); + } + continue; // 跳过断开链路 + } + if (link instanceof ControlledIPv6NetworkLink) { + if (((ControlledIPv6NetworkLink) link).isCongress(iPv6Packet, cscale)) { // 检查拥塞 + if (debug) { + dbg.append(tri + "\n"); + dbg.append("congress.\n"); } - return false; + continue; // 跳过拥塞链路 + } + + } + if (debug) { + dbg.append(tri + "\n"); + dbg.append("matched.\n"); + } + // 找到可用链路,处理数据包 + processPacket(linkfrom, iPv6Packet, tri, reroute); + return true; + } + return false; } // 处理数据包转发 - private void processPacket(IPv6Packet iPv6Packet, RouteItem ri, boolean reroute) + private void processPacket(IPv6NetworkLink linkfrom, IPv6Packet iPv6Packet, RouteItem ri, boolean reroute) throws IllegalRawDataException, IOException { int hop = iPv6Packet.getHopLimit(); if (ri.getDestlink().isLoopBack()) { // 环回链路处理 - IPv6SegmentRoutingHeader srhh = iPv6Packet.getSRHHeader(); + IPv6SegmentRoutingHeader srhh = iPv6Packet.getSegmentRoutingHeader(); if (srhh != null) { - processSRv6Packet(iPv6Packet, ri, srhh, reroute); // SRv6特殊处理 + processSRv6Packet(linkfrom, iPv6Packet, ri, srhh, iPv6Packet.getHopByHopHeader(), reroute); // SRv6特殊处理 } else { sendPacketToRouteItem(iPv6Packet, ri); } @@ -520,7 +609,7 @@ public class SRv6Router { if (!reroute) { hop--; // 减少TTL(非重路由时) } - + if (hop > 0) { // TTL有效 iPv6Packet.setHopLimit(hop); // 更新TTL sendPacketToRouteItem(iPv6Packet, ri); // 发送数据包 @@ -531,63 +620,253 @@ public class SRv6Router { } private void sendPacketToRouteItem(IPv6Packet iPv6Packet, RouteItem ri) throws IOException { - IPv6NetworkLink oldLink=iPv6Packet.getPreviousLink(); - /*if(oldLink!=null) { - System.out.println("重传:"+!oldLink.equals(ri.getDestlink())); - }*/ - //System.out.println(iPv6Packet.getHeaders()); - iPv6Packet.setPreviousLink(ri.getDestlink()); - ri.getDestlink().sendPacket(iPv6Packet, ri.getNexthop()); + if (iPv6Packet.getPayload() instanceof ICMPv6PostcardPacket && ri.getDestlink().isLoopBack()) { + onPostcardReceive(iPv6Packet); + } else { + IPv6NetworkLink oldLink = iPv6Packet.getPreviousLink(); + /* + * if(oldLink!=null) { + * System.out.println("重传:"+!oldLink.equals(ri.getDestlink())); } + */ + iPv6Packet.setPreviousLink(ri.getDestlink()); + ri.getDestlink().sendPacket(iPv6Packet, ri.getNexthop()); + } + } + + private void onPostcardReceive(IPv6Packet postcards) { + ICMPv6PostcardPacket postcardsi = (ICMPv6PostcardPacket) postcards.getPayload(); + for (PostcardEntry postcard : postcardsi.getPostcards()) { + IPv6Address sid = postcard.getSID(); + + List ris = getTabelByAddress(sid); + if (ris != null) { + for (RouteItem ri : ris) { + if (ri.getNexthop().equals(sid)) { + if (ri.getDestlink() instanceof KLALBRemoteLine) { + KLALBRemoteLine rem = (KLALBRemoteLine) ri.getDestlink(); + rem.onPostcardReceive(postcard); + } + } + } + } + } + } // 发送ICMP TTL超时消息 private void sendTTLExceedPacket(IPv6Packet iPv6Packet) throws IOException, IllegalRawDataException { - // 构建IPv6数据包封装ICMP消息 - IPv6Packet icmpv = new IPv6Packet(); - icmpv.setSourceAddress(locator.getAddress()); - icmpv.setDestinationAddress(iPv6Packet.getSourceAddress()); - icmpv.setTrafficClass(iPv6Packet.getTrafficClass()); - icmpv.setVersion(6); - icmpv.setFlowLabel(0); - icmpv.setHopLimit(255); // ICMP消息TTL设为最大值 - ICMPv6TimeExceededPacket ipl = ICMPv6TimeExceededPacket.createHopLimitExceeded(iPv6Packet); - ipl.setParent(icmpv); - ipl.updateChecksum(); - icmpv.setPayload(ipl); - insertSRHandRoutePacket(icmpv); // 插入SRH并路由ICMP消息 + enqueuePacketSendTask(() -> { + // 构建IPv6数据包封装ICMP消息 + IPv6Packet icmpv = new IPv6Packet(); + icmpv.setSourceAddress(locator.getAddress()); + icmpv.setDestinationAddress(iPv6Packet.getSourceAddress()); + icmpv.setTrafficClass(iPv6Packet.getTrafficClass()); + icmpv.setVersion(6); + icmpv.setFlowLabel(0); + icmpv.setHopLimit(255); // ICMP消息TTL设为最大值 + ICMPv6TimeExceededPacket ipl = ICMPv6TimeExceededPacket.createHopLimitExceeded(iPv6Packet); + ipl.setParent(icmpv); + ipl.updateChecksum(); + icmpv.setPayload(ipl); + return icmpv; + }); + } // 处理SRv6数据包 - private void processSRv6Packet(IPv6Packet iPv6Packet, RouteItem ri, IPv6SegmentRoutingHeader srhh, boolean reroute) + private void processSRv6Packet(IPv6NetworkLink linkfrom, IPv6Packet iPv6Packet, RouteItem ri, + IPv6SegmentRoutingHeader srhh, IPv6HopByHopHeader iPv6HopByHopHeader, boolean reroute) throws IllegalRawDataException, IOException { if (srhh.getSegmentsLeft() <= 0) { // 所有段已处理完毕 + if (iPv6HopByHopHeader != null) { + int sl = srhh.getSegmentsLeft(); + // IPv6Address prevSID + // =sl+1>=srhh.getAddresses().size()?iPv6Packet.getSourceAddress():srhh.getAddresses().get(sl+1); + if (linkfrom instanceof KLALBRemoteLine) { + processKLALBOAM(iPv6Packet, linkfrom.getAddressGroups().get(0).getAddress(), + ((KLALBRemoteLine) linkfrom).getRemoteVaddr().getAddress(), iPv6HopByHopHeader); + } + } + // System.out.println(iPv6HopByHopHeader); sendPacketToRouteItem(iPv6Packet, ri); } else { if (reroute) { // 重路由处理 } else { + int oldSL = srhh.getSegmentsLeft(); + if (iPv6HopByHopHeader != null) { + // IPv6Address prevSID + // =oldSL+1>=srhh.getAddresses().size()?iPv6Packet.getSourceAddress():srhh.getAddresses().get(oldSL+1); + if (linkfrom instanceof KLALBRemoteLine) { + processKLALBOAM(iPv6Packet, linkfrom.getAddressGroups().get(0).getAddress(), + ((KLALBRemoteLine) linkfrom).getRemoteVaddr().getAddress(), iPv6HopByHopHeader); + } + } // 正常SRv6处理:移动到下一个段 - int newSL = srhh.getSegmentsLeft() - 1; + int newSL = oldSL - 1; srhh.setSegmentsLeft(newSL); // 更新剩余段数 iPv6Packet.setDestinationAddress(srhh.getAddresses().get(newSL)); // 更新目的地址 } // 记录热点地址(用于流量工程) if (iPv6Packet.getPayload().getProtocolNumber() != KLALBRoutingProtocol.DEFAULT_PROTOCOL_NUMBER) klalbRouteProtol.putHotspotAddress(iPv6Packet.getSourceAddress()); - routePacket(iPv6Packet, reroute); // 继续路由 + routePacket(linkfrom, iPv6Packet, reroute); // 继续路由 } } + private void processKLALBOAM(IPv6Packet iPv6Packet, IPv6Address sourceSID, IPv6Address prevSID, + IPv6HopByHopHeader iPv6HopByHopHeader) { + KLALBOAMHopByHopTLV oam = null; + List tlvs = iPv6HopByHopHeader.getTlvs(); + KLALBPassportHopByHopTLV prevEndPassport = null; + for (IPv6HopByHopTLV tlv : tlvs) { + if (tlv instanceof KLALBOAMHopByHopTLV) { + oam = (KLALBOAMHopByHopTLV) tlv; + } else if (tlv instanceof KLALBPassportHopByHopTLV) { + prevEndPassport = (KLALBPassportHopByHopTLV) tlv; + } + } + if (oam != null) { + long timentp = clock.getCurrentTimeNTP64().longValue(); + int packetLength = (int) iPv6Packet.getTotalLength(); + long oamt = oam.getTimestamp(); + long delta = timentp - oamt; + long prevhop = oamt; + if (prevEndPassport != null) { + prevhop += prevEndPassport.getTimestampOffsetLong(); + } + + if (oam.isRecordPassport()) { + tlvs.add(new KLALBPassportHopByHopTLV(packetLength, (int) (delta >> 4))); + } + if (iPv6Packet.getPayload() instanceof ICMPv6PostcardPacket) { + } else { + boolean phop = oam.isPostcardToPreviousHop(); + boolean psrc = oam.isPostcardToSource(); + // System.out.println(iPv6Packet.getPayload()); + if (phop) { + putPostcard(locator.getAddress(), prevSID, sourceSID, oam.getUUID(), prevhop, timentp - prevhop, + packetLength); + } + if (psrc) { + putPostcard(locator.getAddress(), iPv6Packet.getSourceAddress(), sourceSID, oam.getUUID(), oamt, + delta, packetLength); + } + } + } + } + + private TimeoutConcurrentHashMap, MessageBatcher> postcardBatch = new TimeoutConcurrentHashMap<>( + 1000000000L); + + private void putPostcard(IPv6Address src, IPv6Address dst, IPv6Address srcSID, UUID uuid, long timeStamp, + long delta, int packetLength) { + PostcardEntry pn = new PostcardEntry(srcSID, uuid, timeStamp, (int) (delta >> 4), packetLength); + Pair addressPair = new Pair(src, dst); + MessageBatcher batch = postcardBatch.computeIfAbsent(addressPair, (k) -> { + MessageBatcher mb = new ArrayListMessageBatcher(30, 2000000L); + mb.setConsumer((list) -> { + enqueuePacketSendTask(() -> { + IPv6Packet icmpv = new IPv6Packet(); + icmpv.setSourceAddress(k.first); + icmpv.setDestinationAddress(k.second); + icmpv.setTrafficClass(0); + icmpv.setVersion(6); + icmpv.setFlowLabel(0); + icmpv.setHopLimit(255); // ICMP消息TTL设为最大值 + ICMPv6PostcardPacket ipl = new ICMPv6PostcardPacket(); + ipl.getPostcards().addAll(list); + ipl.setParent(icmpv); + ipl.updateChecksum(); + icmpv.setPayload(ipl); + return icmpv; + }); + }); + return mb; + }); + postcardBatch.refresh(addressPair); + batch.putMessage(pn); + } + + private static HighPerformanceExecutor defaultExecutor = new HighPerformanceExecutor( + Runtime.getRuntime().availableProcessors() + 1, Thread.ofPlatform().name("SRv6 Routing").factory());//Runtime.getRuntime().availableProcessors() + 1 + + public static HighPerformanceExecutor getDefaultExecutor() { + return defaultExecutor; + } + + // private ArrayBlockingQueue> packetQueue=new + // ArrayBlockingQueue<>(10000); + public void enqueuePacketSendTask(Supplier sendTask) { + // packetQueue.add(object); + defaultExecutor.executeWithCongestionReport((state) -> { + try { + IPv6Packet packet=sendTask.get(); + if(state) { + if(packet.isEnableECN()) { + packet.markCE(); + //System.out.println("mce"); + } + } + insertSRHandRoutePacket(null, packet); // 插入SRH并路由 + } catch (Exception e) { + e.printStackTrace(); + } + },20); + } + + public void onReceive(IPv6NetworkLink link,IPv6Packet t){ + if (unduplicate(t)) { + insertSRHandRoutePacket(link, t); // 插入SRH并路由数据包 + t.putTimePassport("routed"); // 标记路由时间点 + } + } + + public void enqueuePacketReceiveTask(IPv6NetworkLink link, Supplier pack) { + defaultExecutor.executeWithCongestionReport((state) -> { + try { + IPv6Packet packet = pack.get(); + if(state) { + if(packet.isEnableECN()) { + packet.markCE(); + //System.out.println("mce"); + } + } + onReceive(link ,packet); + } catch (Exception e) { + e.printStackTrace(); + } + },20); + } + + public void enqueuePacket(IPv6Packet packet) { + enqueuePacketSendTask(() -> { + return packet; + }); + } + // 构造函数 - public SRv6Router(Inet6AddressGroup hostAddress) { + public SRv6Router(IPv6AddressGroup hostAddress, HighAccuracyClock clock) { super(); this.locator = hostAddress; + this.clock = clock; + // initWorkerThreads(); // 创建环回链路 - this.inLoopBack = new LoopbackIPv6NetworkLink(List.of(new Inet6AddressGroup(LOOPBACK_ADDRESS, 128) ,hostAddress),this); + this.inLoopBack = new LoopbackIPv6NetworkLink( + List.of(new IPv6AddressGroup(IPv6Address.LOOPBACK, 128), hostAddress), this); linkTabel.add(inLoopBack); // 添加到链路表 } + /* + * private void initWorkerThreads() { int + * threads=Runtime.getRuntime().availableProcessors()*4; for(int + * i=0;i{ + * while(true) { try { SupplierpacketSup= packetQueue.take(); + * insertSRHandRoutePacket(packetSup.get()); // 插入SRH并路由 }catch(Exception e) { + * e.printStackTrace(); } } } ).start(); } } + */ + private KLALBRoutingProtocol klalbRouteProtol = null; // KLALB路由协议实例 // 启动KLALB路由协议 @@ -608,38 +887,38 @@ public class SRv6Router { // 获取邻居信息 public List getNeighbors() { - List result=new ArrayList<>(); - Listlinks=getLinkTabel(); - Object[] nls=links.toArray(); - for(int i=0;ineis=nl.getNeighborsInfo(); - for (Iterator iteratorx = neis.iterator(); iteratorx.hasNext();) { - Neighbor addresses = (Neighbor) iteratorx.next(); - result.add(addresses); // 添加邻居信息 - } + List result = new ArrayList<>(); + List links = getLinkTabel(); + Object[] nls = links.toArray(); + for (int i = 0; i < nls.length; i++) { + IPv6NetworkLink nl = (IPv6NetworkLink) nls[i]; + if (!nl.isLoopBack()) { // 排除环回接口 + List neis = nl.getNeighborsInfo(); + for (Iterator iteratorx = neis.iterator(); iteratorx.hasNext();) { + Neighbor addresses = (Neighbor) iteratorx.next(); + result.add(addresses); // 添加邻居信息 + } } } return result; } // 获取所有定位器 - public Set getLocators() { - Set result=new HashSet<>(); - Listlinks=getLinkTabel(); - Object[] nls=links.toArray(); - for(int i=0;ineis=nl.getNeighborsInfo(); - for (Iterator iteratorx = neis.iterator(); iteratorx.hasNext();) { - Neighbor addresses = (Neighbor) iteratorx.next(); - if(addresses.getLocator()!=null) - result.add(addresses.getLocator()); // 添加邻居定位器 - } + public Set getLocators() { + Set result = new HashSet<>(); + List links = getLinkTabel(); + Object[] nls = links.toArray(); + for (int i = 0; i < nls.length; i++) { + IPv6NetworkLink nl = (IPv6NetworkLink) nls[i]; + if (!nl.isLoopBack()) { // 排除环回接口 + List neis = nl.getNeighborsInfo(); + for (Iterator iteratorx = neis.iterator(); iteratorx.hasNext();) { + Neighbor addresses = (Neighbor) iteratorx.next(); + if (addresses.getLocator() != null) + result.add(addresses.getLocator()); // 添加邻居定位器 + } } } return result; } -} \ No newline at end of file +} \ No newline at end of file diff --git a/src/org/kne/cloud/network/tcp/UDPPacket.java b/src/org/kne/cloud/network/tcp/UDPPacket.java index 78caff0..1fb994f 100644 --- a/src/org/kne/cloud/network/tcp/UDPPacket.java +++ b/src/org/kne/cloud/network/tcp/UDPPacket.java @@ -131,17 +131,10 @@ public class UDPPacket extends IPv6Payload implements PortPacket { // 临时将校验和字段设为0 setChecksum(0); - long sum = 0; // IPv6伪首部 - byte[] srcAddr = new byte[16], dstAddr = new byte[16]; - getParent().getRawSourceAddress(srcAddr); - getParent().getRawDestinationAddress(dstAddr); - - for (int i = 0; i < 16; i += 2) { - sum += ((srcAddr[i] & 0xFF) << 8) | (srcAddr[i + 1] & 0xFF); - sum += ((dstAddr[i] & 0xFF) << 8) | (dstAddr[i + 1] & 0xFF); - } + + long sum = getParent().calculateAddressChecksum(); // 使用总长度(头部+数据) int totalLength = getUDPLength(); @@ -199,20 +192,6 @@ public class UDPPacket extends IPv6Payload implements PortPacket { return "UDP " + getSrcPort() + "->" + getDstPort() + " [Total:" + getUDPLength() + ", Data:" + getDataLength() + "] " + Arrays.toString(b); } - public static void main(String[] args) throws UnknownHostException { - UDPPacket udp=new UDPPacket(1234,1234); - udp.getData().put((byte) 234); - udp.getData().flip(); - IPv6Packet ipv=new IPv6Packet(); - ipv.setSourceAddress((Inet6Address) Inet6Address.getByName("::1")); - ipv.setDestinationAddress((Inet6Address) Inet6Address.getByName("::2")); - udp.setParent(ipv); - System.out.println(udp.calculateChecksum()); - udp.setChecksum(1); - System.out.println(udp.verifyChecksum()); - udp.updateChecksum(); - System.out.println(udp.verifyChecksum()); - } - + } \ No newline at end of file diff --git a/tuntap4j.dll b/tuntap4j.dll new file mode 100644 index 0000000..b63010c Binary files /dev/null and b/tuntap4j.dll differ