Microkernel based hobby OS

readme

Changed files
+78 -136
aethelos-source
-98
aethelos-source/Makefile
··· 1 - # Makefile for AethelOS 2 - # The build incantations for awakening the system 3 - 4 - .PHONY: all clean bootloader kernel groves runes test qemu 5 - 6 - # Colors for output 7 - COLOR_GREEN=\033[0;32m 8 - COLOR_BLUE=\033[0;34m 9 - COLOR_CYAN=\033[0;36m 10 - COLOR_RESET=\033[0m 11 - 12 - all: bootloader kernel groves runes 13 - @echo "$(COLOR_GREEN)[] AethelOS build complete!$(COLOR_RESET)" 14 - 15 - # Build the bootloader 16 - bootloader: 17 - @echo "$(COLOR_CYAN)[] Awakening the bootloader...$(COLOR_RESET)" 18 - nasm -f bin awakening/boot.asm -o build/boot.bin 19 - @echo "$(COLOR_GREEN)[] Bootloader ready$(COLOR_RESET)" 20 - 21 - # Build the Heartwood kernel 22 - kernel: 23 - @echo "$(COLOR_CYAN)[] Building the Heartwood...$(COLOR_RESET)" 24 - cd heartwood && cargo build --release 25 - @echo "$(COLOR_GREEN)[] Heartwood compiled$(COLOR_RESET)" 26 - 27 - # Build all Grove services 28 - groves: 29 - @echo "$(COLOR_CYAN)[] Growing the Groves...$(COLOR_RESET)" 30 - cd groves/world-tree_grove && cargo build --release 31 - cd groves/the-weave_grove && cargo build --release 32 - cd groves/lanthir_grove && cargo build --release 33 - cd groves/network_sprite && cargo build --release 34 - @echo "$(COLOR_GREEN)[] Groves flourishing$(COLOR_RESET)" 35 - 36 - # Build Ancient Runes libraries 37 - runes: 38 - @echo "$(COLOR_CYAN)[] Inscribing the Ancient Runes...$(COLOR_RESET)" 39 - cd ancient-runes/corelib && cargo build --release 40 - cd ancient-runes/weaving && cargo build --release 41 - cd ancient-runes/script && cargo build --release 42 - @echo "$(COLOR_GREEN)[] Runes inscribed$(COLOR_RESET)" 43 - 44 - # Run tests 45 - test: 46 - @echo "$(COLOR_CYAN)[] Testing the Heartwood...$(COLOR_RESET)" 47 - cd heartwood && cargo test 48 - @echo "$(COLOR_GREEN)[] Tests complete$(COLOR_RESET)" 49 - 50 - # Create build directory 51 - build: 52 - mkdir -p build 53 - 54 - # Run in QEMU (requires bootable image) 55 - qemu: build bootloader 56 - @echo "$(COLOR_BLUE)[] Awakening in QEMU...$(COLOR_RESET)" 57 - qemu-system-x86_64 -drive format=raw,file=build/boot.bin 58 - 59 - # Clean build artifacts 60 - clean: 61 - @echo "$(COLOR_CYAN)[] Returning to the void...$(COLOR_RESET)" 62 - cargo clean 63 - rm -rf build 64 - @echo "$(COLOR_GREEN)[] Clean complete$(COLOR_RESET)" 65 - 66 - # Check code formatting 67 - fmt: 68 - cargo fmt --all 69 - 70 - # Run clippy lints 71 - clippy: 72 - cargo clippy --all-targets --all-features 73 - 74 - # Generate documentation 75 - docs: 76 - cargo doc --workspace --no-deps --open 77 - 78 - # Show build information 79 - info: 80 - @echo "$(COLOR_BLUE)=====================================$(COLOR_RESET)" 81 - @echo "$(COLOR_BLUE) AethelOS Build System$(COLOR_RESET)" 82 - @echo "$(COLOR_BLUE)=====================================$(COLOR_RESET)" 83 - @echo "Version: 0.1.0-alpha" 84 - @echo "Language: Rust $(shell rustc --version | cut -d' ' -f2)" 85 - @echo "" 86 - @echo "Available targets:" 87 - @echo " all - Build everything" 88 - @echo " bootloader - Build the awakening sequence" 89 - @echo " kernel - Build the Heartwood" 90 - @echo " groves - Build all Grove services" 91 - @echo " runes - Build Ancient Runes libraries" 92 - @echo " test - Run tests" 93 - @echo " qemu - Run in QEMU emulator" 94 - @echo " clean - Remove build artifacts" 95 - @echo " fmt - Format code" 96 - @echo " clippy - Run lints" 97 - @echo " docs - Generate documentation" 98 - @echo "$(COLOR_BLUE)=====================================$(COLOR_RESET)"
+78 -37
aethelos-source/README.md
··· 106 106 └── script/ # Shell API 107 107 ``` 108 108 109 - ## Building 109 + ## Building and Running 110 110 111 111 ### Prerequisites 112 112 113 - - Rust 1.75 or later 114 - - NASM (for boot.asm) 115 - - QEMU (for testing) 113 + - **Rust nightly** (for unstable features) 114 + - **GRUB** and **grub-mkrescue** (for creating bootable ISO) 115 + - **QEMU** (for testing) 116 + - **WSL** or Linux environment (for ISO creation) 116 117 117 118 ### Build Commands 118 119 119 120 ```bash 120 - # Build the entire workspace 121 - cargo build --release 121 + # Build the kernel (from heartwood directory) 122 + cd heartwood 123 + cargo build --bin heartwood --target x86_64-aethelos.json 122 124 123 - # Build just the kernel 124 - cd heartwood 125 - cargo build --release 125 + # Create bootable ISO (from aethelos-source root) 126 + cp target/x86_64-aethelos/debug/heartwood isodir/boot/aethelos/heartwood.bin 127 + grub-mkrescue -o aethelos.iso isodir 126 128 127 - # Build a specific Grove 128 - cd groves/world-tree_grove 129 - cargo build --release 129 + # Run in QEMU 130 + qemu-system-x86_64 -cdrom aethelos.iso -serial file:serial.log -m 256M 130 131 ``` 131 132 132 - ### Running in QEMU 133 + ### Windows Build Script 133 134 134 - ```bash 135 - # Assemble the bootloader 136 - nasm -f bin awakening/boot.asm -o boot.bin 137 - 138 - # Create a bootable disk image 139 - # (Additional steps would be needed for a complete bootable image) 140 - 141 - # Run in QEMU 142 - qemu-system-x86_64 -drive format=raw,file=boot.bin 135 + ```cmd 136 + @echo off 137 + cd heartwood 138 + cargo build --bin heartwood --target x86_64-aethelos.json 139 + cd .. 140 + wsl bash -c "cp target/x86_64-aethelos/debug/heartwood isodir/boot/aethelos/heartwood.bin && grub-mkrescue -o aethelos.iso isodir" 141 + "C:\Program Files\qemu\qemu-system-x86_64.exe" -cdrom aethelos.iso -m 256M 143 142 ``` 144 143 145 144 ## Key Innovations ··· 193 192 194 193 ## Current Status 195 194 196 - **Version 0.1.0-alpha** - "The First Breath" 195 + **Version 0.1.0-alpha** - "The First Awakening" 196 + 197 + AethelOS now boots successfully with a working interactive shell! This milestone demonstrates core multitasking and I/O capabilities. 198 + 199 + ### ✅ Currently Working 200 + 201 + **Boot & Initialization:** 202 + - Multiboot2 bootloader integration with GRUB 203 + - VGA text mode initialization (80x25, Code Page 437) 204 + - Serial port debugging output 205 + - IDT (Interrupt Descriptor Table) setup 206 + - PIC (Programmable Interrupt Controller) initialization 207 + - GDT (Global Descriptor Table) configuration 208 + 209 + **Threading & Scheduling:** 210 + - Thread creation and management (Loom of Fate) 211 + - Cooperative multitasking (threads yield voluntarily) 212 + - Context switching with proper stack alignment 213 + - Three system threads running: 214 + - **Idle Thread**: Low-priority background thread 215 + - **Keyboard Thread**: Processes keyboard input 216 + - **Shell Thread**: Interactive command prompt (Eldarin) 217 + - Thread-safe spinlocks with interrupt management 218 + 219 + **I/O Systems:** 220 + - Keyboard interrupt handler (scancode processing) 221 + - VGA text output with cursor control 222 + - Interactive shell prompt accepting input 223 + - Serial port logging for debugging 224 + 225 + **Memory Management:** 226 + - Bump allocator for kernel heap 227 + - Per-thread stack allocation (16KB stacks) 228 + - IRQ-safe mutex implementation 197 229 198 - This is a foundational implementation demonstrating the core architecture and philosophy. Currently implemented: 230 + ### 🚧 Partially Implemented 231 + 232 + - Basic keyboard input (no full scancode translation yet) 233 + - Shell framework (command parsing not yet implemented) 234 + - Harmony-based scheduling metrics (calculated but not yet used) 235 + - Thread priority system (defined but not affecting scheduling) 236 + 237 + ### ❌ Not Yet Implemented 199 238 200 - ✅ Complete architectural design 201 - ✅ Heartwood kernel structure (Nexus, Loom of Fate, Mana Pool, Attunement) 202 - ✅ All Grove services (stubs) 203 - ✅ Ancient Runes libraries (basic implementations) 204 - ✅ Boot sequence design 239 + - **Nexus (IPC)**: Message passing between threads/processes 240 + - **Mana Pool**: Capability-based memory management 241 + - **World-Tree Grove**: Query-based filesystem 242 + - **The Weave**: Vector graphics compositor 243 + - **Network Sprite**: Network stack 244 + - User-space processes (currently only kernel threads) 245 + - Virtual memory management (MMU) 246 + - Most device drivers 205 247 206 - ### Not Yet Implemented 248 + ### Recent Milestones 207 249 208 - - Actual hardware initialization 209 - - Real memory allocator (currently using placeholder bump allocator) 210 - - Complete interrupt handling 211 - - Physical device drivers 212 - - Full filesystem implementation 213 - - Graphics rendering pipeline 214 - - Network stack 250 + **January 2025:** 251 + - ✅ First successful boot with shell prompt 252 + - ✅ Fixed critical timer interrupt deadlock (removed preemption) 253 + - ✅ Implemented proper x86-64 stack alignment (16n-8) 254 + - ✅ IRQ-safe mutex with proper lock release 255 + - ✅ Cooperative multitasking working correctly 215 256 216 257 ## Why AethelOS? 217 258
-1
aethelos-source/serial.log
··· 1 - BSLSR12AB~b$%$%$%$%$%$%~VWG+@$%#E[~]DCVWG+@$%#E[~]DMNa[]bcdeOPQRSDVWG+@$%#E[~]DEVWG+@$%#E[~]Dnxsu!FVWG+@$%#E[~]DGVWG+@$%#E[~]D1Aa[]b[]c[]defghijBCDy3VWG+@$%#E[~]D[]VWG+@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#E[~]DMmMm[][]VWG+@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#E[~]DMmMm[]VWG+@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#E[~]DMmMmVWG+@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#E[~]DVWG+@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#E[~]DVWG+@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#@$%#E[~]DVWG+@$%#E[~]DHVWG+@$%#E[~]DIVWG+@$%#E[~]DVWG+@$%#E[~]DVWG+@$%#E[~]DVWG+@$%#E[~]DM...mM....mM....mM....mM....mVWG+@$%#E[~]DVWG+@$%#E[~]DVWG+@$%#E[~^]DJVWG+@$%#E[~^]DLVWG+@$%#E[~^]DMmMmMmMmMmMVWG+@$%#E[~^]DKVWG+@$%#E[~^]DVWG+@$%#E[~^]D3HXY!SI.P1[]2345LCKVWG+@$%#E[~^]DP12345LCT+VWG+@$%#E[~^]D*VWG+@$%#E[~^]D1VWG+@$%#E[~^]D2VWG+@$%#E[~^]D3VWG+@$%#E[~^]D4VWG+@$%#E[~^]D5VWG+@$%#E[~^]D6VWG+@$%#E[~^]D7VWG+@$%#E[~^]D8VWG+@$%#E[~^]D9VWG+@$%#E[~^]D0VWG+@$%#E[~^]D!VWG+@$%#E[~^]D>VWG+@$%#E[~^]DP12345LCR6yh.P12345LCR6P1[]Mm-2345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P1[]Mm-2345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P1[]Mm-2345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P1[]Mm-2345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P1[]M.m-2345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6VWG+@$%#E[~]DP12345LCR6yh.P12345LCR6P12345LCR6VWG+@$%#E[~]DP12345LCR6yh.P12345LCR6P12345LCR6VWG+@$%#E[~]DP12345LCR6yh.P12345LCR6P12345LCVWG+@$%#E[~]DR6VWG+@$%#E[~]DP12345LCR6yh.P12345LCR6P12345LCR6VWG+@$%#E[~]DP12345LCR6yh.P12345LCR6P12345LCR6VWG+@$%#E[~]DP12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6VWG+@$%#E[~]D!MmVWG+@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#@$%#@$%#E[~^]DVWG+@$%#@$%#@$%#E[~^]DVWG+@$%#@$%#@$%#E[~^]DVWG+@$%#@$%#@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#@$%#@$%#@$%#E[~^]DVWG+@$%#MmMmMmMmMmMmMmMmMmMmMmMm@$%#@$%#@$%#@$%#E[~^]DVWG+@$%#@$%#@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#@$%#@$%#E[~^]DVWG+@$%#E[~^]DVWG+@$%#E[~^]D>VWG+@$%#E[~^]DP12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6P12345LCR6yh.P12345LCR6P12345LCR6