From 74716f18e67b443a2c805009b3def47d77fca5db Mon Sep 17 00:00:00 2001 From: Joe Bayer <58609672+joexbayer@users.noreply.github.com> Date: Tue, 9 Jan 2024 08:31:40 +0100 Subject: [PATCH 01/13] Create pipeline.yml --- .github/workflows/pipeline.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/pipeline.yml diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml new file mode 100644 index 0000000..ac9d663 --- /dev/null +++ b/.github/workflows/pipeline.yml @@ -0,0 +1,28 @@ +name: C/C++ CI + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build: + + runs-on: debian-latest + + steps: + - uses: actions/checkout@v3 + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y build-essential gcc-multilib + + - name: Compile + run: make compile + + - name: Apps + run: make apps + + - name: Tests + run: make tests From 00e10a79394f9709c8ac4a5f956b964f3101795c Mon Sep 17 00:00:00 2001 From: Joe Bayer <58609672+joexbayer@users.noreply.github.com> Date: Tue, 9 Jan 2024 11:23:26 +0100 Subject: [PATCH 02/13] Update pipeline.yml --- .github/workflows/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index ac9d663..d8c1825 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -9,7 +9,7 @@ on: jobs: build: - runs-on: debian-latest + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 From 5f4cbbc4bbe2efe37fbcc9b977eb2c2396c424da Mon Sep 17 00:00:00 2001 From: Joe Bayer <58609672+joexbayer@users.noreply.github.com> Date: Tue, 9 Jan 2024 11:30:51 +0100 Subject: [PATCH 03/13] Update readme.md --- readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/readme.md b/readme.md index 1b3e7e4..f2ac9fd 100644 --- a/readme.md +++ b/readme.md @@ -18,11 +18,14 @@

RetrOS 32bit

+

+ ![Build](https://github.com/joexbayer/RetrOS-32/actions/workflows/pipeline.yml/badge.svg) +

Hobby 32bit operatingsystem project focusing on networking on i386 architecture.
From bfab604727c19bf93b11636220bbb27d3a0c3cc7 Mon Sep 17 00:00:00 2001 From: Joe Bayer Date: Mon, 8 Jan 2024 21:11:00 +0100 Subject: [PATCH 04/13] Small fix --- RetrOS-32.img | Bin 33554432 -> 33554432 bytes apps/libcore.a | Bin 12612 -> 13672 bytes apps/libgraphic.a | Bin 9572 -> 10188 bytes kernel/cmds.c | 2 +- readme.md | 4 +- rootfs/symbols.map | 1038 ++++++++++++++++++++++---------------------- 6 files changed, 522 insertions(+), 522 deletions(-) diff --git a/RetrOS-32.img b/RetrOS-32.img index d702be85a9bc289c67ad3a5d3549a497358dc9b0..d7fcf23bce33fe0c41fa23a3410b7576bf2be097 100644 GIT binary patch literal 33554432 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%0AKyid$3Kd{DF3oOJUup%m1gIk*Gsupauz3N5z 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

|a77^W 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

bCEq6k7z&DLMlZ#5xMIRlhGr`mu1( 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� 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

R0hr>qa*79dYq0rK|c zNrP`K95hZ&pFMk~-R~|B0#8RCS_H0aZb|yF+t^*5nE3u1b%2e)B}Vs-QeR%FJ5`F6 zW9&+jk5bxT$ng0@Q4t^sHtCn|UVPWkxFOx}$JE7WHiMxgW#EiI@uwVAiaIjpi@wrH zlvO$Lb#su;x3*j4)xu)@Ap`j*6jJ%XVeuyv?y&Vh7hUuiHM20k`RLK}S3+1X;&MD< zPK!Add9oziJTsz=CEn@DF_SG)?gYtp@+&eA01AI+2dD22Pk()Pg1D3Xdy9{>K=t?l zj)Rk5-<_eAIr;e&f)5S!tH$Xoj^H-gkFx`A9HLe}+y#bv+{Qxo?alqu*52CG)HhSs zP4SR*x3AV;y|~EJ48G6S@J=^ zID)@8;KrnD8h;Xya;Re3e{|q4#nZzn)k~Pql-+}~XK;c)1D8obyZ&!De!vZs@b5%Y4f%(B!@?H!*i|6t*v_7?#A~ntVR8jyC&C#|13^dnW3YJk zmTd9E7oyF-XF5wSi9!2&+3MPUDA5Qb)K6^`0ECDU{r+4RwQcc9j z%2&sKJ$cn&{%yS075q(>evJn!jT4rB9C@s)tm^Hd$s1FXQ&UmL7(D!l^)kD4p+Tlw zM4W9a®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 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0Rja67dvzy000000ObGL2nh}x zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!1K6Ph0RR9103iR@Mo4hrz<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)9Ka482mk;8008;FHbQ~}2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede-~e{$KmY&$007AU zwGk2=IB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|&4}2Lb>9002P#uZ@u4z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95{d-IuHN=0002;e{F;W2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J^Xx&;bbm z004lX|F7E-=mZTIFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 GFd7Iyx}bvq delta 264137 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 A(*OVf diff --git a/apps/libgraphic.a b/apps/libgraphic.a index 4c961c9c054232b4e758010111a344d07325d7e6..56a63a29dbdcfdf26947cef9ebf44267ed1ff598 100644 GIT binary patch literal 10188 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 literal 9572 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 - + + ## Project Structure (TBD) NETOS - Project diff --git a/rootfs/symbols.map b/rootfs/symbols.map index 561a5b6..5bde4d5 100644 --- a/rootfs/symbols.map +++ b/rootfs/symbols.map @@ -329,522 +329,522 @@ 0001c5e2 about 0001c621 view 0001c831 tcp -0001cafe __tcp_reader -0001cc1e conf -0001ce9f attach_disk_dev -0001cec7 disk_attached -0001ced3 disk_name -0001cee0 disk_device_get -0001ceea disk_size -0001cf0a write_block -0001cf4b write_block_offset -0001cf92 read_block -0001cfd3 read_block_offset -0001d041 sched_consume -0001d086 sched_add -0001d0e4 sched_prioritize -0001d19d sched_round_robin -0001d37e sched_exit -0001d43b sched_block -0001d55d sched_default -0001d635 sched_sleep -0001d6df sched_init_default -0001d764 get_scheduler -0001d76e kernel_sleep -0001d78d kernel_yield -0001d7d4 kernel_exit -0001d80a block -0001d837 unblock -0001d83c work_queue_add -0001d924 init_worker -0001d93c worker_thread -0001d9db __ring_buffer_add -0001da87 __ring_buffer_read -0001db95 rbuffer_new -0001dc02 rbuffer_free -0001dc28 error_get_string -0001dc68 kclock -0001e143 __register_kthread_kclock -0001e161 tar_extract -0001e3a8 __ksymbol_tar -0001e3c6 tar_list -0001e4cb tar -0001e743 rgb_to_vga -0001e757 rgb_to_components -0001e782 color_distance_squared -0001e7f2 rgb_init_color_table -0001e87d iface_loopback_write -0001e942 iface_loopback_interrupt -0001e95d iface_loopback_read -0001ea07 net_init_loopback -0001ea22 serial_put -0001ea66 serial_write -0001eaac serial_printf -0001ec60 init_serial -0001ed2a inportb -0001ed37 inportw -0001ed45 inportl -0001ed52 outportb -0001ed62 outportw -0001ed73 outportl -0001ed83 sys_create_thread -0001eda5 __add_systemcall_sys_create_thread -0001edb4 add_system_call -0001edf8 system_call -0001ee67 hashmap_put -0001eed3 hashmap_get -0001ef5b hashmap_add -0001efe9 hashmap_free -0001efee reset_vga_palette -0001f038 vga_set_palette -0001f127 b8to16 -0001f13d vesa_put_pixel -0001f16b vesa_put_box -0001f1e5 vesa_put_block -0001f25f vesa_put_char -0001f2d9 vesa_put_char16 -0001f371 vesa_put_icon16 -0001f3ec vesa_write -0001f42f vesa_write_str -0001f461 vesa_fill -0001f4e5 vesa_fillrect -0001f554 vesa_inner_box -0001f660 vesa_printf -0001f8ec ksyms_init -0001fb0b ksyms_add_symbol -0001fbc3 __ksymbol_backtrace -0001fbe1 ksyms_list -0001fc45 ksyms_resolve_symbol -0001fcfc __backtrace_from -0001fe1a backtrace -0001fe2f ws_fullscreen -0001ffad ws_remove -00020061 ws_add -00020150 ws_destroy -000201fa ws_draw -000204ab ws_raw_wallpaper -00020595 ws_set_background_file -00020875 ws_init -0002095c ws_set_background -00020a0b ws_new -00020a9c encode_run_length -00020b25 decode_run_length -00020b9c __mouse_handler -00020cb4 mouse_wait -00020cfc mouse_write -00020d3e mouse_get_event -00020d83 mouse_init -00020e6c sys_ipc_open -00020ebe __add_systemcall_sys_ipc_open -00020ed9 __add_systemcall_sys_ipc_close -00020ef4 __add_systemcall_sys_ipc_send -00020f0f __add_systemcall_sys_ipc_receive -00020f2a sys_ipc_close -00020f6b sys_ipc_send -00020fcb sys_ipc_receive -0002102a sysinf -00021d96 __register_kthread_sysinf -00021db4 echo -00021df1 res -00021e34 ifconfig -00021e45 __ksymbol_ifconfig -00021e63 __ksymbol_ps -00021e81 __ksymbol_tree -00021e9f __ksymbol_fat16 -00021ebd __ksymbol_xxd -00021edb __ksymbol_sh -00021ef9 __ksymbol_ed -00021f17 __ksymbol_exec -00021f35 __ksymbol_ths -00021f53 __ksymbol_dns -00021f71 __ksymbol_th -00021f8f __ksymbol_kill -00021fad __ksymbol_echo -00021fcb __ksymbol_fdisk -00021fe9 __ksymbol_meminfo -00022007 __ksymbol_res -00022025 __ksymbol_bg -00022043 __ksymbol_exit -00022061 __ksymbol_socks -0002207f __ksymbol_reset -0002209d exit -000220d3 ps -00022331 print_pcb_tree -0002242a tree -0002246e fat16 -0002249a xxd -0002258d sh -0002268b ed -000226da exec -0002283c ths -000228a8 dns -0002291c th -0002293e kill -00022960 fdisk -00022add meminfo -00022cb0 bg -00022d31 socks -00022fc8 __register_kthread_shell -00022fe6 __register_kthread_textshell -00023004 shell_clear -00023049 reset_shell -000230bc reset -00023110 shell_put -000232ee shell -0002353a cleanup_function -00023565 testfn -0002359d draw_box -00023686 __textshell_reset_box -00023716 textshell -00023984 __net_find_interface -000239e4 net_drop_packet -00023a05 net_handle_recieve -00023b30 net_get_interfaces -00023b3a net_configure_iface -00023b90 net_incoming_packet -00023c42 net_get_iface -00023cbe net_iface_up -00023ce9 net_iface_down -00023d14 net_list_ifaces -00023e28 net_register_interface -00023e5d net_send_skb -00023ee9 net_get_info -00023f14 networking_main -000240f0 __dhcp_add_option -0002415a __dhcp_send_discovery -0002429c __dhcp_send_request -00024419 dhcp_get_state -00024425 dhcp_get_dns -0002442f dhcp_get_ip -00024448 dhcp_get_gw -00024461 dhcpd -000246f5 udp_server -00024784 tcp_server -000248fc __net_terminal_writef -00024965 __register_kthread_tcp_server -00024983 __register_kthread_udp_server -000249a1 __register_kthread_udptest -000249bf udptest -00024a4e tcpd -00024b36 logd -00024ba5 __register_kthread_logd -00024bc3 logd_attach_by_pid -00024c0b taskbar_about -00024c28 taskbar_clock -00024c45 taskbar_sysinf -00024c62 taskbar_bg_retro -00024c9d taskbar_bg_lotr2 -00024cb6 taskbar_bg_lotr -00024ccf taskbar_bg_default_color_gray -00024ce5 taskbar_bg_default_color -00024cfb taskbar_wolfstein -00024d3a taskbar_bg_graph -00024d79 taskbar_bg_calc -00024db8 taskbar_colors -00024df7 taskbar_cube -00024e36 taskbar_editor -00024e75 taskbar_finder -00024eb4 taskbar_terminal -00024f01 __register_kthread_taskbar -00024f1f taskbar_hdr_opt_event -00024fa9 taskbar -000255b6 about -00025785 __register_kthread_about -000257a3 gfx_default_hover -000258d1 gfx_draw_window -000266ec gfx_destory_window -0002677d gfx_window_resize -0002682a gfx_window_maximize -000268a7 gfx_default_mouse_up -00026979 gfx_default_mouse_down -00026a3f gfx_default_click -00026c6c gfx_window_set_resizable -00026c83 kernel_gfx_window_border_color -00026cb0 gfx_new_window -00026f0b gfx_point_in_rectangle -00026f3c gfx_draw_component -00026f82 gfx_composition_remove_window -00026fb0 gfx_composition_add_window -00026ffb gfx_set_background_color -00027050 gfx_raw_background -000270a1 gfx_decode_background_image -000270f2 gfx_set_taskbar -00027149 gfx_compositor_main -000271c1 kernel_gfx_draw_circle_helper -00027438 gfx_get_window_width -0002744f gfx_get_window_height -00027466 gfx_push_event -0002752d gfx_put_icon16 -00027621 gfx_put_icon32 -00027715 gfx_event_loop -00027833 kernel_gfx_draw_rectangle -00027935 kernel_gfx_draw_contoured_box -000279d9 kernel_gfx_draw_pixel -00027a82 kernel_gfx_draw_bitmap -00027ba7 kernel_gfx_draw_char -00027c91 kernel_gfx_set_position -00027cb1 gfx_commit -00027ccc kernel_gfx_draw_text -00027d5a gfx_button_ext -00027e83 gfx_button -00027ea5 kernel_gfx_set_title -00027f11 kernel_gfx_set_header -00027f7d kernel_gfx_draw_line -00028117 kernel_gfx_draw_circle -0002819a kernel_gfx_draw_section -000281a4 kernel_gfx_draw_format_text -000284f6 gfx_syscall_hook -000286aa gfx_total_themes -000286b4 kernel_gfx_current_theme -000286be kernel_gfx_update_theme -00028790 kernel_gfx_default_theme -0002879a kernel_gfx_set_theme -000287c3 kernel_gfx_get_theme -000287e2 gfx_new_ctx -00028842 gfx_init_framebuffer -000289b2 netdev_attach_driver -00028a5f is_netdev_attached -00028a71 netdev_transmit -00028a90 netdev_recieve -00028abd net_ethernet_add_header -00028b55 net_ethernet_parse -00028bd0 __skb_queue_remove -00028c12 __skb_queue_add -00028c66 skb_free_queue -00028ca2 skb_new_queue -00028d0d skb_free -00028d4c skb_new -00028dbb skb_consume -00028df0 __net_arp_send -00028eb0 net_init_arp -00028f00 net_arp_add_entry -00028f98 net_arp_find_entry -00028fe7 net_arp_respond -00029060 net_net_arp_request -000290ea arp_parse -00029198 net_ipv4_print -000291a2 net_ipv4_add_header -000292dd net_is_ipv4 -0002931e net_ipv4_parse -0002944f ntohl -0002947f htonl -00029496 ntohs -000294a7 htons -000294b8 checksum -00029513 transport_checksum -0002956c ip_to_int -0002960e net_icmp_handle -000296d7 net_icmp_response -000296e1 net_icmp_request -000297a8 ping -00029805 net_icmp_parse -00029879 net_udp_send -000299b2 net_udp_parse -00029ade socket_type_to_str -00029af1 socket_domain_to_str -00029b04 socket_protocol_to_str -00029b17 net_sock_bind -00029b66 net_get_sockets -00029b86 sock_get -00029bab get_total_sockets -00029bb5 net_sock_is_established -00029bfd net_sock_awaiting_ack -00029c45 net_sock_data_ready -00029ca0 net_sock_read -00029da3 net_sock_add_data -0002a007 sock_find_listen_tcp -0002a04f net_sock_find_tcp -0002a242 net_prepare_tcp_sock -0002a2d2 net_sock_accept -0002a2e9 net_socket_find_udp -0002a358 kernel_sock_shutdown -0002a389 kernel_sock_cleanup -0002a413 kernel_sock_close -0002a44b kernel_socket_create -0002a5d0 net_init_sockets -0002a61a gethostname -0002ab48 __add_systemcall_gethostname -0002ab63 net_init_dns -0002ab96 route -0002abe7 tcb_init -0002ac09 tcb_new -0002ad79 tcp_state_to_str -0002ad96 tcp_new_connection -0002ae22 tcp_free_connection -0002ae49 tcp_is_listening -0002ae63 tcp_set_listening -0002aec7 tcp_calculate_checksum -0002af90 __tcp_send -0002b0ac tcp_send_segment -0002b1f3 tcp_accept_connection -0002b337 tcp_send_ack -0002b46f tcp_read -0002b479 tcp_recv_segment -0002b483 tcp_connect -0002b52a tcp_send_syn -0002b534 tcp_recv_ack -0002b5bb tcp_recv_fin -0002b5c5 tcp_recv_syn -0002b6fb tcp_send_fin -0002b7cb tcp_close_connection -0002b80e tcp_parse -0002bcaa kernel_bind -0002bce3 kernel_recvfrom -0002bced kernel_recv -0002bd63 kernel_recv_timeout -0002bd8d kernel_connect -0002be93 kernel_sendto -0002bf51 kernel_accept -0002bfb8 kernel_listen -0002bfe4 kernel_send -0002c06e sys_kernel_bind -0002c0a4 __add_systemcall_sys_kernel_bind -0002c0bf __add_systemcall_sys_kernel_accept -0002c0da __add_systemcall_sys_kernel_connect -0002c0f5 __add_systemcall_sys_kernel_listen -0002c110 __add_systemcall_sys_kernel_recv -0002c12b __add_systemcall_sys_kernel_recvfrom -0002c146 __add_systemcall_sys_kernel_recv_timeout -0002c161 __add_systemcall_sys_kernel_send -0002c17c __add_systemcall_sys_kernel_sendto -0002c197 __add_systemcall_sys_socket_create -0002c1b2 __add_systemcall_sys_kernel_sock_close -0002c1cd sys_kernel_accept -0002c211 sys_kernel_connect -0002c247 sys_kernel_listen -0002c27a sys_kernel_recv -0002c2b6 sys_kernel_recvfrom -0002c2fa sys_kernel_recv_timeout -0002c33c sys_kernel_send -0002c378 sys_kernel_sendto -0002c3bc sys_socket_create -0002c3e7 sys_kernel_sock_close -0002c42c __iface_send -0002c45f __iface_recieve -0002c492 __iface_assign -0002c4a9 __iface_detach -0002c4c1 __iface_set_gateway -0002c4d8 __iface_set_netmask -0002c4ef __iface_configure -0002c543 __iface_attach -0002c56c net_interface_create -0002c5a8 net_register_netdev -0002c6c4 net_interface_destroy -0002c6dd __default_restart -0002c6e7 __default_stop -0002c750 __default_start -0002c7d3 nm_new -0002c860 nm_free -0002c8a9 net_firewall_create -0002c8d0 fs_file2fd -0002c939 fs_alloc_file -0002c988 fs_free_file -0002c9e6 fs_register -0002cab9 fs_init -0002cac3 fs_unregister -0002cb2a fs_get -0002cb34 fs_close -0002cbaa fs_open -0002cc28 fs_seek -0002cca9 fs_read -0002cdc2 fs_load_from_file -0002ce52 fs_write -0002cf11 fat16_rmdir -0002cf1b fat16_stat -0002cf25 fat16_close -0002cf93 fat16_rename -0002d02c fat16_mkdir -0002d115 fat16_remove -0002d18c fat16_open -0002d2da fat16_read -0002d43d fat16_write -0002d56f fat16_list -0002d83b fat16_init -0002d8f3 path_next_iter -0002d961 inode_from_path_recursise -0002d9df inode_from_path -0002daa1 ext_get_root -0002daae ext_get_current_dir -0002dabf ext_get_size -0002dac9 ext_get_inodes -0002dad3 ext_get_blocks -0002dadd ext_sync -0002db54 ext_create -0002dc43 ext_read -0002dcc2 ext_seek -0002dd0d ext_write -0002dd7d ext_close -0002dde3 ext_open_from_directory -0002deeb ext_open -0002dfa6 ext_size -0002dfd3 change_directory -0002e03d ext_create_directory -0002e1db ext_create_file_system -0002e4ac init_ext -0002e64c listdir -0002e775 __inode_sync -0002e7d8 __inode_cache_insert -0002e8ce __inode_load -0002e942 inodes_sync -0002e981 inode_get -0002e9e2 inode_read -0002ebd2 inode_write -0002ee39 alloc_inode -0002eef6 mkdir -0002ef9f sync -0002efd5 mkfs -0002efe6 fat16_read_data_from_cluster -0002f038 fat16_read_data -0002f115 fat16_find_cluster_by_offset -0002f194 fat16_write_data_to_cluster_with_offset -0002f1d3 fat16_print_cluster_chain -0002f205 fat16_write_data_to_cluster -0002f23c fat16_write_data -0002f357 get_fat_start_block -0002f363 get_root_directory_start_block -0002f376 get_data_start_block -0002f38c fat16_get_fat_entry -0002f3ab fat16_set_fat_entry -0002f3ef fat16_sync_fat_table -0002f46b fat16_allocate_cluster -0002f487 fat16_free_cluster -0002f4a0 fat16_get_free_cluster -0002f4f9 fat16_sync_directory_entry -0002f580 fat16_read_entry -0002f631 fat16_find_entry -0002f76c fat16_rename_entry -0002f7e1 fat16_free_clusters -0002f82c fat16_delete_entry -0002f897 fat16_add_entry -0002fa02 fat16_used_blocks -0002fa3f fat16_to_upper -0002fa6f fat16_name_compare -0002fb8a sstrtok -0002fc4d fat16_directory_entry_debug -0002fd24 fat16_get_directory_entry -0002ff2d fat16_create_directory -00030036 fat16_read_file -0003008b fat16_create_file -0003010d fat16_create_empty_file -000301d5 fat16_directory_entries -000302c0 fat16_mbr_clear -0003038b fat16_mbr_add_entry -00030480 fat16_print_root_directory_entries -0003049c fat16_change_directory -00030528 fat16_bootblock_info -000306a9 fat16_set_time -000306e1 fat16_set_date -0003071d fat16_load -000308a0 fat16_format -00030b59 mbr_partition_type_string -00030be1 mbr_partitions_parse -00030caf mbr_get -00030cb9 mbr_partition_load -00030cdb __ksymbol_snakegame -00030cf9 init_game -00030d49 draw -00030da9 get_input -00030dca update -00030f56 game_loop -00030f80 snakegame -00030fcd _code_end +0001cb06 __tcp_reader +0001cc26 conf +0001cea7 attach_disk_dev +0001cecf disk_attached +0001cedb disk_name +0001cee8 disk_device_get +0001cef2 disk_size +0001cf12 write_block +0001cf53 write_block_offset +0001cf9a read_block +0001cfdb read_block_offset +0001d049 sched_consume +0001d08e sched_add +0001d0ec sched_prioritize +0001d1a5 sched_round_robin +0001d386 sched_exit +0001d443 sched_block +0001d565 sched_default +0001d63d sched_sleep +0001d6e7 sched_init_default +0001d76c get_scheduler +0001d776 kernel_sleep +0001d795 kernel_yield +0001d7dc kernel_exit +0001d812 block +0001d83f unblock +0001d844 work_queue_add +0001d92c init_worker +0001d944 worker_thread +0001d9e3 __ring_buffer_add +0001da8f __ring_buffer_read +0001db9d rbuffer_new +0001dc0a rbuffer_free +0001dc30 error_get_string +0001dc70 kclock +0001e14b __register_kthread_kclock +0001e169 tar_extract +0001e3b0 __ksymbol_tar +0001e3ce tar_list +0001e4d3 tar +0001e74b rgb_to_vga +0001e75f rgb_to_components +0001e78a color_distance_squared +0001e7fa rgb_init_color_table +0001e885 iface_loopback_write +0001e94a iface_loopback_interrupt +0001e965 iface_loopback_read +0001ea0f net_init_loopback +0001ea2a serial_put +0001ea6e serial_write +0001eab4 serial_printf +0001ec68 init_serial +0001ed32 inportb +0001ed3f inportw +0001ed4d inportl +0001ed5a outportb +0001ed6a outportw +0001ed7b outportl +0001ed8b sys_create_thread +0001edad __add_systemcall_sys_create_thread +0001edbc add_system_call +0001ee00 system_call +0001ee6f hashmap_put +0001eedb hashmap_get +0001ef63 hashmap_add +0001eff1 hashmap_free +0001eff6 reset_vga_palette +0001f040 vga_set_palette +0001f12f b8to16 +0001f145 vesa_put_pixel +0001f173 vesa_put_box +0001f1ed vesa_put_block +0001f267 vesa_put_char +0001f2e1 vesa_put_char16 +0001f379 vesa_put_icon16 +0001f3f4 vesa_write +0001f437 vesa_write_str +0001f469 vesa_fill +0001f4ed vesa_fillrect +0001f55c vesa_inner_box +0001f668 vesa_printf +0001f8f4 ksyms_init +0001fb13 ksyms_add_symbol +0001fbcb __ksymbol_backtrace +0001fbe9 ksyms_list +0001fc4d ksyms_resolve_symbol +0001fd04 __backtrace_from +0001fe22 backtrace +0001fe37 ws_fullscreen +0001ffb5 ws_remove +00020069 ws_add +00020158 ws_destroy +00020202 ws_draw +000204b3 ws_raw_wallpaper +0002059d ws_set_background_file +0002087d ws_init +00020964 ws_set_background +00020a13 ws_new +00020aa4 encode_run_length +00020b2d decode_run_length +00020ba4 __mouse_handler +00020cbc mouse_wait +00020d04 mouse_write +00020d46 mouse_get_event +00020d8b mouse_init +00020e74 sys_ipc_open +00020ec6 __add_systemcall_sys_ipc_open +00020ee1 __add_systemcall_sys_ipc_close +00020efc __add_systemcall_sys_ipc_send +00020f17 __add_systemcall_sys_ipc_receive +00020f32 sys_ipc_close +00020f73 sys_ipc_send +00020fd3 sys_ipc_receive +00021032 sysinf +00021d9e __register_kthread_sysinf +00021dbc echo +00021df9 res +00021e3c ifconfig +00021e4d __ksymbol_ifconfig +00021e6b __ksymbol_ps +00021e89 __ksymbol_tree +00021ea7 __ksymbol_fat16 +00021ec5 __ksymbol_xxd +00021ee3 __ksymbol_sh +00021f01 __ksymbol_ed +00021f1f __ksymbol_exec +00021f3d __ksymbol_ths +00021f5b __ksymbol_dns +00021f79 __ksymbol_th +00021f97 __ksymbol_kill +00021fb5 __ksymbol_echo +00021fd3 __ksymbol_fdisk +00021ff1 __ksymbol_meminfo +0002200f __ksymbol_res +0002202d __ksymbol_bg +0002204b __ksymbol_exit +00022069 __ksymbol_socks +00022087 __ksymbol_reset +000220a5 exit +000220db ps +00022339 print_pcb_tree +00022432 tree +00022476 fat16 +000224a2 xxd +00022595 sh +00022693 ed +000226e2 exec +00022844 ths +000228b0 dns +00022924 th +00022946 kill +00022968 fdisk +00022ae5 meminfo +00022cb8 bg +00022d39 socks +00022fd0 __register_kthread_shell +00022fee __register_kthread_textshell +0002300c shell_clear +00023051 reset_shell +000230c4 reset +00023118 shell_put +000232f6 shell +00023542 cleanup_function +0002356d testfn +000235a5 draw_box +0002368e __textshell_reset_box +0002371e textshell +0002398c __net_find_interface +000239ec net_drop_packet +00023a0d net_handle_recieve +00023b38 net_get_interfaces +00023b42 net_configure_iface +00023b98 net_incoming_packet +00023c4a net_get_iface +00023cc6 net_iface_up +00023cf1 net_iface_down +00023d1c net_list_ifaces +00023e30 net_register_interface +00023e65 net_send_skb +00023ef1 net_get_info +00023f1c networking_main +000240f8 __dhcp_add_option +00024162 __dhcp_send_discovery +000242a4 __dhcp_send_request +00024421 dhcp_get_state +0002442d dhcp_get_dns +00024437 dhcp_get_ip +00024450 dhcp_get_gw +00024469 dhcpd +000246fd udp_server +0002478c tcp_server +00024904 __net_terminal_writef +0002496d __register_kthread_tcp_server +0002498b __register_kthread_udp_server +000249a9 __register_kthread_udptest +000249c7 udptest +00024a56 tcpd +00024b3e logd +00024bad __register_kthread_logd +00024bcb logd_attach_by_pid +00024c13 taskbar_about +00024c30 taskbar_clock +00024c4d taskbar_sysinf +00024c6a taskbar_bg_retro +00024ca5 taskbar_bg_lotr2 +00024cbe taskbar_bg_lotr +00024cd7 taskbar_bg_default_color_gray +00024ced taskbar_bg_default_color +00024d03 taskbar_wolfstein +00024d42 taskbar_bg_graph +00024d81 taskbar_bg_calc +00024dc0 taskbar_colors +00024dff taskbar_cube +00024e3e taskbar_editor +00024e7d taskbar_finder +00024ebc taskbar_terminal +00024f09 __register_kthread_taskbar +00024f27 taskbar_hdr_opt_event +00024fb1 taskbar +000255be about +0002578d __register_kthread_about +000257ab gfx_default_hover +000258d9 gfx_draw_window +000266f4 gfx_destory_window +00026785 gfx_window_resize +00026832 gfx_window_maximize +000268af gfx_default_mouse_up +00026981 gfx_default_mouse_down +00026a47 gfx_default_click +00026c74 gfx_window_set_resizable +00026c8b kernel_gfx_window_border_color +00026cb8 gfx_new_window +00026f13 gfx_point_in_rectangle +00026f44 gfx_draw_component +00026f8a gfx_composition_remove_window +00026fb8 gfx_composition_add_window +00027003 gfx_set_background_color +00027058 gfx_raw_background +000270a9 gfx_decode_background_image +000270fa gfx_set_taskbar +00027151 gfx_compositor_main +000271c9 kernel_gfx_draw_circle_helper +00027440 gfx_get_window_width +00027457 gfx_get_window_height +0002746e gfx_push_event +00027535 gfx_put_icon16 +00027629 gfx_put_icon32 +0002771d gfx_event_loop +0002783b kernel_gfx_draw_rectangle +0002793d kernel_gfx_draw_contoured_box +000279e1 kernel_gfx_draw_pixel +00027a8a kernel_gfx_draw_bitmap +00027baf kernel_gfx_draw_char +00027c99 kernel_gfx_set_position +00027cb9 gfx_commit +00027cd4 kernel_gfx_draw_text +00027d62 gfx_button_ext +00027e8b gfx_button +00027ead kernel_gfx_set_title +00027f19 kernel_gfx_set_header +00027f85 kernel_gfx_draw_line +0002811f kernel_gfx_draw_circle +000281a2 kernel_gfx_draw_section +000281ac kernel_gfx_draw_format_text +000284fe gfx_syscall_hook +000286b2 gfx_total_themes +000286bc kernel_gfx_current_theme +000286c6 kernel_gfx_update_theme +00028798 kernel_gfx_default_theme +000287a2 kernel_gfx_set_theme +000287cb kernel_gfx_get_theme +000287ea gfx_new_ctx +0002884a gfx_init_framebuffer +000289ba netdev_attach_driver +00028a67 is_netdev_attached +00028a79 netdev_transmit +00028a98 netdev_recieve +00028ac5 net_ethernet_add_header +00028b5d net_ethernet_parse +00028bd8 __skb_queue_remove +00028c1a __skb_queue_add +00028c6e skb_free_queue +00028caa skb_new_queue +00028d15 skb_free +00028d54 skb_new +00028dc3 skb_consume +00028df8 __net_arp_send +00028eb8 net_init_arp +00028f08 net_arp_add_entry +00028fa0 net_arp_find_entry +00028fef net_arp_respond +00029068 net_net_arp_request +000290f2 arp_parse +000291a0 net_ipv4_print +000291aa net_ipv4_add_header +000292e5 net_is_ipv4 +00029326 net_ipv4_parse +00029457 ntohl +00029487 htonl +0002949e ntohs +000294af htons +000294c0 checksum +0002951b transport_checksum +00029574 ip_to_int +00029616 net_icmp_handle +000296df net_icmp_response +000296e9 net_icmp_request +000297b0 ping +0002980d net_icmp_parse +00029881 net_udp_send +000299ba net_udp_parse +00029ae6 socket_type_to_str +00029af9 socket_domain_to_str +00029b0c socket_protocol_to_str +00029b1f net_sock_bind +00029b6e net_get_sockets +00029b8e sock_get +00029bb3 get_total_sockets +00029bbd net_sock_is_established +00029c05 net_sock_awaiting_ack +00029c4d net_sock_data_ready +00029ca8 net_sock_read +00029dab net_sock_add_data +0002a00f sock_find_listen_tcp +0002a057 net_sock_find_tcp +0002a24a net_prepare_tcp_sock +0002a2da net_sock_accept +0002a2f1 net_socket_find_udp +0002a360 kernel_sock_shutdown +0002a391 kernel_sock_cleanup +0002a41b kernel_sock_close +0002a453 kernel_socket_create +0002a5d8 net_init_sockets +0002a622 gethostname +0002ab50 __add_systemcall_gethostname +0002ab6b net_init_dns +0002ab9e route +0002abef tcb_init +0002ac11 tcb_new +0002ad81 tcp_state_to_str +0002ad9e tcp_new_connection +0002ae2a tcp_free_connection +0002ae51 tcp_is_listening +0002ae6b tcp_set_listening +0002aecf tcp_calculate_checksum +0002af98 __tcp_send +0002b0b4 tcp_send_segment +0002b1fb tcp_accept_connection +0002b33f tcp_send_ack +0002b477 tcp_read +0002b481 tcp_recv_segment +0002b48b tcp_connect +0002b532 tcp_send_syn +0002b53c tcp_recv_ack +0002b5c3 tcp_recv_fin +0002b5cd tcp_recv_syn +0002b703 tcp_send_fin +0002b7d3 tcp_close_connection +0002b816 tcp_parse +0002bcb2 kernel_bind +0002bceb kernel_recvfrom +0002bcf5 kernel_recv +0002bd6b kernel_recv_timeout +0002bd95 kernel_connect +0002be9b kernel_sendto +0002bf59 kernel_accept +0002bfc0 kernel_listen +0002bfec kernel_send +0002c076 sys_kernel_bind +0002c0ac __add_systemcall_sys_kernel_bind +0002c0c7 __add_systemcall_sys_kernel_accept +0002c0e2 __add_systemcall_sys_kernel_connect +0002c0fd __add_systemcall_sys_kernel_listen +0002c118 __add_systemcall_sys_kernel_recv +0002c133 __add_systemcall_sys_kernel_recvfrom +0002c14e __add_systemcall_sys_kernel_recv_timeout +0002c169 __add_systemcall_sys_kernel_send +0002c184 __add_systemcall_sys_kernel_sendto +0002c19f __add_systemcall_sys_socket_create +0002c1ba __add_systemcall_sys_kernel_sock_close +0002c1d5 sys_kernel_accept +0002c219 sys_kernel_connect +0002c24f sys_kernel_listen +0002c282 sys_kernel_recv +0002c2be sys_kernel_recvfrom +0002c302 sys_kernel_recv_timeout +0002c344 sys_kernel_send +0002c380 sys_kernel_sendto +0002c3c4 sys_socket_create +0002c3ef sys_kernel_sock_close +0002c434 __iface_send +0002c467 __iface_recieve +0002c49a __iface_assign +0002c4b1 __iface_detach +0002c4c9 __iface_set_gateway +0002c4e0 __iface_set_netmask +0002c4f7 __iface_configure +0002c54b __iface_attach +0002c574 net_interface_create +0002c5b0 net_register_netdev +0002c6cc net_interface_destroy +0002c6e5 __default_restart +0002c6ef __default_stop +0002c758 __default_start +0002c7db nm_new +0002c868 nm_free +0002c8b1 net_firewall_create +0002c8d8 fs_file2fd +0002c941 fs_alloc_file +0002c990 fs_free_file +0002c9ee fs_register +0002cac1 fs_init +0002cacb fs_unregister +0002cb32 fs_get +0002cb3c fs_close +0002cbb2 fs_open +0002cc30 fs_seek +0002ccb1 fs_read +0002cdca fs_load_from_file +0002ce5a fs_write +0002cf19 fat16_rmdir +0002cf23 fat16_stat +0002cf2d fat16_close +0002cf9b fat16_rename +0002d034 fat16_mkdir +0002d11d fat16_remove +0002d194 fat16_open +0002d2e2 fat16_read +0002d445 fat16_write +0002d577 fat16_list +0002d843 fat16_init +0002d8fb path_next_iter +0002d969 inode_from_path_recursise +0002d9e7 inode_from_path +0002daa9 ext_get_root +0002dab6 ext_get_current_dir +0002dac7 ext_get_size +0002dad1 ext_get_inodes +0002dadb ext_get_blocks +0002dae5 ext_sync +0002db5c ext_create +0002dc4b ext_read +0002dcca ext_seek +0002dd15 ext_write +0002dd85 ext_close +0002ddeb ext_open_from_directory +0002def3 ext_open +0002dfae ext_size +0002dfdb change_directory +0002e045 ext_create_directory +0002e1e3 ext_create_file_system +0002e4b4 init_ext +0002e654 listdir +0002e77d __inode_sync +0002e7e0 __inode_cache_insert +0002e8d6 __inode_load +0002e94a inodes_sync +0002e989 inode_get +0002e9ea inode_read +0002ebda inode_write +0002ee41 alloc_inode +0002eefe mkdir +0002efa7 sync +0002efdd mkfs +0002efee fat16_read_data_from_cluster +0002f040 fat16_read_data +0002f11d fat16_find_cluster_by_offset +0002f19c fat16_write_data_to_cluster_with_offset +0002f1db fat16_print_cluster_chain +0002f20d fat16_write_data_to_cluster +0002f244 fat16_write_data +0002f35f get_fat_start_block +0002f36b get_root_directory_start_block +0002f37e get_data_start_block +0002f394 fat16_get_fat_entry +0002f3b3 fat16_set_fat_entry +0002f3f7 fat16_sync_fat_table +0002f473 fat16_allocate_cluster +0002f48f fat16_free_cluster +0002f4a8 fat16_get_free_cluster +0002f501 fat16_sync_directory_entry +0002f588 fat16_read_entry +0002f639 fat16_find_entry +0002f774 fat16_rename_entry +0002f7e9 fat16_free_clusters +0002f834 fat16_delete_entry +0002f89f fat16_add_entry +0002fa0a fat16_used_blocks +0002fa47 fat16_to_upper +0002fa77 fat16_name_compare +0002fb92 sstrtok +0002fc55 fat16_directory_entry_debug +0002fd2c fat16_get_directory_entry +0002ff35 fat16_create_directory +0003003e fat16_read_file +00030093 fat16_create_file +00030115 fat16_create_empty_file +000301dd fat16_directory_entries +000302c8 fat16_mbr_clear +00030393 fat16_mbr_add_entry +00030488 fat16_print_root_directory_entries +000304a4 fat16_change_directory +00030530 fat16_bootblock_info +000306b1 fat16_set_time +000306e9 fat16_set_date +00030725 fat16_load +000308a8 fat16_format +00030b61 mbr_partition_type_string +00030be9 mbr_partitions_parse +00030cb7 mbr_get +00030cc1 mbr_partition_load +00030ce3 __ksymbol_snakegame +00030d01 init_game +00030d51 draw +00030db1 get_input +00030dd2 update +00030f5e game_loop +00030f88 snakegame +00030fd5 _code_end From d7370ecc68b81480df73c1b6e54e28ff97e49aaf Mon Sep 17 00:00:00 2001 From: Joe Bayer Date: Mon, 8 Jan 2024 21:41:56 +0100 Subject: [PATCH 05/13] readme update --- docs/pictures/textmode.png | Bin 0 -> 16839 bytes readme.md | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 docs/pictures/textmode.png diff --git a/docs/pictures/textmode.png b/docs/pictures/textmode.png new file mode 100644 index 0000000000000000000000000000000000000000..c00dbdcedeb52ac5a20510dee8d0dfde021c87ef GIT binary patch literal 16839 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 z^XzI(back to top)

- +

+ +

### Built With From 9d94facf342bd75e47a2dbe0f57585c2535574e8 Mon Sep 17 00:00:00 2001 From: Joe Bayer Date: Tue, 9 Jan 2024 11:33:10 +0100 Subject: [PATCH 06/13] Bug fixes --- apps/Makefile | 11 +++++--- apps/libcore.a | Bin 13672 -> 12612 bytes apps/libgraphic.a | Bin 10188 -> 9572 bytes apps/libnet.a | Bin 2520 -> 2276 bytes developer/lex.c | 2 +- kernel/kthreads/about.c | 54 +++++++++++++++++++++++++++++++++++++++- kernel/kthreads/login.c | 3 +-- 7 files changed, 62 insertions(+), 8 deletions(-) diff --git a/apps/Makefile b/apps/Makefile index 0593ceb..fb29ad5 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -89,8 +89,11 @@ bindir: clean: rm -f ./bin/* - make -C editor/ clean - make -C colors/ clean - make -C finder/ clean - make -C calculator/ clean + @make -C editor/ clean + @make -C wolfstein/ clean + @make -C colors/ clean + @make -C finder/ clean + @make -C calculator/ clean + @make -C graphs/ clean + @make -C cube/ clean rm -f .depend diff --git a/apps/libcore.a b/apps/libcore.a index 6b8862a491505d32dfcdd6f58fe07bc457c10138..c9151137625dfef0fecb8f3d46cfe49288fe792a 100644 GIT binary patch literal 12612 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 A(*OVf literal 13672 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 diff --git a/apps/libnet.a b/apps/libnet.a index 13e4460fe89ec566faf0c2e0c94836543e1165e1..658ebce0116fb331dd504daab631be0cea314db8 100644 GIT binary patch literal 2276 zcmcIl&u>go6h2eMsFI>6ZDI(CAMs49k&uQ`qa=u+ks#^3d2Y?LGw;c~JK|SDA`(qw zZ($++0snx71Q82iVQFC_vFHNn!a_2>@4b6FuaQv}PIBINzVn^A@1Aqtd$V!Ct$M}% zZM!maEt{ZmoV;c-z5V^BBHtz=?eGu(;$Arjl@v<;C2>7ZUD4tNzOOtjQj?O-rcoD_(RUVc<Ik;%_@r_p2~Gh=DtqlIwx~8y@vdpJ}ZB4C!m|?MZ#Cp?^gF34BLVzueG&BLDUedJpFC z1A4Rd2cU0)H(UQAv=i{A{X5wZBf zcmtdo_dfOgj82f*!Y$&Z5DS(1-{+u4zy2e-2#=h}8Q z{_xNLfB*N-KkvQ& zy*H1~dwsw4!syA$ty0aw)XzUFmDyU&WHd%aqzt`wC+c^@NJ+CDToTXs)tVMR39!-S0_iLNa`IU2hrPsE((RrKV=a-wTYTtHqR?MeT2_>9g^>=to)QU^?zWpwXy>%w zT%I#?n47CTpH8MR`kwph*+QX!siabnqGU*9`>r%zOU#TM#nk`0@6o^Oo4;M%DRrbH zgSgZ=_WRAjU~u*Ou^+$7$U!_dh|8qM6Z+q|`w!qIZsYj5q~rs8smU$3yy@<2xnrB| zA6xFkrhB6!AG{63Po;5@Vf2_Adjxv!wYm(U{frf%6HrRw zoeNUfC>5s4!^0n9qf8@4r98ridvEFep_h)1)PF!m%FP=t$+P^$j9&zQ3c4S^0j_=k z|2ep~pi|J@@4u1N{}$nopiZ7&&iJ1Y{|0(8&#z?sO~kJsz)xcxCZYS)p9gmqx?lZ8 za4~c`|NY$hY=HX&dOXixNXN%eUXZpc!}8}~7r?poWD~QqnG};9kjLimn@~~i&PaGg zDeb`{!po7uy)cfOWGq4HgZ^Vsa-1vqCtz*wiJu0xy(WGZ*!GtAG_dU@@r%H=cf>CP z+g=f~mhBDko4~dg#2&C+d*T+bU29@{x%!gc;O*dYxT=<-^~m?S-T&u8=UE%VLUQi3 zuN%8+><7kvZS1ecj$^pYUobW_cFWi=jjb>rhkL=;hOt+S{leI7V}CK0%fa_5#wOnZ zZWw&USaG8Dp7xrsx}VyX_4=yoX!W)h=aQ#Aahg#ijvw}VDnKjvjcgQ`^1rz@imtg}w_ce2P zA9B|}X|O#(KidL`Q!M0uX8wQWRn0rJ6xMqtb(1ISQF&HuZ4yVY{&}(7D+uzmTDlA; zxnE2&=Rs*e`Hsz-f%BOyg1F6Fgr8rR8@YAi{Or2qYauM#n0N!hBj$bP@g86;yC!g@ Yf_j>c5j%uq!1=t3Xkf=C!P>lk08^&hX#fBK diff --git a/developer/lex.c b/developer/lex.c index 4a2358a..a943fa5 100644 --- a/developer/lex.c +++ b/developer/lex.c @@ -67,7 +67,7 @@ int line = 1; int error = 0; int error_line = 0; -const char lex_errors[22][35] = { +char lex_errors[22][35] = { "All good.", "expected token", "unexpected token EOF of expression", "bad function call", "undefined variable", diff --git a/kernel/kthreads/about.c b/kernel/kthreads/about.c index 7851379..ba4e952 100644 --- a/kernel/kthreads/about.c +++ b/kernel/kthreads/about.c @@ -158,4 +158,56 @@ void __kthread_entry about(int argc, char* argv[]) } } -EXPORT_KTHREAD(about); \ No newline at end of file +EXPORT_KTHREAD(about); + +const char* readme_text[] = { + "Welcome to the RetrOS-32 kernel readme.\n" + "\n" + "Bugs: Yes, there are a lot! Please report them to the github page.\n" + "Known bugs are hang on boot after Starting OS.\nOccasional hangs and freezes\n" + "Processes can be started via the taskbar at the screen's top or using the command line.\n" + "Command Line Usage: exec \n" + "Binaries are located in /bin.\nThe 'exec' command can start kernel threads or shell commands as threads.\n" + "\n" + "To use the C interpreter, enter 'cc ' in the terminal.\n" + "Note: The C interpreter is currently under development and may not be fully functional.\n" +}; + + +void __kthread_entry readme() +{ + const int width = 400; + const int height = 400; + + int from = 0; + int to = 50; + + struct window* w = gfx_new_window(width, height, 0); + if(w == NULL){ + warningf("Failed to create window for about"); + return; + } + + kernel_gfx_set_title("Readme"); + + w->draw->rect(w, 0, 0, width, height, 30); + + w->ops->move(w, 50, 50); + + w->draw->text(w, 0, 0, readme_text, 0); + + while (1){ + struct gfx_event event; + int ret = gfx_event_loop(&event, GFX_EVENT_BLOCKING); + if(ret == -1) continue; + + switch (event.event){ + case GFX_EVENT_EXIT: + return; + default: + break; + } + + } +} +EXPORT_KTHREAD(readme); \ No newline at end of file diff --git a/kernel/kthreads/login.c b/kernel/kthreads/login.c index 4392081..ed6d858 100644 --- a/kernel/kthreads/login.c +++ b/kernel/kthreads/login.c @@ -47,8 +47,7 @@ void __kthread_entry login() w->draw->textf(w, 10+10, 10+10+10+10+20+10,0x0,"Memory: %d %s", unit.size, unit.unit); w->draw->textf(w, 10+10, 10+10+10+10+20+10+10, 0x0, "Extended Memory: %d %s", unit2.size, unit2.unit); - - + gfx_commit(); while (1) { struct gfx_event event; From 66c1e82aaeee7338bc0a0f99c3e8565a7ad7a9b7 Mon Sep 17 00:00:00 2001 From: Joe Bayer Date: Tue, 9 Jan 2024 16:06:26 +0100 Subject: [PATCH 07/13] Bug fixes and Readme app --- .github/workflows/pipeline.yml | 2 +- Makefile | 2 +- docs/readme.md | 16 + drivers/mouse.c.bak | 164 ---- graphics/windowserver.c | 15 +- include/errors.h | 1 + include/scheduler.h | 14 +- include/serial.h | 4 +- kernel/diskdev.c | 2 - kernel/ipc.c | 9 +- kernel/kernel.c | 2 +- kernel/kthreads/about.c | 88 +- kernel/kthreads/taskbar.c | 11 + kernel/pci.c | 31 +- kernel/scheduler.c | 28 +- rootfs/symbols.map | 1683 ++++++++++++++++---------------- tests/utils/mocks.c | 2 +- 17 files changed, 1008 insertions(+), 1066 deletions(-) delete mode 100644 drivers/mouse.c.bak diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index d8c1825..e305eef 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -1,4 +1,4 @@ -name: C/C++ CI +name: Build & Tests on: push: diff --git a/Makefile b/Makefile index 19f1b5f..9f89f24 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ ASFLAGS= LDFLAGS= MAKEFLAGS += --no-print-directory -QEMU_OPS = -device e1000,netdev=net0 -serial stdio -netdev user,id=net0,hostfwd=tcp::8080-:8080 -object filter-dump,id=net0,netdev=net0,file=dump.dat -m 32m +QEMU_OPS = -device virtio-net-pci,netdev=net0 -serial stdio -netdev user,id=net0,hostfwd=tcp::8080-:8080 -object filter-dump,id=net0,netdev=net0,file=dump.dat -m 32m # ---------------- For counting how many files to compile ---------------- ifneq ($(words $(MAKECMDGOALS)),1) diff --git a/docs/readme.md b/docs/readme.md index 02a95a0..536d06a 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -1,3 +1,19 @@ # RetrOS Documentation +## Bootloader + +## Kernel + +## Filesystem + +## Graphics + +### Window Manager + +### GFXLib + +## Terminal + +## Textmode + ## Under Construction! \ No newline at end of file diff --git a/drivers/mouse.c.bak b/drivers/mouse.c.bak deleted file mode 100644 index d05b0c6..0000000 --- a/drivers/mouse.c.bak +++ /dev/null @@ -1,164 +0,0 @@ -/** - * @file mouse.c - * @author Joe Bayer (joexbayer) - * @brief Simple PS2 Mouse controller - * @version 0.1 - * @date 2022-12-19 - * @see https://wiki.osdev.org/PS/2_Mouse - * @copyright Copyright (c) 2022 - * - */ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -static struct ps2_mouse mouse_device = { - .packet = { - .flags = 0, - .x = 0, - .y = 0 - }, - .x = 0, - .y = 0, - .received = 0, - .initilized = 0, - .cycle = 0 -}; - -#define MAX_MOUSE_EVENTS 15 - -/* static helper functions wait / write /read */ - -/* wait for mouse to be ready */ -static void mouse_wait(unsigned char a_type) { - unsigned int timeout = 100000; - if (!a_type) { - while (--timeout) { - if ((inportb(MOUSE_STATUS) & MOUSE_BBIT) == 1) { - return; - } - } - return; - } else { - while (--timeout) { - if (!((inportb(MOUSE_STATUS) & MOUSE_ABIT))) { - return; - } - } - return; - } -} - -/* write a byte to mouse */ -static void mouse_write(uint8_t command) -{ - mouse_wait(1); - outportb(0x64, 0xD4); - mouse_wait(1); - outportb(0x60, command); -} - -/* read a byte from mouse */ -static uint8_t mouse_read() -{ - mouse_wait(0); - return inportb(0x60); -} - -/* main API to get a mouse event */ -int mouse_get_event(struct mouse* m) -{ - if(mouse_device.received == 1) - return 0; - - struct mouse event = { - .flags = mouse_device.packet.flags, - .x = mouse_device.x, - .y = mouse_device.y - }; - - *m = event; - - mouse_device.received = 1; - - return 1; -} - -void __int_handler __mouse_handler() -{ - uint8_t status = inportb(MOUSE_STATUS); - while (status & MOUSE_BBIT) { - char mouse_in = inportb(MOUSE_PORT); - if (status & MOUSE_F_BIT) { - switch (mouse_device.cycle) { - case 0:{ - mouse_device.packet.flags = mouse_in; - if (!(mouse_in & MOUSE_V_BIT)){ - return; - } - ++mouse_device.cycle; - } - break; - case 1:{ - mouse_device.packet.x = mouse_in; - ++mouse_device.cycle; - } - break; - case 2:{ - mouse_device.packet.y = mouse_in; - /* We now have a full mouse packet ready to use */ - if (mouse_device.packet.flags & MOUSE_Y_OVERFLOW || mouse_device.packet.flags & MOUSE_X_OVERFLOW) { - /* x/y overflow? bad packet! */ - break; - } - - mouse_device.x += mouse_device.packet.x; - mouse_device.y -= mouse_device.packet.y; - - if (mouse_device.x < 0) mouse_device.x = 0; - if (mouse_device.y < 0) mouse_device.y = 0; - - if (mouse_device.x > vbe_info->width-16) mouse_device.x = vbe_info->width-16; - if (mouse_device.y > vbe_info->height-16) mouse_device.y = vbe_info->height-16; - - mouse_device.received = 0; - mouse_device.cycle = 0; - } - break; - } - } - status = inportb(MOUSE_STATUS); - } -} - -void mouse_init() -{ - dbgprintf("[MOUSE] Starting...\n"); - uint8_t _status; //unsigned char - - mouse_wait(1); - outportb(MOUSE_STATUS, 0xA8); - mouse_wait(1); - outportb(MOUSE_STATUS, 0x20); - mouse_wait(0); - _status = inportb(0x60) | 2; - mouse_wait(1); - outportb(MOUSE_STATUS, 0x60); - mouse_wait(1); - outportb(MOUSE_PORT, _status); - mouse_write(0xF6); - mouse_read(); - mouse_write(0xF4); - mouse_read(); - - interrupt_install_handler(12+32, &__mouse_handler); -} \ No newline at end of file diff --git a/graphics/windowserver.c b/graphics/windowserver.c index 3e1f73b..df2da66 100644 --- a/graphics/windowserver.c +++ b/graphics/windowserver.c @@ -58,7 +58,6 @@ static int ws_init(struct windowserver* ws) ws->_wm = wm; ws->workspace = 0; - ws->background = palloc(VBE_SIZE()); if(ws->background == NULL){ wm->ops->destroy(wm); @@ -67,7 +66,7 @@ static int ws_init(struct windowserver* ws) } SET_FlAG(ws->flags, WINDOW_SERVER_INITIALIZED); - return 0; + return ERROR_OK; } static int ws_raw_wallpaper(struct windowserver* ws, char* path) @@ -86,7 +85,7 @@ static int ws_raw_wallpaper(struct windowserver* ws, char* path) ws->background[i] = rgb_to_vga(ws->background[i]); } - return 0; + return ERROR_OK; } static int ws_add(struct windowserver* ws, struct window* window) @@ -101,7 +100,7 @@ static int ws_add(struct windowserver* ws, struct window* window) dbgprintf("[WSERVER] Added window %x.\n", window); - return 0; + return ERROR_OK; } static int ws_remove(struct windowserver* ws, struct window* window) @@ -114,7 +113,7 @@ static int ws_remove(struct windowserver* ws, struct window* window) return -ERROR_OPS_CORRUPTED; } - return 0; + return ERROR_OK; } static int ws_fullscreen(struct windowserver* ws, struct window* window) @@ -153,7 +152,7 @@ static int ws_fullscreen(struct windowserver* ws, struct window* window) ws->_is_fullscreen = true; } - return 0; + return ERROR_OK; } static int ws_set_background(struct windowserver* ws, color_t color) @@ -163,7 +162,7 @@ static int ws_set_background(struct windowserver* ws, color_t color) memset(ws->background, color, VBE_SIZE()); - return 0; + return ERROR_OK; } static int ws_set_background_file(struct windowserver* ws, const char* path) @@ -281,7 +280,7 @@ static int __ws_key_event(struct windowserver* ws, unsigned char key) break; } - return 0; + return ERROR_OK; } static int ws_draw(struct windowserver* ws) diff --git a/include/errors.h b/include/errors.h index f97eee1..1ad9fa8 100644 --- a/include/errors.h +++ b/include/errors.h @@ -4,6 +4,7 @@ #include #include +/* error code from errors.h */ typedef int error_t; enum errors { diff --git a/include/scheduler.h b/include/scheduler.h index 067fca4..2ebc967 100644 --- a/include/scheduler.h +++ b/include/scheduler.h @@ -26,13 +26,13 @@ typedef enum scheduler_flags { /* Scheduler operations */ struct scheduler_ops { - int (*prioritize)(struct scheduler* sched, struct pcb* pcb); - int (*schedule)(struct scheduler* sched); - int (*add)(struct scheduler* sched, struct pcb* pcb); - int (*block)(struct scheduler* sched, struct pcb* pcb); - int (*sleep)(struct scheduler* sched, int time); - int (*exit)(struct scheduler* sched); - int (*yield)(struct scheduler* sched); + error_t (*prioritize)(struct scheduler* sched, struct pcb* pcb); + error_t (*schedule)(struct scheduler* sched); + error_t (*add)(struct scheduler* sched, struct pcb* pcb); + error_t (*block)(struct scheduler* sched, struct pcb* pcb); + error_t (*sleep)(struct scheduler* sched, int time); + error_t (*exit)(struct scheduler* sched); + error_t (*yield)(struct scheduler* sched); struct pcb* (*consume)(struct scheduler* sched); }; diff --git a/include/serial.h b/include/serial.h index 3716399..d107d5f 100644 --- a/include/serial.h +++ b/include/serial.h @@ -6,13 +6,13 @@ #include #ifdef KDEBUG_SERIAL -#define dbgprintf(a, ...) serial_printf("%s(): " a, __func__, ##__VA_ARGS__) +#define dbgprintf(a, ...) serial_printf("\033[33m%s(): \033[37m" a, __func__, ##__VA_ARGS__) #else #define dbgprintf(a, ...) #endif // KDEBUG_SERIAL #ifdef KDEBUG_WARNINGS -#define warningf(a, ...) serial_printf("DEBUG: %s(): " a, __func__, ##__VA_ARGS__) +#define warningf(a, ...) serial_printf("\033[31m%s(): \033[37m" a, __func__, ##__VA_ARGS__) #else #define warningf(a, ...) #endif // KDEBUG_WARNINGS diff --git a/kernel/diskdev.c b/kernel/diskdev.c index 69f61a3..65ec8ac 100644 --- a/kernel/diskdev.c +++ b/kernel/diskdev.c @@ -13,9 +13,7 @@ void attach_disk_dev( ){ disk_device.read = read; disk_device.write = write; - disk_device.attached = 1; - disk_device.dev = dev; } diff --git a/kernel/ipc.c b/kernel/ipc.c index 35da7c2..d8dacac 100644 --- a/kernel/ipc.c +++ b/kernel/ipc.c @@ -4,13 +4,14 @@ #include #define IPC_MAX_CHANNELS 16 +#define IPC_MAX_SIZE 1024 -#define IPC_VALID_CHANNEL(channel) if(channel < 0 || channel >= IPC_MAX_CHANNELS) {return -1;} +#define IPC_VALID_CHANNEL(channel) if(channel < 0 || channel >= IPC_MAX_CHANNELS || channels[channel].rbuf == NULL) {return -1;} /* handel to channel implementation */ static struct ipc_channel channels[IPC_MAX_CHANNELS] = {0}; -static int ipc_alloc_channel() { +static int __ipc_alloc_channel() { for (int i = 0; i < IPC_MAX_CHANNELS; i++) if (!channels[i].rbuf) return i; @@ -20,12 +21,12 @@ static int ipc_alloc_channel() { /* userspace interface */ int sys_ipc_open() { - int channel = ipc_alloc_channel(); + int channel = __ipc_alloc_channel(); if (channel < 0) { return -1; } - channels[channel].rbuf = rbuffer_new(1024); + channels[channel].rbuf = rbuffer_new(IPC_MAX_SIZE); return channel; } EXPORT_SYSCALL(SYSCALL_IPC_OPEN, sys_ipc_open); diff --git a/kernel/kernel.c b/kernel/kernel.c index d6b0c64..66cdd7b 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -110,7 +110,7 @@ void kernel(uint32_t magic) __deprecated kernel_size = _end-_code; /* Serial is used for debuging purposes. */ - //init_serial(); + init_serial(); dbgprintf("INF: %s - %s\n", KERNEL_NAME, KERNEL_VERSION); kernel_boot_printf("Booting OS..."); diff --git a/kernel/kthreads/about.c b/kernel/kthreads/about.c index ba4e952..6ef233a 100644 --- a/kernel/kthreads/about.c +++ b/kernel/kthreads/about.c @@ -161,26 +161,57 @@ void __kthread_entry about(int argc, char* argv[]) EXPORT_KTHREAD(about); const char* readme_text[] = { - "Welcome to the RetrOS-32 kernel readme.\n" - "\n" - "Bugs: Yes, there are a lot! Please report them to the github page.\n" - "Known bugs are hang on boot after Starting OS.\nOccasional hangs and freezes\n" - "Processes can be started via the taskbar at the screen's top or using the command line.\n" - "Command Line Usage: exec \n" - "Binaries are located in /bin.\nThe 'exec' command can start kernel threads or shell commands as threads.\n" - "\n" - "To use the C interpreter, enter 'cc ' in the terminal.\n" - "Note: The C interpreter is currently under development and may not be fully functional.\n" + "Welcome to the RetrOS-32", + "kernel readme.\n", + " ", + "Scroll using arrow keys!", + " ", + "Bugs: Yes, there are a lot!", + "Please report them to the", + "github page. Known bugs", + "are hang on boot after", + "Starting OS, occasional", + "hangs and freezes.", + " ", + "Processes can be started", + "via the taskbar at the", + "screen's top or using the", + "command line.", + "Command Line Usage:", + "exec ", + "Binaries are located in /bin.", + "The 'exec' command can start", + "kernel threads or shell", + "commands as threads.", + " ", + "To use the C interpreter,", + "enter 'cc ' in the", + "terminal. Note: The C", + "interpreter is currently", + "under development and may", + "not be fully functional.", + " ", + "Networking: The kernel", + "supports Ethernet, IPv4,", + "ARP, ICMP, UDP, TCP,", + "DHCP and DNS. The kernel", + "will automatically attempt", + "to get an IP address and", + "DNS server from the", + "DHCP server.", + " ", + "A looback interface is", + "also supported.", }; - +const int num_strings = sizeof(readme_text) / sizeof(readme_text[0]); void __kthread_entry readme() { - const int width = 400; - const int height = 400; + const int width = 250; + const int height = 300; int from = 0; - int to = 50; + int to = 28; struct window* w = gfx_new_window(width, height, 0); if(w == NULL){ @@ -190,13 +221,17 @@ void __kthread_entry readme() kernel_gfx_set_title("Readme"); - w->draw->rect(w, 0, 0, width, height, 30); - w->ops->move(w, 50, 50); + while (1){ + w->draw->rect(w, 0, 0, width, height, 30); + w->draw->box(w, 10, 10, width-20, height-20,31); - w->draw->text(w, 0, 0, readme_text, 0); + for(int i = from; i < to; i++){ + w->draw->text(w, 12, 12+ (i-from)*10, readme_text[i], 0); + } + + gfx_commit(); - while (1){ struct gfx_event event; int ret = gfx_event_loop(&event, GFX_EVENT_BLOCKING); if(ret == -1) continue; @@ -204,6 +239,23 @@ void __kthread_entry readme() switch (event.event){ case GFX_EVENT_EXIT: return; + case GFX_EVENT_KEYBOARD:{ + switch (event.data){ + case KEY_DOWN: + if(to < num_strings){ + from++; + to++; + } + break; + case KEY_UP: + if(from > 0){ + from--; + to--; + } + break; + } + } + break; default: break; } diff --git a/kernel/kthreads/taskbar.c b/kernel/kthreads/taskbar.c index c259d95..94de9c0 100644 --- a/kernel/kthreads/taskbar.c +++ b/kernel/kthreads/taskbar.c @@ -44,6 +44,7 @@ static void __callback taskbar_bg_default_color(); static void __callback taskbar_bg_default_color_gray(); static void __callback taskbar_sysinf(); static void __callback taskbar_about(); +static void __callback taskbar_readme(); /* prototype to taskbar thread */ static void __kthread_entry taskbar(void); @@ -177,6 +178,11 @@ struct taskbar_options { .icon = desktop_16, .name = "About", .callback = &taskbar_about + }, + { + .icon = desktop_16, + .name = "Readme", + .callback = &taskbar_readme } } }, @@ -458,4 +464,9 @@ static void __callback taskbar_sysinf() static void __callback taskbar_about() { start("about", 0, NULL); +} + +static void __callback taskbar_readme() +{ + start("readme", 0, NULL); } \ No newline at end of file diff --git a/kernel/pci.c b/kernel/pci.c index b7272d2..a8f244f 100644 --- a/kernel/pci.c +++ b/kernel/pci.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -79,6 +78,15 @@ const char* pci_get_device_name(struct pci_device* dev) default: break; } + break; + case 0x1AF4: + switch (dev->device){ + case 0x1000: + return "Virtio Network Device"; + default: + break; + } + break; default: break; } @@ -98,6 +106,9 @@ const char* pci_get_vendor_name(struct pci_device* dev) case 0x10DE: return "NVIDIA Corporation"; break; + case 0x1AF4: + return "Red Hat, Inc."; + break; default: break; } @@ -216,15 +227,29 @@ void init_pci() } i++; } - } } } dbgprintf("[PCI] Peripheral Component Interconnect devices probed.\n"); } -void lspci() +void lspci(int argc, char** argv) { + if(argc > 1){ + if(strcmp(argv[1], "-v") == 0){ + for (int i = 0; i < _pci_devices_size; i++){ + twritef("Vendor: 0x%x Device:\n . 0x%x - %s - %s - %s\n", + _pci_devices[i].vendor, + _pci_devices[i].device, + _pci_devices[i].class < 0x11 ? pci_classes[_pci_devices[i].class] : pci_classes[0], + pci_get_vendor_name(&_pci_devices[i]), + pci_get_device_name(&_pci_devices[i]) + ); + } + return; + } + } + for (int i = 0; i < _pci_devices_size; i++){ twritef("V: 0x%x D: 0x%x - %s\n", _pci_devices[i].vendor, diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 64c01d9..5f9cbfc 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -9,15 +9,15 @@ #include /* exposed operator functions */ -static int sched_prioritize(struct scheduler* sched, struct pcb* pcb); -static int sched_default(struct scheduler* sched); -static int sched_add(struct scheduler* sched, struct pcb* pcb); -static int sched_block(struct scheduler* sched, struct pcb* pcb); -static int sched_sleep(struct scheduler* sched, int time); +static error_t sched_prioritize(struct scheduler* sched, struct pcb* pcb); +static error_t sched_default(struct scheduler* sched); +static error_t sched_add(struct scheduler* sched, struct pcb* pcb); +static error_t sched_block(struct scheduler* sched, struct pcb* pcb); +static error_t sched_sleep(struct scheduler* sched, int time); static struct pcb* sched_consume(struct scheduler* sched); -static int sched_exit(struct scheduler* sched); +static error_t sched_exit(struct scheduler* sched); -static int sched_round_robin(struct scheduler* sched); +static error_t sched_round_robin(struct scheduler* sched); /* Default scheduler operations */ static struct scheduler_ops sched_default_ops = { @@ -81,7 +81,7 @@ error_t sched_init_default(struct scheduler* sched, sched_flag_t flags) * @param time The time to sleep for * @return int 0 on success, error code on failure */ -static int sched_sleep(struct scheduler* sched, int time) +static error_t sched_sleep(struct scheduler* sched, int time) { ERR_ON_NULL(sched); SCHED_VALIDATE(sched); @@ -103,7 +103,7 @@ static int sched_sleep(struct scheduler* sched, int time) * @param pcb The pcb to prioritize * @return int 0 on success, error code on failure */ -static int sched_prioritize(struct scheduler* sched, struct pcb* pcb) +static error_t sched_prioritize(struct scheduler* sched, struct pcb* pcb) { ERR_ON_NULL(sched); ERR_ON_NULL(pcb); @@ -139,7 +139,7 @@ static struct pcb* sched_consume(struct scheduler* sched) * @param pcb The pcb to block * @return int 0 on success, error code on failure */ -static int sched_block(struct scheduler* sched, struct pcb* pcb) +static error_t sched_block(struct scheduler* sched, struct pcb* pcb) { ERR_ON_NULL(sched); ERR_ON_NULL(pcb); @@ -168,7 +168,7 @@ static int sched_block(struct scheduler* sched, struct pcb* pcb) * @param sched The scheduler to schedule on * @return int 0 on success, error code on failure */ -static int sched_round_robin(struct scheduler* sched) +static error_t sched_round_robin(struct scheduler* sched) { struct pcb* next; @@ -265,7 +265,7 @@ static int sched_round_robin(struct scheduler* sched) } /* Default round robin scheduler behavior */ -static int sched_default(struct scheduler* sched) +static error_t sched_default(struct scheduler* sched) { ERR_ON_NULL(sched); SCHED_VALIDATE(sched); @@ -301,7 +301,7 @@ static int sched_default(struct scheduler* sched) * @param sched The scheduler to clean up on * @return int 0 on success, error code on failure */ -static int sched_exit(struct scheduler* sched) +static error_t sched_exit(struct scheduler* sched) { ERR_ON_NULL(sched); SCHED_VALIDATE(sched); @@ -333,7 +333,7 @@ static int sched_exit(struct scheduler* sched) * @param pcb The pcb to add * @return int 0 on success, error code on failure */ -static int sched_add(struct scheduler* sched, struct pcb* pcb) +static error_t sched_add(struct scheduler* sched, struct pcb* pcb) { SCHED_VALIDATE(sched); diff --git a/rootfs/symbols.map b/rootfs/symbols.map index 5bde4d5..a22f288 100644 --- a/rootfs/symbols.map +++ b/rootfs/symbols.map @@ -8,843 +8,846 @@ 00010058 gdt_end 00010058 kernel_boot_printf 000100b7 init_kctors -00010109 kernel -0001054e kernel_get_context -00010558 hexdump -00010796 __terminal_set_ops -0001085f __terminal_scanf -00010865 __terminal_write -000108af __terminal_getchar_graphics -000108f8 __terminal_scan_graphics -000109d6 __terminal_reset -00010a1a __terminal_detach -00010a5b __terminal_attach -00010aa2 __terminal_commit_graphics -00010b78 __terminal_remove_line -00010bb8 __terminal_putchar_graphics -00010c7a __terminal_writef -00010f21 __terminal_getchar_textmode -00010f49 __terminal_scan_textmode -00011009 __terminal_commit_textmode -000110c1 __terminal_putchar_textmode -0001110d scan -00011144 terminal_set_color -00011145 terminal_attach -00011162 terminal_commit -0001117f terminal_putchar -00011180 terminal_create -0001129c terminal_destroy -000112d4 tlb_flush_addr -000112dc load_page_directory -000112ec enable_paging -000112fe pcb_save_context -0001132a pcb_restore_context -00011353 _start_pcb -00011385 _start_pcb_skip -000113a0 lspci -00011432 __ksymbol_lspci -00011450 pci_get_class_name -00011467 pci_get_device_name -000114c1 pci_get_vendor_name -000114fb pci_get_devices -00011505 pci_read_word -00011562 pci_write_dword -000115b5 pci_enable_device_busmaster -0001160e pci_register_device -00011693 init_pci -00011857 pci_find_device -000118f1 virtual_read -00011920 virtual_write -0001194f virtual_disk_attach -00011972 wm_default_changes -00011a1e wm_default_workspace -00011a84 wm_default_draw -00011b26 wm_default_add -00011bd1 init_windowmanager -00011d1d wm_default_mouse_event -00011f3b wm_default_push_back -00012031 wm_default_push_front -00012124 wm_default_remove -00012239 wm_destroy -0001231b wm_new -00012386 screen_set_cursor -000123e6 scrcolor_set -000123fe scrput -0001242a scrwrite -00012477 scr_clear -000124cd scr_scroll -00012519 scrprintf -00012799 strlen -000127bf strcpy -000127f5 strncmp -00012832 strcmp -00012876 memcmp -000128b3 parse_arguments -0001299c strchr -000129cf getopt -00012b1a memcpy -00012b8b strtok -00012c47 xmemcpy -00012cd0 memset -00012d4e isdigit -00012d66 isspace -00012d79 tolower -00012d91 isxdigit -00012db9 htoi -00012e61 atoi -00012ef3 itoa -00012fa3 itohex -00013023 rdtsc -0001302a rand -0001304a general_protection_fault -000130bb interrupt_get_count -000130ce print_page_fault_info -000131a9 page_fault_interrupt -00013251 interrupt_install_handler -00013267 load_data_segments -00013277 isr_handler -00013369 init_interrupts -000134e6 idt_flush -000134ee isr0 -000134fb isr1 -00013508 isr2 -00013515 isr3 -00013522 isr4 -0001352f isr5 -0001353c isr6 -00013549 isr7 -00013556 isr8 -00013563 isr9 -00013570 isr10 -0001357d isr11 -0001358a isr12 -00013597 isr13 -000135a4 isr14 -000135b1 isr15 -000135be isr16 -000135cb isr17 -000135d8 isr18 -000135e5 isr19 -000135f2 isr20 -000135ff isr21 -0001360c isr22 -00013619 isr23 -00013626 isr24 -00013633 isr25 -00013640 isr26 -0001364d isr27 -0001365a isr28 -00013667 isr29 -00013674 isr30 -00013681 isr31 -0001368e isr32 -0001369b isr33 -000136a8 isr34 -000136b5 isr35 -000136bf isr36 -000136c9 isr37 -000136d3 isr38 -000136dd isr39 -000136e7 isr40 -000136f1 isr41 -000136fb isr42 -00013705 isr43 -0001370f isr44 -00013719 isr45 -00013723 isr46 -0001372d isr47 -00013737 isr_entry -00013752 syscall_return_value -00013756 _syscall_entry -00013793 page_fault_save -00013797 page_fault_error -0001379b _page_fault_entry -000137cd timer_callback -00013806 timer_get_tick -00013810 time_get_difference -00013855 init_pit -000138bd gdt_set_segment -00013908 init_gdt -00013a1a rc -00013c00 __ksymbol_rc -00013c1a __ksymbol_as -00013c34 __ksymbol_cc -00013c4e as -00013ffa cc -00014055 __cc -0001433c vm_print -0001451d eval -000149b4 vm_setup -000149f9 vm_init -00014a58 vm_free -00014a8b vm_setup_stack -00014ae9 lex_get_error -00014af6 next -00014ff7 match -00015043 expression -0001630f statement -00016518 function_parameter -000166d6 function_body -000168e1 function_declaration -0001696a enum_declaration -00016a71 global_declaration -00016c9a lex_init -00016d35 program -00016dd6 find_mp_floating_ptr -00016e16 smp_parse -00016f60 kb_get_char -00016fae kb_add_char -00016fed kb_callback -0001721e init_keyboard -00017299 pcb_await -000172c7 __pcb_get_free -0001738d __add_systemcall_pcb_await -000173a8 __pcb_free -000173f7 __pcb_init_kernel_stack -00017458 __pcb_init_process -0001751d init_pcbs -0001757c pcb_total_usage -0001759d pcb_get_info -000176c9 pcb_kill -000176ea Genesis -000176f0 idletask -0001770f pcb_get_by_pid -00017724 pcb_get_by_name -00017781 pcb_dbg_print -000177ff pcb_cleanup_routine -000179d9 pcb_create_thread -00017a90 pcb_create_process -00017cdc pcb_create_kthread -00017f7d start_pcb -00017fb9 __pcb_queue_peek -00017ffc __pcb_queue_pop -0001805c __pcb_queue_remove -000180d2 __pcb_queue_add -0001814f __pcb_queue_push -000181ec pcb_new_queue -00018221 memory_map_init -000182ed memory_map_get -000182f7 free -00018360 malloc -000183f9 calloc -00018430 get_mem_info -0001848c init_memory -00018522 vmem_free -00018596 vmem_alloc -00018607 vmem_free_page_region -00018770 vmem_page_region_alloc -000187ab vmem_create_page_region -000188ee vmem_free_allocations -00018a16 vmem_continious_allocation_map -00018a20 vmem_free_allocation -00018a25 vmem_stack_free -00018ada vmem_stack_alloc -00018e84 vmem_dump_heap -00018f1d vmem_init_process_thread -00019012 vmem_init_process -0001933f vmem_cleanup_process_thead -000193ba vmem_cleanup_process -000195aa vmem_init_kernel -0001976b vmem_allocator_create -000197d5 vmem_map_driver_region -00019857 vmem_total_usage -0001986e vmem_init -000199a6 kalloc -00019b3f kcalloc -00019b75 kfree -00019c0f palloc -00019c5f pmemory_used -00019c80 kmemory_used -00019c8a kmemory_total -00019c9a kmem_init -00019d3b e1000_receive -00019e17 e1000_transmit -00019edd e1000_callback -00019f08 _e1000_tx_init -00019fb0 _e1000_rx_init -0001a04e e1000_attach -0001a2a1 display_get_info -0001a30f kenv_init -0001a32a kenv_set -0001a366 config_list -0001a448 config_load -0001a816 config_get_value -0001a8d9 spin_lock -0001a8fd spin_unlock -0001a90f mutex_init -0001a931 acquire -0001a9d2 release -0001aa78 kthread_entry -0001aad2 kthread_list -0001ab3b register_kthread -0001ac18 start -0001acbe ata_primary -0001acc3 ata_secondary -0001acc8 ata_wait -0001ad42 ata_write -0001aeb4 ata_read -0001b032 ata_ide_init -0001b206 set_bitmap -0001b22c unset_bitmap -0001b254 get_bitmap -0001b27a get_bitmap_size -0001b292 create_bitmap -0001b2ca destroy_bitmap -0001b2e1 bitmap_unset_continous -0001b31e bitmap_get_continous -0001b3b8 get_free_bitmap -0001b411 __rtc_check_in_progress -0001b438 __rtc_get_register -0001b45c get_current_time -0001b5a5 get_time -0001b5d3 init_tss -0001b605 exec_cmd -0001b75e __ksymbol_exec_cmd -0001b77c align_to_pointer_size -0001b78e calculate_size_unit -0001b7ee kernel_panic -0001b810 kref_init -0001b82e kref_get -0001b85a kref_put -0001b886 csprintf -0001ba84 script_parse -0001bb54 login -0001bd91 __register_kthread_login -0001bdaf help -0001bff1 clear -0001c014 __ksymbol_new -0001c032 __ksymbol_list -0001c050 __ksymbol_color -0001c06e __ksymbol_about -0001c08c __ksymbol_help -0001c0aa __ksymbol_view -0001c0c8 __ksymbol_file -0001c0e6 __ksymbol_tcp -0001c104 __ksymbol_conf -0001c122 __ksymbol_clear -0001c140 new -0001c27c list -0001c37d file -0001c540 color -0001c5e2 about -0001c621 view -0001c831 tcp -0001cb06 __tcp_reader -0001cc26 conf -0001cea7 attach_disk_dev -0001cecf disk_attached -0001cedb disk_name -0001cee8 disk_device_get -0001cef2 disk_size -0001cf12 write_block -0001cf53 write_block_offset -0001cf9a read_block -0001cfdb read_block_offset -0001d049 sched_consume -0001d08e sched_add -0001d0ec sched_prioritize -0001d1a5 sched_round_robin -0001d386 sched_exit -0001d443 sched_block -0001d565 sched_default -0001d63d sched_sleep -0001d6e7 sched_init_default -0001d76c get_scheduler -0001d776 kernel_sleep -0001d795 kernel_yield -0001d7dc kernel_exit -0001d812 block -0001d83f unblock -0001d844 work_queue_add -0001d92c init_worker -0001d944 worker_thread -0001d9e3 __ring_buffer_add -0001da8f __ring_buffer_read -0001db9d rbuffer_new -0001dc0a rbuffer_free -0001dc30 error_get_string -0001dc70 kclock -0001e14b __register_kthread_kclock -0001e169 tar_extract -0001e3b0 __ksymbol_tar -0001e3ce tar_list -0001e4d3 tar -0001e74b rgb_to_vga -0001e75f rgb_to_components -0001e78a color_distance_squared -0001e7fa rgb_init_color_table -0001e885 iface_loopback_write -0001e94a iface_loopback_interrupt -0001e965 iface_loopback_read -0001ea0f net_init_loopback -0001ea2a serial_put -0001ea6e serial_write -0001eab4 serial_printf -0001ec68 init_serial -0001ed32 inportb -0001ed3f inportw -0001ed4d inportl -0001ed5a outportb -0001ed6a outportw -0001ed7b outportl -0001ed8b sys_create_thread -0001edad __add_systemcall_sys_create_thread -0001edbc add_system_call -0001ee00 system_call -0001ee6f hashmap_put -0001eedb hashmap_get -0001ef63 hashmap_add -0001eff1 hashmap_free -0001eff6 reset_vga_palette -0001f040 vga_set_palette -0001f12f b8to16 -0001f145 vesa_put_pixel -0001f173 vesa_put_box -0001f1ed vesa_put_block -0001f267 vesa_put_char -0001f2e1 vesa_put_char16 -0001f379 vesa_put_icon16 -0001f3f4 vesa_write -0001f437 vesa_write_str -0001f469 vesa_fill -0001f4ed vesa_fillrect -0001f55c vesa_inner_box -0001f668 vesa_printf -0001f8f4 ksyms_init -0001fb13 ksyms_add_symbol -0001fbcb __ksymbol_backtrace -0001fbe9 ksyms_list -0001fc4d ksyms_resolve_symbol -0001fd04 __backtrace_from -0001fe22 backtrace -0001fe37 ws_fullscreen -0001ffb5 ws_remove -00020069 ws_add -00020158 ws_destroy -00020202 ws_draw -000204b3 ws_raw_wallpaper -0002059d ws_set_background_file -0002087d ws_init -00020964 ws_set_background -00020a13 ws_new -00020aa4 encode_run_length -00020b2d decode_run_length -00020ba4 __mouse_handler -00020cbc mouse_wait -00020d04 mouse_write -00020d46 mouse_get_event -00020d8b mouse_init -00020e74 sys_ipc_open -00020ec6 __add_systemcall_sys_ipc_open -00020ee1 __add_systemcall_sys_ipc_close -00020efc __add_systemcall_sys_ipc_send -00020f17 __add_systemcall_sys_ipc_receive -00020f32 sys_ipc_close -00020f73 sys_ipc_send -00020fd3 sys_ipc_receive -00021032 sysinf -00021d9e __register_kthread_sysinf -00021dbc echo -00021df9 res -00021e3c ifconfig -00021e4d __ksymbol_ifconfig -00021e6b __ksymbol_ps -00021e89 __ksymbol_tree -00021ea7 __ksymbol_fat16 -00021ec5 __ksymbol_xxd -00021ee3 __ksymbol_sh -00021f01 __ksymbol_ed -00021f1f __ksymbol_exec -00021f3d __ksymbol_ths -00021f5b __ksymbol_dns -00021f79 __ksymbol_th -00021f97 __ksymbol_kill -00021fb5 __ksymbol_echo -00021fd3 __ksymbol_fdisk -00021ff1 __ksymbol_meminfo -0002200f __ksymbol_res -0002202d __ksymbol_bg -0002204b __ksymbol_exit -00022069 __ksymbol_socks -00022087 __ksymbol_reset -000220a5 exit -000220db ps -00022339 print_pcb_tree -00022432 tree -00022476 fat16 -000224a2 xxd -00022595 sh -00022693 ed -000226e2 exec -00022844 ths -000228b0 dns -00022924 th -00022946 kill -00022968 fdisk -00022ae5 meminfo -00022cb8 bg -00022d39 socks -00022fd0 __register_kthread_shell -00022fee __register_kthread_textshell -0002300c shell_clear -00023051 reset_shell -000230c4 reset -00023118 shell_put -000232f6 shell -00023542 cleanup_function -0002356d testfn -000235a5 draw_box -0002368e __textshell_reset_box -0002371e textshell -0002398c __net_find_interface -000239ec net_drop_packet -00023a0d net_handle_recieve -00023b38 net_get_interfaces -00023b42 net_configure_iface -00023b98 net_incoming_packet -00023c4a net_get_iface -00023cc6 net_iface_up -00023cf1 net_iface_down -00023d1c net_list_ifaces -00023e30 net_register_interface -00023e65 net_send_skb -00023ef1 net_get_info -00023f1c networking_main -000240f8 __dhcp_add_option -00024162 __dhcp_send_discovery -000242a4 __dhcp_send_request -00024421 dhcp_get_state -0002442d dhcp_get_dns -00024437 dhcp_get_ip -00024450 dhcp_get_gw -00024469 dhcpd -000246fd udp_server -0002478c tcp_server -00024904 __net_terminal_writef -0002496d __register_kthread_tcp_server -0002498b __register_kthread_udp_server -000249a9 __register_kthread_udptest -000249c7 udptest -00024a56 tcpd -00024b3e logd -00024bad __register_kthread_logd -00024bcb logd_attach_by_pid -00024c13 taskbar_about -00024c30 taskbar_clock -00024c4d taskbar_sysinf -00024c6a taskbar_bg_retro -00024ca5 taskbar_bg_lotr2 -00024cbe taskbar_bg_lotr -00024cd7 taskbar_bg_default_color_gray -00024ced taskbar_bg_default_color -00024d03 taskbar_wolfstein -00024d42 taskbar_bg_graph -00024d81 taskbar_bg_calc -00024dc0 taskbar_colors -00024dff taskbar_cube -00024e3e taskbar_editor -00024e7d taskbar_finder -00024ebc taskbar_terminal -00024f09 __register_kthread_taskbar -00024f27 taskbar_hdr_opt_event -00024fb1 taskbar -000255be about -0002578d __register_kthread_about -000257ab gfx_default_hover -000258d9 gfx_draw_window -000266f4 gfx_destory_window -00026785 gfx_window_resize -00026832 gfx_window_maximize -000268af gfx_default_mouse_up -00026981 gfx_default_mouse_down -00026a47 gfx_default_click -00026c74 gfx_window_set_resizable -00026c8b kernel_gfx_window_border_color -00026cb8 gfx_new_window -00026f13 gfx_point_in_rectangle -00026f44 gfx_draw_component -00026f8a gfx_composition_remove_window -00026fb8 gfx_composition_add_window -00027003 gfx_set_background_color -00027058 gfx_raw_background -000270a9 gfx_decode_background_image -000270fa gfx_set_taskbar -00027151 gfx_compositor_main -000271c9 kernel_gfx_draw_circle_helper -00027440 gfx_get_window_width -00027457 gfx_get_window_height -0002746e gfx_push_event -00027535 gfx_put_icon16 -00027629 gfx_put_icon32 -0002771d gfx_event_loop -0002783b kernel_gfx_draw_rectangle -0002793d kernel_gfx_draw_contoured_box -000279e1 kernel_gfx_draw_pixel -00027a8a kernel_gfx_draw_bitmap -00027baf kernel_gfx_draw_char -00027c99 kernel_gfx_set_position -00027cb9 gfx_commit -00027cd4 kernel_gfx_draw_text -00027d62 gfx_button_ext -00027e8b gfx_button -00027ead kernel_gfx_set_title -00027f19 kernel_gfx_set_header -00027f85 kernel_gfx_draw_line -0002811f kernel_gfx_draw_circle -000281a2 kernel_gfx_draw_section -000281ac kernel_gfx_draw_format_text -000284fe gfx_syscall_hook -000286b2 gfx_total_themes -000286bc kernel_gfx_current_theme -000286c6 kernel_gfx_update_theme -00028798 kernel_gfx_default_theme -000287a2 kernel_gfx_set_theme -000287cb kernel_gfx_get_theme -000287ea gfx_new_ctx -0002884a gfx_init_framebuffer -000289ba netdev_attach_driver -00028a67 is_netdev_attached -00028a79 netdev_transmit -00028a98 netdev_recieve -00028ac5 net_ethernet_add_header -00028b5d net_ethernet_parse -00028bd8 __skb_queue_remove -00028c1a __skb_queue_add -00028c6e skb_free_queue -00028caa skb_new_queue -00028d15 skb_free -00028d54 skb_new -00028dc3 skb_consume -00028df8 __net_arp_send -00028eb8 net_init_arp -00028f08 net_arp_add_entry -00028fa0 net_arp_find_entry -00028fef net_arp_respond -00029068 net_net_arp_request -000290f2 arp_parse -000291a0 net_ipv4_print -000291aa net_ipv4_add_header -000292e5 net_is_ipv4 -00029326 net_ipv4_parse -00029457 ntohl -00029487 htonl -0002949e ntohs -000294af htons -000294c0 checksum -0002951b transport_checksum -00029574 ip_to_int -00029616 net_icmp_handle -000296df net_icmp_response -000296e9 net_icmp_request -000297b0 ping -0002980d net_icmp_parse -00029881 net_udp_send -000299ba net_udp_parse -00029ae6 socket_type_to_str -00029af9 socket_domain_to_str -00029b0c socket_protocol_to_str -00029b1f net_sock_bind -00029b6e net_get_sockets -00029b8e sock_get -00029bb3 get_total_sockets -00029bbd net_sock_is_established -00029c05 net_sock_awaiting_ack -00029c4d net_sock_data_ready -00029ca8 net_sock_read -00029dab net_sock_add_data -0002a00f sock_find_listen_tcp -0002a057 net_sock_find_tcp -0002a24a net_prepare_tcp_sock -0002a2da net_sock_accept -0002a2f1 net_socket_find_udp -0002a360 kernel_sock_shutdown -0002a391 kernel_sock_cleanup -0002a41b kernel_sock_close -0002a453 kernel_socket_create -0002a5d8 net_init_sockets -0002a622 gethostname -0002ab50 __add_systemcall_gethostname -0002ab6b net_init_dns -0002ab9e route -0002abef tcb_init -0002ac11 tcb_new -0002ad81 tcp_state_to_str -0002ad9e tcp_new_connection -0002ae2a tcp_free_connection -0002ae51 tcp_is_listening -0002ae6b tcp_set_listening -0002aecf tcp_calculate_checksum -0002af98 __tcp_send -0002b0b4 tcp_send_segment -0002b1fb tcp_accept_connection -0002b33f tcp_send_ack -0002b477 tcp_read -0002b481 tcp_recv_segment -0002b48b tcp_connect -0002b532 tcp_send_syn -0002b53c tcp_recv_ack -0002b5c3 tcp_recv_fin -0002b5cd tcp_recv_syn -0002b703 tcp_send_fin -0002b7d3 tcp_close_connection -0002b816 tcp_parse -0002bcb2 kernel_bind -0002bceb kernel_recvfrom -0002bcf5 kernel_recv -0002bd6b kernel_recv_timeout -0002bd95 kernel_connect -0002be9b kernel_sendto -0002bf59 kernel_accept -0002bfc0 kernel_listen -0002bfec kernel_send -0002c076 sys_kernel_bind -0002c0ac __add_systemcall_sys_kernel_bind -0002c0c7 __add_systemcall_sys_kernel_accept -0002c0e2 __add_systemcall_sys_kernel_connect -0002c0fd __add_systemcall_sys_kernel_listen -0002c118 __add_systemcall_sys_kernel_recv -0002c133 __add_systemcall_sys_kernel_recvfrom -0002c14e __add_systemcall_sys_kernel_recv_timeout -0002c169 __add_systemcall_sys_kernel_send -0002c184 __add_systemcall_sys_kernel_sendto -0002c19f __add_systemcall_sys_socket_create -0002c1ba __add_systemcall_sys_kernel_sock_close -0002c1d5 sys_kernel_accept -0002c219 sys_kernel_connect -0002c24f sys_kernel_listen -0002c282 sys_kernel_recv -0002c2be sys_kernel_recvfrom -0002c302 sys_kernel_recv_timeout -0002c344 sys_kernel_send -0002c380 sys_kernel_sendto -0002c3c4 sys_socket_create -0002c3ef sys_kernel_sock_close -0002c434 __iface_send -0002c467 __iface_recieve -0002c49a __iface_assign -0002c4b1 __iface_detach -0002c4c9 __iface_set_gateway -0002c4e0 __iface_set_netmask -0002c4f7 __iface_configure -0002c54b __iface_attach -0002c574 net_interface_create -0002c5b0 net_register_netdev -0002c6cc net_interface_destroy -0002c6e5 __default_restart -0002c6ef __default_stop -0002c758 __default_start -0002c7db nm_new -0002c868 nm_free -0002c8b1 net_firewall_create -0002c8d8 fs_file2fd -0002c941 fs_alloc_file -0002c990 fs_free_file -0002c9ee fs_register -0002cac1 fs_init -0002cacb fs_unregister -0002cb32 fs_get -0002cb3c fs_close -0002cbb2 fs_open -0002cc30 fs_seek -0002ccb1 fs_read -0002cdca fs_load_from_file -0002ce5a fs_write -0002cf19 fat16_rmdir -0002cf23 fat16_stat -0002cf2d fat16_close -0002cf9b fat16_rename -0002d034 fat16_mkdir -0002d11d fat16_remove -0002d194 fat16_open -0002d2e2 fat16_read -0002d445 fat16_write -0002d577 fat16_list -0002d843 fat16_init -0002d8fb path_next_iter -0002d969 inode_from_path_recursise -0002d9e7 inode_from_path -0002daa9 ext_get_root -0002dab6 ext_get_current_dir -0002dac7 ext_get_size -0002dad1 ext_get_inodes -0002dadb ext_get_blocks -0002dae5 ext_sync -0002db5c ext_create -0002dc4b ext_read -0002dcca ext_seek -0002dd15 ext_write -0002dd85 ext_close -0002ddeb ext_open_from_directory -0002def3 ext_open -0002dfae ext_size -0002dfdb change_directory -0002e045 ext_create_directory -0002e1e3 ext_create_file_system -0002e4b4 init_ext -0002e654 listdir -0002e77d __inode_sync -0002e7e0 __inode_cache_insert -0002e8d6 __inode_load -0002e94a inodes_sync -0002e989 inode_get -0002e9ea inode_read -0002ebda inode_write -0002ee41 alloc_inode -0002eefe mkdir -0002efa7 sync -0002efdd mkfs -0002efee fat16_read_data_from_cluster -0002f040 fat16_read_data -0002f11d fat16_find_cluster_by_offset -0002f19c fat16_write_data_to_cluster_with_offset -0002f1db fat16_print_cluster_chain -0002f20d fat16_write_data_to_cluster -0002f244 fat16_write_data -0002f35f get_fat_start_block -0002f36b get_root_directory_start_block -0002f37e get_data_start_block -0002f394 fat16_get_fat_entry -0002f3b3 fat16_set_fat_entry -0002f3f7 fat16_sync_fat_table -0002f473 fat16_allocate_cluster -0002f48f fat16_free_cluster -0002f4a8 fat16_get_free_cluster -0002f501 fat16_sync_directory_entry -0002f588 fat16_read_entry -0002f639 fat16_find_entry -0002f774 fat16_rename_entry -0002f7e9 fat16_free_clusters -0002f834 fat16_delete_entry -0002f89f fat16_add_entry -0002fa0a fat16_used_blocks -0002fa47 fat16_to_upper -0002fa77 fat16_name_compare -0002fb92 sstrtok -0002fc55 fat16_directory_entry_debug -0002fd2c fat16_get_directory_entry -0002ff35 fat16_create_directory -0003003e fat16_read_file -00030093 fat16_create_file -00030115 fat16_create_empty_file -000301dd fat16_directory_entries -000302c8 fat16_mbr_clear -00030393 fat16_mbr_add_entry -00030488 fat16_print_root_directory_entries -000304a4 fat16_change_directory -00030530 fat16_bootblock_info -000306b1 fat16_set_time -000306e9 fat16_set_date -00030725 fat16_load -000308a8 fat16_format -00030b61 mbr_partition_type_string -00030be9 mbr_partitions_parse -00030cb7 mbr_get -00030cc1 mbr_partition_load -00030ce3 __ksymbol_snakegame -00030d01 init_game -00030d51 draw -00030db1 get_input -00030dd2 update -00030f5e game_loop -00030f88 snakegame -00030fd5 _code_end +00010103 kernel +00010549 kernel_get_context +0001054f hexdump +0001078b __terminal_set_ops +00010854 __terminal_scanf +0001085a __terminal_write +000108a4 __terminal_getchar_graphics +000108ed __terminal_scan_graphics +000109cb __terminal_reset +00010a0f __terminal_detach +00010a50 __terminal_attach +00010a97 __terminal_commit_graphics +00010b6d __terminal_remove_line +00010bad __terminal_putchar_graphics +00010c72 __terminal_writef +00010f19 __terminal_getchar_textmode +00010f41 __terminal_scan_textmode +00011001 __terminal_commit_textmode +000110b9 __terminal_putchar_textmode +00011105 scan +0001113c terminal_set_color +0001113d terminal_attach +0001115a terminal_commit +00011177 terminal_putchar +00011178 terminal_create +00011294 terminal_destroy +000112cc tlb_flush_addr +000112d4 load_page_directory +000112e4 enable_paging +000112f6 pcb_save_context +00011322 pcb_restore_context +0001134b _start_pcb +0001137d _start_pcb_skip +00011398 __ksymbol_lspci +000113b2 pci_get_class_name +000113c5 pci_get_device_name +00011436 pci_get_vendor_name +00011484 lspci +000115cd pci_get_devices +000115d3 pci_read_word +0001162d pci_write_dword +0001167c pci_enable_device_busmaster +000116d1 pci_register_device +00011752 init_pci +00011903 pci_find_device +00011999 virtual_read +000119c4 virtual_write +000119ef virtual_disk_attach +00011a0e wm_default_changes +00011ab6 wm_default_workspace +00011b18 wm_default_draw +00011bb6 wm_default_add +00011c5d init_windowmanager +00011da7 wm_default_mouse_event +00011fcd wm_default_push_back +000120bf wm_default_push_front +000121ae wm_default_remove +000122bf wm_destroy +0001239d wm_new +00012404 screen_set_cursor +00012464 scrcolor_set +00012478 scrput +0001249e scrwrite +000124e7 scr_clear +00012539 scr_scroll +00012581 scrprintf +000127c5 strlen +000127e7 strcpy +0001281b strncmp +00012856 strcmp +00012896 memcmp +000128d1 parse_arguments +000129b4 strchr +000129e3 getopt +00012af3 memcpy +00012b60 strtok +00012c18 xmemcpy +00012c9f memset +00012d1f isdigit +00012d33 isspace +00012d42 tolower +00012d56 isxdigit +00012d7a htoi +00012e1e atoi +00012eae itoa +00012f54 itohex +00012fd0 rdtsc +00012fd3 rand +00012fef general_protection_fault +0001305c interrupt_get_count +0001306b print_page_fault_info +00013146 page_fault_interrupt +000131ea interrupt_install_handler +000131fc load_data_segments +00013208 isr_handler +000132f6 init_interrupts +0001346f idt_flush +00013477 isr0 +00013484 isr1 +00013491 isr2 +0001349e isr3 +000134ab isr4 +000134b8 isr5 +000134c5 isr6 +000134d2 isr7 +000134df isr8 +000134ec isr9 +000134f9 isr10 +00013506 isr11 +00013513 isr12 +00013520 isr13 +0001352d isr14 +0001353a isr15 +00013547 isr16 +00013554 isr17 +00013561 isr18 +0001356e isr19 +0001357b isr20 +00013588 isr21 +00013595 isr22 +000135a2 isr23 +000135af isr24 +000135bc isr25 +000135c9 isr26 +000135d6 isr27 +000135e3 isr28 +000135f0 isr29 +000135fd isr30 +0001360a isr31 +00013617 isr32 +00013624 isr33 +00013631 isr34 +0001363e isr35 +00013648 isr36 +00013652 isr37 +0001365c isr38 +00013666 isr39 +00013670 isr40 +0001367a isr41 +00013684 isr42 +0001368e isr43 +00013698 isr44 +000136a2 isr45 +000136ac isr46 +000136b6 isr47 +000136c0 isr_entry +000136db syscall_return_value +000136df _syscall_entry +0001371c page_fault_save +00013720 page_fault_error +00013724 _page_fault_entry +00013756 timer_callback +0001378b timer_get_tick +00013791 time_get_difference +000137d4 init_pit +00013838 gdt_set_segment +00013881 init_gdt +0001398f rc +00013b75 __ksymbol_rc +00013b8f __ksymbol_as +00013ba9 __ksymbol_cc +00013bc3 as +00013f6f cc +00013fca __cc +000142b1 vm_print +0001448e eval +00014920 vm_setup +00014961 vm_init +000149bc vm_free +000149eb vm_setup_stack +00014a47 lex_get_error +00014a54 next +00014f5f match +00014fab expression +00016294 statement +0001649d function_parameter +0001665b function_body +00016866 function_declaration +000168ef enum_declaration +000169f6 global_declaration +00016c1f lex_init +00016cba program +00016d5b find_mp_floating_ptr +00016d97 smp_parse +00016edc kb_get_char +00016f28 kb_add_char +00016f63 kb_callback +00017190 init_keyboard +00017207 pcb_await +00017231 __pcb_get_free +000172ef __add_systemcall_pcb_await +00017306 __pcb_free +00017355 __pcb_init_kernel_stack +000173b6 __pcb_init_process +0001747b init_pcbs +000174d6 pcb_total_usage +000174ff pcb_get_info +00017629 pcb_kill +00017646 Genesis +00017648 idletask +00017663 pcb_get_by_pid +00017674 pcb_get_by_name +000176cd pcb_dbg_print +00017747 pcb_cleanup_routine +00017918 pcb_create_thread +000179cb pcb_create_process +00017c12 pcb_create_kthread +00017e9f start_pcb +00017ed7 __pcb_queue_peek +00017f16 __pcb_queue_pop +00017f72 __pcb_queue_remove +00017fe4 __pcb_queue_add +0001805d __pcb_queue_push +000180f6 pcb_new_queue +00018127 memory_map_init +000181ee memory_map_get +000181f4 free +00018259 malloc +000182ee calloc +00018321 get_mem_info +00018379 init_memory +0001840b vmem_free +0001847b vmem_alloc +000184e8 vmem_free_page_region +0001864e vmem_page_region_alloc +00018689 vmem_create_page_region +000187cd vmem_free_allocations +000188fc vmem_continious_allocation_map +00018902 vmem_free_allocation +00018903 vmem_stack_free +000189b4 vmem_stack_alloc +00018d39 vmem_dump_heap +00018dce vmem_init_process_thread +00018ebf vmem_init_process +000191ed vmem_cleanup_process_thead +00019264 vmem_cleanup_process +00019452 vmem_init_kernel +00019613 vmem_allocator_create +00019677 vmem_map_driver_region +000196f5 vmem_total_usage +00019708 vmem_init +0001983a kalloc +000199cf kcalloc +00019a01 kfree +00019a97 palloc +00019ad9 pmemory_used +00019af5 kmemory_used +00019afb kmemory_total +00019b07 kmem_init +00019ba4 e1000_receive +00019c7f e1000_transmit +00019d41 e1000_callback +00019d68 _e1000_tx_init +00019e0c _e1000_rx_init +00019ea6 e1000_attach +0001a0d6 display_get_info +0001a13f kenv_init +0001a156 kenv_set +0001a18b config_list +0001a258 config_load +0001a643 config_get_value +0001a6fe spin_lock +0001a71e spin_unlock +0001a72c mutex_init +0001a749 acquire +0001a7e6 release +0001a888 kthread_entry +0001a8de kthread_list +0001a943 register_kthread +0001aa1c start +0001aabe ata_primary +0001aabf ata_secondary +0001aac0 ata_wait +0001ab3a ata_write +0001acb1 ata_read +0001ae41 ata_ide_init +0001b011 set_bitmap +0001b033 unset_bitmap +0001b057 get_bitmap +0001b079 get_bitmap_size +0001b08d create_bitmap +0001b0c1 destroy_bitmap +0001b0d4 bitmap_unset_continous +0001b10e bitmap_get_continous +0001b1aa get_free_bitmap +0001b1ff __rtc_check_in_progress +0001b221 __rtc_get_register +0001b241 get_current_time +0001b38c get_time +0001b3b6 init_tss +0001b3e4 exec_cmd +0001b4e8 __ksymbol_exec_cmd +0001b502 align_to_pointer_size +0001b510 calculate_size_unit +0001b572 kernel_panic +0001b590 kref_init +0001b5aa kref_get +0001b5d2 kref_put +0001b5fa csprintf +0001b7fb script_parse +0001b8ce login +0001bb0c __register_kthread_login +0001bb26 help +0001bd64 clear +0001bd83 __ksymbol_new +0001bd9d __ksymbol_list +0001bdb7 __ksymbol_color +0001bdd1 __ksymbol_about +0001bdeb __ksymbol_help +0001be05 __ksymbol_view +0001be1f __ksymbol_file +0001be39 __ksymbol_tcp +0001be53 __ksymbol_conf +0001be6d __ksymbol_clear +0001be87 new +0001bfbf list +0001c0bc file +0001c27b color +0001c319 about +0001c354 view +0001c560 tcp +0001c831 __tcp_reader +0001c94d conf +0001cbca attach_disk_dev +0001cbee disk_attached +0001cbf6 disk_name +0001cbff disk_device_get +0001cc05 disk_size +0001cc21 write_block +0001cc5e write_block_offset +0001cca1 read_block +0001ccde read_block_offset +0001cd48 sched_consume +0001cd89 sched_add +0001cde3 sched_prioritize +0001ce98 sched_round_robin +0001d079 sched_exit +0001d132 sched_block +0001d250 sched_default +0001d324 sched_sleep +0001d3ca sched_init_default +0001d44b get_scheduler +0001d451 kernel_sleep +0001d46c kernel_yield +0001d4af kernel_exit +0001d4e1 block +0001d50a unblock +0001d50b work_queue_add +0001d5f3 init_worker +0001d60b worker_thread +0001d6aa __ring_buffer_add +0001d752 __ring_buffer_read +0001d85c rbuffer_new +0001d8c5 rbuffer_free +0001d8e7 error_get_string +0001d923 kclock +0001de03 __register_kthread_kclock +0001de1d tar_extract +0001e064 __ksymbol_tar +0001e07e tar_list +0001e182 tar +0001e3f6 rgb_to_vga +0001e406 rgb_to_components +0001e42d color_distance_squared +0001e498 rgb_init_color_table +0001e529 iface_loopback_write +0001e5ea iface_loopback_interrupt +0001e601 iface_loopback_read +0001e6a4 net_init_loopback +0001e6bb serial_put +0001e6fb serial_write +0001e73d serial_printf +0001e8dd init_serial +0001e9a3 inportb +0001e9ac inportw +0001e9b6 inportl +0001e9bf outportb +0001e9cd outportw +0001e9dc outportl +0001e9e9 sys_create_thread +0001ea07 __add_systemcall_sys_create_thread +0001ea12 add_system_call +0001ea52 system_call +0001eabd hashmap_put +0001eb24 hashmap_get +0001eba8 hashmap_add +0001ec32 hashmap_free +0001ec33 reset_vga_palette +0001ec79 vga_set_palette +0001ed64 b8to16 +0001ed74 vesa_put_pixel +0001ed9e vesa_put_box +0001ee19 vesa_put_block +0001ee94 vesa_put_char +0001ef0f vesa_put_char16 +0001efa2 vesa_put_icon16 +0001f01b vesa_write +0001f05a vesa_write_str +0001f088 vesa_fill +0001f10a vesa_fillrect +0001f17c vesa_inner_box +0001f284 vesa_printf +0001f4f1 ksyms_init +0001f718 ksyms_add_symbol +0001f7cc __ksymbol_backtrace +0001f7e6 ksyms_list +0001f846 ksyms_resolve_symbol +0001f8f9 __backtrace_from +0001fa16 backtrace +0001fa27 ws_fullscreen +0001fba1 ws_remove +0001fc51 ws_add +0001fd3c ws_destroy +0001fde2 ws_draw +0002008f ws_raw_wallpaper +00020175 ws_set_background_file +00020452 ws_init +00020535 ws_set_background +000205e0 ws_new +0002066d encode_run_length +000206ea decode_run_length +00020755 __mouse_handler +0002086c mouse_wait +000208b4 mouse_write +000208f6 mouse_get_event +00020937 mouse_init +00020a1c sys_ipc_open +00020a6a __add_systemcall_sys_ipc_open +00020a81 __add_systemcall_sys_ipc_close +00020a98 __add_systemcall_sys_ipc_send +00020aaf __add_systemcall_sys_ipc_receive +00020ac6 sys_ipc_close +00020b0f sys_ipc_send +00020b76 sys_ipc_receive +00020bdc sysinf +0002192e __register_kthread_sysinf +00021948 echo +00021981 res +000219c0 ifconfig +000219cd __ksymbol_ifconfig +000219e7 __ksymbol_ps +00021a01 __ksymbol_tree +00021a1b __ksymbol_fat16 +00021a35 __ksymbol_xxd +00021a4f __ksymbol_sh +00021a69 __ksymbol_ed +00021a83 __ksymbol_exec +00021a9d __ksymbol_ths +00021ab7 __ksymbol_dns +00021ad1 __ksymbol_th +00021aeb __ksymbol_kill +00021b05 __ksymbol_echo +00021b1f __ksymbol_fdisk +00021b39 __ksymbol_meminfo +00021b53 __ksymbol_res +00021b6d __ksymbol_bg +00021b87 __ksymbol_exit +00021ba1 __ksymbol_socks +00021bbb __ksymbol_reset +00021bd5 exit +00021c07 ps +00021e61 print_pcb_tree +00021f5a tree +00021f9a fat16 +00021fc2 xxd +000220b1 sh +000221ab ed +000221f6 exec +00022352 ths +000223ba dns +0002242a th +00022448 kill +00022466 fdisk +000225df meminfo +000227ae bg +0002282b socks +00022abb __register_kthread_shell +00022ad5 __register_kthread_textshell +00022aef shell_clear +00022b30 reset_shell +00022b9f reset +00022bef shell_put +00022dc8 shell +00023010 cleanup_function +00023037 testfn +0002306b draw_box +00023150 __textshell_reset_box +000231e0 textshell +0002344c __net_find_interface +000234ac net_drop_packet +000234cd net_handle_recieve +000235f4 net_get_interfaces +000235fa net_configure_iface +0002364c net_incoming_packet +000236fd net_get_iface +00023773 net_iface_up +0002379a net_iface_down +000237c1 net_list_ifaces +000238d1 net_register_interface +00023902 net_send_skb +0002398a net_get_info +000239b1 networking_main +00023b8d __dhcp_add_option +00023bfd __dhcp_send_discovery +00023d3f __dhcp_send_request +00023ebc dhcp_get_state +00023ec4 dhcp_get_dns +00023eca dhcp_get_ip +00023edf dhcp_get_gw +00023ef4 dhcpd +00024173 udp_server +000241fe tcp_server +00024372 __net_terminal_writef +000243d7 __register_kthread_tcp_server +000243f1 __register_kthread_udp_server +0002440b __register_kthread_udptest +00024425 udptest +000244b0 tcpd +00024594 logd +000245ff __register_kthread_logd +00024619 logd_attach_by_pid +0002465d taskbar_readme +00024676 taskbar_about +0002468f taskbar_clock +000246a8 taskbar_sysinf +000246c1 taskbar_bg_retro +000246f8 taskbar_bg_lotr2 +0002470d taskbar_bg_lotr +00024722 taskbar_bg_default_color_gray +00024734 taskbar_bg_default_color +00024746 taskbar_wolfstein +00024781 taskbar_bg_graph +000247bc taskbar_bg_calc +000247f7 taskbar_colors +00024832 taskbar_cube +0002486d taskbar_editor +000248a8 taskbar_finder +000248e3 taskbar_terminal +0002492c __register_kthread_taskbar +00024946 taskbar_hdr_opt_event +000249d0 taskbar +00024f87 about +00025152 __register_kthread_about +0002516c __register_kthread_readme +00025186 readme +000252e8 gfx_default_hover +00025407 gfx_destory_window +00025494 gfx_window_resize +0002553d gfx_window_maximize +000255b6 gfx_default_mouse_up +00025684 gfx_default_mouse_down +00025746 gfx_default_click +0002596f gfx_draw_window +0002675b gfx_window_set_resizable +0002676e kernel_gfx_window_border_color +00026797 gfx_new_window +000269eb gfx_point_in_rectangle +00026a18 gfx_draw_component +00026a5a gfx_composition_remove_window +00026a84 gfx_composition_add_window +00026acb gfx_set_background_color +00026b1c gfx_raw_background +00026b69 gfx_decode_background_image +00026bb6 gfx_set_taskbar +00026c09 gfx_compositor_main +00026c7d kernel_gfx_draw_circle_helper +00026f29 gfx_get_window_width +00026f3c gfx_get_window_height +00026f4f gfx_push_event +0002700b gfx_put_icon16 +000270ff gfx_put_icon32 +000271f3 gfx_event_loop +0002730a kernel_gfx_draw_rectangle +00027404 kernel_gfx_draw_contoured_box +000274a4 kernel_gfx_draw_pixel +00027542 kernel_gfx_draw_bitmap +00027660 kernel_gfx_draw_char +00027760 kernel_gfx_set_position +0002777c gfx_commit +00027793 kernel_gfx_draw_text +0002781d gfx_button_ext +00027942 gfx_button +00027960 kernel_gfx_set_title +000279c8 kernel_gfx_set_header +00027a30 kernel_gfx_draw_line +00027bcb kernel_gfx_draw_circle +00027c4a kernel_gfx_draw_section +00027c50 kernel_gfx_draw_format_text +00027fa2 gfx_syscall_hook +00028151 gfx_total_themes +00028157 kernel_gfx_current_theme +0002815d kernel_gfx_update_theme +0002822b kernel_gfx_default_theme +00028231 kernel_gfx_set_theme +00028256 kernel_gfx_get_theme +00028271 gfx_new_ctx +000282cd gfx_init_framebuffer +00028439 netdev_attach_driver +000284e2 is_netdev_attached +000284f0 netdev_transmit +0002850b netdev_recieve +00028534 net_ethernet_add_header +000285c8 net_ethernet_parse +0002863c __skb_queue_remove +0002867a __skb_queue_add +000286ca skb_free_queue +00028702 skb_new_queue +00028769 skb_free +000287a4 skb_new +0002880f skb_consume +00028840 __net_arp_send +00028900 net_init_arp +0002894c net_arp_add_entry +000289db net_arp_find_entry +00028a26 net_arp_respond +00028a9b net_net_arp_request +00028b21 arp_parse +00028bcb net_ipv4_print +00028bd1 net_ipv4_add_header +00028d08 net_is_ipv4 +00028d45 net_ipv4_parse +00028e72 ntohl +00028e9e htonl +00028eb1 ntohs +00028ebe htons +00028ecb checksum +00028f22 transport_checksum +00028f77 ip_to_int +00029015 net_icmp_handle +000290da net_icmp_response +000290e0 net_icmp_request +000291a3 ping +000291fc net_icmp_parse +0002926c net_udp_send +000293a1 net_udp_parse +000294c9 socket_type_to_str +000294d8 socket_domain_to_str +000294e7 socket_protocol_to_str +000294f6 net_sock_bind +00029541 net_get_sockets +0002955d sock_get +0002957e get_total_sockets +00029584 net_sock_is_established +000295c8 net_sock_awaiting_ack +0002960c net_sock_data_ready +00029665 net_sock_read +00029765 net_sock_add_data +000299c5 sock_find_listen_tcp +00029a09 net_sock_find_tcp +00029bfb net_prepare_tcp_sock +00029c87 net_sock_accept +00029c9a net_socket_find_udp +00029d05 kernel_sock_shutdown +00029d32 kernel_sock_cleanup +00029db8 kernel_sock_close +00029dec kernel_socket_create +00029f6d net_init_sockets +00029fb3 gethostname +0002a4cd __add_systemcall_gethostname +0002a4e4 net_init_dns +0002a513 route +0002a560 tcb_init +0002a57e tcb_new +0002a6ea tcp_state_to_str +0002a703 tcp_new_connection +0002a78b tcp_free_connection +0002a7ae tcp_is_listening +0002a7c4 tcp_set_listening +0002a824 tcp_calculate_checksum +0002a8e8 __tcp_send +0002aa04 tcp_send_segment +0002ab47 tcp_accept_connection +0002ac87 tcp_send_ack +0002adbd tcp_read +0002adc3 tcp_recv_segment +0002adc9 tcp_connect +0002ae6c tcp_send_syn +0002ae72 tcp_recv_ack +0002aef5 tcp_recv_fin +0002aefb tcp_recv_syn +0002b02d tcp_send_fin +0002b0f9 tcp_close_connection +0002b138 tcp_parse +0002b5d1 kernel_bind +0002b606 kernel_recvfrom +0002b60c kernel_recv +0002b67e kernel_recv_timeout +0002b6a4 kernel_connect +0002b7a8 kernel_sendto +0002b862 kernel_accept +0002b8c5 kernel_listen +0002b8ed kernel_send +0002b973 sys_kernel_bind +0002b9a5 __add_systemcall_sys_kernel_bind +0002b9bc __add_systemcall_sys_kernel_accept +0002b9d3 __add_systemcall_sys_kernel_connect +0002b9ea __add_systemcall_sys_kernel_listen +0002ba01 __add_systemcall_sys_kernel_recv +0002ba18 __add_systemcall_sys_kernel_recvfrom +0002ba2f __add_systemcall_sys_kernel_recv_timeout +0002ba46 __add_systemcall_sys_kernel_send +0002ba5d __add_systemcall_sys_kernel_sendto +0002ba74 __add_systemcall_sys_socket_create +0002ba8b __add_systemcall_sys_kernel_sock_close +0002baa2 sys_kernel_accept +0002bae2 sys_kernel_connect +0002bb14 sys_kernel_listen +0002bb43 sys_kernel_recv +0002bb7b sys_kernel_recvfrom +0002bbbb sys_kernel_recv_timeout +0002bbf9 sys_kernel_send +0002bc31 sys_kernel_sendto +0002bc71 sys_socket_create +0002bc98 sys_kernel_sock_close +0002bcd9 __iface_send +0002bd08 __iface_recieve +0002bd37 __iface_assign +0002bd4a __iface_detach +0002bd5e __iface_set_gateway +0002bd71 __iface_set_netmask +0002bd84 __iface_configure +0002bdd4 __iface_attach +0002bdf9 net_interface_create +0002be31 net_register_netdev +0002bf49 net_interface_destroy +0002bf5e __default_restart +0002bf64 __default_stop +0002bfc9 __default_start +0002c043 nm_new +0002c0cc nm_free +0002c111 net_firewall_create +0002c134 fs_file2fd +0002c19b fs_alloc_file +0002c1e6 fs_free_file +0002c240 fs_register +0002c30f fs_init +0002c315 fs_unregister +0002c378 fs_get +0002c37e fs_close +0002c3f0 fs_open +0002c46a fs_seek +0002c4e7 fs_read +0002c5fc fs_load_from_file +0002c688 fs_write +0002c743 fat16_rmdir +0002c749 fat16_stat +0002c74f fat16_close +0002c7b9 fat16_rename +0002c84e fat16_mkdir +0002c933 fat16_remove +0002c9a6 fat16_open +0002caf0 fat16_read +0002cc54 fat16_write +0002cd82 fat16_list +0002d04a fat16_init +0002d0fe path_next_iter +0002d16d inode_from_path_recursise +0002d1eb inode_from_path +0002d2a9 ext_get_root +0002d2b2 ext_get_current_dir +0002d2bf ext_get_size +0002d2c5 ext_get_inodes +0002d2cb ext_get_blocks +0002d2d1 ext_sync +0002d344 ext_create +0002d42f ext_read +0002d4aa ext_seek +0002d4f1 ext_write +0002d55d ext_close +0002d5bf ext_open_from_directory +0002d6c5 ext_open +0002d77c ext_size +0002d7a5 change_directory +0002d80b ext_create_directory +0002d9a5 ext_create_file_system +0002dc72 init_ext +0002de0e listdir +0002df31 __inode_sync +0002df94 __inode_cache_insert +0002e08a __inode_load +0002e0fe inodes_sync +0002e139 inode_get +0002e196 inode_read +0002e37e inode_write +0002e5dc alloc_inode +0002e695 mkdir +0002e73a sync +0002e76c mkfs +0002e779 fat16_read_data_from_cluster +0002e7c7 fat16_read_data +0002e8a8 fat16_find_cluster_by_offset +0002e923 fat16_write_data_to_cluster_with_offset +0002e95e fat16_print_cluster_chain +0002e98c fat16_write_data_to_cluster +0002e9bf fat16_write_data +0002eadb get_fat_start_block +0002eae3 get_root_directory_start_block +0002eaf2 get_data_start_block +0002eb04 fat16_get_fat_entry +0002eb1f fat16_set_fat_entry +0002eb5f fat16_sync_fat_table +0002ebd7 fat16_allocate_cluster +0002ebef fat16_free_cluster +0002ec04 fat16_get_free_cluster +0002ec59 fat16_sync_directory_entry +0002ecdb fat16_read_entry +0002ed88 fat16_find_entry +0002eec3 fat16_rename_entry +0002ef34 fat16_free_clusters +0002ef7b fat16_delete_entry +0002efe2 fat16_add_entry +0002f149 fat16_used_blocks +0002f182 fat16_to_upper +0002f1ae fat16_name_compare +0002f2d3 sstrtok +0002f394 fat16_directory_entry_debug +0002f464 fat16_get_directory_entry +0002f65c fat16_create_directory +0002f761 fat16_read_file +0002f7b2 fat16_create_file +0002f830 fat16_create_empty_file +0002f8f0 fat16_directory_entries +0002f9d6 fat16_mbr_clear +0002fa7f fat16_mbr_add_entry +0002fb70 fat16_print_root_directory_entries +0002fb88 fat16_change_directory +0002fc10 fat16_bootblock_info +0002fd8d fat16_set_time +0002fdc1 fat16_set_date +0002fdf9 fat16_load +0002ff78 fat16_format +0003022d mbr_partition_type_string +000302b0 mbr_partitions_parse +00030379 mbr_get +0003037f mbr_partition_load +0003039d __ksymbol_snakegame +000303b7 init_game +00030405 draw +00030461 get_input +0003047e update +00030605 game_loop +0003062b snakegame +00030674 _code_end diff --git a/tests/utils/mocks.c b/tests/utils/mocks.c index 43bd0da..e308b43 100644 --- a/tests/utils/mocks.c +++ b/tests/utils/mocks.c @@ -162,7 +162,7 @@ void* kalloc(int size){ } int kcalloc(int size){ - return kalloc(size); + return (int)kalloc(size); } #endif From 84acecef3b1354cd9bfda58916b23a61bc680412 Mon Sep 17 00:00:00 2001 From: Joe Bayer Date: Tue, 9 Jan 2024 16:09:11 +0100 Subject: [PATCH 08/13] Revert "Bug fixes and Readme app" This reverts commit 66c1e82aaeee7338bc0a0f99c3e8565a7ad7a9b7. --- Makefile | 2 +- docs/readme.md | 16 - drivers/mouse.c.bak | 164 ++++ graphics/windowserver.c | 15 +- include/errors.h | 1 - include/scheduler.h | 14 +- include/serial.h | 4 +- kernel/diskdev.c | 2 + kernel/ipc.c | 9 +- kernel/kernel.c | 2 +- kernel/kthreads/about.c | 88 +- kernel/kthreads/taskbar.c | 11 - kernel/pci.c | 31 +- kernel/scheduler.c | 28 +- rootfs/symbols.map | 1683 ++++++++++++++++++------------------- tests/utils/mocks.c | 2 +- 16 files changed, 1065 insertions(+), 1007 deletions(-) create mode 100644 drivers/mouse.c.bak diff --git a/Makefile b/Makefile index 9f89f24..19f1b5f 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ ASFLAGS= LDFLAGS= MAKEFLAGS += --no-print-directory -QEMU_OPS = -device virtio-net-pci,netdev=net0 -serial stdio -netdev user,id=net0,hostfwd=tcp::8080-:8080 -object filter-dump,id=net0,netdev=net0,file=dump.dat -m 32m +QEMU_OPS = -device e1000,netdev=net0 -serial stdio -netdev user,id=net0,hostfwd=tcp::8080-:8080 -object filter-dump,id=net0,netdev=net0,file=dump.dat -m 32m # ---------------- For counting how many files to compile ---------------- ifneq ($(words $(MAKECMDGOALS)),1) diff --git a/docs/readme.md b/docs/readme.md index 536d06a..02a95a0 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -1,19 +1,3 @@ # RetrOS Documentation -## Bootloader - -## Kernel - -## Filesystem - -## Graphics - -### Window Manager - -### GFXLib - -## Terminal - -## Textmode - ## Under Construction! \ No newline at end of file diff --git a/drivers/mouse.c.bak b/drivers/mouse.c.bak new file mode 100644 index 0000000..d05b0c6 --- /dev/null +++ b/drivers/mouse.c.bak @@ -0,0 +1,164 @@ +/** + * @file mouse.c + * @author Joe Bayer (joexbayer) + * @brief Simple PS2 Mouse controller + * @version 0.1 + * @date 2022-12-19 + * @see https://wiki.osdev.org/PS/2_Mouse + * @copyright Copyright (c) 2022 + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +static struct ps2_mouse mouse_device = { + .packet = { + .flags = 0, + .x = 0, + .y = 0 + }, + .x = 0, + .y = 0, + .received = 0, + .initilized = 0, + .cycle = 0 +}; + +#define MAX_MOUSE_EVENTS 15 + +/* static helper functions wait / write /read */ + +/* wait for mouse to be ready */ +static void mouse_wait(unsigned char a_type) { + unsigned int timeout = 100000; + if (!a_type) { + while (--timeout) { + if ((inportb(MOUSE_STATUS) & MOUSE_BBIT) == 1) { + return; + } + } + return; + } else { + while (--timeout) { + if (!((inportb(MOUSE_STATUS) & MOUSE_ABIT))) { + return; + } + } + return; + } +} + +/* write a byte to mouse */ +static void mouse_write(uint8_t command) +{ + mouse_wait(1); + outportb(0x64, 0xD4); + mouse_wait(1); + outportb(0x60, command); +} + +/* read a byte from mouse */ +static uint8_t mouse_read() +{ + mouse_wait(0); + return inportb(0x60); +} + +/* main API to get a mouse event */ +int mouse_get_event(struct mouse* m) +{ + if(mouse_device.received == 1) + return 0; + + struct mouse event = { + .flags = mouse_device.packet.flags, + .x = mouse_device.x, + .y = mouse_device.y + }; + + *m = event; + + mouse_device.received = 1; + + return 1; +} + +void __int_handler __mouse_handler() +{ + uint8_t status = inportb(MOUSE_STATUS); + while (status & MOUSE_BBIT) { + char mouse_in = inportb(MOUSE_PORT); + if (status & MOUSE_F_BIT) { + switch (mouse_device.cycle) { + case 0:{ + mouse_device.packet.flags = mouse_in; + if (!(mouse_in & MOUSE_V_BIT)){ + return; + } + ++mouse_device.cycle; + } + break; + case 1:{ + mouse_device.packet.x = mouse_in; + ++mouse_device.cycle; + } + break; + case 2:{ + mouse_device.packet.y = mouse_in; + /* We now have a full mouse packet ready to use */ + if (mouse_device.packet.flags & MOUSE_Y_OVERFLOW || mouse_device.packet.flags & MOUSE_X_OVERFLOW) { + /* x/y overflow? bad packet! */ + break; + } + + mouse_device.x += mouse_device.packet.x; + mouse_device.y -= mouse_device.packet.y; + + if (mouse_device.x < 0) mouse_device.x = 0; + if (mouse_device.y < 0) mouse_device.y = 0; + + if (mouse_device.x > vbe_info->width-16) mouse_device.x = vbe_info->width-16; + if (mouse_device.y > vbe_info->height-16) mouse_device.y = vbe_info->height-16; + + mouse_device.received = 0; + mouse_device.cycle = 0; + } + break; + } + } + status = inportb(MOUSE_STATUS); + } +} + +void mouse_init() +{ + dbgprintf("[MOUSE] Starting...\n"); + uint8_t _status; //unsigned char + + mouse_wait(1); + outportb(MOUSE_STATUS, 0xA8); + mouse_wait(1); + outportb(MOUSE_STATUS, 0x20); + mouse_wait(0); + _status = inportb(0x60) | 2; + mouse_wait(1); + outportb(MOUSE_STATUS, 0x60); + mouse_wait(1); + outportb(MOUSE_PORT, _status); + mouse_write(0xF6); + mouse_read(); + mouse_write(0xF4); + mouse_read(); + + interrupt_install_handler(12+32, &__mouse_handler); +} \ No newline at end of file diff --git a/graphics/windowserver.c b/graphics/windowserver.c index df2da66..3e1f73b 100644 --- a/graphics/windowserver.c +++ b/graphics/windowserver.c @@ -58,6 +58,7 @@ static int ws_init(struct windowserver* ws) ws->_wm = wm; ws->workspace = 0; + ws->background = palloc(VBE_SIZE()); if(ws->background == NULL){ wm->ops->destroy(wm); @@ -66,7 +67,7 @@ static int ws_init(struct windowserver* ws) } SET_FlAG(ws->flags, WINDOW_SERVER_INITIALIZED); - return ERROR_OK; + return 0; } static int ws_raw_wallpaper(struct windowserver* ws, char* path) @@ -85,7 +86,7 @@ static int ws_raw_wallpaper(struct windowserver* ws, char* path) ws->background[i] = rgb_to_vga(ws->background[i]); } - return ERROR_OK; + return 0; } static int ws_add(struct windowserver* ws, struct window* window) @@ -100,7 +101,7 @@ static int ws_add(struct windowserver* ws, struct window* window) dbgprintf("[WSERVER] Added window %x.\n", window); - return ERROR_OK; + return 0; } static int ws_remove(struct windowserver* ws, struct window* window) @@ -113,7 +114,7 @@ static int ws_remove(struct windowserver* ws, struct window* window) return -ERROR_OPS_CORRUPTED; } - return ERROR_OK; + return 0; } static int ws_fullscreen(struct windowserver* ws, struct window* window) @@ -152,7 +153,7 @@ static int ws_fullscreen(struct windowserver* ws, struct window* window) ws->_is_fullscreen = true; } - return ERROR_OK; + return 0; } static int ws_set_background(struct windowserver* ws, color_t color) @@ -162,7 +163,7 @@ static int ws_set_background(struct windowserver* ws, color_t color) memset(ws->background, color, VBE_SIZE()); - return ERROR_OK; + return 0; } static int ws_set_background_file(struct windowserver* ws, const char* path) @@ -280,7 +281,7 @@ static int __ws_key_event(struct windowserver* ws, unsigned char key) break; } - return ERROR_OK; + return 0; } static int ws_draw(struct windowserver* ws) diff --git a/include/errors.h b/include/errors.h index 1ad9fa8..f97eee1 100644 --- a/include/errors.h +++ b/include/errors.h @@ -4,7 +4,6 @@ #include #include -/* error code from errors.h */ typedef int error_t; enum errors { diff --git a/include/scheduler.h b/include/scheduler.h index 2ebc967..067fca4 100644 --- a/include/scheduler.h +++ b/include/scheduler.h @@ -26,13 +26,13 @@ typedef enum scheduler_flags { /* Scheduler operations */ struct scheduler_ops { - error_t (*prioritize)(struct scheduler* sched, struct pcb* pcb); - error_t (*schedule)(struct scheduler* sched); - error_t (*add)(struct scheduler* sched, struct pcb* pcb); - error_t (*block)(struct scheduler* sched, struct pcb* pcb); - error_t (*sleep)(struct scheduler* sched, int time); - error_t (*exit)(struct scheduler* sched); - error_t (*yield)(struct scheduler* sched); + int (*prioritize)(struct scheduler* sched, struct pcb* pcb); + int (*schedule)(struct scheduler* sched); + int (*add)(struct scheduler* sched, struct pcb* pcb); + int (*block)(struct scheduler* sched, struct pcb* pcb); + int (*sleep)(struct scheduler* sched, int time); + int (*exit)(struct scheduler* sched); + int (*yield)(struct scheduler* sched); struct pcb* (*consume)(struct scheduler* sched); }; diff --git a/include/serial.h b/include/serial.h index d107d5f..3716399 100644 --- a/include/serial.h +++ b/include/serial.h @@ -6,13 +6,13 @@ #include #ifdef KDEBUG_SERIAL -#define dbgprintf(a, ...) serial_printf("\033[33m%s(): \033[37m" a, __func__, ##__VA_ARGS__) +#define dbgprintf(a, ...) serial_printf("%s(): " a, __func__, ##__VA_ARGS__) #else #define dbgprintf(a, ...) #endif // KDEBUG_SERIAL #ifdef KDEBUG_WARNINGS -#define warningf(a, ...) serial_printf("\033[31m%s(): \033[37m" a, __func__, ##__VA_ARGS__) +#define warningf(a, ...) serial_printf("DEBUG: %s(): " a, __func__, ##__VA_ARGS__) #else #define warningf(a, ...) #endif // KDEBUG_WARNINGS diff --git a/kernel/diskdev.c b/kernel/diskdev.c index 65ec8ac..69f61a3 100644 --- a/kernel/diskdev.c +++ b/kernel/diskdev.c @@ -13,7 +13,9 @@ void attach_disk_dev( ){ disk_device.read = read; disk_device.write = write; + disk_device.attached = 1; + disk_device.dev = dev; } diff --git a/kernel/ipc.c b/kernel/ipc.c index d8dacac..35da7c2 100644 --- a/kernel/ipc.c +++ b/kernel/ipc.c @@ -4,14 +4,13 @@ #include #define IPC_MAX_CHANNELS 16 -#define IPC_MAX_SIZE 1024 -#define IPC_VALID_CHANNEL(channel) if(channel < 0 || channel >= IPC_MAX_CHANNELS || channels[channel].rbuf == NULL) {return -1;} +#define IPC_VALID_CHANNEL(channel) if(channel < 0 || channel >= IPC_MAX_CHANNELS) {return -1;} /* handel to channel implementation */ static struct ipc_channel channels[IPC_MAX_CHANNELS] = {0}; -static int __ipc_alloc_channel() { +static int ipc_alloc_channel() { for (int i = 0; i < IPC_MAX_CHANNELS; i++) if (!channels[i].rbuf) return i; @@ -21,12 +20,12 @@ static int __ipc_alloc_channel() { /* userspace interface */ int sys_ipc_open() { - int channel = __ipc_alloc_channel(); + int channel = ipc_alloc_channel(); if (channel < 0) { return -1; } - channels[channel].rbuf = rbuffer_new(IPC_MAX_SIZE); + channels[channel].rbuf = rbuffer_new(1024); return channel; } EXPORT_SYSCALL(SYSCALL_IPC_OPEN, sys_ipc_open); diff --git a/kernel/kernel.c b/kernel/kernel.c index 66cdd7b..d6b0c64 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -110,7 +110,7 @@ void kernel(uint32_t magic) __deprecated kernel_size = _end-_code; /* Serial is used for debuging purposes. */ - init_serial(); + //init_serial(); dbgprintf("INF: %s - %s\n", KERNEL_NAME, KERNEL_VERSION); kernel_boot_printf("Booting OS..."); diff --git a/kernel/kthreads/about.c b/kernel/kthreads/about.c index 6ef233a..ba4e952 100644 --- a/kernel/kthreads/about.c +++ b/kernel/kthreads/about.c @@ -161,57 +161,26 @@ void __kthread_entry about(int argc, char* argv[]) EXPORT_KTHREAD(about); const char* readme_text[] = { - "Welcome to the RetrOS-32", - "kernel readme.\n", - " ", - "Scroll using arrow keys!", - " ", - "Bugs: Yes, there are a lot!", - "Please report them to the", - "github page. Known bugs", - "are hang on boot after", - "Starting OS, occasional", - "hangs and freezes.", - " ", - "Processes can be started", - "via the taskbar at the", - "screen's top or using the", - "command line.", - "Command Line Usage:", - "exec ", - "Binaries are located in /bin.", - "The 'exec' command can start", - "kernel threads or shell", - "commands as threads.", - " ", - "To use the C interpreter,", - "enter 'cc ' in the", - "terminal. Note: The C", - "interpreter is currently", - "under development and may", - "not be fully functional.", - " ", - "Networking: The kernel", - "supports Ethernet, IPv4,", - "ARP, ICMP, UDP, TCP,", - "DHCP and DNS. The kernel", - "will automatically attempt", - "to get an IP address and", - "DNS server from the", - "DHCP server.", - " ", - "A looback interface is", - "also supported.", + "Welcome to the RetrOS-32 kernel readme.\n" + "\n" + "Bugs: Yes, there are a lot! Please report them to the github page.\n" + "Known bugs are hang on boot after Starting OS.\nOccasional hangs and freezes\n" + "Processes can be started via the taskbar at the screen's top or using the command line.\n" + "Command Line Usage: exec \n" + "Binaries are located in /bin.\nThe 'exec' command can start kernel threads or shell commands as threads.\n" + "\n" + "To use the C interpreter, enter 'cc ' in the terminal.\n" + "Note: The C interpreter is currently under development and may not be fully functional.\n" }; -const int num_strings = sizeof(readme_text) / sizeof(readme_text[0]); + void __kthread_entry readme() { - const int width = 250; - const int height = 300; + const int width = 400; + const int height = 400; int from = 0; - int to = 28; + int to = 50; struct window* w = gfx_new_window(width, height, 0); if(w == NULL){ @@ -221,17 +190,13 @@ void __kthread_entry readme() kernel_gfx_set_title("Readme"); - w->ops->move(w, 50, 50); - while (1){ - w->draw->rect(w, 0, 0, width, height, 30); - w->draw->box(w, 10, 10, width-20, height-20,31); + w->draw->rect(w, 0, 0, width, height, 30); - for(int i = from; i < to; i++){ - w->draw->text(w, 12, 12+ (i-from)*10, readme_text[i], 0); - } + w->ops->move(w, 50, 50); - gfx_commit(); + w->draw->text(w, 0, 0, readme_text, 0); + while (1){ struct gfx_event event; int ret = gfx_event_loop(&event, GFX_EVENT_BLOCKING); if(ret == -1) continue; @@ -239,23 +204,6 @@ void __kthread_entry readme() switch (event.event){ case GFX_EVENT_EXIT: return; - case GFX_EVENT_KEYBOARD:{ - switch (event.data){ - case KEY_DOWN: - if(to < num_strings){ - from++; - to++; - } - break; - case KEY_UP: - if(from > 0){ - from--; - to--; - } - break; - } - } - break; default: break; } diff --git a/kernel/kthreads/taskbar.c b/kernel/kthreads/taskbar.c index 94de9c0..c259d95 100644 --- a/kernel/kthreads/taskbar.c +++ b/kernel/kthreads/taskbar.c @@ -44,7 +44,6 @@ static void __callback taskbar_bg_default_color(); static void __callback taskbar_bg_default_color_gray(); static void __callback taskbar_sysinf(); static void __callback taskbar_about(); -static void __callback taskbar_readme(); /* prototype to taskbar thread */ static void __kthread_entry taskbar(void); @@ -178,11 +177,6 @@ struct taskbar_options { .icon = desktop_16, .name = "About", .callback = &taskbar_about - }, - { - .icon = desktop_16, - .name = "Readme", - .callback = &taskbar_readme } } }, @@ -464,9 +458,4 @@ static void __callback taskbar_sysinf() static void __callback taskbar_about() { start("about", 0, NULL); -} - -static void __callback taskbar_readme() -{ - start("readme", 0, NULL); } \ No newline at end of file diff --git a/kernel/pci.c b/kernel/pci.c index a8f244f..b7272d2 100644 --- a/kernel/pci.c +++ b/kernel/pci.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -78,15 +79,6 @@ const char* pci_get_device_name(struct pci_device* dev) default: break; } - break; - case 0x1AF4: - switch (dev->device){ - case 0x1000: - return "Virtio Network Device"; - default: - break; - } - break; default: break; } @@ -106,9 +98,6 @@ const char* pci_get_vendor_name(struct pci_device* dev) case 0x10DE: return "NVIDIA Corporation"; break; - case 0x1AF4: - return "Red Hat, Inc."; - break; default: break; } @@ -227,29 +216,15 @@ void init_pci() } i++; } + } } } dbgprintf("[PCI] Peripheral Component Interconnect devices probed.\n"); } -void lspci(int argc, char** argv) +void lspci() { - if(argc > 1){ - if(strcmp(argv[1], "-v") == 0){ - for (int i = 0; i < _pci_devices_size; i++){ - twritef("Vendor: 0x%x Device:\n . 0x%x - %s - %s - %s\n", - _pci_devices[i].vendor, - _pci_devices[i].device, - _pci_devices[i].class < 0x11 ? pci_classes[_pci_devices[i].class] : pci_classes[0], - pci_get_vendor_name(&_pci_devices[i]), - pci_get_device_name(&_pci_devices[i]) - ); - } - return; - } - } - for (int i = 0; i < _pci_devices_size; i++){ twritef("V: 0x%x D: 0x%x - %s\n", _pci_devices[i].vendor, diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 5f9cbfc..64c01d9 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -9,15 +9,15 @@ #include /* exposed operator functions */ -static error_t sched_prioritize(struct scheduler* sched, struct pcb* pcb); -static error_t sched_default(struct scheduler* sched); -static error_t sched_add(struct scheduler* sched, struct pcb* pcb); -static error_t sched_block(struct scheduler* sched, struct pcb* pcb); -static error_t sched_sleep(struct scheduler* sched, int time); +static int sched_prioritize(struct scheduler* sched, struct pcb* pcb); +static int sched_default(struct scheduler* sched); +static int sched_add(struct scheduler* sched, struct pcb* pcb); +static int sched_block(struct scheduler* sched, struct pcb* pcb); +static int sched_sleep(struct scheduler* sched, int time); static struct pcb* sched_consume(struct scheduler* sched); -static error_t sched_exit(struct scheduler* sched); +static int sched_exit(struct scheduler* sched); -static error_t sched_round_robin(struct scheduler* sched); +static int sched_round_robin(struct scheduler* sched); /* Default scheduler operations */ static struct scheduler_ops sched_default_ops = { @@ -81,7 +81,7 @@ error_t sched_init_default(struct scheduler* sched, sched_flag_t flags) * @param time The time to sleep for * @return int 0 on success, error code on failure */ -static error_t sched_sleep(struct scheduler* sched, int time) +static int sched_sleep(struct scheduler* sched, int time) { ERR_ON_NULL(sched); SCHED_VALIDATE(sched); @@ -103,7 +103,7 @@ static error_t sched_sleep(struct scheduler* sched, int time) * @param pcb The pcb to prioritize * @return int 0 on success, error code on failure */ -static error_t sched_prioritize(struct scheduler* sched, struct pcb* pcb) +static int sched_prioritize(struct scheduler* sched, struct pcb* pcb) { ERR_ON_NULL(sched); ERR_ON_NULL(pcb); @@ -139,7 +139,7 @@ static struct pcb* sched_consume(struct scheduler* sched) * @param pcb The pcb to block * @return int 0 on success, error code on failure */ -static error_t sched_block(struct scheduler* sched, struct pcb* pcb) +static int sched_block(struct scheduler* sched, struct pcb* pcb) { ERR_ON_NULL(sched); ERR_ON_NULL(pcb); @@ -168,7 +168,7 @@ static error_t sched_block(struct scheduler* sched, struct pcb* pcb) * @param sched The scheduler to schedule on * @return int 0 on success, error code on failure */ -static error_t sched_round_robin(struct scheduler* sched) +static int sched_round_robin(struct scheduler* sched) { struct pcb* next; @@ -265,7 +265,7 @@ static error_t sched_round_robin(struct scheduler* sched) } /* Default round robin scheduler behavior */ -static error_t sched_default(struct scheduler* sched) +static int sched_default(struct scheduler* sched) { ERR_ON_NULL(sched); SCHED_VALIDATE(sched); @@ -301,7 +301,7 @@ static error_t sched_default(struct scheduler* sched) * @param sched The scheduler to clean up on * @return int 0 on success, error code on failure */ -static error_t sched_exit(struct scheduler* sched) +static int sched_exit(struct scheduler* sched) { ERR_ON_NULL(sched); SCHED_VALIDATE(sched); @@ -333,7 +333,7 @@ static error_t sched_exit(struct scheduler* sched) * @param pcb The pcb to add * @return int 0 on success, error code on failure */ -static error_t sched_add(struct scheduler* sched, struct pcb* pcb) +static int sched_add(struct scheduler* sched, struct pcb* pcb) { SCHED_VALIDATE(sched); diff --git a/rootfs/symbols.map b/rootfs/symbols.map index a22f288..5bde4d5 100644 --- a/rootfs/symbols.map +++ b/rootfs/symbols.map @@ -8,846 +8,843 @@ 00010058 gdt_end 00010058 kernel_boot_printf 000100b7 init_kctors -00010103 kernel -00010549 kernel_get_context -0001054f hexdump -0001078b __terminal_set_ops -00010854 __terminal_scanf -0001085a __terminal_write -000108a4 __terminal_getchar_graphics -000108ed __terminal_scan_graphics -000109cb __terminal_reset -00010a0f __terminal_detach -00010a50 __terminal_attach -00010a97 __terminal_commit_graphics -00010b6d __terminal_remove_line -00010bad __terminal_putchar_graphics -00010c72 __terminal_writef -00010f19 __terminal_getchar_textmode -00010f41 __terminal_scan_textmode -00011001 __terminal_commit_textmode -000110b9 __terminal_putchar_textmode -00011105 scan -0001113c terminal_set_color -0001113d terminal_attach -0001115a terminal_commit -00011177 terminal_putchar -00011178 terminal_create -00011294 terminal_destroy -000112cc tlb_flush_addr -000112d4 load_page_directory -000112e4 enable_paging -000112f6 pcb_save_context -00011322 pcb_restore_context -0001134b _start_pcb -0001137d _start_pcb_skip -00011398 __ksymbol_lspci -000113b2 pci_get_class_name -000113c5 pci_get_device_name -00011436 pci_get_vendor_name -00011484 lspci -000115cd pci_get_devices -000115d3 pci_read_word -0001162d pci_write_dword -0001167c pci_enable_device_busmaster -000116d1 pci_register_device -00011752 init_pci -00011903 pci_find_device -00011999 virtual_read -000119c4 virtual_write -000119ef virtual_disk_attach -00011a0e wm_default_changes -00011ab6 wm_default_workspace -00011b18 wm_default_draw -00011bb6 wm_default_add -00011c5d init_windowmanager -00011da7 wm_default_mouse_event -00011fcd wm_default_push_back -000120bf wm_default_push_front -000121ae wm_default_remove -000122bf wm_destroy -0001239d wm_new -00012404 screen_set_cursor -00012464 scrcolor_set -00012478 scrput -0001249e scrwrite -000124e7 scr_clear -00012539 scr_scroll -00012581 scrprintf -000127c5 strlen -000127e7 strcpy -0001281b strncmp -00012856 strcmp -00012896 memcmp -000128d1 parse_arguments -000129b4 strchr -000129e3 getopt -00012af3 memcpy -00012b60 strtok -00012c18 xmemcpy -00012c9f memset -00012d1f isdigit -00012d33 isspace -00012d42 tolower -00012d56 isxdigit -00012d7a htoi -00012e1e atoi -00012eae itoa -00012f54 itohex -00012fd0 rdtsc -00012fd3 rand -00012fef general_protection_fault -0001305c interrupt_get_count -0001306b print_page_fault_info -00013146 page_fault_interrupt -000131ea interrupt_install_handler -000131fc load_data_segments -00013208 isr_handler -000132f6 init_interrupts -0001346f idt_flush -00013477 isr0 -00013484 isr1 -00013491 isr2 -0001349e isr3 -000134ab isr4 -000134b8 isr5 -000134c5 isr6 -000134d2 isr7 -000134df isr8 -000134ec isr9 -000134f9 isr10 -00013506 isr11 -00013513 isr12 -00013520 isr13 -0001352d isr14 -0001353a isr15 -00013547 isr16 -00013554 isr17 -00013561 isr18 -0001356e isr19 -0001357b isr20 -00013588 isr21 -00013595 isr22 -000135a2 isr23 -000135af isr24 -000135bc isr25 -000135c9 isr26 -000135d6 isr27 -000135e3 isr28 -000135f0 isr29 -000135fd isr30 -0001360a isr31 -00013617 isr32 -00013624 isr33 -00013631 isr34 -0001363e isr35 -00013648 isr36 -00013652 isr37 -0001365c isr38 -00013666 isr39 -00013670 isr40 -0001367a isr41 -00013684 isr42 -0001368e isr43 -00013698 isr44 -000136a2 isr45 -000136ac isr46 -000136b6 isr47 -000136c0 isr_entry -000136db syscall_return_value -000136df _syscall_entry -0001371c page_fault_save -00013720 page_fault_error -00013724 _page_fault_entry -00013756 timer_callback -0001378b timer_get_tick -00013791 time_get_difference -000137d4 init_pit -00013838 gdt_set_segment -00013881 init_gdt -0001398f rc -00013b75 __ksymbol_rc -00013b8f __ksymbol_as -00013ba9 __ksymbol_cc -00013bc3 as -00013f6f cc -00013fca __cc -000142b1 vm_print -0001448e eval -00014920 vm_setup -00014961 vm_init -000149bc vm_free -000149eb vm_setup_stack -00014a47 lex_get_error -00014a54 next -00014f5f match -00014fab expression -00016294 statement -0001649d function_parameter -0001665b function_body -00016866 function_declaration -000168ef enum_declaration -000169f6 global_declaration -00016c1f lex_init -00016cba program -00016d5b find_mp_floating_ptr -00016d97 smp_parse -00016edc kb_get_char -00016f28 kb_add_char -00016f63 kb_callback -00017190 init_keyboard -00017207 pcb_await -00017231 __pcb_get_free -000172ef __add_systemcall_pcb_await -00017306 __pcb_free -00017355 __pcb_init_kernel_stack -000173b6 __pcb_init_process -0001747b init_pcbs -000174d6 pcb_total_usage -000174ff pcb_get_info -00017629 pcb_kill -00017646 Genesis -00017648 idletask -00017663 pcb_get_by_pid -00017674 pcb_get_by_name -000176cd pcb_dbg_print -00017747 pcb_cleanup_routine -00017918 pcb_create_thread -000179cb pcb_create_process -00017c12 pcb_create_kthread -00017e9f start_pcb -00017ed7 __pcb_queue_peek -00017f16 __pcb_queue_pop -00017f72 __pcb_queue_remove -00017fe4 __pcb_queue_add -0001805d __pcb_queue_push -000180f6 pcb_new_queue -00018127 memory_map_init -000181ee memory_map_get -000181f4 free -00018259 malloc -000182ee calloc -00018321 get_mem_info -00018379 init_memory -0001840b vmem_free -0001847b vmem_alloc -000184e8 vmem_free_page_region -0001864e vmem_page_region_alloc -00018689 vmem_create_page_region -000187cd vmem_free_allocations -000188fc vmem_continious_allocation_map -00018902 vmem_free_allocation -00018903 vmem_stack_free -000189b4 vmem_stack_alloc -00018d39 vmem_dump_heap -00018dce vmem_init_process_thread -00018ebf vmem_init_process -000191ed vmem_cleanup_process_thead -00019264 vmem_cleanup_process -00019452 vmem_init_kernel -00019613 vmem_allocator_create -00019677 vmem_map_driver_region -000196f5 vmem_total_usage -00019708 vmem_init -0001983a kalloc -000199cf kcalloc -00019a01 kfree -00019a97 palloc -00019ad9 pmemory_used -00019af5 kmemory_used -00019afb kmemory_total -00019b07 kmem_init -00019ba4 e1000_receive -00019c7f e1000_transmit -00019d41 e1000_callback -00019d68 _e1000_tx_init -00019e0c _e1000_rx_init -00019ea6 e1000_attach -0001a0d6 display_get_info -0001a13f kenv_init -0001a156 kenv_set -0001a18b config_list -0001a258 config_load -0001a643 config_get_value -0001a6fe spin_lock -0001a71e spin_unlock -0001a72c mutex_init -0001a749 acquire -0001a7e6 release -0001a888 kthread_entry -0001a8de kthread_list -0001a943 register_kthread -0001aa1c start -0001aabe ata_primary -0001aabf ata_secondary -0001aac0 ata_wait -0001ab3a ata_write -0001acb1 ata_read -0001ae41 ata_ide_init -0001b011 set_bitmap -0001b033 unset_bitmap -0001b057 get_bitmap -0001b079 get_bitmap_size -0001b08d create_bitmap -0001b0c1 destroy_bitmap -0001b0d4 bitmap_unset_continous -0001b10e bitmap_get_continous -0001b1aa get_free_bitmap -0001b1ff __rtc_check_in_progress -0001b221 __rtc_get_register -0001b241 get_current_time -0001b38c get_time -0001b3b6 init_tss -0001b3e4 exec_cmd -0001b4e8 __ksymbol_exec_cmd -0001b502 align_to_pointer_size -0001b510 calculate_size_unit -0001b572 kernel_panic -0001b590 kref_init -0001b5aa kref_get -0001b5d2 kref_put -0001b5fa csprintf -0001b7fb script_parse -0001b8ce login -0001bb0c __register_kthread_login -0001bb26 help -0001bd64 clear -0001bd83 __ksymbol_new -0001bd9d __ksymbol_list -0001bdb7 __ksymbol_color -0001bdd1 __ksymbol_about -0001bdeb __ksymbol_help -0001be05 __ksymbol_view -0001be1f __ksymbol_file -0001be39 __ksymbol_tcp -0001be53 __ksymbol_conf -0001be6d __ksymbol_clear -0001be87 new -0001bfbf list -0001c0bc file -0001c27b color -0001c319 about -0001c354 view -0001c560 tcp -0001c831 __tcp_reader -0001c94d conf -0001cbca attach_disk_dev -0001cbee disk_attached -0001cbf6 disk_name -0001cbff disk_device_get -0001cc05 disk_size -0001cc21 write_block -0001cc5e write_block_offset -0001cca1 read_block -0001ccde read_block_offset -0001cd48 sched_consume -0001cd89 sched_add -0001cde3 sched_prioritize -0001ce98 sched_round_robin -0001d079 sched_exit -0001d132 sched_block -0001d250 sched_default -0001d324 sched_sleep -0001d3ca sched_init_default -0001d44b get_scheduler -0001d451 kernel_sleep -0001d46c kernel_yield -0001d4af kernel_exit -0001d4e1 block -0001d50a unblock -0001d50b work_queue_add -0001d5f3 init_worker -0001d60b worker_thread -0001d6aa __ring_buffer_add -0001d752 __ring_buffer_read -0001d85c rbuffer_new -0001d8c5 rbuffer_free -0001d8e7 error_get_string -0001d923 kclock -0001de03 __register_kthread_kclock -0001de1d tar_extract -0001e064 __ksymbol_tar -0001e07e tar_list -0001e182 tar -0001e3f6 rgb_to_vga -0001e406 rgb_to_components -0001e42d color_distance_squared -0001e498 rgb_init_color_table -0001e529 iface_loopback_write -0001e5ea iface_loopback_interrupt -0001e601 iface_loopback_read -0001e6a4 net_init_loopback -0001e6bb serial_put -0001e6fb serial_write -0001e73d serial_printf -0001e8dd init_serial -0001e9a3 inportb -0001e9ac inportw -0001e9b6 inportl -0001e9bf outportb -0001e9cd outportw -0001e9dc outportl -0001e9e9 sys_create_thread -0001ea07 __add_systemcall_sys_create_thread -0001ea12 add_system_call -0001ea52 system_call -0001eabd hashmap_put -0001eb24 hashmap_get -0001eba8 hashmap_add -0001ec32 hashmap_free -0001ec33 reset_vga_palette -0001ec79 vga_set_palette -0001ed64 b8to16 -0001ed74 vesa_put_pixel -0001ed9e vesa_put_box -0001ee19 vesa_put_block -0001ee94 vesa_put_char -0001ef0f vesa_put_char16 -0001efa2 vesa_put_icon16 -0001f01b vesa_write -0001f05a vesa_write_str -0001f088 vesa_fill -0001f10a vesa_fillrect -0001f17c vesa_inner_box -0001f284 vesa_printf -0001f4f1 ksyms_init -0001f718 ksyms_add_symbol -0001f7cc __ksymbol_backtrace -0001f7e6 ksyms_list -0001f846 ksyms_resolve_symbol -0001f8f9 __backtrace_from -0001fa16 backtrace -0001fa27 ws_fullscreen -0001fba1 ws_remove -0001fc51 ws_add -0001fd3c ws_destroy -0001fde2 ws_draw -0002008f ws_raw_wallpaper -00020175 ws_set_background_file -00020452 ws_init -00020535 ws_set_background -000205e0 ws_new -0002066d encode_run_length -000206ea decode_run_length -00020755 __mouse_handler -0002086c mouse_wait -000208b4 mouse_write -000208f6 mouse_get_event -00020937 mouse_init -00020a1c sys_ipc_open -00020a6a __add_systemcall_sys_ipc_open -00020a81 __add_systemcall_sys_ipc_close -00020a98 __add_systemcall_sys_ipc_send -00020aaf __add_systemcall_sys_ipc_receive -00020ac6 sys_ipc_close -00020b0f sys_ipc_send -00020b76 sys_ipc_receive -00020bdc sysinf -0002192e __register_kthread_sysinf -00021948 echo -00021981 res -000219c0 ifconfig -000219cd __ksymbol_ifconfig -000219e7 __ksymbol_ps -00021a01 __ksymbol_tree -00021a1b __ksymbol_fat16 -00021a35 __ksymbol_xxd -00021a4f __ksymbol_sh -00021a69 __ksymbol_ed -00021a83 __ksymbol_exec -00021a9d __ksymbol_ths -00021ab7 __ksymbol_dns -00021ad1 __ksymbol_th -00021aeb __ksymbol_kill -00021b05 __ksymbol_echo -00021b1f __ksymbol_fdisk -00021b39 __ksymbol_meminfo -00021b53 __ksymbol_res -00021b6d __ksymbol_bg -00021b87 __ksymbol_exit -00021ba1 __ksymbol_socks -00021bbb __ksymbol_reset -00021bd5 exit -00021c07 ps -00021e61 print_pcb_tree -00021f5a tree -00021f9a fat16 -00021fc2 xxd -000220b1 sh -000221ab ed -000221f6 exec -00022352 ths -000223ba dns -0002242a th -00022448 kill -00022466 fdisk -000225df meminfo -000227ae bg -0002282b socks -00022abb __register_kthread_shell -00022ad5 __register_kthread_textshell -00022aef shell_clear -00022b30 reset_shell -00022b9f reset -00022bef shell_put -00022dc8 shell -00023010 cleanup_function -00023037 testfn -0002306b draw_box -00023150 __textshell_reset_box -000231e0 textshell -0002344c __net_find_interface -000234ac net_drop_packet -000234cd net_handle_recieve -000235f4 net_get_interfaces -000235fa net_configure_iface -0002364c net_incoming_packet -000236fd net_get_iface -00023773 net_iface_up -0002379a net_iface_down -000237c1 net_list_ifaces -000238d1 net_register_interface -00023902 net_send_skb -0002398a net_get_info -000239b1 networking_main -00023b8d __dhcp_add_option -00023bfd __dhcp_send_discovery -00023d3f __dhcp_send_request -00023ebc dhcp_get_state -00023ec4 dhcp_get_dns -00023eca dhcp_get_ip -00023edf dhcp_get_gw -00023ef4 dhcpd -00024173 udp_server -000241fe tcp_server -00024372 __net_terminal_writef -000243d7 __register_kthread_tcp_server -000243f1 __register_kthread_udp_server -0002440b __register_kthread_udptest -00024425 udptest -000244b0 tcpd -00024594 logd -000245ff __register_kthread_logd -00024619 logd_attach_by_pid -0002465d taskbar_readme -00024676 taskbar_about -0002468f taskbar_clock -000246a8 taskbar_sysinf -000246c1 taskbar_bg_retro -000246f8 taskbar_bg_lotr2 -0002470d taskbar_bg_lotr -00024722 taskbar_bg_default_color_gray -00024734 taskbar_bg_default_color -00024746 taskbar_wolfstein -00024781 taskbar_bg_graph -000247bc taskbar_bg_calc -000247f7 taskbar_colors -00024832 taskbar_cube -0002486d taskbar_editor -000248a8 taskbar_finder -000248e3 taskbar_terminal -0002492c __register_kthread_taskbar -00024946 taskbar_hdr_opt_event -000249d0 taskbar -00024f87 about -00025152 __register_kthread_about -0002516c __register_kthread_readme -00025186 readme -000252e8 gfx_default_hover -00025407 gfx_destory_window -00025494 gfx_window_resize -0002553d gfx_window_maximize -000255b6 gfx_default_mouse_up -00025684 gfx_default_mouse_down -00025746 gfx_default_click -0002596f gfx_draw_window -0002675b gfx_window_set_resizable -0002676e kernel_gfx_window_border_color -00026797 gfx_new_window -000269eb gfx_point_in_rectangle -00026a18 gfx_draw_component -00026a5a gfx_composition_remove_window -00026a84 gfx_composition_add_window -00026acb gfx_set_background_color -00026b1c gfx_raw_background -00026b69 gfx_decode_background_image -00026bb6 gfx_set_taskbar -00026c09 gfx_compositor_main -00026c7d kernel_gfx_draw_circle_helper -00026f29 gfx_get_window_width -00026f3c gfx_get_window_height -00026f4f gfx_push_event -0002700b gfx_put_icon16 -000270ff gfx_put_icon32 -000271f3 gfx_event_loop -0002730a kernel_gfx_draw_rectangle -00027404 kernel_gfx_draw_contoured_box -000274a4 kernel_gfx_draw_pixel -00027542 kernel_gfx_draw_bitmap -00027660 kernel_gfx_draw_char -00027760 kernel_gfx_set_position -0002777c gfx_commit -00027793 kernel_gfx_draw_text -0002781d gfx_button_ext -00027942 gfx_button -00027960 kernel_gfx_set_title -000279c8 kernel_gfx_set_header -00027a30 kernel_gfx_draw_line -00027bcb kernel_gfx_draw_circle -00027c4a kernel_gfx_draw_section -00027c50 kernel_gfx_draw_format_text -00027fa2 gfx_syscall_hook -00028151 gfx_total_themes -00028157 kernel_gfx_current_theme -0002815d kernel_gfx_update_theme -0002822b kernel_gfx_default_theme -00028231 kernel_gfx_set_theme -00028256 kernel_gfx_get_theme -00028271 gfx_new_ctx -000282cd gfx_init_framebuffer -00028439 netdev_attach_driver -000284e2 is_netdev_attached -000284f0 netdev_transmit -0002850b netdev_recieve -00028534 net_ethernet_add_header -000285c8 net_ethernet_parse -0002863c __skb_queue_remove -0002867a __skb_queue_add -000286ca skb_free_queue -00028702 skb_new_queue -00028769 skb_free -000287a4 skb_new -0002880f skb_consume -00028840 __net_arp_send -00028900 net_init_arp -0002894c net_arp_add_entry -000289db net_arp_find_entry -00028a26 net_arp_respond -00028a9b net_net_arp_request -00028b21 arp_parse -00028bcb net_ipv4_print -00028bd1 net_ipv4_add_header -00028d08 net_is_ipv4 -00028d45 net_ipv4_parse -00028e72 ntohl -00028e9e htonl -00028eb1 ntohs -00028ebe htons -00028ecb checksum -00028f22 transport_checksum -00028f77 ip_to_int -00029015 net_icmp_handle -000290da net_icmp_response -000290e0 net_icmp_request -000291a3 ping -000291fc net_icmp_parse -0002926c net_udp_send -000293a1 net_udp_parse -000294c9 socket_type_to_str -000294d8 socket_domain_to_str -000294e7 socket_protocol_to_str -000294f6 net_sock_bind -00029541 net_get_sockets -0002955d sock_get -0002957e get_total_sockets -00029584 net_sock_is_established -000295c8 net_sock_awaiting_ack -0002960c net_sock_data_ready -00029665 net_sock_read -00029765 net_sock_add_data -000299c5 sock_find_listen_tcp -00029a09 net_sock_find_tcp -00029bfb net_prepare_tcp_sock -00029c87 net_sock_accept -00029c9a net_socket_find_udp -00029d05 kernel_sock_shutdown -00029d32 kernel_sock_cleanup -00029db8 kernel_sock_close -00029dec kernel_socket_create -00029f6d net_init_sockets -00029fb3 gethostname -0002a4cd __add_systemcall_gethostname -0002a4e4 net_init_dns -0002a513 route -0002a560 tcb_init -0002a57e tcb_new -0002a6ea tcp_state_to_str -0002a703 tcp_new_connection -0002a78b tcp_free_connection -0002a7ae tcp_is_listening -0002a7c4 tcp_set_listening -0002a824 tcp_calculate_checksum -0002a8e8 __tcp_send -0002aa04 tcp_send_segment -0002ab47 tcp_accept_connection -0002ac87 tcp_send_ack -0002adbd tcp_read -0002adc3 tcp_recv_segment -0002adc9 tcp_connect -0002ae6c tcp_send_syn -0002ae72 tcp_recv_ack -0002aef5 tcp_recv_fin -0002aefb tcp_recv_syn -0002b02d tcp_send_fin -0002b0f9 tcp_close_connection -0002b138 tcp_parse -0002b5d1 kernel_bind -0002b606 kernel_recvfrom -0002b60c kernel_recv -0002b67e kernel_recv_timeout -0002b6a4 kernel_connect -0002b7a8 kernel_sendto -0002b862 kernel_accept -0002b8c5 kernel_listen -0002b8ed kernel_send -0002b973 sys_kernel_bind -0002b9a5 __add_systemcall_sys_kernel_bind -0002b9bc __add_systemcall_sys_kernel_accept -0002b9d3 __add_systemcall_sys_kernel_connect -0002b9ea __add_systemcall_sys_kernel_listen -0002ba01 __add_systemcall_sys_kernel_recv -0002ba18 __add_systemcall_sys_kernel_recvfrom -0002ba2f __add_systemcall_sys_kernel_recv_timeout -0002ba46 __add_systemcall_sys_kernel_send -0002ba5d __add_systemcall_sys_kernel_sendto -0002ba74 __add_systemcall_sys_socket_create -0002ba8b __add_systemcall_sys_kernel_sock_close -0002baa2 sys_kernel_accept -0002bae2 sys_kernel_connect -0002bb14 sys_kernel_listen -0002bb43 sys_kernel_recv -0002bb7b sys_kernel_recvfrom -0002bbbb sys_kernel_recv_timeout -0002bbf9 sys_kernel_send -0002bc31 sys_kernel_sendto -0002bc71 sys_socket_create -0002bc98 sys_kernel_sock_close -0002bcd9 __iface_send -0002bd08 __iface_recieve -0002bd37 __iface_assign -0002bd4a __iface_detach -0002bd5e __iface_set_gateway -0002bd71 __iface_set_netmask -0002bd84 __iface_configure -0002bdd4 __iface_attach -0002bdf9 net_interface_create -0002be31 net_register_netdev -0002bf49 net_interface_destroy -0002bf5e __default_restart -0002bf64 __default_stop -0002bfc9 __default_start -0002c043 nm_new -0002c0cc nm_free -0002c111 net_firewall_create -0002c134 fs_file2fd -0002c19b fs_alloc_file -0002c1e6 fs_free_file -0002c240 fs_register -0002c30f fs_init -0002c315 fs_unregister -0002c378 fs_get -0002c37e fs_close -0002c3f0 fs_open -0002c46a fs_seek -0002c4e7 fs_read -0002c5fc fs_load_from_file -0002c688 fs_write -0002c743 fat16_rmdir -0002c749 fat16_stat -0002c74f fat16_close -0002c7b9 fat16_rename -0002c84e fat16_mkdir -0002c933 fat16_remove -0002c9a6 fat16_open -0002caf0 fat16_read -0002cc54 fat16_write -0002cd82 fat16_list -0002d04a fat16_init -0002d0fe path_next_iter -0002d16d inode_from_path_recursise -0002d1eb inode_from_path -0002d2a9 ext_get_root -0002d2b2 ext_get_current_dir -0002d2bf ext_get_size -0002d2c5 ext_get_inodes -0002d2cb ext_get_blocks -0002d2d1 ext_sync -0002d344 ext_create -0002d42f ext_read -0002d4aa ext_seek -0002d4f1 ext_write -0002d55d ext_close -0002d5bf ext_open_from_directory -0002d6c5 ext_open -0002d77c ext_size -0002d7a5 change_directory -0002d80b ext_create_directory -0002d9a5 ext_create_file_system -0002dc72 init_ext -0002de0e listdir -0002df31 __inode_sync -0002df94 __inode_cache_insert -0002e08a __inode_load -0002e0fe inodes_sync -0002e139 inode_get -0002e196 inode_read -0002e37e inode_write -0002e5dc alloc_inode -0002e695 mkdir -0002e73a sync -0002e76c mkfs -0002e779 fat16_read_data_from_cluster -0002e7c7 fat16_read_data -0002e8a8 fat16_find_cluster_by_offset -0002e923 fat16_write_data_to_cluster_with_offset -0002e95e fat16_print_cluster_chain -0002e98c fat16_write_data_to_cluster -0002e9bf fat16_write_data -0002eadb get_fat_start_block -0002eae3 get_root_directory_start_block -0002eaf2 get_data_start_block -0002eb04 fat16_get_fat_entry -0002eb1f fat16_set_fat_entry -0002eb5f fat16_sync_fat_table -0002ebd7 fat16_allocate_cluster -0002ebef fat16_free_cluster -0002ec04 fat16_get_free_cluster -0002ec59 fat16_sync_directory_entry -0002ecdb fat16_read_entry -0002ed88 fat16_find_entry -0002eec3 fat16_rename_entry -0002ef34 fat16_free_clusters -0002ef7b fat16_delete_entry -0002efe2 fat16_add_entry -0002f149 fat16_used_blocks -0002f182 fat16_to_upper -0002f1ae fat16_name_compare -0002f2d3 sstrtok -0002f394 fat16_directory_entry_debug -0002f464 fat16_get_directory_entry -0002f65c fat16_create_directory -0002f761 fat16_read_file -0002f7b2 fat16_create_file -0002f830 fat16_create_empty_file -0002f8f0 fat16_directory_entries -0002f9d6 fat16_mbr_clear -0002fa7f fat16_mbr_add_entry -0002fb70 fat16_print_root_directory_entries -0002fb88 fat16_change_directory -0002fc10 fat16_bootblock_info -0002fd8d fat16_set_time -0002fdc1 fat16_set_date -0002fdf9 fat16_load -0002ff78 fat16_format -0003022d mbr_partition_type_string -000302b0 mbr_partitions_parse -00030379 mbr_get -0003037f mbr_partition_load -0003039d __ksymbol_snakegame -000303b7 init_game -00030405 draw -00030461 get_input -0003047e update -00030605 game_loop -0003062b snakegame -00030674 _code_end +00010109 kernel +0001054e kernel_get_context +00010558 hexdump +00010796 __terminal_set_ops +0001085f __terminal_scanf +00010865 __terminal_write +000108af __terminal_getchar_graphics +000108f8 __terminal_scan_graphics +000109d6 __terminal_reset +00010a1a __terminal_detach +00010a5b __terminal_attach +00010aa2 __terminal_commit_graphics +00010b78 __terminal_remove_line +00010bb8 __terminal_putchar_graphics +00010c7a __terminal_writef +00010f21 __terminal_getchar_textmode +00010f49 __terminal_scan_textmode +00011009 __terminal_commit_textmode +000110c1 __terminal_putchar_textmode +0001110d scan +00011144 terminal_set_color +00011145 terminal_attach +00011162 terminal_commit +0001117f terminal_putchar +00011180 terminal_create +0001129c terminal_destroy +000112d4 tlb_flush_addr +000112dc load_page_directory +000112ec enable_paging +000112fe pcb_save_context +0001132a pcb_restore_context +00011353 _start_pcb +00011385 _start_pcb_skip +000113a0 lspci +00011432 __ksymbol_lspci +00011450 pci_get_class_name +00011467 pci_get_device_name +000114c1 pci_get_vendor_name +000114fb pci_get_devices +00011505 pci_read_word +00011562 pci_write_dword +000115b5 pci_enable_device_busmaster +0001160e pci_register_device +00011693 init_pci +00011857 pci_find_device +000118f1 virtual_read +00011920 virtual_write +0001194f virtual_disk_attach +00011972 wm_default_changes +00011a1e wm_default_workspace +00011a84 wm_default_draw +00011b26 wm_default_add +00011bd1 init_windowmanager +00011d1d wm_default_mouse_event +00011f3b wm_default_push_back +00012031 wm_default_push_front +00012124 wm_default_remove +00012239 wm_destroy +0001231b wm_new +00012386 screen_set_cursor +000123e6 scrcolor_set +000123fe scrput +0001242a scrwrite +00012477 scr_clear +000124cd scr_scroll +00012519 scrprintf +00012799 strlen +000127bf strcpy +000127f5 strncmp +00012832 strcmp +00012876 memcmp +000128b3 parse_arguments +0001299c strchr +000129cf getopt +00012b1a memcpy +00012b8b strtok +00012c47 xmemcpy +00012cd0 memset +00012d4e isdigit +00012d66 isspace +00012d79 tolower +00012d91 isxdigit +00012db9 htoi +00012e61 atoi +00012ef3 itoa +00012fa3 itohex +00013023 rdtsc +0001302a rand +0001304a general_protection_fault +000130bb interrupt_get_count +000130ce print_page_fault_info +000131a9 page_fault_interrupt +00013251 interrupt_install_handler +00013267 load_data_segments +00013277 isr_handler +00013369 init_interrupts +000134e6 idt_flush +000134ee isr0 +000134fb isr1 +00013508 isr2 +00013515 isr3 +00013522 isr4 +0001352f isr5 +0001353c isr6 +00013549 isr7 +00013556 isr8 +00013563 isr9 +00013570 isr10 +0001357d isr11 +0001358a isr12 +00013597 isr13 +000135a4 isr14 +000135b1 isr15 +000135be isr16 +000135cb isr17 +000135d8 isr18 +000135e5 isr19 +000135f2 isr20 +000135ff isr21 +0001360c isr22 +00013619 isr23 +00013626 isr24 +00013633 isr25 +00013640 isr26 +0001364d isr27 +0001365a isr28 +00013667 isr29 +00013674 isr30 +00013681 isr31 +0001368e isr32 +0001369b isr33 +000136a8 isr34 +000136b5 isr35 +000136bf isr36 +000136c9 isr37 +000136d3 isr38 +000136dd isr39 +000136e7 isr40 +000136f1 isr41 +000136fb isr42 +00013705 isr43 +0001370f isr44 +00013719 isr45 +00013723 isr46 +0001372d isr47 +00013737 isr_entry +00013752 syscall_return_value +00013756 _syscall_entry +00013793 page_fault_save +00013797 page_fault_error +0001379b _page_fault_entry +000137cd timer_callback +00013806 timer_get_tick +00013810 time_get_difference +00013855 init_pit +000138bd gdt_set_segment +00013908 init_gdt +00013a1a rc +00013c00 __ksymbol_rc +00013c1a __ksymbol_as +00013c34 __ksymbol_cc +00013c4e as +00013ffa cc +00014055 __cc +0001433c vm_print +0001451d eval +000149b4 vm_setup +000149f9 vm_init +00014a58 vm_free +00014a8b vm_setup_stack +00014ae9 lex_get_error +00014af6 next +00014ff7 match +00015043 expression +0001630f statement +00016518 function_parameter +000166d6 function_body +000168e1 function_declaration +0001696a enum_declaration +00016a71 global_declaration +00016c9a lex_init +00016d35 program +00016dd6 find_mp_floating_ptr +00016e16 smp_parse +00016f60 kb_get_char +00016fae kb_add_char +00016fed kb_callback +0001721e init_keyboard +00017299 pcb_await +000172c7 __pcb_get_free +0001738d __add_systemcall_pcb_await +000173a8 __pcb_free +000173f7 __pcb_init_kernel_stack +00017458 __pcb_init_process +0001751d init_pcbs +0001757c pcb_total_usage +0001759d pcb_get_info +000176c9 pcb_kill +000176ea Genesis +000176f0 idletask +0001770f pcb_get_by_pid +00017724 pcb_get_by_name +00017781 pcb_dbg_print +000177ff pcb_cleanup_routine +000179d9 pcb_create_thread +00017a90 pcb_create_process +00017cdc pcb_create_kthread +00017f7d start_pcb +00017fb9 __pcb_queue_peek +00017ffc __pcb_queue_pop +0001805c __pcb_queue_remove +000180d2 __pcb_queue_add +0001814f __pcb_queue_push +000181ec pcb_new_queue +00018221 memory_map_init +000182ed memory_map_get +000182f7 free +00018360 malloc +000183f9 calloc +00018430 get_mem_info +0001848c init_memory +00018522 vmem_free +00018596 vmem_alloc +00018607 vmem_free_page_region +00018770 vmem_page_region_alloc +000187ab vmem_create_page_region +000188ee vmem_free_allocations +00018a16 vmem_continious_allocation_map +00018a20 vmem_free_allocation +00018a25 vmem_stack_free +00018ada vmem_stack_alloc +00018e84 vmem_dump_heap +00018f1d vmem_init_process_thread +00019012 vmem_init_process +0001933f vmem_cleanup_process_thead +000193ba vmem_cleanup_process +000195aa vmem_init_kernel +0001976b vmem_allocator_create +000197d5 vmem_map_driver_region +00019857 vmem_total_usage +0001986e vmem_init +000199a6 kalloc +00019b3f kcalloc +00019b75 kfree +00019c0f palloc +00019c5f pmemory_used +00019c80 kmemory_used +00019c8a kmemory_total +00019c9a kmem_init +00019d3b e1000_receive +00019e17 e1000_transmit +00019edd e1000_callback +00019f08 _e1000_tx_init +00019fb0 _e1000_rx_init +0001a04e e1000_attach +0001a2a1 display_get_info +0001a30f kenv_init +0001a32a kenv_set +0001a366 config_list +0001a448 config_load +0001a816 config_get_value +0001a8d9 spin_lock +0001a8fd spin_unlock +0001a90f mutex_init +0001a931 acquire +0001a9d2 release +0001aa78 kthread_entry +0001aad2 kthread_list +0001ab3b register_kthread +0001ac18 start +0001acbe ata_primary +0001acc3 ata_secondary +0001acc8 ata_wait +0001ad42 ata_write +0001aeb4 ata_read +0001b032 ata_ide_init +0001b206 set_bitmap +0001b22c unset_bitmap +0001b254 get_bitmap +0001b27a get_bitmap_size +0001b292 create_bitmap +0001b2ca destroy_bitmap +0001b2e1 bitmap_unset_continous +0001b31e bitmap_get_continous +0001b3b8 get_free_bitmap +0001b411 __rtc_check_in_progress +0001b438 __rtc_get_register +0001b45c get_current_time +0001b5a5 get_time +0001b5d3 init_tss +0001b605 exec_cmd +0001b75e __ksymbol_exec_cmd +0001b77c align_to_pointer_size +0001b78e calculate_size_unit +0001b7ee kernel_panic +0001b810 kref_init +0001b82e kref_get +0001b85a kref_put +0001b886 csprintf +0001ba84 script_parse +0001bb54 login +0001bd91 __register_kthread_login +0001bdaf help +0001bff1 clear +0001c014 __ksymbol_new +0001c032 __ksymbol_list +0001c050 __ksymbol_color +0001c06e __ksymbol_about +0001c08c __ksymbol_help +0001c0aa __ksymbol_view +0001c0c8 __ksymbol_file +0001c0e6 __ksymbol_tcp +0001c104 __ksymbol_conf +0001c122 __ksymbol_clear +0001c140 new +0001c27c list +0001c37d file +0001c540 color +0001c5e2 about +0001c621 view +0001c831 tcp +0001cb06 __tcp_reader +0001cc26 conf +0001cea7 attach_disk_dev +0001cecf disk_attached +0001cedb disk_name +0001cee8 disk_device_get +0001cef2 disk_size +0001cf12 write_block +0001cf53 write_block_offset +0001cf9a read_block +0001cfdb read_block_offset +0001d049 sched_consume +0001d08e sched_add +0001d0ec sched_prioritize +0001d1a5 sched_round_robin +0001d386 sched_exit +0001d443 sched_block +0001d565 sched_default +0001d63d sched_sleep +0001d6e7 sched_init_default +0001d76c get_scheduler +0001d776 kernel_sleep +0001d795 kernel_yield +0001d7dc kernel_exit +0001d812 block +0001d83f unblock +0001d844 work_queue_add +0001d92c init_worker +0001d944 worker_thread +0001d9e3 __ring_buffer_add +0001da8f __ring_buffer_read +0001db9d rbuffer_new +0001dc0a rbuffer_free +0001dc30 error_get_string +0001dc70 kclock +0001e14b __register_kthread_kclock +0001e169 tar_extract +0001e3b0 __ksymbol_tar +0001e3ce tar_list +0001e4d3 tar +0001e74b rgb_to_vga +0001e75f rgb_to_components +0001e78a color_distance_squared +0001e7fa rgb_init_color_table +0001e885 iface_loopback_write +0001e94a iface_loopback_interrupt +0001e965 iface_loopback_read +0001ea0f net_init_loopback +0001ea2a serial_put +0001ea6e serial_write +0001eab4 serial_printf +0001ec68 init_serial +0001ed32 inportb +0001ed3f inportw +0001ed4d inportl +0001ed5a outportb +0001ed6a outportw +0001ed7b outportl +0001ed8b sys_create_thread +0001edad __add_systemcall_sys_create_thread +0001edbc add_system_call +0001ee00 system_call +0001ee6f hashmap_put +0001eedb hashmap_get +0001ef63 hashmap_add +0001eff1 hashmap_free +0001eff6 reset_vga_palette +0001f040 vga_set_palette +0001f12f b8to16 +0001f145 vesa_put_pixel +0001f173 vesa_put_box +0001f1ed vesa_put_block +0001f267 vesa_put_char +0001f2e1 vesa_put_char16 +0001f379 vesa_put_icon16 +0001f3f4 vesa_write +0001f437 vesa_write_str +0001f469 vesa_fill +0001f4ed vesa_fillrect +0001f55c vesa_inner_box +0001f668 vesa_printf +0001f8f4 ksyms_init +0001fb13 ksyms_add_symbol +0001fbcb __ksymbol_backtrace +0001fbe9 ksyms_list +0001fc4d ksyms_resolve_symbol +0001fd04 __backtrace_from +0001fe22 backtrace +0001fe37 ws_fullscreen +0001ffb5 ws_remove +00020069 ws_add +00020158 ws_destroy +00020202 ws_draw +000204b3 ws_raw_wallpaper +0002059d ws_set_background_file +0002087d ws_init +00020964 ws_set_background +00020a13 ws_new +00020aa4 encode_run_length +00020b2d decode_run_length +00020ba4 __mouse_handler +00020cbc mouse_wait +00020d04 mouse_write +00020d46 mouse_get_event +00020d8b mouse_init +00020e74 sys_ipc_open +00020ec6 __add_systemcall_sys_ipc_open +00020ee1 __add_systemcall_sys_ipc_close +00020efc __add_systemcall_sys_ipc_send +00020f17 __add_systemcall_sys_ipc_receive +00020f32 sys_ipc_close +00020f73 sys_ipc_send +00020fd3 sys_ipc_receive +00021032 sysinf +00021d9e __register_kthread_sysinf +00021dbc echo +00021df9 res +00021e3c ifconfig +00021e4d __ksymbol_ifconfig +00021e6b __ksymbol_ps +00021e89 __ksymbol_tree +00021ea7 __ksymbol_fat16 +00021ec5 __ksymbol_xxd +00021ee3 __ksymbol_sh +00021f01 __ksymbol_ed +00021f1f __ksymbol_exec +00021f3d __ksymbol_ths +00021f5b __ksymbol_dns +00021f79 __ksymbol_th +00021f97 __ksymbol_kill +00021fb5 __ksymbol_echo +00021fd3 __ksymbol_fdisk +00021ff1 __ksymbol_meminfo +0002200f __ksymbol_res +0002202d __ksymbol_bg +0002204b __ksymbol_exit +00022069 __ksymbol_socks +00022087 __ksymbol_reset +000220a5 exit +000220db ps +00022339 print_pcb_tree +00022432 tree +00022476 fat16 +000224a2 xxd +00022595 sh +00022693 ed +000226e2 exec +00022844 ths +000228b0 dns +00022924 th +00022946 kill +00022968 fdisk +00022ae5 meminfo +00022cb8 bg +00022d39 socks +00022fd0 __register_kthread_shell +00022fee __register_kthread_textshell +0002300c shell_clear +00023051 reset_shell +000230c4 reset +00023118 shell_put +000232f6 shell +00023542 cleanup_function +0002356d testfn +000235a5 draw_box +0002368e __textshell_reset_box +0002371e textshell +0002398c __net_find_interface +000239ec net_drop_packet +00023a0d net_handle_recieve +00023b38 net_get_interfaces +00023b42 net_configure_iface +00023b98 net_incoming_packet +00023c4a net_get_iface +00023cc6 net_iface_up +00023cf1 net_iface_down +00023d1c net_list_ifaces +00023e30 net_register_interface +00023e65 net_send_skb +00023ef1 net_get_info +00023f1c networking_main +000240f8 __dhcp_add_option +00024162 __dhcp_send_discovery +000242a4 __dhcp_send_request +00024421 dhcp_get_state +0002442d dhcp_get_dns +00024437 dhcp_get_ip +00024450 dhcp_get_gw +00024469 dhcpd +000246fd udp_server +0002478c tcp_server +00024904 __net_terminal_writef +0002496d __register_kthread_tcp_server +0002498b __register_kthread_udp_server +000249a9 __register_kthread_udptest +000249c7 udptest +00024a56 tcpd +00024b3e logd +00024bad __register_kthread_logd +00024bcb logd_attach_by_pid +00024c13 taskbar_about +00024c30 taskbar_clock +00024c4d taskbar_sysinf +00024c6a taskbar_bg_retro +00024ca5 taskbar_bg_lotr2 +00024cbe taskbar_bg_lotr +00024cd7 taskbar_bg_default_color_gray +00024ced taskbar_bg_default_color +00024d03 taskbar_wolfstein +00024d42 taskbar_bg_graph +00024d81 taskbar_bg_calc +00024dc0 taskbar_colors +00024dff taskbar_cube +00024e3e taskbar_editor +00024e7d taskbar_finder +00024ebc taskbar_terminal +00024f09 __register_kthread_taskbar +00024f27 taskbar_hdr_opt_event +00024fb1 taskbar +000255be about +0002578d __register_kthread_about +000257ab gfx_default_hover +000258d9 gfx_draw_window +000266f4 gfx_destory_window +00026785 gfx_window_resize +00026832 gfx_window_maximize +000268af gfx_default_mouse_up +00026981 gfx_default_mouse_down +00026a47 gfx_default_click +00026c74 gfx_window_set_resizable +00026c8b kernel_gfx_window_border_color +00026cb8 gfx_new_window +00026f13 gfx_point_in_rectangle +00026f44 gfx_draw_component +00026f8a gfx_composition_remove_window +00026fb8 gfx_composition_add_window +00027003 gfx_set_background_color +00027058 gfx_raw_background +000270a9 gfx_decode_background_image +000270fa gfx_set_taskbar +00027151 gfx_compositor_main +000271c9 kernel_gfx_draw_circle_helper +00027440 gfx_get_window_width +00027457 gfx_get_window_height +0002746e gfx_push_event +00027535 gfx_put_icon16 +00027629 gfx_put_icon32 +0002771d gfx_event_loop +0002783b kernel_gfx_draw_rectangle +0002793d kernel_gfx_draw_contoured_box +000279e1 kernel_gfx_draw_pixel +00027a8a kernel_gfx_draw_bitmap +00027baf kernel_gfx_draw_char +00027c99 kernel_gfx_set_position +00027cb9 gfx_commit +00027cd4 kernel_gfx_draw_text +00027d62 gfx_button_ext +00027e8b gfx_button +00027ead kernel_gfx_set_title +00027f19 kernel_gfx_set_header +00027f85 kernel_gfx_draw_line +0002811f kernel_gfx_draw_circle +000281a2 kernel_gfx_draw_section +000281ac kernel_gfx_draw_format_text +000284fe gfx_syscall_hook +000286b2 gfx_total_themes +000286bc kernel_gfx_current_theme +000286c6 kernel_gfx_update_theme +00028798 kernel_gfx_default_theme +000287a2 kernel_gfx_set_theme +000287cb kernel_gfx_get_theme +000287ea gfx_new_ctx +0002884a gfx_init_framebuffer +000289ba netdev_attach_driver +00028a67 is_netdev_attached +00028a79 netdev_transmit +00028a98 netdev_recieve +00028ac5 net_ethernet_add_header +00028b5d net_ethernet_parse +00028bd8 __skb_queue_remove +00028c1a __skb_queue_add +00028c6e skb_free_queue +00028caa skb_new_queue +00028d15 skb_free +00028d54 skb_new +00028dc3 skb_consume +00028df8 __net_arp_send +00028eb8 net_init_arp +00028f08 net_arp_add_entry +00028fa0 net_arp_find_entry +00028fef net_arp_respond +00029068 net_net_arp_request +000290f2 arp_parse +000291a0 net_ipv4_print +000291aa net_ipv4_add_header +000292e5 net_is_ipv4 +00029326 net_ipv4_parse +00029457 ntohl +00029487 htonl +0002949e ntohs +000294af htons +000294c0 checksum +0002951b transport_checksum +00029574 ip_to_int +00029616 net_icmp_handle +000296df net_icmp_response +000296e9 net_icmp_request +000297b0 ping +0002980d net_icmp_parse +00029881 net_udp_send +000299ba net_udp_parse +00029ae6 socket_type_to_str +00029af9 socket_domain_to_str +00029b0c socket_protocol_to_str +00029b1f net_sock_bind +00029b6e net_get_sockets +00029b8e sock_get +00029bb3 get_total_sockets +00029bbd net_sock_is_established +00029c05 net_sock_awaiting_ack +00029c4d net_sock_data_ready +00029ca8 net_sock_read +00029dab net_sock_add_data +0002a00f sock_find_listen_tcp +0002a057 net_sock_find_tcp +0002a24a net_prepare_tcp_sock +0002a2da net_sock_accept +0002a2f1 net_socket_find_udp +0002a360 kernel_sock_shutdown +0002a391 kernel_sock_cleanup +0002a41b kernel_sock_close +0002a453 kernel_socket_create +0002a5d8 net_init_sockets +0002a622 gethostname +0002ab50 __add_systemcall_gethostname +0002ab6b net_init_dns +0002ab9e route +0002abef tcb_init +0002ac11 tcb_new +0002ad81 tcp_state_to_str +0002ad9e tcp_new_connection +0002ae2a tcp_free_connection +0002ae51 tcp_is_listening +0002ae6b tcp_set_listening +0002aecf tcp_calculate_checksum +0002af98 __tcp_send +0002b0b4 tcp_send_segment +0002b1fb tcp_accept_connection +0002b33f tcp_send_ack +0002b477 tcp_read +0002b481 tcp_recv_segment +0002b48b tcp_connect +0002b532 tcp_send_syn +0002b53c tcp_recv_ack +0002b5c3 tcp_recv_fin +0002b5cd tcp_recv_syn +0002b703 tcp_send_fin +0002b7d3 tcp_close_connection +0002b816 tcp_parse +0002bcb2 kernel_bind +0002bceb kernel_recvfrom +0002bcf5 kernel_recv +0002bd6b kernel_recv_timeout +0002bd95 kernel_connect +0002be9b kernel_sendto +0002bf59 kernel_accept +0002bfc0 kernel_listen +0002bfec kernel_send +0002c076 sys_kernel_bind +0002c0ac __add_systemcall_sys_kernel_bind +0002c0c7 __add_systemcall_sys_kernel_accept +0002c0e2 __add_systemcall_sys_kernel_connect +0002c0fd __add_systemcall_sys_kernel_listen +0002c118 __add_systemcall_sys_kernel_recv +0002c133 __add_systemcall_sys_kernel_recvfrom +0002c14e __add_systemcall_sys_kernel_recv_timeout +0002c169 __add_systemcall_sys_kernel_send +0002c184 __add_systemcall_sys_kernel_sendto +0002c19f __add_systemcall_sys_socket_create +0002c1ba __add_systemcall_sys_kernel_sock_close +0002c1d5 sys_kernel_accept +0002c219 sys_kernel_connect +0002c24f sys_kernel_listen +0002c282 sys_kernel_recv +0002c2be sys_kernel_recvfrom +0002c302 sys_kernel_recv_timeout +0002c344 sys_kernel_send +0002c380 sys_kernel_sendto +0002c3c4 sys_socket_create +0002c3ef sys_kernel_sock_close +0002c434 __iface_send +0002c467 __iface_recieve +0002c49a __iface_assign +0002c4b1 __iface_detach +0002c4c9 __iface_set_gateway +0002c4e0 __iface_set_netmask +0002c4f7 __iface_configure +0002c54b __iface_attach +0002c574 net_interface_create +0002c5b0 net_register_netdev +0002c6cc net_interface_destroy +0002c6e5 __default_restart +0002c6ef __default_stop +0002c758 __default_start +0002c7db nm_new +0002c868 nm_free +0002c8b1 net_firewall_create +0002c8d8 fs_file2fd +0002c941 fs_alloc_file +0002c990 fs_free_file +0002c9ee fs_register +0002cac1 fs_init +0002cacb fs_unregister +0002cb32 fs_get +0002cb3c fs_close +0002cbb2 fs_open +0002cc30 fs_seek +0002ccb1 fs_read +0002cdca fs_load_from_file +0002ce5a fs_write +0002cf19 fat16_rmdir +0002cf23 fat16_stat +0002cf2d fat16_close +0002cf9b fat16_rename +0002d034 fat16_mkdir +0002d11d fat16_remove +0002d194 fat16_open +0002d2e2 fat16_read +0002d445 fat16_write +0002d577 fat16_list +0002d843 fat16_init +0002d8fb path_next_iter +0002d969 inode_from_path_recursise +0002d9e7 inode_from_path +0002daa9 ext_get_root +0002dab6 ext_get_current_dir +0002dac7 ext_get_size +0002dad1 ext_get_inodes +0002dadb ext_get_blocks +0002dae5 ext_sync +0002db5c ext_create +0002dc4b ext_read +0002dcca ext_seek +0002dd15 ext_write +0002dd85 ext_close +0002ddeb ext_open_from_directory +0002def3 ext_open +0002dfae ext_size +0002dfdb change_directory +0002e045 ext_create_directory +0002e1e3 ext_create_file_system +0002e4b4 init_ext +0002e654 listdir +0002e77d __inode_sync +0002e7e0 __inode_cache_insert +0002e8d6 __inode_load +0002e94a inodes_sync +0002e989 inode_get +0002e9ea inode_read +0002ebda inode_write +0002ee41 alloc_inode +0002eefe mkdir +0002efa7 sync +0002efdd mkfs +0002efee fat16_read_data_from_cluster +0002f040 fat16_read_data +0002f11d fat16_find_cluster_by_offset +0002f19c fat16_write_data_to_cluster_with_offset +0002f1db fat16_print_cluster_chain +0002f20d fat16_write_data_to_cluster +0002f244 fat16_write_data +0002f35f get_fat_start_block +0002f36b get_root_directory_start_block +0002f37e get_data_start_block +0002f394 fat16_get_fat_entry +0002f3b3 fat16_set_fat_entry +0002f3f7 fat16_sync_fat_table +0002f473 fat16_allocate_cluster +0002f48f fat16_free_cluster +0002f4a8 fat16_get_free_cluster +0002f501 fat16_sync_directory_entry +0002f588 fat16_read_entry +0002f639 fat16_find_entry +0002f774 fat16_rename_entry +0002f7e9 fat16_free_clusters +0002f834 fat16_delete_entry +0002f89f fat16_add_entry +0002fa0a fat16_used_blocks +0002fa47 fat16_to_upper +0002fa77 fat16_name_compare +0002fb92 sstrtok +0002fc55 fat16_directory_entry_debug +0002fd2c fat16_get_directory_entry +0002ff35 fat16_create_directory +0003003e fat16_read_file +00030093 fat16_create_file +00030115 fat16_create_empty_file +000301dd fat16_directory_entries +000302c8 fat16_mbr_clear +00030393 fat16_mbr_add_entry +00030488 fat16_print_root_directory_entries +000304a4 fat16_change_directory +00030530 fat16_bootblock_info +000306b1 fat16_set_time +000306e9 fat16_set_date +00030725 fat16_load +000308a8 fat16_format +00030b61 mbr_partition_type_string +00030be9 mbr_partitions_parse +00030cb7 mbr_get +00030cc1 mbr_partition_load +00030ce3 __ksymbol_snakegame +00030d01 init_game +00030d51 draw +00030db1 get_input +00030dd2 update +00030f5e game_loop +00030f88 snakegame +00030fd5 _code_end diff --git a/tests/utils/mocks.c b/tests/utils/mocks.c index e308b43..43bd0da 100644 --- a/tests/utils/mocks.c +++ b/tests/utils/mocks.c @@ -162,7 +162,7 @@ void* kalloc(int size){ } int kcalloc(int size){ - return (int)kalloc(size); + return kalloc(size); } #endif From b52d138a120e26520bb469adfa25459e8331e8ea Mon Sep 17 00:00:00 2001 From: Joe Bayer Date: Tue, 9 Jan 2024 16:13:24 +0100 Subject: [PATCH 09/13] Reapply "Bug fixes and Readme app" This reverts commit 84acecef3b1354cd9bfda58916b23a61bc680412. --- Makefile | 2 +- docs/readme.md | 16 + drivers/mouse.c.bak | 164 ---- graphics/windowserver.c | 15 +- include/errors.h | 1 + include/scheduler.h | 14 +- include/serial.h | 4 +- kernel/diskdev.c | 2 - kernel/ipc.c | 9 +- kernel/kernel.c | 2 +- kernel/kthreads/about.c | 88 +- kernel/kthreads/taskbar.c | 11 + kernel/pci.c | 31 +- kernel/scheduler.c | 28 +- rootfs/symbols.map | 1683 +++++++++++++++++++------------------ tests/utils/mocks.c | 2 +- 16 files changed, 1007 insertions(+), 1065 deletions(-) delete mode 100644 drivers/mouse.c.bak diff --git a/Makefile b/Makefile index 19f1b5f..9f89f24 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ ASFLAGS= LDFLAGS= MAKEFLAGS += --no-print-directory -QEMU_OPS = -device e1000,netdev=net0 -serial stdio -netdev user,id=net0,hostfwd=tcp::8080-:8080 -object filter-dump,id=net0,netdev=net0,file=dump.dat -m 32m +QEMU_OPS = -device virtio-net-pci,netdev=net0 -serial stdio -netdev user,id=net0,hostfwd=tcp::8080-:8080 -object filter-dump,id=net0,netdev=net0,file=dump.dat -m 32m # ---------------- For counting how many files to compile ---------------- ifneq ($(words $(MAKECMDGOALS)),1) diff --git a/docs/readme.md b/docs/readme.md index 02a95a0..536d06a 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -1,3 +1,19 @@ # RetrOS Documentation +## Bootloader + +## Kernel + +## Filesystem + +## Graphics + +### Window Manager + +### GFXLib + +## Terminal + +## Textmode + ## Under Construction! \ No newline at end of file diff --git a/drivers/mouse.c.bak b/drivers/mouse.c.bak deleted file mode 100644 index d05b0c6..0000000 --- a/drivers/mouse.c.bak +++ /dev/null @@ -1,164 +0,0 @@ -/** - * @file mouse.c - * @author Joe Bayer (joexbayer) - * @brief Simple PS2 Mouse controller - * @version 0.1 - * @date 2022-12-19 - * @see https://wiki.osdev.org/PS/2_Mouse - * @copyright Copyright (c) 2022 - * - */ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -static struct ps2_mouse mouse_device = { - .packet = { - .flags = 0, - .x = 0, - .y = 0 - }, - .x = 0, - .y = 0, - .received = 0, - .initilized = 0, - .cycle = 0 -}; - -#define MAX_MOUSE_EVENTS 15 - -/* static helper functions wait / write /read */ - -/* wait for mouse to be ready */ -static void mouse_wait(unsigned char a_type) { - unsigned int timeout = 100000; - if (!a_type) { - while (--timeout) { - if ((inportb(MOUSE_STATUS) & MOUSE_BBIT) == 1) { - return; - } - } - return; - } else { - while (--timeout) { - if (!((inportb(MOUSE_STATUS) & MOUSE_ABIT))) { - return; - } - } - return; - } -} - -/* write a byte to mouse */ -static void mouse_write(uint8_t command) -{ - mouse_wait(1); - outportb(0x64, 0xD4); - mouse_wait(1); - outportb(0x60, command); -} - -/* read a byte from mouse */ -static uint8_t mouse_read() -{ - mouse_wait(0); - return inportb(0x60); -} - -/* main API to get a mouse event */ -int mouse_get_event(struct mouse* m) -{ - if(mouse_device.received == 1) - return 0; - - struct mouse event = { - .flags = mouse_device.packet.flags, - .x = mouse_device.x, - .y = mouse_device.y - }; - - *m = event; - - mouse_device.received = 1; - - return 1; -} - -void __int_handler __mouse_handler() -{ - uint8_t status = inportb(MOUSE_STATUS); - while (status & MOUSE_BBIT) { - char mouse_in = inportb(MOUSE_PORT); - if (status & MOUSE_F_BIT) { - switch (mouse_device.cycle) { - case 0:{ - mouse_device.packet.flags = mouse_in; - if (!(mouse_in & MOUSE_V_BIT)){ - return; - } - ++mouse_device.cycle; - } - break; - case 1:{ - mouse_device.packet.x = mouse_in; - ++mouse_device.cycle; - } - break; - case 2:{ - mouse_device.packet.y = mouse_in; - /* We now have a full mouse packet ready to use */ - if (mouse_device.packet.flags & MOUSE_Y_OVERFLOW || mouse_device.packet.flags & MOUSE_X_OVERFLOW) { - /* x/y overflow? bad packet! */ - break; - } - - mouse_device.x += mouse_device.packet.x; - mouse_device.y -= mouse_device.packet.y; - - if (mouse_device.x < 0) mouse_device.x = 0; - if (mouse_device.y < 0) mouse_device.y = 0; - - if (mouse_device.x > vbe_info->width-16) mouse_device.x = vbe_info->width-16; - if (mouse_device.y > vbe_info->height-16) mouse_device.y = vbe_info->height-16; - - mouse_device.received = 0; - mouse_device.cycle = 0; - } - break; - } - } - status = inportb(MOUSE_STATUS); - } -} - -void mouse_init() -{ - dbgprintf("[MOUSE] Starting...\n"); - uint8_t _status; //unsigned char - - mouse_wait(1); - outportb(MOUSE_STATUS, 0xA8); - mouse_wait(1); - outportb(MOUSE_STATUS, 0x20); - mouse_wait(0); - _status = inportb(0x60) | 2; - mouse_wait(1); - outportb(MOUSE_STATUS, 0x60); - mouse_wait(1); - outportb(MOUSE_PORT, _status); - mouse_write(0xF6); - mouse_read(); - mouse_write(0xF4); - mouse_read(); - - interrupt_install_handler(12+32, &__mouse_handler); -} \ No newline at end of file diff --git a/graphics/windowserver.c b/graphics/windowserver.c index 3e1f73b..df2da66 100644 --- a/graphics/windowserver.c +++ b/graphics/windowserver.c @@ -58,7 +58,6 @@ static int ws_init(struct windowserver* ws) ws->_wm = wm; ws->workspace = 0; - ws->background = palloc(VBE_SIZE()); if(ws->background == NULL){ wm->ops->destroy(wm); @@ -67,7 +66,7 @@ static int ws_init(struct windowserver* ws) } SET_FlAG(ws->flags, WINDOW_SERVER_INITIALIZED); - return 0; + return ERROR_OK; } static int ws_raw_wallpaper(struct windowserver* ws, char* path) @@ -86,7 +85,7 @@ static int ws_raw_wallpaper(struct windowserver* ws, char* path) ws->background[i] = rgb_to_vga(ws->background[i]); } - return 0; + return ERROR_OK; } static int ws_add(struct windowserver* ws, struct window* window) @@ -101,7 +100,7 @@ static int ws_add(struct windowserver* ws, struct window* window) dbgprintf("[WSERVER] Added window %x.\n", window); - return 0; + return ERROR_OK; } static int ws_remove(struct windowserver* ws, struct window* window) @@ -114,7 +113,7 @@ static int ws_remove(struct windowserver* ws, struct window* window) return -ERROR_OPS_CORRUPTED; } - return 0; + return ERROR_OK; } static int ws_fullscreen(struct windowserver* ws, struct window* window) @@ -153,7 +152,7 @@ static int ws_fullscreen(struct windowserver* ws, struct window* window) ws->_is_fullscreen = true; } - return 0; + return ERROR_OK; } static int ws_set_background(struct windowserver* ws, color_t color) @@ -163,7 +162,7 @@ static int ws_set_background(struct windowserver* ws, color_t color) memset(ws->background, color, VBE_SIZE()); - return 0; + return ERROR_OK; } static int ws_set_background_file(struct windowserver* ws, const char* path) @@ -281,7 +280,7 @@ static int __ws_key_event(struct windowserver* ws, unsigned char key) break; } - return 0; + return ERROR_OK; } static int ws_draw(struct windowserver* ws) diff --git a/include/errors.h b/include/errors.h index f97eee1..1ad9fa8 100644 --- a/include/errors.h +++ b/include/errors.h @@ -4,6 +4,7 @@ #include #include +/* error code from errors.h */ typedef int error_t; enum errors { diff --git a/include/scheduler.h b/include/scheduler.h index 067fca4..2ebc967 100644 --- a/include/scheduler.h +++ b/include/scheduler.h @@ -26,13 +26,13 @@ typedef enum scheduler_flags { /* Scheduler operations */ struct scheduler_ops { - int (*prioritize)(struct scheduler* sched, struct pcb* pcb); - int (*schedule)(struct scheduler* sched); - int (*add)(struct scheduler* sched, struct pcb* pcb); - int (*block)(struct scheduler* sched, struct pcb* pcb); - int (*sleep)(struct scheduler* sched, int time); - int (*exit)(struct scheduler* sched); - int (*yield)(struct scheduler* sched); + error_t (*prioritize)(struct scheduler* sched, struct pcb* pcb); + error_t (*schedule)(struct scheduler* sched); + error_t (*add)(struct scheduler* sched, struct pcb* pcb); + error_t (*block)(struct scheduler* sched, struct pcb* pcb); + error_t (*sleep)(struct scheduler* sched, int time); + error_t (*exit)(struct scheduler* sched); + error_t (*yield)(struct scheduler* sched); struct pcb* (*consume)(struct scheduler* sched); }; diff --git a/include/serial.h b/include/serial.h index 3716399..d107d5f 100644 --- a/include/serial.h +++ b/include/serial.h @@ -6,13 +6,13 @@ #include #ifdef KDEBUG_SERIAL -#define dbgprintf(a, ...) serial_printf("%s(): " a, __func__, ##__VA_ARGS__) +#define dbgprintf(a, ...) serial_printf("\033[33m%s(): \033[37m" a, __func__, ##__VA_ARGS__) #else #define dbgprintf(a, ...) #endif // KDEBUG_SERIAL #ifdef KDEBUG_WARNINGS -#define warningf(a, ...) serial_printf("DEBUG: %s(): " a, __func__, ##__VA_ARGS__) +#define warningf(a, ...) serial_printf("\033[31m%s(): \033[37m" a, __func__, ##__VA_ARGS__) #else #define warningf(a, ...) #endif // KDEBUG_WARNINGS diff --git a/kernel/diskdev.c b/kernel/diskdev.c index 69f61a3..65ec8ac 100644 --- a/kernel/diskdev.c +++ b/kernel/diskdev.c @@ -13,9 +13,7 @@ void attach_disk_dev( ){ disk_device.read = read; disk_device.write = write; - disk_device.attached = 1; - disk_device.dev = dev; } diff --git a/kernel/ipc.c b/kernel/ipc.c index 35da7c2..d8dacac 100644 --- a/kernel/ipc.c +++ b/kernel/ipc.c @@ -4,13 +4,14 @@ #include #define IPC_MAX_CHANNELS 16 +#define IPC_MAX_SIZE 1024 -#define IPC_VALID_CHANNEL(channel) if(channel < 0 || channel >= IPC_MAX_CHANNELS) {return -1;} +#define IPC_VALID_CHANNEL(channel) if(channel < 0 || channel >= IPC_MAX_CHANNELS || channels[channel].rbuf == NULL) {return -1;} /* handel to channel implementation */ static struct ipc_channel channels[IPC_MAX_CHANNELS] = {0}; -static int ipc_alloc_channel() { +static int __ipc_alloc_channel() { for (int i = 0; i < IPC_MAX_CHANNELS; i++) if (!channels[i].rbuf) return i; @@ -20,12 +21,12 @@ static int ipc_alloc_channel() { /* userspace interface */ int sys_ipc_open() { - int channel = ipc_alloc_channel(); + int channel = __ipc_alloc_channel(); if (channel < 0) { return -1; } - channels[channel].rbuf = rbuffer_new(1024); + channels[channel].rbuf = rbuffer_new(IPC_MAX_SIZE); return channel; } EXPORT_SYSCALL(SYSCALL_IPC_OPEN, sys_ipc_open); diff --git a/kernel/kernel.c b/kernel/kernel.c index d6b0c64..66cdd7b 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -110,7 +110,7 @@ void kernel(uint32_t magic) __deprecated kernel_size = _end-_code; /* Serial is used for debuging purposes. */ - //init_serial(); + init_serial(); dbgprintf("INF: %s - %s\n", KERNEL_NAME, KERNEL_VERSION); kernel_boot_printf("Booting OS..."); diff --git a/kernel/kthreads/about.c b/kernel/kthreads/about.c index ba4e952..6ef233a 100644 --- a/kernel/kthreads/about.c +++ b/kernel/kthreads/about.c @@ -161,26 +161,57 @@ void __kthread_entry about(int argc, char* argv[]) EXPORT_KTHREAD(about); const char* readme_text[] = { - "Welcome to the RetrOS-32 kernel readme.\n" - "\n" - "Bugs: Yes, there are a lot! Please report them to the github page.\n" - "Known bugs are hang on boot after Starting OS.\nOccasional hangs and freezes\n" - "Processes can be started via the taskbar at the screen's top or using the command line.\n" - "Command Line Usage: exec \n" - "Binaries are located in /bin.\nThe 'exec' command can start kernel threads or shell commands as threads.\n" - "\n" - "To use the C interpreter, enter 'cc ' in the terminal.\n" - "Note: The C interpreter is currently under development and may not be fully functional.\n" + "Welcome to the RetrOS-32", + "kernel readme.\n", + " ", + "Scroll using arrow keys!", + " ", + "Bugs: Yes, there are a lot!", + "Please report them to the", + "github page. Known bugs", + "are hang on boot after", + "Starting OS, occasional", + "hangs and freezes.", + " ", + "Processes can be started", + "via the taskbar at the", + "screen's top or using the", + "command line.", + "Command Line Usage:", + "exec ", + "Binaries are located in /bin.", + "The 'exec' command can start", + "kernel threads or shell", + "commands as threads.", + " ", + "To use the C interpreter,", + "enter 'cc ' in the", + "terminal. Note: The C", + "interpreter is currently", + "under development and may", + "not be fully functional.", + " ", + "Networking: The kernel", + "supports Ethernet, IPv4,", + "ARP, ICMP, UDP, TCP,", + "DHCP and DNS. The kernel", + "will automatically attempt", + "to get an IP address and", + "DNS server from the", + "DHCP server.", + " ", + "A looback interface is", + "also supported.", }; - +const int num_strings = sizeof(readme_text) / sizeof(readme_text[0]); void __kthread_entry readme() { - const int width = 400; - const int height = 400; + const int width = 250; + const int height = 300; int from = 0; - int to = 50; + int to = 28; struct window* w = gfx_new_window(width, height, 0); if(w == NULL){ @@ -190,13 +221,17 @@ void __kthread_entry readme() kernel_gfx_set_title("Readme"); - w->draw->rect(w, 0, 0, width, height, 30); - w->ops->move(w, 50, 50); + while (1){ + w->draw->rect(w, 0, 0, width, height, 30); + w->draw->box(w, 10, 10, width-20, height-20,31); - w->draw->text(w, 0, 0, readme_text, 0); + for(int i = from; i < to; i++){ + w->draw->text(w, 12, 12+ (i-from)*10, readme_text[i], 0); + } + + gfx_commit(); - while (1){ struct gfx_event event; int ret = gfx_event_loop(&event, GFX_EVENT_BLOCKING); if(ret == -1) continue; @@ -204,6 +239,23 @@ void __kthread_entry readme() switch (event.event){ case GFX_EVENT_EXIT: return; + case GFX_EVENT_KEYBOARD:{ + switch (event.data){ + case KEY_DOWN: + if(to < num_strings){ + from++; + to++; + } + break; + case KEY_UP: + if(from > 0){ + from--; + to--; + } + break; + } + } + break; default: break; } diff --git a/kernel/kthreads/taskbar.c b/kernel/kthreads/taskbar.c index c259d95..94de9c0 100644 --- a/kernel/kthreads/taskbar.c +++ b/kernel/kthreads/taskbar.c @@ -44,6 +44,7 @@ static void __callback taskbar_bg_default_color(); static void __callback taskbar_bg_default_color_gray(); static void __callback taskbar_sysinf(); static void __callback taskbar_about(); +static void __callback taskbar_readme(); /* prototype to taskbar thread */ static void __kthread_entry taskbar(void); @@ -177,6 +178,11 @@ struct taskbar_options { .icon = desktop_16, .name = "About", .callback = &taskbar_about + }, + { + .icon = desktop_16, + .name = "Readme", + .callback = &taskbar_readme } } }, @@ -458,4 +464,9 @@ static void __callback taskbar_sysinf() static void __callback taskbar_about() { start("about", 0, NULL); +} + +static void __callback taskbar_readme() +{ + start("readme", 0, NULL); } \ No newline at end of file diff --git a/kernel/pci.c b/kernel/pci.c index b7272d2..a8f244f 100644 --- a/kernel/pci.c +++ b/kernel/pci.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -79,6 +78,15 @@ const char* pci_get_device_name(struct pci_device* dev) default: break; } + break; + case 0x1AF4: + switch (dev->device){ + case 0x1000: + return "Virtio Network Device"; + default: + break; + } + break; default: break; } @@ -98,6 +106,9 @@ const char* pci_get_vendor_name(struct pci_device* dev) case 0x10DE: return "NVIDIA Corporation"; break; + case 0x1AF4: + return "Red Hat, Inc."; + break; default: break; } @@ -216,15 +227,29 @@ void init_pci() } i++; } - } } } dbgprintf("[PCI] Peripheral Component Interconnect devices probed.\n"); } -void lspci() +void lspci(int argc, char** argv) { + if(argc > 1){ + if(strcmp(argv[1], "-v") == 0){ + for (int i = 0; i < _pci_devices_size; i++){ + twritef("Vendor: 0x%x Device:\n . 0x%x - %s - %s - %s\n", + _pci_devices[i].vendor, + _pci_devices[i].device, + _pci_devices[i].class < 0x11 ? pci_classes[_pci_devices[i].class] : pci_classes[0], + pci_get_vendor_name(&_pci_devices[i]), + pci_get_device_name(&_pci_devices[i]) + ); + } + return; + } + } + for (int i = 0; i < _pci_devices_size; i++){ twritef("V: 0x%x D: 0x%x - %s\n", _pci_devices[i].vendor, diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 64c01d9..5f9cbfc 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -9,15 +9,15 @@ #include /* exposed operator functions */ -static int sched_prioritize(struct scheduler* sched, struct pcb* pcb); -static int sched_default(struct scheduler* sched); -static int sched_add(struct scheduler* sched, struct pcb* pcb); -static int sched_block(struct scheduler* sched, struct pcb* pcb); -static int sched_sleep(struct scheduler* sched, int time); +static error_t sched_prioritize(struct scheduler* sched, struct pcb* pcb); +static error_t sched_default(struct scheduler* sched); +static error_t sched_add(struct scheduler* sched, struct pcb* pcb); +static error_t sched_block(struct scheduler* sched, struct pcb* pcb); +static error_t sched_sleep(struct scheduler* sched, int time); static struct pcb* sched_consume(struct scheduler* sched); -static int sched_exit(struct scheduler* sched); +static error_t sched_exit(struct scheduler* sched); -static int sched_round_robin(struct scheduler* sched); +static error_t sched_round_robin(struct scheduler* sched); /* Default scheduler operations */ static struct scheduler_ops sched_default_ops = { @@ -81,7 +81,7 @@ error_t sched_init_default(struct scheduler* sched, sched_flag_t flags) * @param time The time to sleep for * @return int 0 on success, error code on failure */ -static int sched_sleep(struct scheduler* sched, int time) +static error_t sched_sleep(struct scheduler* sched, int time) { ERR_ON_NULL(sched); SCHED_VALIDATE(sched); @@ -103,7 +103,7 @@ static int sched_sleep(struct scheduler* sched, int time) * @param pcb The pcb to prioritize * @return int 0 on success, error code on failure */ -static int sched_prioritize(struct scheduler* sched, struct pcb* pcb) +static error_t sched_prioritize(struct scheduler* sched, struct pcb* pcb) { ERR_ON_NULL(sched); ERR_ON_NULL(pcb); @@ -139,7 +139,7 @@ static struct pcb* sched_consume(struct scheduler* sched) * @param pcb The pcb to block * @return int 0 on success, error code on failure */ -static int sched_block(struct scheduler* sched, struct pcb* pcb) +static error_t sched_block(struct scheduler* sched, struct pcb* pcb) { ERR_ON_NULL(sched); ERR_ON_NULL(pcb); @@ -168,7 +168,7 @@ static int sched_block(struct scheduler* sched, struct pcb* pcb) * @param sched The scheduler to schedule on * @return int 0 on success, error code on failure */ -static int sched_round_robin(struct scheduler* sched) +static error_t sched_round_robin(struct scheduler* sched) { struct pcb* next; @@ -265,7 +265,7 @@ static int sched_round_robin(struct scheduler* sched) } /* Default round robin scheduler behavior */ -static int sched_default(struct scheduler* sched) +static error_t sched_default(struct scheduler* sched) { ERR_ON_NULL(sched); SCHED_VALIDATE(sched); @@ -301,7 +301,7 @@ static int sched_default(struct scheduler* sched) * @param sched The scheduler to clean up on * @return int 0 on success, error code on failure */ -static int sched_exit(struct scheduler* sched) +static error_t sched_exit(struct scheduler* sched) { ERR_ON_NULL(sched); SCHED_VALIDATE(sched); @@ -333,7 +333,7 @@ static int sched_exit(struct scheduler* sched) * @param pcb The pcb to add * @return int 0 on success, error code on failure */ -static int sched_add(struct scheduler* sched, struct pcb* pcb) +static error_t sched_add(struct scheduler* sched, struct pcb* pcb) { SCHED_VALIDATE(sched); diff --git a/rootfs/symbols.map b/rootfs/symbols.map index 5bde4d5..a22f288 100644 --- a/rootfs/symbols.map +++ b/rootfs/symbols.map @@ -8,843 +8,846 @@ 00010058 gdt_end 00010058 kernel_boot_printf 000100b7 init_kctors -00010109 kernel -0001054e kernel_get_context -00010558 hexdump -00010796 __terminal_set_ops -0001085f __terminal_scanf -00010865 __terminal_write -000108af __terminal_getchar_graphics -000108f8 __terminal_scan_graphics -000109d6 __terminal_reset -00010a1a __terminal_detach -00010a5b __terminal_attach -00010aa2 __terminal_commit_graphics -00010b78 __terminal_remove_line -00010bb8 __terminal_putchar_graphics -00010c7a __terminal_writef -00010f21 __terminal_getchar_textmode -00010f49 __terminal_scan_textmode -00011009 __terminal_commit_textmode -000110c1 __terminal_putchar_textmode -0001110d scan -00011144 terminal_set_color -00011145 terminal_attach -00011162 terminal_commit -0001117f terminal_putchar -00011180 terminal_create -0001129c terminal_destroy -000112d4 tlb_flush_addr -000112dc load_page_directory -000112ec enable_paging -000112fe pcb_save_context -0001132a pcb_restore_context -00011353 _start_pcb -00011385 _start_pcb_skip -000113a0 lspci -00011432 __ksymbol_lspci -00011450 pci_get_class_name -00011467 pci_get_device_name -000114c1 pci_get_vendor_name -000114fb pci_get_devices -00011505 pci_read_word -00011562 pci_write_dword -000115b5 pci_enable_device_busmaster -0001160e pci_register_device -00011693 init_pci -00011857 pci_find_device -000118f1 virtual_read -00011920 virtual_write -0001194f virtual_disk_attach -00011972 wm_default_changes -00011a1e wm_default_workspace -00011a84 wm_default_draw -00011b26 wm_default_add -00011bd1 init_windowmanager -00011d1d wm_default_mouse_event -00011f3b wm_default_push_back -00012031 wm_default_push_front -00012124 wm_default_remove -00012239 wm_destroy -0001231b wm_new -00012386 screen_set_cursor -000123e6 scrcolor_set -000123fe scrput -0001242a scrwrite -00012477 scr_clear -000124cd scr_scroll -00012519 scrprintf -00012799 strlen -000127bf strcpy -000127f5 strncmp -00012832 strcmp -00012876 memcmp -000128b3 parse_arguments -0001299c strchr -000129cf getopt -00012b1a memcpy -00012b8b strtok -00012c47 xmemcpy -00012cd0 memset -00012d4e isdigit -00012d66 isspace -00012d79 tolower -00012d91 isxdigit -00012db9 htoi -00012e61 atoi -00012ef3 itoa -00012fa3 itohex -00013023 rdtsc -0001302a rand -0001304a general_protection_fault -000130bb interrupt_get_count -000130ce print_page_fault_info -000131a9 page_fault_interrupt -00013251 interrupt_install_handler -00013267 load_data_segments -00013277 isr_handler -00013369 init_interrupts -000134e6 idt_flush -000134ee isr0 -000134fb isr1 -00013508 isr2 -00013515 isr3 -00013522 isr4 -0001352f isr5 -0001353c isr6 -00013549 isr7 -00013556 isr8 -00013563 isr9 -00013570 isr10 -0001357d isr11 -0001358a isr12 -00013597 isr13 -000135a4 isr14 -000135b1 isr15 -000135be isr16 -000135cb isr17 -000135d8 isr18 -000135e5 isr19 -000135f2 isr20 -000135ff isr21 -0001360c isr22 -00013619 isr23 -00013626 isr24 -00013633 isr25 -00013640 isr26 -0001364d isr27 -0001365a isr28 -00013667 isr29 -00013674 isr30 -00013681 isr31 -0001368e isr32 -0001369b isr33 -000136a8 isr34 -000136b5 isr35 -000136bf isr36 -000136c9 isr37 -000136d3 isr38 -000136dd isr39 -000136e7 isr40 -000136f1 isr41 -000136fb isr42 -00013705 isr43 -0001370f isr44 -00013719 isr45 -00013723 isr46 -0001372d isr47 -00013737 isr_entry -00013752 syscall_return_value -00013756 _syscall_entry -00013793 page_fault_save -00013797 page_fault_error -0001379b _page_fault_entry -000137cd timer_callback -00013806 timer_get_tick -00013810 time_get_difference -00013855 init_pit -000138bd gdt_set_segment -00013908 init_gdt -00013a1a rc -00013c00 __ksymbol_rc -00013c1a __ksymbol_as -00013c34 __ksymbol_cc -00013c4e as -00013ffa cc -00014055 __cc -0001433c vm_print -0001451d eval -000149b4 vm_setup -000149f9 vm_init -00014a58 vm_free -00014a8b vm_setup_stack -00014ae9 lex_get_error -00014af6 next -00014ff7 match -00015043 expression -0001630f statement -00016518 function_parameter -000166d6 function_body -000168e1 function_declaration -0001696a enum_declaration -00016a71 global_declaration -00016c9a lex_init -00016d35 program -00016dd6 find_mp_floating_ptr -00016e16 smp_parse -00016f60 kb_get_char -00016fae kb_add_char -00016fed kb_callback -0001721e init_keyboard -00017299 pcb_await -000172c7 __pcb_get_free -0001738d __add_systemcall_pcb_await -000173a8 __pcb_free -000173f7 __pcb_init_kernel_stack -00017458 __pcb_init_process -0001751d init_pcbs -0001757c pcb_total_usage -0001759d pcb_get_info -000176c9 pcb_kill -000176ea Genesis -000176f0 idletask -0001770f pcb_get_by_pid -00017724 pcb_get_by_name -00017781 pcb_dbg_print -000177ff pcb_cleanup_routine -000179d9 pcb_create_thread -00017a90 pcb_create_process -00017cdc pcb_create_kthread -00017f7d start_pcb -00017fb9 __pcb_queue_peek -00017ffc __pcb_queue_pop -0001805c __pcb_queue_remove -000180d2 __pcb_queue_add -0001814f __pcb_queue_push -000181ec pcb_new_queue -00018221 memory_map_init -000182ed memory_map_get -000182f7 free -00018360 malloc -000183f9 calloc -00018430 get_mem_info -0001848c init_memory -00018522 vmem_free -00018596 vmem_alloc -00018607 vmem_free_page_region -00018770 vmem_page_region_alloc -000187ab vmem_create_page_region -000188ee vmem_free_allocations -00018a16 vmem_continious_allocation_map -00018a20 vmem_free_allocation -00018a25 vmem_stack_free -00018ada vmem_stack_alloc -00018e84 vmem_dump_heap -00018f1d vmem_init_process_thread -00019012 vmem_init_process -0001933f vmem_cleanup_process_thead -000193ba vmem_cleanup_process -000195aa vmem_init_kernel -0001976b vmem_allocator_create -000197d5 vmem_map_driver_region -00019857 vmem_total_usage -0001986e vmem_init -000199a6 kalloc -00019b3f kcalloc -00019b75 kfree -00019c0f palloc -00019c5f pmemory_used -00019c80 kmemory_used -00019c8a kmemory_total -00019c9a kmem_init -00019d3b e1000_receive -00019e17 e1000_transmit -00019edd e1000_callback -00019f08 _e1000_tx_init -00019fb0 _e1000_rx_init -0001a04e e1000_attach -0001a2a1 display_get_info -0001a30f kenv_init -0001a32a kenv_set -0001a366 config_list -0001a448 config_load -0001a816 config_get_value -0001a8d9 spin_lock -0001a8fd spin_unlock -0001a90f mutex_init -0001a931 acquire -0001a9d2 release -0001aa78 kthread_entry -0001aad2 kthread_list -0001ab3b register_kthread -0001ac18 start -0001acbe ata_primary -0001acc3 ata_secondary -0001acc8 ata_wait -0001ad42 ata_write -0001aeb4 ata_read -0001b032 ata_ide_init -0001b206 set_bitmap -0001b22c unset_bitmap -0001b254 get_bitmap -0001b27a get_bitmap_size -0001b292 create_bitmap -0001b2ca destroy_bitmap -0001b2e1 bitmap_unset_continous -0001b31e bitmap_get_continous -0001b3b8 get_free_bitmap -0001b411 __rtc_check_in_progress -0001b438 __rtc_get_register -0001b45c get_current_time -0001b5a5 get_time -0001b5d3 init_tss -0001b605 exec_cmd -0001b75e __ksymbol_exec_cmd -0001b77c align_to_pointer_size -0001b78e calculate_size_unit -0001b7ee kernel_panic -0001b810 kref_init -0001b82e kref_get -0001b85a kref_put -0001b886 csprintf -0001ba84 script_parse -0001bb54 login -0001bd91 __register_kthread_login -0001bdaf help -0001bff1 clear -0001c014 __ksymbol_new -0001c032 __ksymbol_list -0001c050 __ksymbol_color -0001c06e __ksymbol_about -0001c08c __ksymbol_help -0001c0aa __ksymbol_view -0001c0c8 __ksymbol_file -0001c0e6 __ksymbol_tcp -0001c104 __ksymbol_conf -0001c122 __ksymbol_clear -0001c140 new -0001c27c list -0001c37d file -0001c540 color -0001c5e2 about -0001c621 view -0001c831 tcp -0001cb06 __tcp_reader -0001cc26 conf -0001cea7 attach_disk_dev -0001cecf disk_attached -0001cedb disk_name -0001cee8 disk_device_get -0001cef2 disk_size -0001cf12 write_block -0001cf53 write_block_offset -0001cf9a read_block -0001cfdb read_block_offset -0001d049 sched_consume -0001d08e sched_add -0001d0ec sched_prioritize -0001d1a5 sched_round_robin -0001d386 sched_exit -0001d443 sched_block -0001d565 sched_default -0001d63d sched_sleep -0001d6e7 sched_init_default -0001d76c get_scheduler -0001d776 kernel_sleep -0001d795 kernel_yield -0001d7dc kernel_exit -0001d812 block -0001d83f unblock -0001d844 work_queue_add -0001d92c init_worker -0001d944 worker_thread -0001d9e3 __ring_buffer_add -0001da8f __ring_buffer_read -0001db9d rbuffer_new -0001dc0a rbuffer_free -0001dc30 error_get_string -0001dc70 kclock -0001e14b __register_kthread_kclock -0001e169 tar_extract -0001e3b0 __ksymbol_tar -0001e3ce tar_list -0001e4d3 tar -0001e74b rgb_to_vga -0001e75f rgb_to_components -0001e78a color_distance_squared -0001e7fa rgb_init_color_table -0001e885 iface_loopback_write -0001e94a iface_loopback_interrupt -0001e965 iface_loopback_read -0001ea0f net_init_loopback -0001ea2a serial_put -0001ea6e serial_write -0001eab4 serial_printf -0001ec68 init_serial -0001ed32 inportb -0001ed3f inportw -0001ed4d inportl -0001ed5a outportb -0001ed6a outportw -0001ed7b outportl -0001ed8b sys_create_thread -0001edad __add_systemcall_sys_create_thread -0001edbc add_system_call -0001ee00 system_call -0001ee6f hashmap_put -0001eedb hashmap_get -0001ef63 hashmap_add -0001eff1 hashmap_free -0001eff6 reset_vga_palette -0001f040 vga_set_palette -0001f12f b8to16 -0001f145 vesa_put_pixel -0001f173 vesa_put_box -0001f1ed vesa_put_block -0001f267 vesa_put_char -0001f2e1 vesa_put_char16 -0001f379 vesa_put_icon16 -0001f3f4 vesa_write -0001f437 vesa_write_str -0001f469 vesa_fill -0001f4ed vesa_fillrect -0001f55c vesa_inner_box -0001f668 vesa_printf -0001f8f4 ksyms_init -0001fb13 ksyms_add_symbol -0001fbcb __ksymbol_backtrace -0001fbe9 ksyms_list -0001fc4d ksyms_resolve_symbol -0001fd04 __backtrace_from -0001fe22 backtrace -0001fe37 ws_fullscreen -0001ffb5 ws_remove -00020069 ws_add -00020158 ws_destroy -00020202 ws_draw -000204b3 ws_raw_wallpaper -0002059d ws_set_background_file -0002087d ws_init -00020964 ws_set_background -00020a13 ws_new -00020aa4 encode_run_length -00020b2d decode_run_length -00020ba4 __mouse_handler -00020cbc mouse_wait -00020d04 mouse_write -00020d46 mouse_get_event -00020d8b mouse_init -00020e74 sys_ipc_open -00020ec6 __add_systemcall_sys_ipc_open -00020ee1 __add_systemcall_sys_ipc_close -00020efc __add_systemcall_sys_ipc_send -00020f17 __add_systemcall_sys_ipc_receive -00020f32 sys_ipc_close -00020f73 sys_ipc_send -00020fd3 sys_ipc_receive -00021032 sysinf -00021d9e __register_kthread_sysinf -00021dbc echo -00021df9 res -00021e3c ifconfig -00021e4d __ksymbol_ifconfig -00021e6b __ksymbol_ps -00021e89 __ksymbol_tree -00021ea7 __ksymbol_fat16 -00021ec5 __ksymbol_xxd -00021ee3 __ksymbol_sh -00021f01 __ksymbol_ed -00021f1f __ksymbol_exec -00021f3d __ksymbol_ths -00021f5b __ksymbol_dns -00021f79 __ksymbol_th -00021f97 __ksymbol_kill -00021fb5 __ksymbol_echo -00021fd3 __ksymbol_fdisk -00021ff1 __ksymbol_meminfo -0002200f __ksymbol_res -0002202d __ksymbol_bg -0002204b __ksymbol_exit -00022069 __ksymbol_socks -00022087 __ksymbol_reset -000220a5 exit -000220db ps -00022339 print_pcb_tree -00022432 tree -00022476 fat16 -000224a2 xxd -00022595 sh -00022693 ed -000226e2 exec -00022844 ths -000228b0 dns -00022924 th -00022946 kill -00022968 fdisk -00022ae5 meminfo -00022cb8 bg -00022d39 socks -00022fd0 __register_kthread_shell -00022fee __register_kthread_textshell -0002300c shell_clear -00023051 reset_shell -000230c4 reset -00023118 shell_put -000232f6 shell -00023542 cleanup_function -0002356d testfn -000235a5 draw_box -0002368e __textshell_reset_box -0002371e textshell -0002398c __net_find_interface -000239ec net_drop_packet -00023a0d net_handle_recieve -00023b38 net_get_interfaces -00023b42 net_configure_iface -00023b98 net_incoming_packet -00023c4a net_get_iface -00023cc6 net_iface_up -00023cf1 net_iface_down -00023d1c net_list_ifaces -00023e30 net_register_interface -00023e65 net_send_skb -00023ef1 net_get_info -00023f1c networking_main -000240f8 __dhcp_add_option -00024162 __dhcp_send_discovery -000242a4 __dhcp_send_request -00024421 dhcp_get_state -0002442d dhcp_get_dns -00024437 dhcp_get_ip -00024450 dhcp_get_gw -00024469 dhcpd -000246fd udp_server -0002478c tcp_server -00024904 __net_terminal_writef -0002496d __register_kthread_tcp_server -0002498b __register_kthread_udp_server -000249a9 __register_kthread_udptest -000249c7 udptest -00024a56 tcpd -00024b3e logd -00024bad __register_kthread_logd -00024bcb logd_attach_by_pid -00024c13 taskbar_about -00024c30 taskbar_clock -00024c4d taskbar_sysinf -00024c6a taskbar_bg_retro -00024ca5 taskbar_bg_lotr2 -00024cbe taskbar_bg_lotr -00024cd7 taskbar_bg_default_color_gray -00024ced taskbar_bg_default_color -00024d03 taskbar_wolfstein -00024d42 taskbar_bg_graph -00024d81 taskbar_bg_calc -00024dc0 taskbar_colors -00024dff taskbar_cube -00024e3e taskbar_editor -00024e7d taskbar_finder -00024ebc taskbar_terminal -00024f09 __register_kthread_taskbar -00024f27 taskbar_hdr_opt_event -00024fb1 taskbar -000255be about -0002578d __register_kthread_about -000257ab gfx_default_hover -000258d9 gfx_draw_window -000266f4 gfx_destory_window -00026785 gfx_window_resize -00026832 gfx_window_maximize -000268af gfx_default_mouse_up -00026981 gfx_default_mouse_down -00026a47 gfx_default_click -00026c74 gfx_window_set_resizable -00026c8b kernel_gfx_window_border_color -00026cb8 gfx_new_window -00026f13 gfx_point_in_rectangle -00026f44 gfx_draw_component -00026f8a gfx_composition_remove_window -00026fb8 gfx_composition_add_window -00027003 gfx_set_background_color -00027058 gfx_raw_background -000270a9 gfx_decode_background_image -000270fa gfx_set_taskbar -00027151 gfx_compositor_main -000271c9 kernel_gfx_draw_circle_helper -00027440 gfx_get_window_width -00027457 gfx_get_window_height -0002746e gfx_push_event -00027535 gfx_put_icon16 -00027629 gfx_put_icon32 -0002771d gfx_event_loop -0002783b kernel_gfx_draw_rectangle -0002793d kernel_gfx_draw_contoured_box -000279e1 kernel_gfx_draw_pixel -00027a8a kernel_gfx_draw_bitmap -00027baf kernel_gfx_draw_char -00027c99 kernel_gfx_set_position -00027cb9 gfx_commit -00027cd4 kernel_gfx_draw_text -00027d62 gfx_button_ext -00027e8b gfx_button -00027ead kernel_gfx_set_title -00027f19 kernel_gfx_set_header -00027f85 kernel_gfx_draw_line -0002811f kernel_gfx_draw_circle -000281a2 kernel_gfx_draw_section -000281ac kernel_gfx_draw_format_text -000284fe gfx_syscall_hook -000286b2 gfx_total_themes -000286bc kernel_gfx_current_theme -000286c6 kernel_gfx_update_theme -00028798 kernel_gfx_default_theme -000287a2 kernel_gfx_set_theme -000287cb kernel_gfx_get_theme -000287ea gfx_new_ctx -0002884a gfx_init_framebuffer -000289ba netdev_attach_driver -00028a67 is_netdev_attached -00028a79 netdev_transmit -00028a98 netdev_recieve -00028ac5 net_ethernet_add_header -00028b5d net_ethernet_parse -00028bd8 __skb_queue_remove -00028c1a __skb_queue_add -00028c6e skb_free_queue -00028caa skb_new_queue -00028d15 skb_free -00028d54 skb_new -00028dc3 skb_consume -00028df8 __net_arp_send -00028eb8 net_init_arp -00028f08 net_arp_add_entry -00028fa0 net_arp_find_entry -00028fef net_arp_respond -00029068 net_net_arp_request -000290f2 arp_parse -000291a0 net_ipv4_print -000291aa net_ipv4_add_header -000292e5 net_is_ipv4 -00029326 net_ipv4_parse -00029457 ntohl -00029487 htonl -0002949e ntohs -000294af htons -000294c0 checksum -0002951b transport_checksum -00029574 ip_to_int -00029616 net_icmp_handle -000296df net_icmp_response -000296e9 net_icmp_request -000297b0 ping -0002980d net_icmp_parse -00029881 net_udp_send -000299ba net_udp_parse -00029ae6 socket_type_to_str -00029af9 socket_domain_to_str -00029b0c socket_protocol_to_str -00029b1f net_sock_bind -00029b6e net_get_sockets -00029b8e sock_get -00029bb3 get_total_sockets -00029bbd net_sock_is_established -00029c05 net_sock_awaiting_ack -00029c4d net_sock_data_ready -00029ca8 net_sock_read -00029dab net_sock_add_data -0002a00f sock_find_listen_tcp -0002a057 net_sock_find_tcp -0002a24a net_prepare_tcp_sock -0002a2da net_sock_accept -0002a2f1 net_socket_find_udp -0002a360 kernel_sock_shutdown -0002a391 kernel_sock_cleanup -0002a41b kernel_sock_close -0002a453 kernel_socket_create -0002a5d8 net_init_sockets -0002a622 gethostname -0002ab50 __add_systemcall_gethostname -0002ab6b net_init_dns -0002ab9e route -0002abef tcb_init -0002ac11 tcb_new -0002ad81 tcp_state_to_str -0002ad9e tcp_new_connection -0002ae2a tcp_free_connection -0002ae51 tcp_is_listening -0002ae6b tcp_set_listening -0002aecf tcp_calculate_checksum -0002af98 __tcp_send -0002b0b4 tcp_send_segment -0002b1fb tcp_accept_connection -0002b33f tcp_send_ack -0002b477 tcp_read -0002b481 tcp_recv_segment -0002b48b tcp_connect -0002b532 tcp_send_syn -0002b53c tcp_recv_ack -0002b5c3 tcp_recv_fin -0002b5cd tcp_recv_syn -0002b703 tcp_send_fin -0002b7d3 tcp_close_connection -0002b816 tcp_parse -0002bcb2 kernel_bind -0002bceb kernel_recvfrom -0002bcf5 kernel_recv -0002bd6b kernel_recv_timeout -0002bd95 kernel_connect -0002be9b kernel_sendto -0002bf59 kernel_accept -0002bfc0 kernel_listen -0002bfec kernel_send -0002c076 sys_kernel_bind -0002c0ac __add_systemcall_sys_kernel_bind -0002c0c7 __add_systemcall_sys_kernel_accept -0002c0e2 __add_systemcall_sys_kernel_connect -0002c0fd __add_systemcall_sys_kernel_listen -0002c118 __add_systemcall_sys_kernel_recv -0002c133 __add_systemcall_sys_kernel_recvfrom -0002c14e __add_systemcall_sys_kernel_recv_timeout -0002c169 __add_systemcall_sys_kernel_send -0002c184 __add_systemcall_sys_kernel_sendto -0002c19f __add_systemcall_sys_socket_create -0002c1ba __add_systemcall_sys_kernel_sock_close -0002c1d5 sys_kernel_accept -0002c219 sys_kernel_connect -0002c24f sys_kernel_listen -0002c282 sys_kernel_recv -0002c2be sys_kernel_recvfrom -0002c302 sys_kernel_recv_timeout -0002c344 sys_kernel_send -0002c380 sys_kernel_sendto -0002c3c4 sys_socket_create -0002c3ef sys_kernel_sock_close -0002c434 __iface_send -0002c467 __iface_recieve -0002c49a __iface_assign -0002c4b1 __iface_detach -0002c4c9 __iface_set_gateway -0002c4e0 __iface_set_netmask -0002c4f7 __iface_configure -0002c54b __iface_attach -0002c574 net_interface_create -0002c5b0 net_register_netdev -0002c6cc net_interface_destroy -0002c6e5 __default_restart -0002c6ef __default_stop -0002c758 __default_start -0002c7db nm_new -0002c868 nm_free -0002c8b1 net_firewall_create -0002c8d8 fs_file2fd -0002c941 fs_alloc_file -0002c990 fs_free_file -0002c9ee fs_register -0002cac1 fs_init -0002cacb fs_unregister -0002cb32 fs_get -0002cb3c fs_close -0002cbb2 fs_open -0002cc30 fs_seek -0002ccb1 fs_read -0002cdca fs_load_from_file -0002ce5a fs_write -0002cf19 fat16_rmdir -0002cf23 fat16_stat -0002cf2d fat16_close -0002cf9b fat16_rename -0002d034 fat16_mkdir -0002d11d fat16_remove -0002d194 fat16_open -0002d2e2 fat16_read -0002d445 fat16_write -0002d577 fat16_list -0002d843 fat16_init -0002d8fb path_next_iter -0002d969 inode_from_path_recursise -0002d9e7 inode_from_path -0002daa9 ext_get_root -0002dab6 ext_get_current_dir -0002dac7 ext_get_size -0002dad1 ext_get_inodes -0002dadb ext_get_blocks -0002dae5 ext_sync -0002db5c ext_create -0002dc4b ext_read -0002dcca ext_seek -0002dd15 ext_write -0002dd85 ext_close -0002ddeb ext_open_from_directory -0002def3 ext_open -0002dfae ext_size -0002dfdb change_directory -0002e045 ext_create_directory -0002e1e3 ext_create_file_system -0002e4b4 init_ext -0002e654 listdir -0002e77d __inode_sync -0002e7e0 __inode_cache_insert -0002e8d6 __inode_load -0002e94a inodes_sync -0002e989 inode_get -0002e9ea inode_read -0002ebda inode_write -0002ee41 alloc_inode -0002eefe mkdir -0002efa7 sync -0002efdd mkfs -0002efee fat16_read_data_from_cluster -0002f040 fat16_read_data -0002f11d fat16_find_cluster_by_offset -0002f19c fat16_write_data_to_cluster_with_offset -0002f1db fat16_print_cluster_chain -0002f20d fat16_write_data_to_cluster -0002f244 fat16_write_data -0002f35f get_fat_start_block -0002f36b get_root_directory_start_block -0002f37e get_data_start_block -0002f394 fat16_get_fat_entry -0002f3b3 fat16_set_fat_entry -0002f3f7 fat16_sync_fat_table -0002f473 fat16_allocate_cluster -0002f48f fat16_free_cluster -0002f4a8 fat16_get_free_cluster -0002f501 fat16_sync_directory_entry -0002f588 fat16_read_entry -0002f639 fat16_find_entry -0002f774 fat16_rename_entry -0002f7e9 fat16_free_clusters -0002f834 fat16_delete_entry -0002f89f fat16_add_entry -0002fa0a fat16_used_blocks -0002fa47 fat16_to_upper -0002fa77 fat16_name_compare -0002fb92 sstrtok -0002fc55 fat16_directory_entry_debug -0002fd2c fat16_get_directory_entry -0002ff35 fat16_create_directory -0003003e fat16_read_file -00030093 fat16_create_file -00030115 fat16_create_empty_file -000301dd fat16_directory_entries -000302c8 fat16_mbr_clear -00030393 fat16_mbr_add_entry -00030488 fat16_print_root_directory_entries -000304a4 fat16_change_directory -00030530 fat16_bootblock_info -000306b1 fat16_set_time -000306e9 fat16_set_date -00030725 fat16_load -000308a8 fat16_format -00030b61 mbr_partition_type_string -00030be9 mbr_partitions_parse -00030cb7 mbr_get -00030cc1 mbr_partition_load -00030ce3 __ksymbol_snakegame -00030d01 init_game -00030d51 draw -00030db1 get_input -00030dd2 update -00030f5e game_loop -00030f88 snakegame -00030fd5 _code_end +00010103 kernel +00010549 kernel_get_context +0001054f hexdump +0001078b __terminal_set_ops +00010854 __terminal_scanf +0001085a __terminal_write +000108a4 __terminal_getchar_graphics +000108ed __terminal_scan_graphics +000109cb __terminal_reset +00010a0f __terminal_detach +00010a50 __terminal_attach +00010a97 __terminal_commit_graphics +00010b6d __terminal_remove_line +00010bad __terminal_putchar_graphics +00010c72 __terminal_writef +00010f19 __terminal_getchar_textmode +00010f41 __terminal_scan_textmode +00011001 __terminal_commit_textmode +000110b9 __terminal_putchar_textmode +00011105 scan +0001113c terminal_set_color +0001113d terminal_attach +0001115a terminal_commit +00011177 terminal_putchar +00011178 terminal_create +00011294 terminal_destroy +000112cc tlb_flush_addr +000112d4 load_page_directory +000112e4 enable_paging +000112f6 pcb_save_context +00011322 pcb_restore_context +0001134b _start_pcb +0001137d _start_pcb_skip +00011398 __ksymbol_lspci +000113b2 pci_get_class_name +000113c5 pci_get_device_name +00011436 pci_get_vendor_name +00011484 lspci +000115cd pci_get_devices +000115d3 pci_read_word +0001162d pci_write_dword +0001167c pci_enable_device_busmaster +000116d1 pci_register_device +00011752 init_pci +00011903 pci_find_device +00011999 virtual_read +000119c4 virtual_write +000119ef virtual_disk_attach +00011a0e wm_default_changes +00011ab6 wm_default_workspace +00011b18 wm_default_draw +00011bb6 wm_default_add +00011c5d init_windowmanager +00011da7 wm_default_mouse_event +00011fcd wm_default_push_back +000120bf wm_default_push_front +000121ae wm_default_remove +000122bf wm_destroy +0001239d wm_new +00012404 screen_set_cursor +00012464 scrcolor_set +00012478 scrput +0001249e scrwrite +000124e7 scr_clear +00012539 scr_scroll +00012581 scrprintf +000127c5 strlen +000127e7 strcpy +0001281b strncmp +00012856 strcmp +00012896 memcmp +000128d1 parse_arguments +000129b4 strchr +000129e3 getopt +00012af3 memcpy +00012b60 strtok +00012c18 xmemcpy +00012c9f memset +00012d1f isdigit +00012d33 isspace +00012d42 tolower +00012d56 isxdigit +00012d7a htoi +00012e1e atoi +00012eae itoa +00012f54 itohex +00012fd0 rdtsc +00012fd3 rand +00012fef general_protection_fault +0001305c interrupt_get_count +0001306b print_page_fault_info +00013146 page_fault_interrupt +000131ea interrupt_install_handler +000131fc load_data_segments +00013208 isr_handler +000132f6 init_interrupts +0001346f idt_flush +00013477 isr0 +00013484 isr1 +00013491 isr2 +0001349e isr3 +000134ab isr4 +000134b8 isr5 +000134c5 isr6 +000134d2 isr7 +000134df isr8 +000134ec isr9 +000134f9 isr10 +00013506 isr11 +00013513 isr12 +00013520 isr13 +0001352d isr14 +0001353a isr15 +00013547 isr16 +00013554 isr17 +00013561 isr18 +0001356e isr19 +0001357b isr20 +00013588 isr21 +00013595 isr22 +000135a2 isr23 +000135af isr24 +000135bc isr25 +000135c9 isr26 +000135d6 isr27 +000135e3 isr28 +000135f0 isr29 +000135fd isr30 +0001360a isr31 +00013617 isr32 +00013624 isr33 +00013631 isr34 +0001363e isr35 +00013648 isr36 +00013652 isr37 +0001365c isr38 +00013666 isr39 +00013670 isr40 +0001367a isr41 +00013684 isr42 +0001368e isr43 +00013698 isr44 +000136a2 isr45 +000136ac isr46 +000136b6 isr47 +000136c0 isr_entry +000136db syscall_return_value +000136df _syscall_entry +0001371c page_fault_save +00013720 page_fault_error +00013724 _page_fault_entry +00013756 timer_callback +0001378b timer_get_tick +00013791 time_get_difference +000137d4 init_pit +00013838 gdt_set_segment +00013881 init_gdt +0001398f rc +00013b75 __ksymbol_rc +00013b8f __ksymbol_as +00013ba9 __ksymbol_cc +00013bc3 as +00013f6f cc +00013fca __cc +000142b1 vm_print +0001448e eval +00014920 vm_setup +00014961 vm_init +000149bc vm_free +000149eb vm_setup_stack +00014a47 lex_get_error +00014a54 next +00014f5f match +00014fab expression +00016294 statement +0001649d function_parameter +0001665b function_body +00016866 function_declaration +000168ef enum_declaration +000169f6 global_declaration +00016c1f lex_init +00016cba program +00016d5b find_mp_floating_ptr +00016d97 smp_parse +00016edc kb_get_char +00016f28 kb_add_char +00016f63 kb_callback +00017190 init_keyboard +00017207 pcb_await +00017231 __pcb_get_free +000172ef __add_systemcall_pcb_await +00017306 __pcb_free +00017355 __pcb_init_kernel_stack +000173b6 __pcb_init_process +0001747b init_pcbs +000174d6 pcb_total_usage +000174ff pcb_get_info +00017629 pcb_kill +00017646 Genesis +00017648 idletask +00017663 pcb_get_by_pid +00017674 pcb_get_by_name +000176cd pcb_dbg_print +00017747 pcb_cleanup_routine +00017918 pcb_create_thread +000179cb pcb_create_process +00017c12 pcb_create_kthread +00017e9f start_pcb +00017ed7 __pcb_queue_peek +00017f16 __pcb_queue_pop +00017f72 __pcb_queue_remove +00017fe4 __pcb_queue_add +0001805d __pcb_queue_push +000180f6 pcb_new_queue +00018127 memory_map_init +000181ee memory_map_get +000181f4 free +00018259 malloc +000182ee calloc +00018321 get_mem_info +00018379 init_memory +0001840b vmem_free +0001847b vmem_alloc +000184e8 vmem_free_page_region +0001864e vmem_page_region_alloc +00018689 vmem_create_page_region +000187cd vmem_free_allocations +000188fc vmem_continious_allocation_map +00018902 vmem_free_allocation +00018903 vmem_stack_free +000189b4 vmem_stack_alloc +00018d39 vmem_dump_heap +00018dce vmem_init_process_thread +00018ebf vmem_init_process +000191ed vmem_cleanup_process_thead +00019264 vmem_cleanup_process +00019452 vmem_init_kernel +00019613 vmem_allocator_create +00019677 vmem_map_driver_region +000196f5 vmem_total_usage +00019708 vmem_init +0001983a kalloc +000199cf kcalloc +00019a01 kfree +00019a97 palloc +00019ad9 pmemory_used +00019af5 kmemory_used +00019afb kmemory_total +00019b07 kmem_init +00019ba4 e1000_receive +00019c7f e1000_transmit +00019d41 e1000_callback +00019d68 _e1000_tx_init +00019e0c _e1000_rx_init +00019ea6 e1000_attach +0001a0d6 display_get_info +0001a13f kenv_init +0001a156 kenv_set +0001a18b config_list +0001a258 config_load +0001a643 config_get_value +0001a6fe spin_lock +0001a71e spin_unlock +0001a72c mutex_init +0001a749 acquire +0001a7e6 release +0001a888 kthread_entry +0001a8de kthread_list +0001a943 register_kthread +0001aa1c start +0001aabe ata_primary +0001aabf ata_secondary +0001aac0 ata_wait +0001ab3a ata_write +0001acb1 ata_read +0001ae41 ata_ide_init +0001b011 set_bitmap +0001b033 unset_bitmap +0001b057 get_bitmap +0001b079 get_bitmap_size +0001b08d create_bitmap +0001b0c1 destroy_bitmap +0001b0d4 bitmap_unset_continous +0001b10e bitmap_get_continous +0001b1aa get_free_bitmap +0001b1ff __rtc_check_in_progress +0001b221 __rtc_get_register +0001b241 get_current_time +0001b38c get_time +0001b3b6 init_tss +0001b3e4 exec_cmd +0001b4e8 __ksymbol_exec_cmd +0001b502 align_to_pointer_size +0001b510 calculate_size_unit +0001b572 kernel_panic +0001b590 kref_init +0001b5aa kref_get +0001b5d2 kref_put +0001b5fa csprintf +0001b7fb script_parse +0001b8ce login +0001bb0c __register_kthread_login +0001bb26 help +0001bd64 clear +0001bd83 __ksymbol_new +0001bd9d __ksymbol_list +0001bdb7 __ksymbol_color +0001bdd1 __ksymbol_about +0001bdeb __ksymbol_help +0001be05 __ksymbol_view +0001be1f __ksymbol_file +0001be39 __ksymbol_tcp +0001be53 __ksymbol_conf +0001be6d __ksymbol_clear +0001be87 new +0001bfbf list +0001c0bc file +0001c27b color +0001c319 about +0001c354 view +0001c560 tcp +0001c831 __tcp_reader +0001c94d conf +0001cbca attach_disk_dev +0001cbee disk_attached +0001cbf6 disk_name +0001cbff disk_device_get +0001cc05 disk_size +0001cc21 write_block +0001cc5e write_block_offset +0001cca1 read_block +0001ccde read_block_offset +0001cd48 sched_consume +0001cd89 sched_add +0001cde3 sched_prioritize +0001ce98 sched_round_robin +0001d079 sched_exit +0001d132 sched_block +0001d250 sched_default +0001d324 sched_sleep +0001d3ca sched_init_default +0001d44b get_scheduler +0001d451 kernel_sleep +0001d46c kernel_yield +0001d4af kernel_exit +0001d4e1 block +0001d50a unblock +0001d50b work_queue_add +0001d5f3 init_worker +0001d60b worker_thread +0001d6aa __ring_buffer_add +0001d752 __ring_buffer_read +0001d85c rbuffer_new +0001d8c5 rbuffer_free +0001d8e7 error_get_string +0001d923 kclock +0001de03 __register_kthread_kclock +0001de1d tar_extract +0001e064 __ksymbol_tar +0001e07e tar_list +0001e182 tar +0001e3f6 rgb_to_vga +0001e406 rgb_to_components +0001e42d color_distance_squared +0001e498 rgb_init_color_table +0001e529 iface_loopback_write +0001e5ea iface_loopback_interrupt +0001e601 iface_loopback_read +0001e6a4 net_init_loopback +0001e6bb serial_put +0001e6fb serial_write +0001e73d serial_printf +0001e8dd init_serial +0001e9a3 inportb +0001e9ac inportw +0001e9b6 inportl +0001e9bf outportb +0001e9cd outportw +0001e9dc outportl +0001e9e9 sys_create_thread +0001ea07 __add_systemcall_sys_create_thread +0001ea12 add_system_call +0001ea52 system_call +0001eabd hashmap_put +0001eb24 hashmap_get +0001eba8 hashmap_add +0001ec32 hashmap_free +0001ec33 reset_vga_palette +0001ec79 vga_set_palette +0001ed64 b8to16 +0001ed74 vesa_put_pixel +0001ed9e vesa_put_box +0001ee19 vesa_put_block +0001ee94 vesa_put_char +0001ef0f vesa_put_char16 +0001efa2 vesa_put_icon16 +0001f01b vesa_write +0001f05a vesa_write_str +0001f088 vesa_fill +0001f10a vesa_fillrect +0001f17c vesa_inner_box +0001f284 vesa_printf +0001f4f1 ksyms_init +0001f718 ksyms_add_symbol +0001f7cc __ksymbol_backtrace +0001f7e6 ksyms_list +0001f846 ksyms_resolve_symbol +0001f8f9 __backtrace_from +0001fa16 backtrace +0001fa27 ws_fullscreen +0001fba1 ws_remove +0001fc51 ws_add +0001fd3c ws_destroy +0001fde2 ws_draw +0002008f ws_raw_wallpaper +00020175 ws_set_background_file +00020452 ws_init +00020535 ws_set_background +000205e0 ws_new +0002066d encode_run_length +000206ea decode_run_length +00020755 __mouse_handler +0002086c mouse_wait +000208b4 mouse_write +000208f6 mouse_get_event +00020937 mouse_init +00020a1c sys_ipc_open +00020a6a __add_systemcall_sys_ipc_open +00020a81 __add_systemcall_sys_ipc_close +00020a98 __add_systemcall_sys_ipc_send +00020aaf __add_systemcall_sys_ipc_receive +00020ac6 sys_ipc_close +00020b0f sys_ipc_send +00020b76 sys_ipc_receive +00020bdc sysinf +0002192e __register_kthread_sysinf +00021948 echo +00021981 res +000219c0 ifconfig +000219cd __ksymbol_ifconfig +000219e7 __ksymbol_ps +00021a01 __ksymbol_tree +00021a1b __ksymbol_fat16 +00021a35 __ksymbol_xxd +00021a4f __ksymbol_sh +00021a69 __ksymbol_ed +00021a83 __ksymbol_exec +00021a9d __ksymbol_ths +00021ab7 __ksymbol_dns +00021ad1 __ksymbol_th +00021aeb __ksymbol_kill +00021b05 __ksymbol_echo +00021b1f __ksymbol_fdisk +00021b39 __ksymbol_meminfo +00021b53 __ksymbol_res +00021b6d __ksymbol_bg +00021b87 __ksymbol_exit +00021ba1 __ksymbol_socks +00021bbb __ksymbol_reset +00021bd5 exit +00021c07 ps +00021e61 print_pcb_tree +00021f5a tree +00021f9a fat16 +00021fc2 xxd +000220b1 sh +000221ab ed +000221f6 exec +00022352 ths +000223ba dns +0002242a th +00022448 kill +00022466 fdisk +000225df meminfo +000227ae bg +0002282b socks +00022abb __register_kthread_shell +00022ad5 __register_kthread_textshell +00022aef shell_clear +00022b30 reset_shell +00022b9f reset +00022bef shell_put +00022dc8 shell +00023010 cleanup_function +00023037 testfn +0002306b draw_box +00023150 __textshell_reset_box +000231e0 textshell +0002344c __net_find_interface +000234ac net_drop_packet +000234cd net_handle_recieve +000235f4 net_get_interfaces +000235fa net_configure_iface +0002364c net_incoming_packet +000236fd net_get_iface +00023773 net_iface_up +0002379a net_iface_down +000237c1 net_list_ifaces +000238d1 net_register_interface +00023902 net_send_skb +0002398a net_get_info +000239b1 networking_main +00023b8d __dhcp_add_option +00023bfd __dhcp_send_discovery +00023d3f __dhcp_send_request +00023ebc dhcp_get_state +00023ec4 dhcp_get_dns +00023eca dhcp_get_ip +00023edf dhcp_get_gw +00023ef4 dhcpd +00024173 udp_server +000241fe tcp_server +00024372 __net_terminal_writef +000243d7 __register_kthread_tcp_server +000243f1 __register_kthread_udp_server +0002440b __register_kthread_udptest +00024425 udptest +000244b0 tcpd +00024594 logd +000245ff __register_kthread_logd +00024619 logd_attach_by_pid +0002465d taskbar_readme +00024676 taskbar_about +0002468f taskbar_clock +000246a8 taskbar_sysinf +000246c1 taskbar_bg_retro +000246f8 taskbar_bg_lotr2 +0002470d taskbar_bg_lotr +00024722 taskbar_bg_default_color_gray +00024734 taskbar_bg_default_color +00024746 taskbar_wolfstein +00024781 taskbar_bg_graph +000247bc taskbar_bg_calc +000247f7 taskbar_colors +00024832 taskbar_cube +0002486d taskbar_editor +000248a8 taskbar_finder +000248e3 taskbar_terminal +0002492c __register_kthread_taskbar +00024946 taskbar_hdr_opt_event +000249d0 taskbar +00024f87 about +00025152 __register_kthread_about +0002516c __register_kthread_readme +00025186 readme +000252e8 gfx_default_hover +00025407 gfx_destory_window +00025494 gfx_window_resize +0002553d gfx_window_maximize +000255b6 gfx_default_mouse_up +00025684 gfx_default_mouse_down +00025746 gfx_default_click +0002596f gfx_draw_window +0002675b gfx_window_set_resizable +0002676e kernel_gfx_window_border_color +00026797 gfx_new_window +000269eb gfx_point_in_rectangle +00026a18 gfx_draw_component +00026a5a gfx_composition_remove_window +00026a84 gfx_composition_add_window +00026acb gfx_set_background_color +00026b1c gfx_raw_background +00026b69 gfx_decode_background_image +00026bb6 gfx_set_taskbar +00026c09 gfx_compositor_main +00026c7d kernel_gfx_draw_circle_helper +00026f29 gfx_get_window_width +00026f3c gfx_get_window_height +00026f4f gfx_push_event +0002700b gfx_put_icon16 +000270ff gfx_put_icon32 +000271f3 gfx_event_loop +0002730a kernel_gfx_draw_rectangle +00027404 kernel_gfx_draw_contoured_box +000274a4 kernel_gfx_draw_pixel +00027542 kernel_gfx_draw_bitmap +00027660 kernel_gfx_draw_char +00027760 kernel_gfx_set_position +0002777c gfx_commit +00027793 kernel_gfx_draw_text +0002781d gfx_button_ext +00027942 gfx_button +00027960 kernel_gfx_set_title +000279c8 kernel_gfx_set_header +00027a30 kernel_gfx_draw_line +00027bcb kernel_gfx_draw_circle +00027c4a kernel_gfx_draw_section +00027c50 kernel_gfx_draw_format_text +00027fa2 gfx_syscall_hook +00028151 gfx_total_themes +00028157 kernel_gfx_current_theme +0002815d kernel_gfx_update_theme +0002822b kernel_gfx_default_theme +00028231 kernel_gfx_set_theme +00028256 kernel_gfx_get_theme +00028271 gfx_new_ctx +000282cd gfx_init_framebuffer +00028439 netdev_attach_driver +000284e2 is_netdev_attached +000284f0 netdev_transmit +0002850b netdev_recieve +00028534 net_ethernet_add_header +000285c8 net_ethernet_parse +0002863c __skb_queue_remove +0002867a __skb_queue_add +000286ca skb_free_queue +00028702 skb_new_queue +00028769 skb_free +000287a4 skb_new +0002880f skb_consume +00028840 __net_arp_send +00028900 net_init_arp +0002894c net_arp_add_entry +000289db net_arp_find_entry +00028a26 net_arp_respond +00028a9b net_net_arp_request +00028b21 arp_parse +00028bcb net_ipv4_print +00028bd1 net_ipv4_add_header +00028d08 net_is_ipv4 +00028d45 net_ipv4_parse +00028e72 ntohl +00028e9e htonl +00028eb1 ntohs +00028ebe htons +00028ecb checksum +00028f22 transport_checksum +00028f77 ip_to_int +00029015 net_icmp_handle +000290da net_icmp_response +000290e0 net_icmp_request +000291a3 ping +000291fc net_icmp_parse +0002926c net_udp_send +000293a1 net_udp_parse +000294c9 socket_type_to_str +000294d8 socket_domain_to_str +000294e7 socket_protocol_to_str +000294f6 net_sock_bind +00029541 net_get_sockets +0002955d sock_get +0002957e get_total_sockets +00029584 net_sock_is_established +000295c8 net_sock_awaiting_ack +0002960c net_sock_data_ready +00029665 net_sock_read +00029765 net_sock_add_data +000299c5 sock_find_listen_tcp +00029a09 net_sock_find_tcp +00029bfb net_prepare_tcp_sock +00029c87 net_sock_accept +00029c9a net_socket_find_udp +00029d05 kernel_sock_shutdown +00029d32 kernel_sock_cleanup +00029db8 kernel_sock_close +00029dec kernel_socket_create +00029f6d net_init_sockets +00029fb3 gethostname +0002a4cd __add_systemcall_gethostname +0002a4e4 net_init_dns +0002a513 route +0002a560 tcb_init +0002a57e tcb_new +0002a6ea tcp_state_to_str +0002a703 tcp_new_connection +0002a78b tcp_free_connection +0002a7ae tcp_is_listening +0002a7c4 tcp_set_listening +0002a824 tcp_calculate_checksum +0002a8e8 __tcp_send +0002aa04 tcp_send_segment +0002ab47 tcp_accept_connection +0002ac87 tcp_send_ack +0002adbd tcp_read +0002adc3 tcp_recv_segment +0002adc9 tcp_connect +0002ae6c tcp_send_syn +0002ae72 tcp_recv_ack +0002aef5 tcp_recv_fin +0002aefb tcp_recv_syn +0002b02d tcp_send_fin +0002b0f9 tcp_close_connection +0002b138 tcp_parse +0002b5d1 kernel_bind +0002b606 kernel_recvfrom +0002b60c kernel_recv +0002b67e kernel_recv_timeout +0002b6a4 kernel_connect +0002b7a8 kernel_sendto +0002b862 kernel_accept +0002b8c5 kernel_listen +0002b8ed kernel_send +0002b973 sys_kernel_bind +0002b9a5 __add_systemcall_sys_kernel_bind +0002b9bc __add_systemcall_sys_kernel_accept +0002b9d3 __add_systemcall_sys_kernel_connect +0002b9ea __add_systemcall_sys_kernel_listen +0002ba01 __add_systemcall_sys_kernel_recv +0002ba18 __add_systemcall_sys_kernel_recvfrom +0002ba2f __add_systemcall_sys_kernel_recv_timeout +0002ba46 __add_systemcall_sys_kernel_send +0002ba5d __add_systemcall_sys_kernel_sendto +0002ba74 __add_systemcall_sys_socket_create +0002ba8b __add_systemcall_sys_kernel_sock_close +0002baa2 sys_kernel_accept +0002bae2 sys_kernel_connect +0002bb14 sys_kernel_listen +0002bb43 sys_kernel_recv +0002bb7b sys_kernel_recvfrom +0002bbbb sys_kernel_recv_timeout +0002bbf9 sys_kernel_send +0002bc31 sys_kernel_sendto +0002bc71 sys_socket_create +0002bc98 sys_kernel_sock_close +0002bcd9 __iface_send +0002bd08 __iface_recieve +0002bd37 __iface_assign +0002bd4a __iface_detach +0002bd5e __iface_set_gateway +0002bd71 __iface_set_netmask +0002bd84 __iface_configure +0002bdd4 __iface_attach +0002bdf9 net_interface_create +0002be31 net_register_netdev +0002bf49 net_interface_destroy +0002bf5e __default_restart +0002bf64 __default_stop +0002bfc9 __default_start +0002c043 nm_new +0002c0cc nm_free +0002c111 net_firewall_create +0002c134 fs_file2fd +0002c19b fs_alloc_file +0002c1e6 fs_free_file +0002c240 fs_register +0002c30f fs_init +0002c315 fs_unregister +0002c378 fs_get +0002c37e fs_close +0002c3f0 fs_open +0002c46a fs_seek +0002c4e7 fs_read +0002c5fc fs_load_from_file +0002c688 fs_write +0002c743 fat16_rmdir +0002c749 fat16_stat +0002c74f fat16_close +0002c7b9 fat16_rename +0002c84e fat16_mkdir +0002c933 fat16_remove +0002c9a6 fat16_open +0002caf0 fat16_read +0002cc54 fat16_write +0002cd82 fat16_list +0002d04a fat16_init +0002d0fe path_next_iter +0002d16d inode_from_path_recursise +0002d1eb inode_from_path +0002d2a9 ext_get_root +0002d2b2 ext_get_current_dir +0002d2bf ext_get_size +0002d2c5 ext_get_inodes +0002d2cb ext_get_blocks +0002d2d1 ext_sync +0002d344 ext_create +0002d42f ext_read +0002d4aa ext_seek +0002d4f1 ext_write +0002d55d ext_close +0002d5bf ext_open_from_directory +0002d6c5 ext_open +0002d77c ext_size +0002d7a5 change_directory +0002d80b ext_create_directory +0002d9a5 ext_create_file_system +0002dc72 init_ext +0002de0e listdir +0002df31 __inode_sync +0002df94 __inode_cache_insert +0002e08a __inode_load +0002e0fe inodes_sync +0002e139 inode_get +0002e196 inode_read +0002e37e inode_write +0002e5dc alloc_inode +0002e695 mkdir +0002e73a sync +0002e76c mkfs +0002e779 fat16_read_data_from_cluster +0002e7c7 fat16_read_data +0002e8a8 fat16_find_cluster_by_offset +0002e923 fat16_write_data_to_cluster_with_offset +0002e95e fat16_print_cluster_chain +0002e98c fat16_write_data_to_cluster +0002e9bf fat16_write_data +0002eadb get_fat_start_block +0002eae3 get_root_directory_start_block +0002eaf2 get_data_start_block +0002eb04 fat16_get_fat_entry +0002eb1f fat16_set_fat_entry +0002eb5f fat16_sync_fat_table +0002ebd7 fat16_allocate_cluster +0002ebef fat16_free_cluster +0002ec04 fat16_get_free_cluster +0002ec59 fat16_sync_directory_entry +0002ecdb fat16_read_entry +0002ed88 fat16_find_entry +0002eec3 fat16_rename_entry +0002ef34 fat16_free_clusters +0002ef7b fat16_delete_entry +0002efe2 fat16_add_entry +0002f149 fat16_used_blocks +0002f182 fat16_to_upper +0002f1ae fat16_name_compare +0002f2d3 sstrtok +0002f394 fat16_directory_entry_debug +0002f464 fat16_get_directory_entry +0002f65c fat16_create_directory +0002f761 fat16_read_file +0002f7b2 fat16_create_file +0002f830 fat16_create_empty_file +0002f8f0 fat16_directory_entries +0002f9d6 fat16_mbr_clear +0002fa7f fat16_mbr_add_entry +0002fb70 fat16_print_root_directory_entries +0002fb88 fat16_change_directory +0002fc10 fat16_bootblock_info +0002fd8d fat16_set_time +0002fdc1 fat16_set_date +0002fdf9 fat16_load +0002ff78 fat16_format +0003022d mbr_partition_type_string +000302b0 mbr_partitions_parse +00030379 mbr_get +0003037f mbr_partition_load +0003039d __ksymbol_snakegame +000303b7 init_game +00030405 draw +00030461 get_input +0003047e update +00030605 game_loop +0003062b snakegame +00030674 _code_end diff --git a/tests/utils/mocks.c b/tests/utils/mocks.c index 43bd0da..e308b43 100644 --- a/tests/utils/mocks.c +++ b/tests/utils/mocks.c @@ -162,7 +162,7 @@ void* kalloc(int size){ } int kcalloc(int size){ - return kalloc(size); + return (int)kalloc(size); } #endif From 54a2857b02e956782ea544f933aff75c5da42160 Mon Sep 17 00:00:00 2001 From: Joe Bayer Date: Wed, 10 Jan 2024 09:06:04 +0100 Subject: [PATCH 10/13] Added missing header comments for important files --- Makefile | 2 +- apps/calculator/calc.cpp | 11 + apps/colors/colors.cpp | 11 + apps/cube/cube.cpp | 11 + apps/echo.cpp | 1 - apps/editor/edit.cpp | 11 + apps/finder/finder.cpp | 11 + apps/graphs/graphs.cpp | 11 + apps/utils/Graphics.hpp | 11 + apps/utils/MsgBox.hpp | 11 + apps/utils/StdLib.hpp | 27 +- apps/utils/StringHelper.hpp | 11 + apps/utils/Thread.hpp | 11 + apps/utils/TreeView.hpp | 11 + apps/utils/cppUtils.cpp | 11 + apps/wolfstein/wolf3d.cpp | 11 + boot/bootloader.s | 11 + developer/old/Makefile | 7 - developer/old/c4.c | 532 --------------- developer/old/hello.c | 16 - developer/old/interp | Bin 67376 -> 0 bytes developer/old/interpreter.c | 65 -- developer/old/interpreter.h | 38 -- developer/old/lex.c | 1277 ----------------------------------- developer/old/lex.h | 25 - developer/old/vm.c | 253 ------- developer/old/vm.h | 26 - drivers/display.c | 11 + drivers/vbe.c | 11 + drivers/virtualdisk.c | 11 + fs/ext.c | 11 + fs/fat16_read.c | 11 + fs/fat16_write.c | 11 + fs/inode.c | 11 + fs/path.c | 11 + fs/vfs.c | 11 + graphics/api.c | 11 + graphics/core.c | 11 + graphics/theme.c | 11 + kernel/arch/gdt.c | 11 + kernel/conf.c | 11 + kernel/diskdev.c | 11 + kernel/encoding.c | 11 + kernel/env.c | 11 + kernel/ipc.c | 11 + kernel/kernel.c | 11 + kernel/ksyms.c | 11 +- kernel/kthreads/about.c | 11 + kernel/kthreads/kclock.c | 11 + kernel/kthreads/logd.c | 11 + kernel/kthreads/login.c | 11 + kernel/kthreads/snake.c | 11 + kernel/kthreads/sysinf.c | 11 + kernel/kthreads/taskbar.c | 11 + kernel/kutils.c | 51 ++ kernel/partition.c | 11 + kernel/rbuffer.c | 11 + kernel/scheduler.c | 11 + kernel/script.c | 40 -- kernel/smp.c | 11 + kernel/sync.c | 1 - kernel/syscalls.c | 11 + kernel/work.c | 11 +- lib/color.c | 11 + lib/errors.c | 11 + lib/font8.c | 12 + lib/graphics.c | 11 + lib/icons.c | 11 + lib/netlib.c | 11 + lib/tar.c | 11 + lib/util.c | 11 + net/api.c | 11 + net/firewall.c | 11 + net/icmp.c | 11 + net/interface.c | 11 + net/net.c | 11 + net/networkmanager.c | 11 + net/routing.c | 11 + net/utils.c | 11 + tools/build.c | 11 + 80 files changed, 774 insertions(+), 2292 deletions(-) delete mode 100644 developer/old/Makefile delete mode 100644 developer/old/c4.c delete mode 100644 developer/old/hello.c delete mode 100644 developer/old/interp delete mode 100644 developer/old/interpreter.c delete mode 100644 developer/old/interpreter.h delete mode 100644 developer/old/lex.c delete mode 100644 developer/old/lex.h delete mode 100644 developer/old/vm.c delete mode 100644 developer/old/vm.h delete mode 100644 kernel/script.c diff --git a/Makefile b/Makefile index 9f89f24..ba5e0c9 100644 --- a/Makefile +++ b/Makefile @@ -58,7 +58,7 @@ GFXOBJ = bin/window.o bin/component.o bin/composition.o bin/gfxlib.o bin/api.o b KERNELOBJ = bin/kernel.o bin/terminal.o bin/helpers.o bin/pci.o bin/virtualdisk.o bin/windowmanager.o bin/icons.o bin/vga.o \ bin/util.o bin/interrupts.o bin/irs_entry.o bin/timer.o bin/gdt.o bin/interpreter.o bin/vm.o bin/lex.o bin/smp.o \ bin/keyboard.o bin/pcb.o bin/pcb_queue.o bin/memory.o bin/vmem.o bin/kmem.o bin/e1000.o bin/display.o bin/env.o bin/conf.o \ - bin/sync.o bin/kthreads.o bin/ata.o bin/bitmap.o bin/rtc.o bin/tss.o bin/kutils.o bin/script.o bin/login.o bin/cmds.o \ + bin/sync.o bin/kthreads.o bin/ata.o bin/bitmap.o bin/rtc.o bin/tss.o bin/kutils.o bin/login.o bin/cmds.o \ bin/diskdev.o bin/scheduler.o bin/work.o bin/rbuffer.o bin/errors.o bin/kclock.o bin/tar.o bin/color.o bin/loopback.o \ bin/serial.o bin/io.o bin/syscalls.o bin/list.o bin/hashmap.o bin/vbe.o bin/ksyms.o bin/windowserver.o bin/encoding.o\ bin/mouse.o bin/ipc.o bin/sysinf.o ${PROGRAMOBJ} ${GFXOBJ} bin/font8.o bin/net.o bin/fs.o bin/ext.o bin/fat16.o bin/partition.o bin/snake.o diff --git a/apps/calculator/calc.cpp b/apps/calculator/calc.cpp index 7ccb9a9..6543de6 100644 --- a/apps/calculator/calc.cpp +++ b/apps/calculator/calc.cpp @@ -1,3 +1,14 @@ +/** + * @file calc.cpp + * @author Joe Bayer (joexbayer) + * @brief A simple calculator app + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/apps/colors/colors.cpp b/apps/colors/colors.cpp index af0bc63..4ddadb3 100644 --- a/apps/colors/colors.cpp +++ b/apps/colors/colors.cpp @@ -1,3 +1,14 @@ +/** + * @file colors.cpp + * @author Joe Bayer (joexbayer) + * @brief A simple color picker app + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/apps/cube/cube.cpp b/apps/cube/cube.cpp index 171796d..104d971 100644 --- a/apps/cube/cube.cpp +++ b/apps/cube/cube.cpp @@ -1,3 +1,14 @@ +/** + * @file cube.cpp + * @author Joe Bayer (joexbayer) + * @brief A simple cube demo + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/apps/echo.cpp b/apps/echo.cpp index a068e35..07ccb8f 100644 --- a/apps/echo.cpp +++ b/apps/echo.cpp @@ -4,7 +4,6 @@ #include #include "../apps/utils/cppUtils.hpp" - class TcpEcho : public Window { public: TcpEcho(int width, int height) : Window(200, 200, "Echo", 0) { diff --git a/apps/editor/edit.cpp b/apps/editor/edit.cpp index 9671ea9..7e6d904 100644 --- a/apps/editor/edit.cpp +++ b/apps/editor/edit.cpp @@ -1,3 +1,14 @@ +/** + * @file edit.cpp + * @author Joe Bayer (joexbayer) + * @brief A text editor app + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include "edit.hpp" #include #include diff --git a/apps/finder/finder.cpp b/apps/finder/finder.cpp index 640aee4..4dccccc 100644 --- a/apps/finder/finder.cpp +++ b/apps/finder/finder.cpp @@ -1,3 +1,14 @@ +/** + * @file finder.cpp + * @author Joe Bayer (joexbayer) + * @brief A file manager app + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/apps/graphs/graphs.cpp b/apps/graphs/graphs.cpp index 8896ad4..4ed3d1a 100644 --- a/apps/graphs/graphs.cpp +++ b/apps/graphs/graphs.cpp @@ -1,3 +1,14 @@ +/** + * @file graphs.cpp + * @author Joe Bayer (joexbayer) + * @brief A simple graph demo + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/apps/utils/Graphics.hpp b/apps/utils/Graphics.hpp index d9cd952..fbd15a3 100644 --- a/apps/utils/Graphics.hpp +++ b/apps/utils/Graphics.hpp @@ -1,3 +1,14 @@ +/** + * @file Graphics.hpp + * @author Joe Bayer (joexbayer) + * @brief Graphics library for C++ + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #ifndef __GRAPHICS_CPP_H #define __GRAPHICS_CPP_H diff --git a/apps/utils/MsgBox.hpp b/apps/utils/MsgBox.hpp index aeef2fa..f61bad0 100644 --- a/apps/utils/MsgBox.hpp +++ b/apps/utils/MsgBox.hpp @@ -1,3 +1,14 @@ +/** + * @file MsgBox.hpp + * @author Joe Bayer (joexbayer) + * @brief A message box widget + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #ifndef MSGBOX_HPP #define MSGBOX_HPP diff --git a/apps/utils/StdLib.hpp b/apps/utils/StdLib.hpp index d8f03b3..8becd9b 100644 --- a/apps/utils/StdLib.hpp +++ b/apps/utils/StdLib.hpp @@ -1,3 +1,14 @@ +/** + * @file StdLib.hpp + * @author Joe Bayer (joexbayer) + * @brief A collection of useful C++ utilities + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #ifndef STDLIB_HELPER_H #define STDLIB_HELPER_H @@ -8,17 +19,17 @@ class stdlib { public: - // Function to find the minimum of two integers + /* Function to find the minimum of two integers */ static int min(int a, int b) { return (a < b) ? a : b; } - // Function to find the maximum of two integers + /* Function to find the maximum of two integers */ static int max(int a, int b) { return (a > b) ? a : b; } - // Function to calculate the sum of elements in an array + /* Function to calculate the sum of elements in an array */ static int sum(const int* arr, size_t size) { int result = 0; for (size_t i = 0; i < size; i++) { @@ -27,7 +38,7 @@ class stdlib { return result; } - // Function to copy memory from source to destination + /* Function to copy memory from source to destination */ static void* memcpy(void* dest, const void* src, size_t numBytes) { char* destChar = static_cast(dest); const char* srcChar = static_cast(src); @@ -37,12 +48,12 @@ class stdlib { return dest; } - // Function to move memory from source to destination (handles overlapping memory regions) + /* Function to move memory from source to destination (handles overlapping memory regions) */ static void* memmove(void* dest, const void* src, size_t numBytes) { char* destChar = static_cast(dest); const char* srcChar = static_cast(src); - // Check if the memory regions overlap and determine the copy direction + /* Check if the memory regions overlap and determine the copy direction */ if (destChar < srcChar) { for (size_t i = 0; i < numBytes; i++) { destChar[i] = srcChar[i]; @@ -56,7 +67,7 @@ class stdlib { return dest; } - // Function to set memory to a specific value + /* Function to set memory to a specific value */ static void* memset(void* dest, int value, size_t numBytes) { char* destChar = static_cast(dest); for (size_t i = 0; i < numBytes; i++) { @@ -66,4 +77,4 @@ class stdlib { } }; -#endif // STDLIB_HELPER_H \ No newline at end of file +#endif /* STDLIB_HELPER_H */ \ No newline at end of file diff --git a/apps/utils/StringHelper.hpp b/apps/utils/StringHelper.hpp index 7a6029d..016142b 100644 --- a/apps/utils/StringHelper.hpp +++ b/apps/utils/StringHelper.hpp @@ -1,3 +1,14 @@ +/** + * @file StringHelper.hpp + * @author Joe Bayer (joexbayer) + * @brief A string helper class + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #ifndef STRING_HELPER_H #define STRING_HELPER_H diff --git a/apps/utils/Thread.hpp b/apps/utils/Thread.hpp index 6c6355e..4445f2b 100644 --- a/apps/utils/Thread.hpp +++ b/apps/utils/Thread.hpp @@ -1,3 +1,14 @@ +/** + * @file Thread.hpp + * @author Joe Bayer (joexbayer) + * @brief RetrOS thread library + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #ifndef __THREAD_LIB_HPP #define __THREAD_LIB_HPP diff --git a/apps/utils/TreeView.hpp b/apps/utils/TreeView.hpp index cf151e8..f83d5cc 100644 --- a/apps/utils/TreeView.hpp +++ b/apps/utils/TreeView.hpp @@ -1,3 +1,14 @@ +/** + * @file TreeView.hpp + * @author Joe Bayer (joexbayer) + * @brief A tree view widget + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #ifndef __TREEVIEW_HPP__ #define __TREEVIEW_HPP__ diff --git a/apps/utils/cppUtils.cpp b/apps/utils/cppUtils.cpp index 0c9eb0a..1b349f1 100644 --- a/apps/utils/cppUtils.cpp +++ b/apps/utils/cppUtils.cpp @@ -1,3 +1,14 @@ +/** + * @file cppUtils.cpp + * @author Joe Bayer (joexbayer) + * @brief A collection of useful C++ utilities + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include "cppUtils.hpp" #include diff --git a/apps/wolfstein/wolf3d.cpp b/apps/wolfstein/wolf3d.cpp index 3c37967..e192de2 100644 --- a/apps/wolfstein/wolf3d.cpp +++ b/apps/wolfstein/wolf3d.cpp @@ -1,3 +1,14 @@ +/** + * @file wolf3d.cpp + * @author Joe Bayer (joexbayer) + * @brief Wolfstein (like) 3D game + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/boot/bootloader.s b/boot/bootloader.s index 32ba0a4..4f4eabb 100644 --- a/boot/bootloader.s +++ b/boot/bootloader.s @@ -1,3 +1,14 @@ +/** + * @file Bootloader.s + * @author Joe Bayer (joexbayer) + * @brief Main bootloader for RetrOS-32 + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + .code16 .org 0 .text diff --git a/developer/old/Makefile b/developer/old/Makefile deleted file mode 100644 index 1453da3..0000000 --- a/developer/old/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -all: compile - -compile: - gcc -o interp interpreter.c lex.c vm.c - -test: - ./cx hello.c \ No newline at end of file diff --git a/developer/old/c4.c b/developer/old/c4.c deleted file mode 100644 index 908b4fe..0000000 --- a/developer/old/c4.c +++ /dev/null @@ -1,532 +0,0 @@ -// c4.c - C in four functions - -// char, int, and pointer types -// if, while, return, and expression statements -// just enough features to allow self-compilation and a bit more - -// Written by Robert Swierczek - -#include -#include -#include -#include -#include -#define int long long - -char *p, *lp, // current position in source code - *data; // data/bss pointer - -int *e, *le, // current position in emitted code - *id, // currently parsed identifier - *sym, // symbol table (simple list of identifiers) - tk, // current token - ival, // current token value - ty, // current expression type - loc, // local variable offset - line, // current line number - src, // print source and assembly flag - debug; // print executed instructions - -// tokens and classes (operators last and in precedence order) -enum { - Num = 128, Fun, Sys, Glo, Loc, Id, - Char, Else, Enum, If, Int, Return, Sizeof, While, - Assign, Cond, Lor, Lan, Or, Xor, And, Eq, Ne, Lt, Gt, Le, Ge, Shl, Shr, Add, Sub, Mul, Div, Mod, Inc, Dec, Brak -}; - -// opcodes -enum { LEA ,IMM ,JMP ,JSR ,BZ ,BNZ ,ENT ,ADJ ,LEV ,LI ,LC ,SI ,SC ,PSH , - OR ,XOR ,AND ,EQ ,NE ,LT ,GT ,LE ,GE ,SHL ,SHR ,ADD ,SUB ,MUL ,DIV ,MOD , - OPEN,READ,CLOS,PRTF,MALC,FREE,MSET,MCMP,EXIT }; - -// types -enum { CHAR, INT, PTR }; - -// identifier offsets (since we can't create an ident struct) -enum { Tk, Hash, Name, Class, Type, Val, HClass, HType, HVal, Idsz }; - -void next() -{ - char *pp; - - while (tk = *p) { - ++p; - if (tk == '\n') { - if (src) { - printf("%d: %.*s", line, p - lp, lp); - lp = p; - while (le < e) { - printf("%8.4s", &"LEA ,IMM ,JMP ,JSR ,BZ ,BNZ ,ENT ,ADJ ,LEV ,LI ,LC ,SI ,SC ,PSH ," - "OR ,XOR ,AND ,EQ ,NE ,LT ,GT ,LE ,GE ,SHL ,SHR ,ADD ,SUB ,MUL ,DIV ,MOD ," - "OPEN,READ,CLOS,PRTF,MALC,FREE,MSET,MCMP,EXIT,"[*++le * 5]); - if (*le <= ADJ) printf(" %d\n", *++le); else printf("\n"); - } - } - ++line; - } - else if (tk == '#') { - while (*p != 0 && *p != '\n') ++p; - } - else if ((tk >= 'a' && tk <= 'z') || (tk >= 'A' && tk <= 'Z') || tk == '_') { - pp = p - 1; - while ((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z') || (*p >= '0' && *p <= '9') || *p == '_') - tk = tk * 147 + *p++; - tk = (tk << 6) + (p - pp); - id = sym; - while (id[Tk]) { - if (tk == id[Hash] && !memcmp((char *)id[Name], pp, p - pp)) { tk = id[Tk]; return; } - id = id + Idsz; - } - id[Name] = (int)pp; - id[Hash] = tk; - tk = id[Tk] = Id; - return; - } - else if (tk >= '0' && tk <= '9') { - if (ival = tk - '0') { while (*p >= '0' && *p <= '9') ival = ival * 10 + *p++ - '0'; } - else if (*p == 'x' || *p == 'X') { - while ((tk = *++p) && ((tk >= '0' && tk <= '9') || (tk >= 'a' && tk <= 'f') || (tk >= 'A' && tk <= 'F'))) - ival = ival * 16 + (tk & 15) + (tk >= 'A' ? 9 : 0); - } - else { while (*p >= '0' && *p <= '7') ival = ival * 8 + *p++ - '0'; } - tk = Num; - return; - } - else if (tk == '/') { - if (*p == '/') { - ++p; - while (*p != 0 && *p != '\n') ++p; - } - else { - tk = Div; - return; - } - } - else if (tk == '\'' || tk == '"') { - pp = data; - while (*p != 0 && *p != tk) { - if ((ival = *p++) == '\\') { - if ((ival = *p++) == 'n') ival = '\n'; - } - if (tk == '"') *data++ = ival; - } - ++p; - if (tk == '"') ival = (int)pp; else tk = Num; - return; - } - else if (tk == '=') { if (*p == '=') { ++p; tk = Eq; } else tk = Assign; return; } - else if (tk == '+') { if (*p == '+') { ++p; tk = Inc; } else tk = Add; return; } - else if (tk == '-') { if (*p == '-') { ++p; tk = Dec; } else tk = Sub; return; } - else if (tk == '!') { if (*p == '=') { ++p; tk = Ne; } return; } - else if (tk == '<') { if (*p == '=') { ++p; tk = Le; } else if (*p == '<') { ++p; tk = Shl; } else tk = Lt; return; } - else if (tk == '>') { if (*p == '=') { ++p; tk = Ge; } else if (*p == '>') { ++p; tk = Shr; } else tk = Gt; return; } - else if (tk == '|') { if (*p == '|') { ++p; tk = Lor; } else tk = Or; return; } - else if (tk == '&') { if (*p == '&') { ++p; tk = Lan; } else tk = And; return; } - else if (tk == '^') { tk = Xor; return; } - else if (tk == '%') { tk = Mod; return; } - else if (tk == '*') { tk = Mul; return; } - else if (tk == '[') { tk = Brak; return; } - else if (tk == '?') { tk = Cond; return; } - else if (tk == '~' || tk == ';' || tk == '{' || tk == '}' || tk == '(' || tk == ')' || tk == ']' || tk == ',' || tk == ':') return; - } -} - -void expr(int lev) -{ - int t, *d; - - if (!tk) { printf("%d: unexpected eof in expression\n", line); exit(-1); } - else if (tk == Num) { *++e = IMM; *++e = ival; next(); ty = INT; } - else if (tk == '"') { - *++e = IMM; *++e = ival; next(); - while (tk == '"') next(); - data = (char *)((int)data + sizeof(int) & -sizeof(int)); ty = PTR; - } - else if (tk == Sizeof) { - next(); if (tk == '(') next(); else { printf("%d: open paren expected in sizeof\n", line); exit(-1); } - ty = INT; if (tk == Int) next(); else if (tk == Char) { next(); ty = CHAR; } - while (tk == Mul) { next(); ty = ty + PTR; } - if (tk == ')') next(); else { printf("%d: close paren expected in sizeof\n", line); exit(-1); } - *++e = IMM; *++e = (ty == CHAR) ? sizeof(char) : sizeof(int); - ty = INT; - } - else if (tk == Id) { - d = id; next(); - if (tk == '(') { - next(); - t = 0; - while (tk != ')') { expr(Assign); *++e = PSH; ++t; if (tk == ',') next(); } - next(); - if (d[Class] == Sys) *++e = d[Val]; - else if (d[Class] == Fun) { *++e = JSR; *++e = d[Val]; } - else { printf("%d: bad function call\n", line); exit(-1); } - if (t) { *++e = ADJ; *++e = t; } - ty = d[Type]; - } - else if (d[Class] == Num) { *++e = IMM; *++e = d[Val]; ty = INT; } - else { - if (d[Class] == Loc) { *++e = LEA; *++e = loc - d[Val]; } - else if (d[Class] == Glo) { *++e = IMM; *++e = d[Val]; } - else { printf("%d: undefined variable\n", line); exit(-1); } - *++e = ((ty = d[Type]) == CHAR) ? LC : LI; - } - } - else if (tk == '(') { - next(); - if (tk == Int || tk == Char) { - t = (tk == Int) ? INT : CHAR; next(); - while (tk == Mul) { next(); t = t + PTR; } - if (tk == ')') next(); else { printf("%d: bad cast\n", line); exit(-1); } - expr(Inc); - ty = t; - } - else { - expr(Assign); - if (tk == ')') next(); else { printf("%d: close paren expected\n", line); exit(-1); } - } - } - else if (tk == Mul) { - next(); expr(Inc); - if (ty > INT) ty = ty - PTR; else { printf("%d: bad dereference\n", line); exit(-1); } - *++e = (ty == CHAR) ? LC : LI; - } - else if (tk == And) { - next(); expr(Inc); - if (*e == LC || *e == LI) --e; else { printf("%d: bad address-of\n", line); exit(-1); } - ty = ty + PTR; - } - else if (tk == '!') { next(); expr(Inc); *++e = PSH; *++e = IMM; *++e = 0; *++e = EQ; ty = INT; } - else if (tk == '~') { next(); expr(Inc); *++e = PSH; *++e = IMM; *++e = -1; *++e = XOR; ty = INT; } - else if (tk == Add) { next(); expr(Inc); ty = INT; } - else if (tk == Sub) { - next(); *++e = IMM; - if (tk == Num) { *++e = -ival; next(); } else { *++e = -1; *++e = PSH; expr(Inc); *++e = MUL; } - ty = INT; - } - else if (tk == Inc || tk == Dec) { - t = tk; next(); expr(Inc); - if (*e == LC) { *e = PSH; *++e = LC; } - else if (*e == LI) { *e = PSH; *++e = LI; } - else { printf("%d: bad lvalue in pre-increment\n", line); exit(-1); } - *++e = PSH; - *++e = IMM; *++e = (ty > PTR) ? sizeof(int) : sizeof(char); - *++e = (t == Inc) ? ADD : SUB; - *++e = (ty == CHAR) ? SC : SI; - } - else { printf("%d: bad expression\n", line); exit(-1); } - - while (tk >= lev) { // "precedence climbing" or "Top Down Operator Precedence" method - t = ty; - if (tk == Assign) { - next(); - if (*e == LC || *e == LI) *e = PSH; else { printf("%d: bad lvalue in assignment\n", line); exit(-1); } - expr(Assign); *++e = ((ty = t) == CHAR) ? SC : SI; - } - else if (tk == Cond) { - next(); - *++e = BZ; d = ++e; - expr(Assign); - if (tk == ':') next(); else { printf("%d: conditional missing colon\n", line); exit(-1); } - *d = (int)(e + 3); *++e = JMP; d = ++e; - expr(Cond); - *d = (int)(e + 1); - } - else if (tk == Lor) { next(); *++e = BNZ; d = ++e; expr(Lan); *d = (int)(e + 1); ty = INT; } - else if (tk == Lan) { next(); *++e = BZ; d = ++e; expr(Or); *d = (int)(e + 1); ty = INT; } - else if (tk == Or) { next(); *++e = PSH; expr(Xor); *++e = OR; ty = INT; } - else if (tk == Xor) { next(); *++e = PSH; expr(And); *++e = XOR; ty = INT; } - else if (tk == And) { next(); *++e = PSH; expr(Eq); *++e = AND; ty = INT; } - else if (tk == Eq) { next(); *++e = PSH; expr(Lt); *++e = EQ; ty = INT; } - else if (tk == Ne) { next(); *++e = PSH; expr(Lt); *++e = NE; ty = INT; } - else if (tk == Lt) { next(); *++e = PSH; expr(Shl); *++e = LT; ty = INT; } - else if (tk == Gt) { next(); *++e = PSH; expr(Shl); *++e = GT; ty = INT; } - else if (tk == Le) { next(); *++e = PSH; expr(Shl); *++e = LE; ty = INT; } - else if (tk == Ge) { next(); *++e = PSH; expr(Shl); *++e = GE; ty = INT; } - else if (tk == Shl) { next(); *++e = PSH; expr(Add); *++e = SHL; ty = INT; } - else if (tk == Shr) { next(); *++e = PSH; expr(Add); *++e = SHR; ty = INT; } - else if (tk == Add) { - next(); *++e = PSH; expr(Mul); - if ((ty = t) > PTR) { *++e = PSH; *++e = IMM; *++e = sizeof(int); *++e = MUL; } - *++e = ADD; - } - else if (tk == Sub) { - next(); *++e = PSH; expr(Mul); - if (t > PTR && t == ty) { *++e = SUB; *++e = PSH; *++e = IMM; *++e = sizeof(int); *++e = DIV; ty = INT; } - else if ((ty = t) > PTR) { *++e = PSH; *++e = IMM; *++e = sizeof(int); *++e = MUL; *++e = SUB; } - else *++e = SUB; - } - else if (tk == Mul) { next(); *++e = PSH; expr(Inc); *++e = MUL; ty = INT; } - else if (tk == Div) { next(); *++e = PSH; expr(Inc); *++e = DIV; ty = INT; } - else if (tk == Mod) { next(); *++e = PSH; expr(Inc); *++e = MOD; ty = INT; } - else if (tk == Inc || tk == Dec) { - if (*e == LC) { *e = PSH; *++e = LC; } - else if (*e == LI) { *e = PSH; *++e = LI; } - else { printf("%d: bad lvalue in post-increment\n", line); exit(-1); } - *++e = PSH; *++e = IMM; *++e = (ty > PTR) ? sizeof(int) : sizeof(char); - *++e = (tk == Inc) ? ADD : SUB; - *++e = (ty == CHAR) ? SC : SI; - *++e = PSH; *++e = IMM; *++e = (ty > PTR) ? sizeof(int) : sizeof(char); - *++e = (tk == Inc) ? SUB : ADD; - next(); - } - else if (tk == Brak) { - next(); *++e = PSH; expr(Assign); - if (tk == ']') next(); else { printf("%d: close bracket expected\n", line); exit(-1); } - if (t > PTR) { *++e = PSH; *++e = IMM; *++e = sizeof(int); *++e = MUL; } - else if (t < PTR) { printf("%d: pointer type expected\n", line); exit(-1); } - *++e = ADD; - *++e = ((ty = t - PTR) == CHAR) ? LC : LI; - } - else { printf("%d: compiler error tk=%d\n", line, tk); exit(-1); } - } -} - -void stmt() -{ - int *a, *b; - - if (tk == If) { - next(); - if (tk == '(') next(); else { printf("%d: open paren expected\n", line); exit(-1); } - expr(Assign); - if (tk == ')') next(); else { printf("%d: close paren expected\n", line); exit(-1); } - *++e = BZ; b = ++e; - stmt(); - if (tk == Else) { - *b = (int)(e + 3); *++e = JMP; b = ++e; - next(); - stmt(); - } - *b = (int)(e + 1); - } - else if (tk == While) { - next(); - a = e + 1; - if (tk == '(') next(); else { printf("%d: open paren expected\n", line); exit(-1); } - expr(Assign); - if (tk == ')') next(); else { printf("%d: close paren expected\n", line); exit(-1); } - *++e = BZ; b = ++e; - stmt(); - *++e = JMP; *++e = (int)a; - *b = (int)(e + 1); - } - else if (tk == Return) { - next(); - if (tk != ';') expr(Assign); - *++e = LEV; - if (tk == ';') next(); else { printf("%d: semicolon expected\n", line); exit(-1); } - } - else if (tk == '{') { - next(); - while (tk != '}') stmt(); - next(); - } - else if (tk == ';') { - next(); - } - else { - expr(Assign); - if (tk == ';') next(); else { printf("%d: semicolon expected\n", line); exit(-1); } - } -} - -int main(int argc, char **argv) -{ - int fd, bt, ty, poolsz, *idmain; - int *pc, *sp, *bp, a, cycle; // vm registers - int *stack_p; int* data_p; - int i, *t, ret; // temps - - --argc; ++argv; - if (argc > 0 && **argv == '-' && (*argv)[1] == 's') { src = 1; --argc; ++argv; } - if (argc > 0 && **argv == '-' && (*argv)[1] == 'd') { debug = 1; --argc; ++argv; } - if (argc < 1) { printf("usage: c4 [-s] [-d] file ...\n"); return -1; } - - if ((fd = open(*argv, 0)) < 0) { printf("could not open(%s)\n", *argv); return -1; } - - poolsz = 256*1024; // arbitrary size - if (!(sym = malloc(poolsz))) { printf("could not malloc(%d) symbol area\n", poolsz); return -1; } - if (!(le = e = malloc(poolsz))) { printf("could not malloc(%d) text area\n", poolsz); return -1; } - if (!(data = malloc(poolsz))) { printf("could not malloc(%d) data area\n", poolsz); return -1; } - if (!(sp = malloc(poolsz))) { printf("could not malloc(%d) stack area\n", poolsz); return -1; } - - memset(sym, 0, poolsz); - memset(e, 0, poolsz); - memset(data, 0, poolsz); - - data_p = data; stack_p = sp; - - p = "char else enum if int return sizeof while " - "open read close printf malloc free memset memcmp exit void main"; - i = Char; while (i <= While) { next(); id[Tk] = i++; } // add keywords to symbol table - i = OPEN; while (i <= EXIT) { next(); id[Class] = Sys; id[Type] = INT; id[Val] = i++; } // add library to symbol table - next(); id[Tk] = Char; // handle void type - next(); idmain = id; // keep track of main - - if (!(lp = p = malloc(poolsz))) { printf("could not malloc(%d) source area\n", poolsz); return -1; } - if ((i = read(fd, p, poolsz-1)) <= 0) { printf("read() returned %d\n", i); return -1; } - p[i] = 0; - close(fd); - - // parse declarations - line = 1; - next(); - while (tk) { - bt = INT; // basetype - if (tk == Int) next(); - else if (tk == Char) { next(); bt = CHAR; } - else if (tk == Enum) { - next(); - if (tk != '{') next(); - if (tk == '{') { - next(); - i = 0; - while (tk != '}') { - if (tk != Id) { printf("%d: bad enum identifier %d\n", line, tk); return -1; } - next(); - if (tk == Assign) { - next(); - if (tk != Num) { printf("%d: bad enum initializer\n", line); return -1; } - i = ival; - next(); - } - id[Class] = Num; id[Type] = INT; id[Val] = i++; - if (tk == ',') next(); - } - next(); - } - } - while (tk != ';' && tk != '}') { - ty = bt; - while (tk == Mul) { next(); ty = ty + PTR; } - if (tk != Id) { printf("%d: bad global declaration\n", line); return -1; } - if (id[Class]) { printf("%d: duplicate global definition\n", line); return -1; } - next(); - id[Type] = ty; - if (tk == '(') { // function - id[Class] = Fun; - id[Val] = (int)(e + 1); - next(); i = 0; - while (tk != ')') { - ty = INT; - if (tk == Int) next(); - else if (tk == Char) { next(); ty = CHAR; } - while (tk == Mul) { next(); ty = ty + PTR; } - if (tk != Id) { printf("%d: bad parameter declaration\n", line); return -1; } - if (id[Class] == Loc) { printf("%d: duplicate parameter definition\n", line); return -1; } - id[HClass] = id[Class]; id[Class] = Loc; - id[HType] = id[Type]; id[Type] = ty; - id[HVal] = id[Val]; id[Val] = i++; - next(); - if (tk == ',') next(); - } - next(); - if (tk != '{') { printf("%d: bad function definition\n", line); return -1; } - loc = ++i; - next(); - while (tk == Int || tk == Char) { - bt = (tk == Int) ? INT : CHAR; - next(); - while (tk != ';') { - ty = bt; - while (tk == Mul) { next(); ty = ty + PTR; } - if (tk != Id) { printf("%d: bad local declaration\n", line); return -1; } - if (id[Class] == Loc) { printf("%d: duplicate local definition\n", line); return -1; } - id[HClass] = id[Class]; id[Class] = Loc; - id[HType] = id[Type]; id[Type] = ty; - id[HVal] = id[Val]; id[Val] = ++i; - next(); - if (tk == ',') next(); - } - next(); - } - *++e = ENT; *++e = i - loc; - while (tk != '}') stmt(); - *++e = LEV; - id = sym; // unwind symbol table locals - while (id[Tk]) { - if (id[Class] == Loc) { - id[Class] = id[HClass]; - id[Type] = id[HType]; - id[Val] = id[HVal]; - } - id = id + Idsz; - } - } - else { - id[Class] = Glo; - id[Val] = (int)data; - data = data + sizeof(int); - } - if (tk == ',') next(); - } - next(); - } - - if (!(pc = (int *)idmain[Val])) { printf("main() not defined\n"); return -1; } - if (src) return 0; - - // setup stack - bp = sp = (int *)((int)sp + poolsz); - *--sp = EXIT; // call exit if main returns - *--sp = PSH; t = sp; - *--sp = argc; - *--sp = (int)argv; - *--sp = (int)t; - - - // run... - cycle = 0; - while (1) { - i = *pc++; ++cycle; - if (debug) { - printf("%d> %.4s", cycle, - &"LEA ,IMM ,JMP ,JSR ,BZ ,BNZ ,ENT ,ADJ ,LEV ,LI ,LC ,SI ,SC ,PSH ," - "OR ,XOR ,AND ,EQ ,NE ,LT ,GT ,LE ,GE ,SHL ,SHR ,ADD ,SUB ,MUL ,DIV ,MOD ," - "OPEN,READ,CLOS,PRTF,MALC,FREE,MSET,MCMP,EXIT,"[i * 5]); - if (i <= ADJ) printf(" %d\n", *pc); else printf("\n"); - } - if (i == LEA) a = (int)(bp + *pc++); // load local address - else if (i == IMM) a = *pc++; // load global address or immediate - else if (i == JMP) pc = (int *)*pc; // jump - else if (i == JSR) { *--sp = (int)(pc + 1); pc = (int *)*pc; } // jump to subroutine - else if (i == BZ) pc = a ? pc + 1 : (int *)*pc; // branch if zero - else if (i == BNZ) pc = a ? (int *)*pc : pc + 1; // branch if not zero - else if (i == ENT) { *--sp = (int)bp; bp = sp; sp = sp - *pc++; } // enter subroutine - else if (i == ADJ) sp = sp + *pc++; // stack adjust - else if (i == LEV) { sp = bp; bp = (int *)*sp++; pc = (int *)*sp++; } // leave subroutine - else if (i == LI) a = *(int *)a; // load int - else if (i == LC) a = *(char *)a; // load char - else if (i == SI) *(int *)*sp++ = a; // store int - else if (i == SC) a = *(char *)*sp++ = a; // store char - else if (i == PSH) *--sp = a; // push - - else if (i == OR) a = *sp++ | a; - else if (i == XOR) a = *sp++ ^ a; - else if (i == AND) a = *sp++ & a; - else if (i == EQ) a = *sp++ == a; - else if (i == NE) a = *sp++ != a; - else if (i == LT) a = *sp++ < a; - else if (i == GT) a = *sp++ > a; - else if (i == LE) a = *sp++ <= a; - else if (i == GE) a = *sp++ >= a; - else if (i == SHL) a = *sp++ << a; - else if (i == SHR) a = *sp++ >> a; - else if (i == ADD) a = *sp++ + a; - else if (i == SUB) a = *sp++ - a; - else if (i == MUL) a = *sp++ * a; - else if (i == DIV) a = *sp++ / a; - else if (i == MOD) a = *sp++ % a; - - else if (i == OPEN) a = open((char *)sp[1], *sp); - else if (i == READ) a = read(sp[2], (char *)sp[1], *sp); - else if (i == CLOS) a = close(*sp); - else if (i == PRTF) { t = sp + pc[1]; a = printf((char *)t[-1], t[-2], t[-3], t[-4], t[-5], t[-6]); } - else if (i == MALC) a = (int)malloc(*sp); - else if (i == FREE) free((void *)*sp); - else if (i == MSET) a = (int)memset((char *)sp[2], sp[1], *sp); - else if (i == MCMP) a = memcmp((char *)sp[2], (char *)sp[1], *sp); - else if (i == EXIT) { printf("exit(%d) cycle = %d\n", *sp, cycle); free(sym); free(le); free(lp); free(data_p); ret = *sp; free(stack_p); return ret; } - else { printf("unknown instruction = %d! cycle = %d\n", i, cycle); return -1; } - } -} \ No newline at end of file diff --git a/developer/old/hello.c b/developer/old/hello.c deleted file mode 100644 index 04e265d..0000000 --- a/developer/old/hello.c +++ /dev/null @@ -1,16 +0,0 @@ -#include - -int add(int a, int b) -{ - return a + b; -} - -int main() -{ - int b; - - b = 1; - - printf("Hello world\n"); - return 0; -} \ No newline at end of file diff --git a/developer/old/interp b/developer/old/interp deleted file mode 100644 index 52c984ebb9fd53ea2290796d708e0978214cfb32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67376 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 e8$d;^5v0f}!J2!W_ -#include - -struct vm vm; -int fd; -static char *src, *old_src; -int i = 0; - -int main(int argc, char **argv) -{ - vm_init(&vm); - lex_init(); - - argv++; - - // read the source file - DEBUG_PRINT("Reading %s\n", *argv); - if ((fd = open(*argv, 0)) < 0) { - twritef("could not open(%s)\n", *argv); - return -1; - } - - if (!(src = old_src = malloc(POOLSIZE))) { - twritef("could not malloc(%d) for source area\n", POOLSIZE); - return -1; - } - // read the source file - if ((i = read(fd, src, POOLSIZE)) <= 0) { - twritef("read() returned %d\n", i); - return -1; - } - src[i] = 0; // add EOF character - DEBUG_PRINT("%s\n", src); - close(fd); - - DEBUG_PRINT("Lexing\n"); - void* entry = kernel_lex(vm.text, vm.data, src); - DEBUG_PRINT("Lexing [done]\n"); - - vm.pc = entry; - DEBUG_PRINT("Main entry %x\n", vm.pc); - - vm_setup_stack(&vm ,argc, argv); - - eval(&vm); - - vm_free(&vm); - - free(src); -} \ No newline at end of file diff --git a/developer/old/interpreter.h b/developer/old/interpreter.h deleted file mode 100644 index ddc0c01..0000000 --- a/developer/old/interpreter.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef DFC6163A_A9F3_4554_B865_028BCE5F89AD -#define DFC6163A_A9F3_4554_B865_028BCE5F89AD -#ifndef FCB4F955_2425_46A5_9A2F_B11453605E94 -#define FCB4F955_2425_46A5_9A2F_B11453605E94 - -//#define DEBUG - -#include -#include -#include - -#define twritef(fmt, ...) \ - printf(fmt, ##__VA_ARGS__) - - -#ifdef DEBUG -#define DEBUG_PRINT(fmt, ...) \ - twritef("[DEBUG] " fmt, ##__VA_ARGS__) -#else -#define DEBUG_PRINT(fmt, ...) -#endif - -/* 32kb input file buffer */ -#define POOLSIZE 32*1024 - -/* 96kb text section */ -#define VM_TEXT_SIZE 96*1024 -/* 3kb data section */ -#define VM_DATA_SIZE 3*1024 -/* 1kb stack section */ -#define VM_STACK_SIZE 1024 - -/* Total 132kb total memory */ - -#endif /* FCB4F955_2425_46A5_9A2F_B11453605E94 */ - - -#endif /* DFC6163A_A9F3_4554_B865_028BCE5F89AD */ diff --git a/developer/old/lex.c b/developer/old/lex.c deleted file mode 100644 index 568461f..0000000 --- a/developer/old/lex.c +++ /dev/null @@ -1,1277 +0,0 @@ -/** - * @file lex.c - * @author Joe Bayer (joexbayer) - * @brief Lexer for the minmial C interpreter - * @version 0.1 - * @date 2023-05-14 - * @see https://github.com/rswier/c4 - * @see https://github.com/lotabout/write-a-C-interpreter - * @copyright Copyright (c) 2023 - * - */ - -#include "lex.h" -#include "vm.h" -#include "interpreter.h" - -#define int long - -struct identifier { - int token; - int hash; - char * name; - int class; - int type; - long value; - int Bclass; - int Btype; - int Bvalue; -}; - -struct lexer { - int token; - int token_val; - - struct identifier symbols[LEX_DEFAULT_SYMBOLS]; - struct identifier* current_id; - struct identifier* main; - - int basetype; // the type of a declaration, make it global for convenience - int expr_type; // the type of an expression - - // function frame - // - // 0: arg 1 - // 1: arg 2 - // 2: arg 3 - // 3: return address - // 4: old bp pointer <- lexer_context.index_of_bp - // 5: local var 1 - // 6: local var 2 - int index_of_bp; // index of bp pointer on stack - -} lexer_context; - -char *src; -int line = 1; -char* data; -int* text; - - -void next(); - -void match(int tk) { - if (lexer_context.token == tk) { - next(); - return; - } - printf("%d: expected lexer_context.token: %d\n", line, tk); - exit(-1); -} - -void expression(int level) { - DEBUG_PRINT("expression\n"); - // expressions have various format. - // but majorly can be divided into two parts: unit and operator - // for example `(char) *a[10] = (int *) func(b > 0 ? 10 : 20); - // `a[10]` is an unit while `*` is an operator. - // `func(...)` in total is an unit. - // so we should first parse those unit and unary operators - // and then the binary ones - // - // also the expression can be in the following types: - // - // 1. unit_unary ::= unit | unit unary_op | unary_op unit - // 2. expr ::= unit_unary (bin_op unit_unary ...) - - // unit_unary() - struct identifier* id; - int tmp; - int *addr; - { - if (!lexer_context.token) { - printf("%d: unexpected lexer_context.lexer_context.token EOF of expression\n", line); - exit(-1); - } - if (lexer_context.token == Num) { - match(Num); - DEBUG_PRINT("number %d\n", lexer_context.token_val); - - // emit code - *++text = IMM; - *++text = lexer_context.token_val; - lexer_context.expr_type = INT; - } - else if (lexer_context.token == '"') { - // continous string "abc" "abc" - // emit code - *++text = IMM; - *++text = lexer_context.token_val; - - //DEBUG_PRINT("expression string %s\n", lexer_context.token_val); - - match('"'); - // store the rest strings - while (lexer_context.token == '"') { - match('"'); - } - - // append the end of string character '\0', all the data are default - // to 0, so just move data one position forward. - data = (char *)(((int)data + sizeof(int)) & (-sizeof(int))); - lexer_context.expr_type = PTR; - } else if (lexer_context.token == Sizeof) { - DEBUG_PRINT("Sizeof\n"); - // sizeof is actually an unary operator - // now only `sizeof(int)`, `sizeof(char)` and `sizeof(*...)` are - // supported. - match(Sizeof); - match('('); - lexer_context.expr_type = INT; - - if (lexer_context.token == Int) { - match(Int); - } else if (lexer_context.token == Char) { - match(Char); - lexer_context.expr_type = CHAR; - } - - while (lexer_context.token == Mul) { - match(Mul); - lexer_context.expr_type = lexer_context.expr_type + PTR; - } - - match(')'); - - // emit code - *++text = IMM; - *++text = (lexer_context.expr_type == CHAR) ? sizeof(char) : sizeof(int); - - lexer_context.expr_type = INT; - } else if (lexer_context.token == Id) { - // there are several type when occurs to Id - // but this is unit, so it can only be - // 1. function call - // 2. Enum variable - // 3. global/local variable - match(Id); - - - id = lexer_context.current_id; - DEBUG_PRINT("Context identifier: %s\n", id->name); - - if (lexer_context.token == '(') { - // function call - match('('); - - // pass in arguments - tmp = 0; // number of arguments - while (lexer_context.token != ')') { - expression(Assign); - *++text = PUSH; - tmp ++; - - if (lexer_context.token == ',') { - match(','); - } - - } - match(')'); - - DEBUG_PRINT("New function\n"); - - // emit code - if (id->class == Sys) { - // system functions - *++text = id->value; - } - else if (id->class == Fun) { - // function call - *++text = CALL; - *++text = id->value; - } - else { - printf("%d: bad function call\n", line); - exit(-1); - } - - // clean the stack for arguments - if (tmp > 0) { - *++text = ADJ; - *++text = tmp; - } - lexer_context.expr_type = id->type; - } - else if (id->class == Num) { - // enum variable - *++text = IMM; - *++text = id->value; - lexer_context.expr_type = INT; - } - else { - // variable - if (id->class == Loc) { - *++text = LEA; - *++text = lexer_context.index_of_bp - (int)id->value; - } - else if (id->class == Glo) { - *++text = IMM; - *++text = id->value; - } - else { - printf("%d: undefined variable\n", line); - exit(-1); - } - - // emit code, default behaviour is to load the value of the - // address which is stored in `ax` - lexer_context.expr_type = id->type; - *++text = (lexer_context.expr_type == CHAR) ? LC : LI; - } - } - else if (lexer_context.token == '(') { - // cast or parenthesis - match('('); - if (lexer_context.token == Int || lexer_context.token == Char) { - tmp = (lexer_context.token == Char) ? CHAR : INT; // cast type - match(lexer_context.token); - while (lexer_context.token == Mul) { - match(Mul); - tmp = tmp + PTR; - } - - match(')'); - - expression(Inc); // cast has precedence as Inc(++) - - lexer_context.expr_type = tmp; - } else { - // normal parenthesis - expression(Assign); - match(')'); - } - } - else if (lexer_context.token == Mul) { - // dereference * - match(Mul); - expression(Inc); // dereference has the same precedence as Inc(++) - - if (lexer_context.expr_type >= PTR) { - lexer_context.expr_type = lexer_context.expr_type - PTR; - } else { - printf("%d: bad dereference\n", line); - exit(-1); - } - - *++text = (lexer_context.expr_type == CHAR) ? LC : LI; - } - else if (lexer_context.token == And) { - // get the address of - match(And); - expression(Inc); // get the address of - if (*text == LC || *text == LI) { - text --; - } else { - printf("%d: bad address of\n", line); - exit(-1); - } - - lexer_context.expr_type = lexer_context.expr_type + PTR; - } - else if (lexer_context.token == '!') { - // not - match('!'); - expression(Inc); - - // emit code, use == 0 - *++text = PUSH; - *++text = IMM; - *++text = 0; - *++text = EQ; - - lexer_context.expr_type = INT; - } - else if (lexer_context.token == '~') { - // bitwise not - match('~'); - expression(Inc); - - // emit code, use XOR -1 - *++text = PUSH; - *++text = IMM; - *++text = -1; - *++text = XOR; - - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Add) { - // +var, do nothing - match(Add); - expression(Inc); - - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Sub) { - // -var - match(Sub); - - if (lexer_context.token == Num) { - *++text = IMM; - *++text = -lexer_context.token_val; - match(Num); - } else { - - *++text = IMM; - *++text = -1; - *++text = PUSH; - expression(Inc); - *++text = MUL; - } - - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Inc || lexer_context.token == Dec) { - tmp = lexer_context.token; - match(lexer_context.token); - expression(Inc); - if (*text == LC) { - *text = PUSH; // to duplicate the address - *++text = LC; - } else if (*text == LI) { - *text = PUSH; - *++text = LI; - } else { - printf("%d: bad lvalue of pre-increment\n", line); - exit(-1); - } - *++text = PUSH; - *++text = IMM; - *++text = (lexer_context.expr_type > PTR) ? sizeof(int) : sizeof(char); - *++text = (tmp == Inc) ? ADD : SUB; - *++text = (lexer_context.expr_type == CHAR) ? SC : SI; - } - else { - printf("%d: bad expression\n", line); - exit(-1); - } - } - - // binary operator and postfix operators. - { - while (lexer_context.token >= level) { - // handle according to current operator's precedence - tmp = lexer_context.expr_type; - if (lexer_context.token == Assign) { - // var = expr; - match(Assign); - if (*text == LC || *text == LI) { - *text = PUSH; // save the lvalue's pointer - } else { - printf("%d: bad lvalue in assignment\n", line); - exit(-1); - } - expression(Assign); - - lexer_context.expr_type = tmp; - *++text = (lexer_context.expr_type == CHAR) ? SC : SI; - } - else if (lexer_context.token == Cond) { - // expr ? a : b; - match(Cond); - *++text = JZ; - addr = ++text; - expression(Assign); - if (lexer_context.token == ':') { - match(':'); - } else { - printf("%d: missing colon in conditional\n", line); - exit(-1); - } - *addr = (int)(text + 3); - *++text = JMP; - addr = ++text; - expression(Cond); - *addr = (int)(text + 1); - } - else if (lexer_context.token == Lor) { - // logic or - match(Lor); - *++text = JNZ; - addr = ++text; - expression(Lan); - *addr = (int)(text + 1); - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Lan) { - // logic and - match(Lan); - *++text = JZ; - addr = ++text; - expression(Or); - *addr = (int)(text + 1); - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Or) { - // bitwise or - match(Or); - *++text = PUSH; - expression(Xor); - *++text = OR; - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Xor) { - // bitwise xor - match(Xor); - *++text = PUSH; - expression(And); - *++text = XOR; - lexer_context.expr_type = INT; - } - else if (lexer_context.token == And) { - // bitwise and - match(And); - *++text = PUSH; - expression(Eq); - *++text = AND; - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Eq) { - // equal == - match(Eq); - *++text = PUSH; - expression(Ne); - *++text = EQ; - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Ne) { - // not equal != - match(Ne); - *++text = PUSH; - expression(Lt); - *++text = NE; - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Lt) { - // less than - match(Lt); - *++text = PUSH; - expression(Shl); - *++text = LT; - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Gt) { - // greater than - match(Gt); - *++text = PUSH; - expression(Shl); - *++text = GT; - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Le) { - // less than or equal to - match(Le); - *++text = PUSH; - expression(Shl); - *++text = LE; - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Ge) { - // greater than or equal to - match(Ge); - *++text = PUSH; - expression(Shl); - *++text = GE; - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Shl) { - // shift left - match(Shl); - *++text = PUSH; - expression(Add); - *++text = SHL; - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Shr) { - // shift right - match(Shr); - *++text = PUSH; - expression(Add); - *++text = SHR; - lexer_context.expr_type = INT; - } - else if (lexer_context.token == Add) { - // add - match(Add); - *++text = PUSH; - expression(Mul); - - lexer_context.expr_type = tmp; - if (lexer_context.expr_type > PTR) { - // pointer type, and not `char *` - *++text = PUSH; - *++text = IMM; - *++text = sizeof(int); - *++text = MUL; - } - *++text = ADD; - } - else if (lexer_context.token == Sub) { - // sub - match(Sub); - *++text = PUSH; - expression(Mul); - if (tmp > PTR && tmp == lexer_context.expr_type) { - // pointer subtraction - *++text = SUB; - *++text = PUSH; - *++text = IMM; - *++text = sizeof(int); - *++text = DIV; - lexer_context.expr_type = INT; - } else if (tmp > PTR) { - // pointer movement - *++text = PUSH; - *++text = IMM; - *++text = sizeof(int); - *++text = MUL; - *++text = SUB; - lexer_context.expr_type = tmp; - } else { - // numeral subtraction - *++text = SUB; - lexer_context.expr_type = tmp; - } - } - else if (lexer_context.token == Mul) { - // multiply - match(Mul); - *++text = PUSH; - expression(Inc); - *++text = MUL; - lexer_context.expr_type = tmp; - } - else if (lexer_context.token == Div) { - // divide - match(Div); - *++text = PUSH; - expression(Inc); - *++text = DIV; - lexer_context.expr_type = tmp; - } - else if (lexer_context.token == Mod) { - // Modulo - match(Mod); - *++text = PUSH; - expression(Inc); - *++text = MOD; - lexer_context.expr_type = tmp; - } - else if (lexer_context.token == Inc || lexer_context.token == Dec) { - // postfix inc(++) and dec(--) - // we will increase the value to the variable and decrease it - // on `ax` to get its original value. - if (*text == LI) { - *text = PUSH; - *++text = LI; - } - else if (*text == LC) { - *text = PUSH; - *++text = LC; - } - else { - printf("%d: bad value in increment\n", line); - exit(-1); - } - - *++text = PUSH; - *++text = IMM; - *++text = (lexer_context.expr_type > PTR) ? sizeof(int) : sizeof(char); - *++text = (lexer_context.token == Inc) ? ADD : SUB; - *++text = (lexer_context.expr_type == CHAR) ? SC : SI; - *++text = PUSH; - *++text = IMM; - *++text = (lexer_context.expr_type > PTR) ? sizeof(int) : sizeof(char); - *++text = (lexer_context.token == Inc) ? SUB : ADD; - match(lexer_context.token); - } - else if (lexer_context.token == Brak) { - // array access var[xx] - match(Brak); - *++text = PUSH; - expression(Assign); - match(']'); - - if (tmp > PTR) { - // pointer, `not char *` - *++text = PUSH; - *++text = IMM; - *++text = sizeof(int); - *++text = MUL; - } - else if (tmp < PTR) { - printf("%d: pointer type expected\n", line); - exit(-1); - } - lexer_context.expr_type = tmp - PTR; - *++text = ADD; - *++text = (lexer_context.expr_type == CHAR) ? LC : LI; - } - else { - printf("%d: compiler error, lexer_context.token = %d\n", line, lexer_context.token); - exit(-1); - } - } - } -} - - -void next() { - char *last_pos; - int hash; - - while (lexer_context.token = *src) { - ++src; - DEBUG_PRINT("Token %c\n", lexer_context.token); - - // parse lexer_context.token here - if (lexer_context.token == '\n') { - ++line; - DEBUG_PRINT("new line\n"); - continue; - } - else if (lexer_context.token == '#') { - // skip macro, because we will not support it - - DEBUG_PRINT("skip # macro\n"); - while (*src != 0 && *src != '\n') { - src++; - } - } - else if ((lexer_context.token >= 'a' && lexer_context.token <= 'z') || (lexer_context.token >= 'A' && lexer_context.token <= 'Z') || (lexer_context.token == '_')) { - - DEBUG_PRINT("Parsing new identifier\n"); - // parse identifier - last_pos = src - 1; - hash = lexer_context.token; - - while ((*src >= 'a' && *src <= 'z') || (*src >= 'A' && *src <= 'Z') || (*src >= '0' && *src <= '9') || (*src == '_')) { - hash = hash * 147 + *src; - src++; - } - // look for existing identifier, linear search - lexer_context.current_id = &lexer_context.symbols[0]; - while (lexer_context.current_id->token) { - if (lexer_context.current_id->hash == hash && !memcmp((char *)lexer_context.current_id->name, last_pos, src - last_pos)) { - //found one, return - lexer_context.token = lexer_context.current_id->token; - //DEBUG_PRINT("Found identifier %s\n", lexer_context.current_id->name); - return; - } - lexer_context.current_id += 1; - } - - - - // store new ID - lexer_context.current_id->name = last_pos; - lexer_context.current_id->hash = hash; - lexer_context.token = lexer_context.current_id->token = Id; - //DEBUG_PRINT("new identifier %s\n", lexer_context.current_id->name); - return; - } - else if (lexer_context.token >= '0' && lexer_context.token <= '9') { - DEBUG_PRINT("Parsing new number\n"); - // parse number, three kinds: dec(123) hex(0x123) oct(017) - lexer_context.token_val = lexer_context.token - '0'; - if (lexer_context.token_val > 0) { - // dec, starts with [1-9] - while (*src >= '0' && *src <= '9') { - lexer_context.token_val = lexer_context.token_val*10 + *src++ - '0'; - } - } else { - // starts with 0 - if (*src == 'x' || *src == 'X') { - //hex - lexer_context.token = *++src; - while ((lexer_context.token >= '0' && lexer_context.token <= '9') || (lexer_context.token >= 'a' && lexer_context.token <= 'f') || (lexer_context.token >= 'A' && lexer_context.token <= 'F')) { - lexer_context.token_val = lexer_context.token_val * 16 + (lexer_context.token & 15) + (lexer_context.token >= 'A' ? 9 : 0); - lexer_context.token = *++src; - } - } else { - // oct - while (*src >= '0' && *src <= '7') { - lexer_context.token_val = lexer_context.token_val*8 + *src++ - '0'; - } - } - } - - lexer_context.token = Num; - return; - } - else if (lexer_context.token == '"' || lexer_context.token == '\'') { - DEBUG_PRINT("Parsing string literal\n"); - // parse string literal, currently, the only supported escape - // character is '\n', store the string literal into data. - last_pos = data; - while (*src != 0 && *src != lexer_context.token) { - lexer_context.token_val = *src++; - if (lexer_context.token_val == '\\') { - // escape character - lexer_context.token_val = *src++; - if (lexer_context.token_val == 'n') { - lexer_context.token_val = '\n'; - } - } - - if (lexer_context.token == '"') { - *data++ = lexer_context.token_val; - } - } - - src++; - // if it is a single character, return Num lexer_context.token - if (lexer_context.token == '"') { - lexer_context.token_val = (int)last_pos; - } else { - lexer_context.token = Num; - } - - return; - } - else if (lexer_context.token == '/') { - if (*src == '/') { - DEBUG_PRINT("Skipping comment...\n"); - // skip comments - while (*src != 0 && *src != '\n') { - ++src; - } - } else { - // divide operator - lexer_context.token = Div; - return; - } - } - else if (lexer_context.token == '=') { - // parse '==' and '=' - if (*src == '=') { - src ++; - lexer_context.token = Eq; - } else { - lexer_context.token = Assign; - } - return; - } - else if (lexer_context.token == '+') { - // parse '+' and '++' - if (*src == '+') { - src ++; - lexer_context.token = Inc; - } else { - lexer_context.token = Add; - } - return; - } - else if (lexer_context.token == '-') { - // parse '-' and '--' - if (*src == '-') { - src ++; - lexer_context.token = Dec; - } else { - lexer_context.token = Sub; - } - return; - } - else if (lexer_context.token == '!') { - // parse '!=' - if (*src == '=') { - src++; - lexer_context.token = Ne; - } - return; - } - else if (lexer_context.token == '<') { - // parse '<=', '<<' or '<' - if (*src == '=') { - src ++; - lexer_context.token = Le; - } else if (*src == '<') { - src ++; - lexer_context.token = Shl; - } else { - lexer_context.token = Lt; - } - return; - } - else if (lexer_context.token == '>') { - // parse '>=', '>>' or '>' - if (*src == '=') { - src ++; - lexer_context.token = Ge; - } else if (*src == '>') { - src ++; - lexer_context.token = Shr; - } else { - lexer_context.token = Gt; - } - return; - } - else if (lexer_context.token == '|') { - // parse '|' or '||' - if (*src == '|') { - src ++; - lexer_context.token = Lor; - } else { - lexer_context.token = Or; - } - return; - } - else if (lexer_context.token == '&') { - // parse '&' and '&&' - if (*src == '&') { - src ++; - lexer_context.token = Lan; - } else { - lexer_context.token = And; - } - return; - } - else if (lexer_context.token == '^') { - lexer_context.token = Xor; - return; - } - else if (lexer_context.token == '%') { - lexer_context.token = Mod; - return; - } - else if (lexer_context.token == '*') { - lexer_context.token = Mul; - return; - } - else if (lexer_context.token == '[') { - lexer_context.token = Brak; - return; - } - else if (lexer_context.token == '?') { - lexer_context.token = Cond; - return; - } - else if (lexer_context.token == '~' || lexer_context.token == ';' || lexer_context.token == '{' || lexer_context.token == '}' || lexer_context.token == '(' || lexer_context.token == ')' || lexer_context.token == ']' || lexer_context.token == ',' || lexer_context.token == ':') { - // directly return the character as lexer_context.token; - return; - } - } - return; -} - -void statement() { - DEBUG_PRINT("statement\n"); - // there are 6 kinds of statements here: - // 1. if (...) [else ] - // 2. while (...) - // 3. { } - // 4. return xxx; - // 5. ; - // 6. expression; (expression end with semicolon) - - int *a, *b; // bess for branch control - - if (lexer_context.token == If) { - // if (...) [else ] - // - // if (...) - // JZ a - // - // else: JMP b - // a: a: - // - // b: b: - // - // - match(If); - match('('); - DEBUG_PRINT("IF expression\n"); - expression(Assign); // parse condition - match(')'); - - // emit code for if - *++text = JZ; - b = ++text; - - DEBUG_PRINT("IF statement\n"); - statement(); // parse statement - if (lexer_context.token == Else) { // parse else - match(Else); - - // emit code for JMP B - *b = (int)(text + 3); - *++text = JMP; - b = ++text; - - DEBUG_PRINT("if else statementn"); - statement(); - } - - *b = (int)(text + 1); - } - else if (lexer_context.token == While) { - DEBUG_PRINT("while\n"); - // - // a: a: - // while () - // JZ b - // - // JMP a - // b: b: - match(While); - - a = text + 1; - - match('('); - expression(Assign); - match(')'); - - *++text = JZ; - b = ++text; - - statement(); - - *++text = JMP; - *++text = (int)a; - *b = (int)(text + 1); - } - else if (lexer_context.token == '{') { - // { ... } - match('{'); - - while (lexer_context.token != '}') { - DEBUG_PRINT("Statement Body"); - statement(); - } - - match('}'); - } - else if (lexer_context.token == Return) { - // return [expression]; - match(Return); - - if (lexer_context.token != ';') { - expression(Assign); - } - - match(';'); - - // emit code for return - *++text = LEV; - } - else if (lexer_context.token == ';') { - // empty statement - match(';'); - } - else { - // a = b; or function_call(); - expression(Assign); - match(';'); - } -} - -void function_parameter() { - - DEBUG_PRINT("function_parameter\n"); - int type; - int params; - params = 0; - while (lexer_context.token != ')') { - // int name, ... - type = INT; - if (lexer_context.token == Int) { - match(Int); - } else if (lexer_context.token == Char) { - type = CHAR; - match(Char); - } - - // pointer type - while (lexer_context.token == Mul) { - match(Mul); - type = type + PTR; - } - - // parameter name - if (lexer_context.token != Id) { - printf("%d: bad parameter declaration\n", line); - exit(-1); - } - if (lexer_context.current_id->class == Loc) { - printf("%d: duplicate parameter declaration\n", line); - exit(-1); - } - - match(Id); - // store the local variable - DEBUG_PRINT("store the local variable\n"); - lexer_context.current_id->Bclass = lexer_context.current_id->class; lexer_context.current_id->class = Loc; - lexer_context.current_id->Btype = lexer_context.current_id->type; lexer_context.current_id->type = type; - lexer_context.current_id->Bvalue = lexer_context.current_id->value; lexer_context.current_id->value = params++; // index of current parameter - - if (lexer_context.token == ',') { - match(','); - } - } - lexer_context.index_of_bp = params+1; -} - -void function_body() { - DEBUG_PRINT("function_body\n"); - // type func_name (...) {...} - // -->| |<-- - - // ... { - // 1. local declarations - // 2. statements - // } - - int pos_local; // position of local variables on the stack. - int type; - pos_local = lexer_context.index_of_bp; - - while (lexer_context.token == Int || lexer_context.token == Char) { - // local variable declaration, just like global ones. - lexer_context.basetype = (lexer_context.token == Int) ? INT : CHAR; - - match(lexer_context.token); - while (lexer_context.token != ';') { - type = lexer_context.basetype; - while (lexer_context.token == Mul) { - match(Mul); - type = type + PTR; - } - - if (lexer_context.token != Id) { - // invalid declaration - printf("%d: bad local declaration\n", line); - exit(-1); - } - if (lexer_context.current_id->class == Loc) { - // identifier exists - printf("%d: duplicate local declaration\n", line); - exit(-1); - } - match(Id); - - - DEBUG_PRINT("store the local variable\n"); - // store the local variable - lexer_context.current_id->Bclass = lexer_context.current_id->class; lexer_context.current_id->class = Loc; - lexer_context.current_id->Btype = lexer_context.current_id->type; lexer_context.current_id->type = type; - lexer_context.current_id->Bvalue = lexer_context.current_id->value; lexer_context.current_id->value = ++pos_local; // index of current parameter - - if (lexer_context.token == ',') { - match(','); - } - } - match(';'); - } - - DEBUG_PRINT("save the stack size for local variables %x\n", text); - // save the stack size for local variables - *++text = ENT; - *++text = pos_local - lexer_context.index_of_bp; - - // statements - DEBUG_PRINT("Function: statements\n"); - while (lexer_context.token != '}') { - statement(); - } - - // emit code for leaving the sub function - *++text = LEV; -} - -void function_declaration() { - // type func_name (...) {...} - // | this part - DEBUG_PRINT("function_declaration...\n"); - - match('('); - function_parameter(); - match(')'); - match('{'); - function_body(); - //match('}'); - - // unwind local variable declarations for all local variables. - lexer_context.current_id = lexer_context.symbols; - while (lexer_context.current_id->token) { - if (lexer_context.current_id->class == Loc) { - lexer_context.current_id->class = lexer_context.current_id->Bclass; - lexer_context.current_id->type = lexer_context.current_id->Btype; - lexer_context.current_id->value = lexer_context.current_id->Bvalue; - } - lexer_context.current_id = lexer_context.current_id + 1; - } -} - -void enum_declaration() { - // parse enum [id] { a = 1, b = 3, ...} - int i; - i = 0; - while (lexer_context.token != '}') { - if (lexer_context.token != Id) { - printf("%d: bad enum identifier %d\n", line, lexer_context.token); - exit(-1); - } - next(); - if (lexer_context.token == Assign) { - // like {a=10} - next(); - if (lexer_context.token != Num) { - printf("%d: bad enum initializer\n", line); - exit(-1); - } - i = lexer_context.token_val; - next(); - } - - lexer_context.current_id->class = Num; - lexer_context.current_id->type = INT; - lexer_context.current_id->value = i++; - - if (lexer_context.token == ',') { - next(); - } - } -} - -void global_declaration() { - // global_declaration ::= enum_decl | variable_decl | function_decl - // - // enum_decl ::= 'enum' [id] '{' id ['=' 'num'] {',' id ['=' 'num'} '}' - // - // variable_decl ::= type {'*'} id { ',' {'*'} id } ';' - // - // function_decl ::= type {'*'} id '(' parameter_decl ')' '{' body_decl '}' - - - DEBUG_PRINT("global_declaration\n"); - - int type; // tmp, actual type for variable - int i; // tmp - - lexer_context.basetype = INT; - - // parse enum, this should be treated alone. - if (lexer_context.token == Enum) { - // enum [id] { a = 10, b = 20, ... } - match(Enum); - if (lexer_context.token != '{') { - match(Id); // skip the [id] part - } - if (lexer_context.token == '{') { - // parse the assign part - match('{'); - enum_declaration(); - match('}'); - } - - DEBUG_PRINT("enum parsed\n"); - - match(';'); - return; - } - - // parse type information - if (lexer_context.token == Int) { - match(Int); - DEBUG_PRINT("int matched\n"); - } - else if (lexer_context.token == Char) { - match(Char); - lexer_context.basetype = CHAR; - DEBUG_PRINT("char matched\n"); - } - - // parse the comma seperated variable declaration. - while (lexer_context.token != ';' && lexer_context.token != '}') { - type = lexer_context.basetype; - // parse pointer type, note that there may exist `int ****x;` - while (lexer_context.token == Mul) { - match(Mul); - type = type + PTR; - DEBUG_PRINT("ptr type\n"); - } - - if (lexer_context.token != Id) { - // invalid declaration - printf("%d: bad global declaration\n", line); - exit(-1); - } - if (lexer_context.current_id->class) { - // identifier exists - printf("%d: duplicate global declaration %s\n", line, lexer_context.current_id->name); - exit(-1); - } - match(Id); - lexer_context.current_id->type = type; - DEBUG_PRINT("current type %d\n", type); - - if (lexer_context.token == '(') { - lexer_context.current_id->class = Fun; - lexer_context.current_id->value = (void*)(text + 1); // the memory address of function - DEBUG_PRINT("function_declaration\n"); - function_declaration(); - } else { - // variable declaration - DEBUG_PRINT("variable declaration\n"); - lexer_context.current_id->class = Glo; // global variable - lexer_context.current_id->value = (void*)data; // assign memory address - data = data + sizeof(int); - } - - if (lexer_context.token == ',') { - match(','); - } - } - next(); -} - - -void lex_init() -{ - src = "char else enum if int return sizeof while " - "open read close printf malloc memset memcmp exit free void main"; - - // add keywords to symbol table - int i = Char; - while (i <= While) { - next(); - lexer_context.current_id->token = i++; - } - - // add library to symbol table - i = OPEN; - while (i <= FREE) { - next(); - lexer_context.current_id->class = Sys; - lexer_context.current_id->type = INT; - lexer_context.current_id->value = i++; - } - - next(); lexer_context.current_id->token = Char; // handle void type - next(); lexer_context.main = lexer_context.current_id; // keep track of main - DEBUG_PRINT("Added important default lexer_context.tokens and system lexer_context.tokens\n"); -} - -void* lex(char* _text, char* _data, char* _str) -{ - // get next lexer_context.token - text = _text; - data = _data; - src = _str; - - next(); - while (lexer_context.token > 0) { - global_declaration(); - } - return lexer_context.main->value; -} - diff --git a/developer/old/lex.h b/developer/old/lex.h deleted file mode 100644 index 877301e..0000000 --- a/developer/old/lex.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef B3261481_AA1E_4BDE_BCA9_34382A600CE5 -#define B3261481_AA1E_4BDE_BCA9_34382A600CE5 -#ifndef __INTERPRETER_LEX_H -#define __INTERPRETER_LEX_H - -enum { - Num = 128, Fun, Sys, Glo, Loc, Id, - Char, Else, Enum, If, Int, Return, Sizeof, While, - Assign, Cond, Lor, Lan, Or, Xor, And, Eq, Ne, Lt, Gt, Le, Ge, Shl, Shr, Add, Sub, Mul, Div, Mod, Inc, Dec, Brak -}; - -// types of variable/function -enum { - CHAR, - INT, - PTR -}; - -void* lex(char* _text, char* _data, char* _str); -void lex_init(); - -#endif /* !__INTERPRETER_LEX_H */ - - -#endif /* B3261481_AA1E_4BDE_BCA9_34382A600CE5 */ diff --git a/developer/old/vm.c b/developer/old/vm.c deleted file mode 100644 index 3275f21..0000000 --- a/developer/old/vm.c +++ /dev/null @@ -1,253 +0,0 @@ -/** - * @file vm.c - * @author Joe Bayer (joexbayer) - * @brief Virtual Machine for the minmial C interpreter - * @version 0.1 - * @date 2023-05-14 - * @see https://github.com/rswier/c4 - * @see https://github.com/lotabout/write-a-C-interpreter - * @copyright Copyright (c) 2023 - * - */ -#include "interpreter.h" -#include -#include - -#define int long -#include "vm.h" - - -const char* optcodes[] = { - "LEA", "IMM", "JMP", "CALL", "JZ", "JNZ", "ENT", "ADJ", "LEV", "LI", - "LC", "SI", "SC", "PUSH", "OR", "XOR", "AND", "EQ", "NE", "LT", - "GT", "LE", "GE", "SHL", "SHR", "ADD", "SUB", "MUL", "DIV", "MOD", - "OPEN", "READ", "CLOS", "PRTF", "MALC", "MSET", "MCMP", "EXIT" -}; - - -#define HEXDUMP_COLS 16 -void hexdump(const void *data, size_t size) { - const unsigned char *p = (const unsigned char *)data; - int i, j; - - for (i = 0; i < size; i += HEXDUMP_COLS) { - printf("%06zu: ", i); - - for (j = 0; j < HEXDUMP_COLS; j++) { - if (i + j < size) - printf("%02x ", p[i + j]); - else - printf(" "); - - if (j % 8 == 7) - printf(" "); - } - - printf(" "); - - for (j = 0; j < HEXDUMP_COLS; j++) { - if (i + j < size) - printf("%c", (p[i + j] >= 32 && p[i + j] <= 126) ? p[i + j] : '.'); - else - printf(" "); - } - - printf("\n"); - } -} - - -void vm_print(struct vm* vm) -{ - printf("__.--@ / VM \\ @--.__\n"); - printf(" Stack: 0x%x\n", vm->stack); - printf(" Data: 0x%x\n", vm->data); - printf(" Text: 0x%x\n", vm->text); - printf(" ----------------\n"); - printf(" AX: 0x%x\n", vm->ax); - printf(" PC: 0x%x\n", vm->pc); - printf(" SP: 0x%x\n", vm->sp); - printf("__.--@ / VM \\ @--.__\n"); - DEBUG_PRINT(" Stack:\n"); - //hexdump(vm->text, POOLSIZE); - -} - -int eval(struct vm* vm) { - vm_print(vm); - - int op, *tmp; - while (1) { - op = *vm->pc++; /* get next operation code */ - switch (op) { - case IMM: - vm->ax = *vm->pc++; /* load immediate value to vm->ax */ - break; - case LC: - vm->ax = *(char *)vm->ax; /* load character to vm->ax, address in vm->ax */ - break; - case LI: - vm->ax = *(int *)vm->ax; /* load integer to vm->ax, address in vm->ax */ - break; - case SC: - vm->ax = *(char *)*vm->sp++ = vm->ax; /* save character to address, value in vm->ax, address on stack */ - break; - case SI: - *(int *)*vm->sp++ = vm->ax; /* save integer to address, value in vm->ax, address on stack */ - break; - case PUSH: - *--vm->sp = vm->ax; /* push the value of vm->ax onto the stack */ - break; - case JMP: - vm->pc = (int *)*vm->pc; /* jump to the address */ - break; - case JZ: - vm->pc = vm->ax ? vm->pc + 1 : (int *)*vm->pc; /* jump if vm->ax is zero */ - break; - case JNZ: - vm->pc = vm->ax ? (int *)*vm->pc : vm->pc + 1; /* jump if vm->ax is not zero */ - break; - case CALL: - *--vm->sp = (int)(vm->pc + 1); /* Store next program counter on stack */ - vm->pc = (int *)*vm->pc; /* call subroutine */ - break; - case ENT: - *--vm->sp = (int)vm->bp; - vm->bp = vm->sp; - vm->sp = vm->sp - *vm->pc++; /* make new stack frame */ - break; - case ADJ: - vm->sp = vm->sp + *vm->pc++; /* add evm->sp, */ - break; - case LEV: - vm->sp = vm->bp; - vm->bp = (int *)*vm->sp++; - vm->pc = (int *)*vm->sp++; /* restore call frame and vm->pc */ - break; - case LEA: - vm->ax = (int)(vm->bp + *vm->pc++); /* load address for arguments. */ - break; - case OR: - vm->ax = *vm->sp++ | vm->ax; - break; - case XOR: - vm->ax = *vm->sp++ ^ vm->ax; - break; - case AND: - vm->ax = *vm->sp++ & vm->ax; - break; - case EQ: - vm->ax = *vm->sp++ == vm->ax; - break; - case NE: - vm->ax = *vm->sp++ != vm->ax; - break; - case LT: - vm->ax = *vm->sp++ < vm->ax; - break; - case LE: - vm->ax = *vm->sp++ <= vm->ax; - break; - case GT: - vm->ax = *vm->sp++ > vm->ax; - break; - case GE: - vm->ax = *vm->sp++ >= vm->ax; - break; - case SHL: - vm->ax = *vm->sp++ << vm->ax; - break; - case SHR: - vm->ax = *vm->sp++ >> vm->ax; - break; - case ADD: - vm->ax = *vm->sp++ + vm->ax; - break; - case SUB: - vm->ax = *vm->sp++ - vm->ax; - break; - case MUL: - vm->ax = *vm->sp++ * vm->ax; - break; - case DIV: - vm->ax = *vm->sp++ / vm->ax; - break; - case MOD: - vm->ax = *vm->sp++ % vm->ax; - break; - case EXIT: - printf("exit(%d)\n", *vm->sp); - return *vm->sp; - case OPEN: - vm->ax = open((char*)vm->sp[1], vm->sp[0]); - break; - case CLOS: - vm->ax = close(*vm->sp); - break; - case READ: - vm->ax = read(vm->sp[2], (char *)vm->sp[1], *vm->sp); - break; - case PRTF: - tmp = vm->sp + vm->pc[1]; - vm->ax = printf((char *)tmp[-1], tmp[-2], tmp[-3], tmp[-4], tmp[-5], tmp[-6]); - break; - case MALC: - vm->ax = (int)malloc(*vm->sp); - break; - case MSET: - vm->ax = (int)memset((char *)vm->sp[2], vm->sp[1], *vm->sp); - break; - case MCMP: - vm->ax = memcmp((char *)vm->sp[2], (char *)vm->sp[1], *vm->sp); - break; - case FREE: - free((void *)*vm->sp); - break; - default: - printf("unknown instruction:%d\n", op); - return -1; - } - DEBUG_PRINT("%s, AX: %d\n", optcodes[op], vm->ax); - } - return 0; -} - -void vm_init(struct vm* vm) -{ - /* allocate memory for virtual machine */ - - vm->text = malloc(VM_TEXT_SIZE); - vm->data = malloc(VM_DATA_SIZE); - vm->stack = malloc(VM_STACK_SIZE); - DEBUG_PRINT("Allocated VM:\nText: 0x%x\nData: 0x%x\nStack: 0x%x\n", vm->text, vm->data, vm->stack); - - vm->old_text = vm->text; - - memset(vm->text, 0, VM_TEXT_SIZE); - memset(vm->data, 0, VM_DATA_SIZE); - memset(vm->stack, 0, VM_STACK_SIZE); - - vm->bp = vm->sp = (int *)((int)vm->stack + VM_STACK_SIZE-2); - vm->ax = 0; -} - -void vm_free(struct vm* vm) -{ - DEBUG_PRINT("Cleaning VM:\nText: 0x%x\nData: 0x%x\nStack: 0x%x\n", vm->text, vm->data, vm->stack); - free(vm->text); - free(vm->data); - free(vm->stack); -} - -void vm_setup_stack(struct vm* vm, int argc, char* argv[]) -{ - int tmp; - /* setup stack */ - vm->sp = (int *)((int)vm->stack + VM_STACK_SIZE-2); - *--vm->sp = EXIT; /* call exit if main returns */ - *--vm->sp = PUSH; - tmp = vm->sp; - *--vm->sp = argc; - *--vm->sp = (int)argv; - *--vm->sp = (int)tmp; -} \ No newline at end of file diff --git a/developer/old/vm.h b/developer/old/vm.h deleted file mode 100644 index 2139bda..0000000 --- a/developer/old/vm.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef A5C3DA12_BD36_42DB_8377_DC3E07ECC8A8 -#define A5C3DA12_BD36_42DB_8377_DC3E07ECC8A8 -#ifndef __INTERPRETER_VM_H -#define __INTERPRETER_VM_H - -enum { - LEA, IMM, JMP, CALL, JZ, JNZ, ENT, ADJ, LEV, LI, LC, SI, SC, PUSH, - OR, XOR, AND, EQ, NE, LT, GT, LE, GE, SHL, SHR, ADD, SUB, MUL, DIV, MOD, - OPEN, READ, CLOS, PRTF, MALC, MSET, MCMP, EXIT, FREE -}; - -struct vm { - long *text, old_text, *stack; - char *data; - long *pc, *bp, *sp, ax, cycle; // virtual machine registers -}; - -void vm_init(struct vm* vm); -void vm_free(struct vm* vm); -void vm_setup_stack(struct vm* vm, long argc, char* argv[]); -long eval(struct vm* vm); - -#endif /* !__INTERPRETER_VM_H */ - - -#endif /* A5C3DA12_BD36_42DB_8377_DC3E07ECC8A8 */ diff --git a/drivers/display.c b/drivers/display.c index fca9bd7..1e93bc7 100644 --- a/drivers/display.c +++ b/drivers/display.c @@ -1,3 +1,14 @@ +/** + * @file display.c + * @author Joe Bayer (joexbayer) + * @brief Display info for VESA. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include diff --git a/drivers/vbe.c b/drivers/vbe.c index eb22860..b4e4542 100644 --- a/drivers/vbe.c +++ b/drivers/vbe.c @@ -1,3 +1,14 @@ +/** + * @file vbe.c + * @author Joe Bayer (joexbayer) + * @brief VESA / VBE code + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/drivers/virtualdisk.c b/drivers/virtualdisk.c index 8129cda..6fbae83 100644 --- a/drivers/virtualdisk.c +++ b/drivers/virtualdisk.c @@ -1,3 +1,14 @@ +/** + * @file virtualdisk.c + * @author Joe Bayer (joexbayer) + * @brief Virtual disk driver. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/fs/ext.c b/fs/ext.c index 15ed590..7963528 100644 --- a/fs/ext.c +++ b/fs/ext.c @@ -1,3 +1,14 @@ +/** + * @file ext.c + * @author Joe Bayer (joexbayer) + * @brief Ext2 (like) filesystem driver. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/fs/fat16_read.c b/fs/fat16_read.c index 367cc59..9bba66e 100644 --- a/fs/fat16_read.c +++ b/fs/fat16_read.c @@ -1,3 +1,14 @@ +/** + * @file fat16_read.c + * @author Joe Bayer (joexbayer) + * @brief FAT16 read functions. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/fs/fat16_write.c b/fs/fat16_write.c index 5fa2db5..f9e7724 100644 --- a/fs/fat16_write.c +++ b/fs/fat16_write.c @@ -1,3 +1,14 @@ +/** + * @file fat16_write.c + * @author Joe Bayer (joexbayer) + * @brief FAT16 write functions. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/fs/inode.c b/fs/inode.c index 4d53cf6..61a9eb1 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -1,3 +1,14 @@ +/** + * @file inode.c + * @author Joe Bayer (joexbayer) + * @brief Inode functions. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/fs/path.c b/fs/path.c index 484c968..b5e8a1e 100644 --- a/fs/path.c +++ b/fs/path.c @@ -1,3 +1,14 @@ +/** + * @file path.c + * @author Joe Bayer (joexbayer) + * @brief Path helper functions + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/fs/vfs.c b/fs/vfs.c index 4b5e11f..50ae3af 100644 --- a/fs/vfs.c +++ b/fs/vfs.c @@ -1,3 +1,14 @@ +/** + * @file vfs.c + * @author Joe Bayer (joexbayer) + * @brief Deprecated filesystem API + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/graphics/api.c b/graphics/api.c index c7650f0..2f8acdc 100644 --- a/graphics/api.c +++ b/graphics/api.c @@ -1,3 +1,14 @@ +/** + * @file api.c + * @author Joe Bayer (joexbayer) + * @brief Graphics API from userspace + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/graphics/core.c b/graphics/core.c index e0800f3..26d08bf 100644 --- a/graphics/core.c +++ b/graphics/core.c @@ -1,3 +1,14 @@ +/** + * @file core.c + * @author Joe Bayer (joexbayer) + * @brief Graphics core functions. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/graphics/theme.c b/graphics/theme.c index af0317b..fcde803 100644 --- a/graphics/theme.c +++ b/graphics/theme.c @@ -1,3 +1,14 @@ +/** + * @file theme.c + * @author Joe Bayer (joexbayer) + * @brief Graphics theme + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include diff --git a/kernel/arch/gdt.c b/kernel/arch/gdt.c index 5e17603..b49b001 100644 --- a/kernel/arch/gdt.c +++ b/kernel/arch/gdt.c @@ -1,3 +1,14 @@ +/** + * @file gdt.c + * @author Joe Bayer (joexbayer) + * @brief Global Descriptor Table + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include diff --git a/kernel/conf.c b/kernel/conf.c index a12160f..ab4b2e0 100644 --- a/kernel/conf.c +++ b/kernel/conf.c @@ -1,3 +1,14 @@ +/** + * @file conf.c + * @author Joe Bayer (joexbayer) + * @brief Configuration file parser. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/diskdev.c b/kernel/diskdev.c index 65ec8ac..acb8610 100644 --- a/kernel/diskdev.c +++ b/kernel/diskdev.c @@ -1,3 +1,14 @@ +/** + * @file diskdev.c + * @author Joe Bayer (joexbayer) + * @brief Disk device interface. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/encoding.c b/kernel/encoding.c index 8343b6e..6ed4afc 100644 --- a/kernel/encoding.c +++ b/kernel/encoding.c @@ -1,3 +1,14 @@ +/** + * @file encoding.c + * @author Joe Bayer (joexbayer) + * @brief Run length encoding. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include unsigned char* encode_run_length(const unsigned char* data, int length, unsigned char* out, int* encodedLength) diff --git a/kernel/env.c b/kernel/env.c index da4a208..d3e307e 100644 --- a/kernel/env.c +++ b/kernel/env.c @@ -1,3 +1,14 @@ +/** + * @file env.c + * @author Joe Bayer (joexbayer) + * @brief Kernel environment variables. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include diff --git a/kernel/ipc.c b/kernel/ipc.c index d8dacac..045713e 100644 --- a/kernel/ipc.c +++ b/kernel/ipc.c @@ -1,3 +1,14 @@ +/** + * @file ipc.c + * @author Joe Bayer (joexbayer) + * @brief Inter process communication. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/kernel.c b/kernel/kernel.c index 66cdd7b..8034ca7 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -1,3 +1,14 @@ +/** + * @file kernel.c + * @author Joe Bayer (joexbayer) + * @brief The kernel entry point. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include diff --git a/kernel/ksyms.c b/kernel/ksyms.c index 1471b05..ac8c8a6 100644 --- a/kernel/ksyms.c +++ b/kernel/ksyms.c @@ -1,4 +1,13 @@ - +/** + * @file ksyms.c + * @author Joe Bayer (joexbayer) + * @brief Kernel symbol table. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ #include #include #include diff --git a/kernel/kthreads/about.c b/kernel/kthreads/about.c index 6ef233a..12778d8 100644 --- a/kernel/kthreads/about.c +++ b/kernel/kthreads/about.c @@ -1,3 +1,14 @@ +/** + * @file about.c + * @author Joe Bayer (joexbayer) + * @brief About and readme threads + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/kthreads/kclock.c b/kernel/kthreads/kclock.c index c261b4a..93391f4 100644 --- a/kernel/kthreads/kclock.c +++ b/kernel/kthreads/kclock.c @@ -1,3 +1,14 @@ +/** + * @file kclock.c + * @author Joe Bayer (joexbayer) + * @brief Clock for kernel. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/kthreads/logd.c b/kernel/kthreads/logd.c index 6df0c64..143c3a9 100644 --- a/kernel/kthreads/logd.c +++ b/kernel/kthreads/logd.c @@ -1,3 +1,14 @@ +/** + * @file logd.c + * @author Joe Bayer (joexbayer) + * @brief Logging daemon + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/kthreads/login.c b/kernel/kthreads/login.c index ed6d858..75409f4 100644 --- a/kernel/kthreads/login.c +++ b/kernel/kthreads/login.c @@ -1,3 +1,14 @@ +/** + * @file login.c + * @author Joe Bayer (joexbayer) + * @brief Login screen kthread + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/kthreads/snake.c b/kernel/kthreads/snake.c index 7a84e1e..afcd1ec 100644 --- a/kernel/kthreads/snake.c +++ b/kernel/kthreads/snake.c @@ -1,3 +1,14 @@ +/** + * @file snake.c + * @author Joe Bayer (joexbayer) + * @brief Textmode only snake game + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #define SNAKE_LENGTH 100 #define SCREEN_WIDTH 80 #define SCREEN_HEIGHT 25 diff --git a/kernel/kthreads/sysinf.c b/kernel/kthreads/sysinf.c index 05e7f53..a0115eb 100644 --- a/kernel/kthreads/sysinf.c +++ b/kernel/kthreads/sysinf.c @@ -1,3 +1,14 @@ +/** + * @file sysinf.c + * @author Joe Bayer (joexbayer) + * @brief System information tool. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/kthreads/taskbar.c b/kernel/kthreads/taskbar.c index 94de9c0..b4db1a9 100644 --- a/kernel/kthreads/taskbar.c +++ b/kernel/kthreads/taskbar.c @@ -1,3 +1,14 @@ +/** + * @file taskbar.c + * @author Joe Bayer (joexbayer) + * @brief Taskbar for the GUI + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/kutils.c b/kernel/kutils.c index 71834a0..b54ed4f 100644 --- a/kernel/kutils.c +++ b/kernel/kutils.c @@ -1,3 +1,14 @@ +/** + * @file kutils.c + * @author Joe Bayer (joexbayer) + * @brief Kernel utilities. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include @@ -7,6 +18,9 @@ #include #include +#include +#include + static char *units[] = {"b ", "kb", "mb"}; /* Function to align a given size to the size of a void* */ @@ -199,4 +213,41 @@ int32_t csprintf(char *buffer, const char *fmt, va_list args) buffer[written < MAX_FMT_STR_SIZE ? written : MAX_FMT_STR_SIZE - 1] = '\0'; return written; +} + +int script_parse(char* str) +{ + char* start = str; + int line = 0, ret; + + if(*str == 0){ + return -1; + } + + /* This assumes that the given string is \0 terminated. */ + do { + if(*str == '\n'){ + *str = 0; + + ret = exec_cmd(start); + if(ret < 0){ + twritef("script: error on '%s' line %d\n", start, line); + return -1; + } + + line++; + start = str+1; + } + str++; + } while (*str != 0); + + /* Try to execute the last line incase it ended with a \0 */ + ret = exec_cmd(start); + if(ret < 0){ + twritef("script: error on '%s' line %d\n", start, line); + return -1; + } + + + return 0; } \ No newline at end of file diff --git a/kernel/partition.c b/kernel/partition.c index 8ea0487..e58094b 100644 --- a/kernel/partition.c +++ b/kernel/partition.c @@ -1,3 +1,14 @@ +/** + * @file partition.c + * @author Joe Bayer (joexbayer) + * @brief Partition table parsing. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/rbuffer.c b/kernel/rbuffer.c index e42f2d3..a46938e 100644 --- a/kernel/rbuffer.c +++ b/kernel/rbuffer.c @@ -1,3 +1,14 @@ +/** + * @file rbuffer.c + * @author Joe Bayer (joexbayer) + * @brief Ring buffer implementation. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 5f9cbfc..4c1b652 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -1,3 +1,14 @@ +/** + * @file scheduler.c + * @author Joe Bayer (joexbayer) + * @brief Scheduler implementation. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/script.c b/kernel/script.c deleted file mode 100644 index b5a4c5a..0000000 --- a/kernel/script.c +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include -#include - -int script_parse(char* str) -{ - char* start = str; - int line = 0, ret; - - if(*str == 0){ - return -1; - } - - /* This assumes that the given string is \0 terminated. */ - do { - if(*str == '\n'){ - *str = 0; - - ret = exec_cmd(start); - if(ret < 0){ - twritef("script: error on '%s' line %d\n", start, line); - return -1; - } - - line++; - start = str+1; - } - str++; - } while (*str != 0); - - /* Try to execute the last line incase it ended with a \0 */ - ret = exec_cmd(start); - if(ret < 0){ - twritef("script: error on '%s' line %d\n", start, line); - return -1; - } - - - return 0; -} \ No newline at end of file diff --git a/kernel/smp.c b/kernel/smp.c index d73f17c..b239a5e 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -1,3 +1,14 @@ +/** + * @file smp.c + * @author Joe Bayer (joexbayer) + * @brief Symmetric multiprocessing. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/sync.c b/kernel/sync.c index ff6cff1..566f6fb 100644 --- a/kernel/sync.c +++ b/kernel/sync.c @@ -85,7 +85,6 @@ void acquire(mutex_t* l) */ void release(mutex_t* l) { - dbgprintf("Unlocking 0x%x\n", l); if(l->state == UNLOCKED){ warningf("Lock 0x%x is already unlocked\n", l); diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 2f45ea5..573f62c 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -1,3 +1,14 @@ +/** + * @file syscalls.c + * @author Joe Bayer (joexbayer) + * @brief System calls. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/kernel/work.c b/kernel/work.c index b728168..4978434 100644 --- a/kernel/work.c +++ b/kernel/work.c @@ -1,4 +1,13 @@ - +/** + * @file work.c + * @author Joe Bayer (joexbayer) + * @brief Work queue for kernel. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ #include #include #include diff --git a/lib/color.c b/lib/color.c index e4a0293..c223284 100644 --- a/lib/color.c +++ b/lib/color.c @@ -1,3 +1,14 @@ +/** + * @file color.c + * @author Joe Bayer (joexbayer) + * @brief Color conversion. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include const unsigned char vga_rgb[] = { diff --git a/lib/errors.c b/lib/errors.c index 119cafa..594d60b 100644 --- a/lib/errors.c +++ b/lib/errors.c @@ -1,3 +1,14 @@ +/** + * @file errors.c + * @author Joe Bayer (joexbayer) + * @brief Error handling. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include diff --git a/lib/font8.c b/lib/font8.c index eb86bb2..04959a2 100644 --- a/lib/font8.c +++ b/lib/font8.c @@ -1,3 +1,15 @@ +/** + * @file font8.c + * @author Joe Bayer (joexbayer) + * @brief 8x8 font for VESA. + * @version 0.1 + * @date 2024-01-10 + * @see https://github.com/dhepper/font8x8 + * + * @copyright Copyright (c) 2024 + * + */ + #include uint8_t font8x8_basic[128][8] = { diff --git a/lib/graphics.c b/lib/graphics.c index 9bb415d..bdf247e 100644 --- a/lib/graphics.c +++ b/lib/graphics.c @@ -1,3 +1,14 @@ +/** + * @file graphics.c + * @author Joe Bayer (joexbayer) + * @brief Userspace graphics library. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/lib/icons.c b/lib/icons.c index 04ea11a..e506aa7 100644 --- a/lib/icons.c +++ b/lib/icons.c @@ -1,3 +1,14 @@ +/** + * @file icons.c + * @author Joe Bayer (joexbayer) + * @brief Icons for the GUI. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include unsigned char screen_32[32*32] = { diff --git a/lib/netlib.c b/lib/netlib.c index 331ec6f..157fa08 100644 --- a/lib/netlib.c +++ b/lib/netlib.c @@ -1,3 +1,14 @@ +/** + * @file netlib.c + * @author Joe Bayer (joexbayer) + * @brief Userspace network library. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/lib/tar.c b/lib/tar.c index 321bbab..d8a87c4 100644 --- a/lib/tar.c +++ b/lib/tar.c @@ -1,3 +1,14 @@ +/** + * @file tar.c + * @author Joe Bayer (joexbayer) + * @brief Tar file system. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/lib/util.c b/lib/util.c index 26b82b7..363f07c 100644 --- a/lib/util.c +++ b/lib/util.c @@ -1,3 +1,14 @@ +/** + * @file util.c + * @author Joe Bayer (joexbayer) + * @brief Utility functions. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #ifdef __cplusplus extern "C" { diff --git a/net/api.c b/net/api.c index 6bf8a62..ba0aec3 100644 --- a/net/api.c +++ b/net/api.c @@ -1,3 +1,14 @@ +/** + * @file api.c + * @author Joe Bayer (joexbayer) + * @brief Userspace network library. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/net/firewall.c b/net/firewall.c index 11be891..0a5eca5 100644 --- a/net/firewall.c +++ b/net/firewall.c @@ -1,3 +1,14 @@ +/** + * @file firewall.c + * @author Joe Bayer (joexbayer) + * @brief Firewall implementation. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/net/icmp.c b/net/icmp.c index 402afc6..70cdd0e 100644 --- a/net/icmp.c +++ b/net/icmp.c @@ -1,3 +1,14 @@ +/** + * @file icmp.c + * @author Joe Bayer (joexbayer) + * @brief ICMP implementation. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/net/interface.c b/net/interface.c index 4efcb63..05f772a 100644 --- a/net/interface.c +++ b/net/interface.c @@ -1,3 +1,14 @@ +/** + * @file interface.c + * @author Joe Bayer (joexbayer) + * @brief Network interface implementation. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/net/net.c b/net/net.c index 15a3480..cded273 100644 --- a/net/net.c +++ b/net/net.c @@ -1,3 +1,14 @@ +/** + * @file net.c + * @author Joe Bayer (joexbayer) + * @brief Network implementation. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/net/networkmanager.c b/net/networkmanager.c index d82b731..d29224f 100644 --- a/net/networkmanager.c +++ b/net/networkmanager.c @@ -1,3 +1,14 @@ +/** + * @file networkmanager.c + * @author Joe Bayer (joexbayer) + * @brief Network manager. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include diff --git a/net/routing.c b/net/routing.c index be82306..25f20b8 100644 --- a/net/routing.c +++ b/net/routing.c @@ -1,3 +1,14 @@ +/** + * @file routing.c + * @author Joe Bayer (joexbayer) + * @brief Routing for internal networking. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/net/utils.c b/net/utils.c index ea92a03..cb0b51f 100644 --- a/net/utils.c +++ b/net/utils.c @@ -1,3 +1,14 @@ +/** + * @file utils.c + * @author Joe Bayer (joexbayer) + * @brief Network utilities. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include uint32_t ntohl(uint32_t data) diff --git a/tools/build.c b/tools/build.c index 8e987a6..71c19d8 100644 --- a/tools/build.c +++ b/tools/build.c @@ -1,3 +1,14 @@ +/** + * @file build.c + * @author Joe Bayer (joexbayer) + * @brief Build RetrOS images. + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include From 8ca0f191179771e169f326d023c28d0116272816 Mon Sep 17 00:00:00 2001 From: Joe Bayer Date: Wed, 10 Jan 2024 10:00:37 +0100 Subject: [PATCH 11/13] Fixes #109, rename and cleanup files --- Makefile | 2 +- apps/Makefile | 6 +- apps/calculator/calc.cpp | 2 +- apps/clock.c | 2 +- apps/cube/cube.cpp | 2 +- apps/echo.cpp | 2 +- apps/editor/edit.hpp | 2 +- apps/finder/finder.cpp | 2 +- apps/graphs/graphs.cpp | 2 +- apps/libcore.a | Bin 12612 -> 18540 bytes apps/libgraphic.a | Bin 9572 -> 15500 bytes apps/templates/basic.cpp | 2 +- apps/utils/StdLib.hpp | 2 +- apps/utils/StringHelper.hpp | 2 +- apps/wolfstein/wolf3d.cpp | 2 +- developer/interpreter.h | 2 +- drivers/ata.c | 2 +- drivers/keyboard.c | 2 +- drivers/mouse.c | 2 +- drivers/serial.c | 2 +- drivers/timer.c | 4 +- drivers/usb/usb.c | 2 +- drivers/vbe.c | 2 +- drivers/virtualdisk.c | 2 +- fs/ext.c | 4 +- fs/fat16.c | 2 +- fs/fat16_iface.c | 2 +- fs/inode.c | 2 +- fs/path.c | 2 +- fs/vfs.c | 2 +- graphics/api.c | 12 +- graphics/gfxlib.c | 50 +- graphics/theme.c | 2 +- graphics/window.c | 20 +- graphics/windowmanager.c | 2 +- include/assert.h | 2 +- include/conf.h | 2 +- include/fs/fs.h | 2 +- include/kutils.h | 18 + include/lib/net.h | 2 +- include/{util.h => libc.h} | 24 +- include/net/skb.h | 2 +- include/net/socket.h | 2 +- include/net/tcp.h | 2 +- include/pcb.h | 4 +- include/screen.h | 2 +- include/script.h | 2 +- include/terminal.h | 8 +- kernel/arch/interrupts.c | 20 +- kernel/arch/tss.c | 2 +- kernel/cmds.c | 8 +- kernel/diskdev.c | 2 +- kernel/env.c | 2 +- kernel/helpers.s | 2 +- kernel/kernel.c | 2 +- kernel/kmem.c | 6 +- kernel/ksyms.c | 2 +- kernel/kthreads.c | 6 +- kernel/kthreads/dhcpd.c | 2 +- kernel/kthreads/kclock.c | 2 +- kernel/kthreads/login.c | 2 +- kernel/kthreads/networking.c | 4 +- kernel/kthreads/shell.c | 18 +- kernel/kthreads/snake.c | 4 +- kernel/kthreads/sysinf.c | 2 +- kernel/kthreads/tcpd.c | 2 +- kernel/kutils.c | 4 +- kernel/memory.c | 16 +- kernel/partition.c | 2 +- kernel/pcb.c | 14 +- kernel/pcb_queue.c | 2 +- kernel/scheduler.c | 6 +- kernel/smp.c | 2 +- kernel/sync.c | 2 +- kernel/syscalls.c | 2 +- kernel/terminal.c | 26 +- kernel/work.c | 2 +- lib/graphics.c | 2 +- lib/hashmap.c | 2 +- lib/{util.c => libc.c} | 2 +- lib/netlib.c | 2 +- lib/printf.c | 2 +- lib/syscall.c | 2 +- net/dns.c | 2 +- net/ipv4.c | 2 +- net/socket.c | 8 +- net/tcp.c | 4 +- rootfs/symbols.map | 878 +++++++++++++++++------------------ tests/include/mocks.h | 2 +- tests/utils/mocks.c | 4 +- 90 files changed, 649 insertions(+), 651 deletions(-) rename include/{util.h => libc.h} (72%) rename lib/{util.c => libc.c} (99%) diff --git a/Makefile b/Makefile index ba5e0c9..7ffa58c 100644 --- a/Makefile +++ b/Makefile @@ -56,7 +56,7 @@ PROGRAMOBJ = bin/shell.o bin/networking.o bin/dhcpd.o bin/tcpd.o bin/logd.o bin/ GFXOBJ = bin/window.o bin/component.o bin/composition.o bin/gfxlib.o bin/api.o bin/theme.o bin/core.o KERNELOBJ = bin/kernel.o bin/terminal.o bin/helpers.o bin/pci.o bin/virtualdisk.o bin/windowmanager.o bin/icons.o bin/vga.o \ - bin/util.o bin/interrupts.o bin/irs_entry.o bin/timer.o bin/gdt.o bin/interpreter.o bin/vm.o bin/lex.o bin/smp.o \ + bin/libc.o bin/interrupts.o bin/irs_entry.o bin/timer.o bin/gdt.o bin/interpreter.o bin/vm.o bin/lex.o bin/smp.o \ bin/keyboard.o bin/pcb.o bin/pcb_queue.o bin/memory.o bin/vmem.o bin/kmem.o bin/e1000.o bin/display.o bin/env.o bin/conf.o \ bin/sync.o bin/kthreads.o bin/ata.o bin/bitmap.o bin/rtc.o bin/tss.o bin/kutils.o bin/login.o bin/cmds.o \ bin/diskdev.o bin/scheduler.o bin/work.o bin/rbuffer.o bin/errors.o bin/kclock.o bin/tar.o bin/color.o bin/loopback.o \ diff --git a/apps/Makefile b/apps/Makefile index fb29ad5..2ffb169 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -32,9 +32,9 @@ UTILS = bin/cppUtils.o bin/crt0.o USROBJS = -COMMON = ../bin/syscall.o ../bin/util.o ../bin/printf.o ../bin/graphics.o ../bin/netlib.o bin/cppUtils.o -LIB_COMMON_OBJS = ../bin/syscall.o ../bin/util.o ../bin/printf.o bin/cppUtils.o -LIB_GRAPHICS_OBJS = ../bin/graphics.o ../bin/util.o +COMMON = ../bin/syscall.o ../bin/libc.o ../bin/printf.o ../bin/graphics.o ../bin/netlib.o bin/cppUtils.o +LIB_COMMON_OBJS = ../bin/syscall.o ../bin/libc.o ../bin/printf.o bin/cppUtils.o +LIB_GRAPHICS_OBJS = ../bin/graphics.o ../bin/libc.o LIB_NET_OBJS = ../bin/netlib.o diff --git a/apps/calculator/calc.cpp b/apps/calculator/calc.cpp index 6543de6..f276bd6 100644 --- a/apps/calculator/calc.cpp +++ b/apps/calculator/calc.cpp @@ -9,7 +9,7 @@ * */ -#include +#include #include #include #include diff --git a/apps/clock.c b/apps/clock.c index 270207c..30bdcc1 100644 --- a/apps/clock.c +++ b/apps/clock.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #define center_x(size) ((110/2) - ((size*8)/2)) diff --git a/apps/cube/cube.cpp b/apps/cube/cube.cpp index 104d971..5dfdfe5 100644 --- a/apps/cube/cube.cpp +++ b/apps/cube/cube.cpp @@ -10,7 +10,7 @@ */ #include -#include +#include #include extern float sin_60[60]; diff --git a/apps/echo.cpp b/apps/echo.cpp index 07ccb8f..7a3afeb 100644 --- a/apps/echo.cpp +++ b/apps/echo.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include "../apps/utils/cppUtils.hpp" diff --git a/apps/editor/edit.hpp b/apps/editor/edit.hpp index 3b1580b..88822b4 100644 --- a/apps/editor/edit.hpp +++ b/apps/editor/edit.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/apps/finder/finder.cpp b/apps/finder/finder.cpp index 4dccccc..ba31921 100644 --- a/apps/finder/finder.cpp +++ b/apps/finder/finder.cpp @@ -9,7 +9,7 @@ * */ -#include +#include #include #include #include diff --git a/apps/graphs/graphs.cpp b/apps/graphs/graphs.cpp index 4ed3d1a..918abe4 100644 --- a/apps/graphs/graphs.cpp +++ b/apps/graphs/graphs.cpp @@ -10,7 +10,7 @@ */ #include -#include +#include #include #include diff --git a/apps/libcore.a b/apps/libcore.a index c9151137625dfef0fecb8f3d46cfe49288fe792a..8e151d2b4cd477e9dff87ca028533c9c006bb97d 100644 GIT binary patch delta 396 zcmX?-^kxF%1dDn@0|OHUFi7BHU|Pv1dDnz3ljwhNZ?{%U@&K3VERBE%rl39fgr9YMiG%}lv)@Vkg-k!0|P3~ k%qz>!PK__FEKW|$$ziC>Or1QFYw2chCK1NX`YfS(0N4yWYXATM diff --git a/apps/libgraphic.a b/apps/libgraphic.a index 4c961c9c054232b4e758010111a344d07325d7e6..f96025f43d5ff53b520480aec6bf1de7d45e265d 100644 GIT binary patch delta 318 zcmaFj)l)gaqTa&TNC5&8xEL5192ppxTL@!;Jq!#~!SzHMq_%{CffiT{yP+HJq%%$~ cV!XK7g-Jn~B_}f}d2<85q9BB|RAE000CA{8QUCw| delta 182 zcmeCFeBw31qTbZdNC5&8xEL51R2dkUTnJ -#include +#include #include class Template : public Window { diff --git a/apps/utils/StdLib.hpp b/apps/utils/StdLib.hpp index 8becd9b..5571956 100644 --- a/apps/utils/StdLib.hpp +++ b/apps/utils/StdLib.hpp @@ -12,7 +12,7 @@ #ifndef STDLIB_HELPER_H #define STDLIB_HELPER_H -#include +#include #include #include "cppUtils.hpp" #include diff --git a/apps/utils/StringHelper.hpp b/apps/utils/StringHelper.hpp index 016142b..80c412b 100644 --- a/apps/utils/StringHelper.hpp +++ b/apps/utils/StringHelper.hpp @@ -12,7 +12,7 @@ #ifndef STRING_HELPER_H #define STRING_HELPER_H -#include +#include #include "cppUtils.hpp" #include #include diff --git a/apps/wolfstein/wolf3d.cpp b/apps/wolfstein/wolf3d.cpp index e192de2..59061d3 100644 --- a/apps/wolfstein/wolf3d.cpp +++ b/apps/wolfstein/wolf3d.cpp @@ -10,7 +10,7 @@ */ #include -#include +#include #include #include diff --git a/developer/interpreter.h b/developer/interpreter.h index 8ab949e..58d8c45 100644 --- a/developer/interpreter.h +++ b/developer/interpreter.h @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #ifdef DEBUG diff --git a/drivers/ata.c b/drivers/ata.c index 53deab6..57abe44 100644 --- a/drivers/ata.c +++ b/drivers/ata.c @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include diff --git a/drivers/keyboard.c b/drivers/keyboard.c index 8c56758..92e2d7d 100644 --- a/drivers/keyboard.c +++ b/drivers/keyboard.c @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/drivers/mouse.c b/drivers/mouse.c index e3bff41..cf637fe 100644 --- a/drivers/mouse.c +++ b/drivers/mouse.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include diff --git a/drivers/serial.c b/drivers/serial.c index df42078..ec44a5c 100644 --- a/drivers/serial.c +++ b/drivers/serial.c @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include diff --git a/drivers/timer.c b/drivers/timer.c index 58f61de..d0309c4 100644 --- a/drivers/timer.c +++ b/drivers/timer.c @@ -23,9 +23,9 @@ static unsigned long tick = 0; static void __int_handler timer_callback() { tick++; - current_running->preempts++; + $current_process->preempts++; EOI(32); - if(current_running != NULL) + if($current_process != NULL) { kernel_yield(); } diff --git a/drivers/usb/usb.c b/drivers/usb/usb.c index d37f099..0edc15e 100644 --- a/drivers/usb/usb.c +++ b/drivers/usb/usb.c @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include diff --git a/drivers/vbe.c b/drivers/vbe.c index b4e4542..a849c78 100644 --- a/drivers/vbe.c +++ b/drivers/vbe.c @@ -11,7 +11,7 @@ #include #include -#include +#include #include #include diff --git a/drivers/virtualdisk.c b/drivers/virtualdisk.c index 6fbae83..75b4cd7 100644 --- a/drivers/virtualdisk.c +++ b/drivers/virtualdisk.c @@ -9,7 +9,7 @@ * */ -#include +#include #include #include #include diff --git a/fs/ext.c b/fs/ext.c index 7963528..4075675 100644 --- a/fs/ext.c +++ b/fs/ext.c @@ -23,7 +23,7 @@ #include #include -#include +#include #include static struct superblock superblock; @@ -83,7 +83,7 @@ inode_t ext_get_root() inode_t ext_get_current_dir() { - return current_running->current_directory; + return $current_process->current_directory; } diff --git a/fs/fat16.c b/fs/fat16.c index f9043f5..47f1c25 100644 --- a/fs/fat16.c +++ b/fs/fat16.c @@ -9,7 +9,7 @@ * @copyright Copyright (c) 2023 * */ -#include +#include #include #include #include diff --git a/fs/fat16_iface.c b/fs/fat16_iface.c index 502968c..a591851 100644 --- a/fs/fat16_iface.c +++ b/fs/fat16_iface.c @@ -9,7 +9,7 @@ * */ -#include +#include #include #include #include diff --git a/fs/inode.c b/fs/inode.c index 61a9eb1..36a1858 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -15,7 +15,7 @@ #include -#include +#include #include #define INODE_CACHE_SIZE 100 diff --git a/fs/path.c b/fs/path.c index b5e8a1e..4fdb429 100644 --- a/fs/path.c +++ b/fs/path.c @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include static int path_next_iter(char* path, char* next) diff --git a/fs/vfs.c b/fs/vfs.c index 50ae3af..b3dfd46 100644 --- a/fs/vfs.c +++ b/fs/vfs.c @@ -36,7 +36,7 @@ void mkdir(int argc, char* argv[]) return; } - int ret = ext_create_directory(argv[1], current_running->current_directory); + int ret = ext_create_directory(argv[1], $current_process->current_directory); if(ret == -FS_ERR_INODE_MISSING){ twritef("Unable to find current directory\n"); return; diff --git a/graphics/api.c b/graphics/api.c index 2f8acdc..0d64ec5 100644 --- a/graphics/api.c +++ b/graphics/api.c @@ -23,31 +23,31 @@ int gfx_syscall_hook(int option, void* data, int flags) if(!(flags >= 0 && flags < 255))return -1; ERR_ON_NULL(data); - ERR_ON_NULL(current_running); + ERR_ON_NULL($current_process); switch (option){ case GFX_DRAW_CHAR_OPT:; struct gfx_char* c = (struct gfx_char*)data; - kernel_gfx_draw_char(current_running->gfx_window, c->x, c->y, c->data, c->color); + kernel_gfx_draw_char($current_process->gfx_window, c->x, c->y, c->data, c->color); break; case GFX_DRAW_RECTANGLE_OPT:; struct gfx_rectangle* r = (struct gfx_rectangle*)data; - kernel_gfx_draw_rectangle(current_running->gfx_window, r->x, r->y, r->width, r->height, r->palette == GFX_VGA ? r->color : rgb_to_vga(r->color)); + kernel_gfx_draw_rectangle($current_process->gfx_window, r->x, r->y, r->width, r->height, r->palette == GFX_VGA ? r->color : rgb_to_vga(r->color)); break; case GFX_DRAW_CIRCLE_OPT:; struct gfx_circle* circle = (struct gfx_circle*)data; - kernel_gfx_draw_circle(current_running->gfx_window, circle->x, circle->y, circle->r, circle->color, circle->fill); + kernel_gfx_draw_circle($current_process->gfx_window, circle->x, circle->y, circle->r, circle->color, circle->fill); break; case GFX_DRAW_LINE_OPT:; struct gfx_line* line = (struct gfx_line*)data; - kernel_gfx_draw_line(current_running->gfx_window, line->x0, line->y0, line->x1, line->y1, rgb_to_vga(line->color)); + kernel_gfx_draw_line($current_process->gfx_window, line->x0, line->y0, line->x1, line->y1, rgb_to_vga(line->color)); break; case GFX_DRAW_PIXEL:; struct gfx_pixel* pixel = (struct gfx_pixel*)data; - kernel_gfx_draw_pixel(current_running->gfx_window, pixel->x, pixel->y, rgb_to_vga(pixel->color)); + kernel_gfx_draw_pixel($current_process->gfx_window, pixel->x, pixel->y, rgb_to_vga(pixel->color)); break; case GFX_EVEN_LOOP_OPT: diff --git a/graphics/gfxlib.c b/graphics/gfxlib.c index c73e3aa..80b9cb2 100644 --- a/graphics/gfxlib.c +++ b/graphics/gfxlib.c @@ -21,12 +21,12 @@ int gfx_get_window_width() { - return current_running->gfx_window->inner_width; + return $current_process->gfx_window->inner_width; } int gfx_get_window_height() { - return current_running->gfx_window->inner_height; + return $current_process->gfx_window->inner_height; } int gfx_push_event(struct window* w, struct gfx_event* e) @@ -63,12 +63,12 @@ int gfx_button(int x, int y, int width, int height, char* name) int gfx_button_ext(int x, int y, int width, int height, char* name, color_t color) { - kernel_gfx_draw_rectangle(current_running->gfx_window, x, y, width, height, color); - kernel_gfx_draw_rectangle(current_running->gfx_window, x, y, width-1, 1, 31); - kernel_gfx_draw_rectangle(current_running->gfx_window, x, y, 1, height, 31); - kernel_gfx_draw_rectangle(current_running->gfx_window, x+width-1, y, 1, height, COLOR_VGA_MEDIUM_DARK_GRAY+5); - kernel_gfx_draw_rectangle(current_running->gfx_window, x, y+height-1, width-1, 1, COLOR_VGA_MEDIUM_DARK_GRAY+5); - kernel_gfx_draw_rectangle(current_running->gfx_window, x, y+height, width-1, 1, 31); + kernel_gfx_draw_rectangle($current_process->gfx_window, x, y, width, height, color); + kernel_gfx_draw_rectangle($current_process->gfx_window, x, y, width-1, 1, 31); + kernel_gfx_draw_rectangle($current_process->gfx_window, x, y, 1, height, 31); + kernel_gfx_draw_rectangle($current_process->gfx_window, x+width-1, y, 1, height, COLOR_VGA_MEDIUM_DARK_GRAY+5); + kernel_gfx_draw_rectangle($current_process->gfx_window, x, y+height-1, width-1, 1, COLOR_VGA_MEDIUM_DARK_GRAY+5); + kernel_gfx_draw_rectangle($current_process->gfx_window, x, y+height, width-1, 1, 31); /* center the text */ int text_width = strlen(name)*PIXELS_PER_CHAR; @@ -76,7 +76,7 @@ int gfx_button_ext(int x, int y, int width, int height, char* name, color_t colo int text_x = x + (width/2) - (text_width/2); int text_y = y + (height/2) - (text_height/2); - kernel_gfx_draw_text(current_running->gfx_window, text_x, text_y, name, 0x0); + kernel_gfx_draw_text($current_process->gfx_window, text_x, text_y, name, 0x0); return 0; } @@ -89,9 +89,9 @@ int gfx_put_icon16(unsigned char icon[], int x, int y) /* for new icons we use 0xfa for transparent */ if (icon[l*16+i] != 0xfa) { - if((x)+i < 0 || (y)+l < 0 || (x)+i > current_running->gfx_window->inner_width || (y)+l > current_running->gfx_window->inner_height) + if((x)+i < 0 || (y)+l < 0 || (x)+i > $current_process->gfx_window->inner_width || (y)+l > $current_process->gfx_window->inner_height) continue; - putpixel(current_running->gfx_window->inner, (x)+i, (y)+l, rgb_to_vga(icon[l*16+i]), current_running->gfx_window->pitch); + putpixel($current_process->gfx_window->inner, (x)+i, (y)+l, rgb_to_vga(icon[l*16+i]), $current_process->gfx_window->pitch); } } } @@ -106,9 +106,9 @@ int gfx_put_icon32(unsigned char icon[], int x, int y) /* for new icons we use 0xfa for transparent */ if (icon[l*32+i] != 0xfa) { - if((x)+i < 0 || (y)+l < 0 || (x)+i > current_running->gfx_window->inner_width || (y)+l > current_running->gfx_window->inner_height) + if((x)+i < 0 || (y)+l < 0 || (x)+i > $current_process->gfx_window->inner_width || (y)+l > $current_process->gfx_window->inner_height) continue; - putpixel(current_running->gfx_window->inner, (x)+i, (y)+l, rgb_to_vga(icon[l*32+i]), current_running->gfx_window->pitch); + putpixel($current_process->gfx_window->inner, (x)+i, (y)+l, rgb_to_vga(icon[l*32+i]), $current_process->gfx_window->pitch); } } } @@ -118,18 +118,18 @@ int gfx_put_icon32(unsigned char icon[], int x, int y) int gfx_event_loop(struct gfx_event* event, gfx_event_flag_t flags) { - ERR_ON_NULL(current_running->gfx_window); + ERR_ON_NULL($current_process->gfx_window); /** * The gfx event loop is PCB specific, * checks if there is an event if true return. * Else block. */ while(1){ - if(current_running->gfx_window->events.tail == current_running->gfx_window->events.head){ + if($current_process->gfx_window->events.tail == $current_process->gfx_window->events.head){ if(flags & GFX_EVENT_BLOCKING){ /* FIXME: Should not global block, perhaps window manager block queue? */ - current_running->state = BLOCKED; + $current_process->state = BLOCKED; kernel_yield(); } else { return -1; @@ -137,9 +137,9 @@ int gfx_event_loop(struct gfx_event* event, gfx_event_flag_t flags) continue; } - SPINLOCK(current_running->gfx_window, { - memcpy(event, ¤t_running->gfx_window->events.list[current_running->gfx_window->events.tail], sizeof(struct gfx_event)); - current_running->gfx_window->events.tail = (current_running->gfx_window->events.tail + 1) % GFX_MAX_EVENTS; + SPINLOCK($current_process->gfx_window, { + memcpy(event, &$current_process->gfx_window->events.list[$current_process->gfx_window->events.tail], sizeof(struct gfx_event)); + $current_process->gfx_window->events.tail = ($current_process->gfx_window->events.tail + 1) % GFX_MAX_EVENTS; }); return 0; } @@ -239,9 +239,9 @@ void kernel_gfx_set_position(struct window* w, int x, int y) void gfx_commit() { - if(current_running->gfx_window == NULL) + if($current_process->gfx_window == NULL) return; - current_running->gfx_window->changed = 1; + $current_process->gfx_window->changed = 1; } /** @@ -269,8 +269,8 @@ int kernel_gfx_set_title(char* title) if(strlen(title) > GFX_MAX_WINDOW_NAME_SIZE) return -1; - memset(current_running->gfx_window->name, 0, GFX_MAX_WINDOW_NAME_SIZE); - memcpy(current_running->gfx_window->name, title, strlen(title)); + memset($current_process->gfx_window->name, 0, GFX_MAX_WINDOW_NAME_SIZE); + memcpy($current_process->gfx_window->name, title, strlen(title)); return 0; } @@ -280,8 +280,8 @@ int kernel_gfx_set_header(const char* header) if(strlen(header) > GFX_MAX_WINDOW_NAME_SIZE) return -1; - memset(current_running->gfx_window->header, 0, GFX_MAX_WINDOW_NAME_SIZE); - memcpy(current_running->gfx_window->header, header, strlen(header)); + memset($current_process->gfx_window->header, 0, GFX_MAX_WINDOW_NAME_SIZE); + memcpy($current_process->gfx_window->header, header, strlen(header)); return 0; } diff --git a/graphics/theme.c b/graphics/theme.c index fcde803..ed5a9fe 100644 --- a/graphics/theme.c +++ b/graphics/theme.c @@ -10,7 +10,7 @@ */ #include -#include +#include struct gfx_theme default1 = { .os = { diff --git a/graphics/window.c b/graphics/window.c index 74f9a89..af41f3d 100644 --- a/graphics/window.c +++ b/graphics/window.c @@ -9,7 +9,7 @@ * */ #include -#include +#include #include #include #include @@ -185,7 +185,7 @@ void gfx_draw_window(uint8_t* buffer, struct window* window) void gfx_window_set_resizable() { - current_running->gfx_window->is_resizable = 1; + $current_process->gfx_window->is_resizable = 1; } /* under construction */ @@ -353,8 +353,8 @@ static void gfx_default_mouse_up(struct window* window, int x, int y) int kernel_gfx_window_border_color(uint8_t color) { - if(current_running->gfx_window == NULL) return -1; - current_running->gfx_window->color.border = color; + if($current_process->gfx_window == NULL) return -1; + $current_process->gfx_window->color.border = color; return ERROR_OK; } @@ -399,8 +399,8 @@ static int gfx_window_maximize(struct window* window) */ struct window* gfx_new_window(int width, int height, window_flag_t flags) { - if(current_running->gfx_window != NULL) - return current_running->gfx_window; + if($current_process->gfx_window != NULL) + return $current_process->gfx_window; struct window* w = create(struct window); if(w == NULL){ @@ -434,7 +434,7 @@ struct window* gfx_new_window(int width, int height, window_flag_t flags) w->height += 16; } - w->owner = current_running; + w->owner = $current_process; w->pitch = w->inner_width; w->x = 32; w->y = 32; @@ -464,13 +464,13 @@ struct window* gfx_new_window(int width, int height, window_flag_t flags) w->is_moving.state = GFX_WINDOW_STATIC; /* Window can just use the name of the owner? */ - memcpy(w->name, current_running->name, strlen(current_running->name)+1); + memcpy(w->name, $current_process->name, strlen($current_process->name)+1); memset(w->header, 0, GFX_MAX_WINDOW_NAME_SIZE); w->in_focus = 0; - dbgprintf("[Window] Created new window for %s at 0x%x: inner 0x%x (total %x - %x)\n", current_running->name, w, w->inner, sizeof(struct window), width*height); + dbgprintf("[Window] Created new window for %s at 0x%x: inner 0x%x (total %x - %x)\n", $current_process->name, w, w->inner, sizeof(struct window), width*height); - current_running->gfx_window = w; + $current_process->gfx_window = w; gfx_composition_add_window(w); return w; diff --git a/graphics/windowmanager.c b/graphics/windowmanager.c index dcde2df..08adc83 100644 --- a/graphics/windowmanager.c +++ b/graphics/windowmanager.c @@ -10,7 +10,7 @@ */ #include -#include +#include #include #include #include diff --git a/include/assert.h b/include/assert.h index 5d0ff5a..5113682 100644 --- a/include/assert.h +++ b/include/assert.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include #define assert(expr) \ diff --git a/include/conf.h b/include/conf.h index 2dd43ff..3ac156b 100644 --- a/include/conf.h +++ b/include/conf.h @@ -4,7 +4,7 @@ #include #include #include -#include +#include #define CONFIG_MAX_SECTIONS 32 #define CONFIG_MAX_NAME_LEN 32 diff --git a/include/fs/fs.h b/include/fs/fs.h index 9e9f174..5cdebb1 100644 --- a/include/fs/fs.h +++ b/include/fs/fs.h @@ -1,7 +1,7 @@ #ifndef __FS_MODULE_H #define __FS_MODULE_H -#include +#include #define FS_VERSION 1 #define FS_VALIDATE(fs) if(!fs || fs->version != FS_VERSION) return -1; diff --git a/include/kutils.h b/include/kutils.h index 12d0c3e..e84f877 100644 --- a/include/kutils.h +++ b/include/kutils.h @@ -92,6 +92,24 @@ extern int cli_cnt; #define CLEAR_FLAG(flags, flag) (flags &= ~flag) #define HAS_FLAG(flags, flag) (flags & flag) +#define roundup(x, n) (((x) + (n) - 1) / (n) * (n)) +#define rounddown(x, n) ((x) / (n) * (n)) + +/* From linux kernel. */ +#define offsetof(st, m) \ + ((int)((char *)&((st *)0)->m - (char *)0)) +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) + +#define STRINGIFY(x) #x + +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) +#define UNUSED(x) (void)(x) + +#define likely(x) (__builtin_expect(!!(x), 1)) +#define unlikely(x) (__builtin_expect(!!(x), 0)) + /** * @brief CRITICAL_SECTION * Enters critical section before the diff --git a/include/lib/net.h b/include/lib/net.h index 7a20590..aa4b669 100644 --- a/include/lib/net.h +++ b/include/lib/net.h @@ -79,7 +79,7 @@ int gethostname(char *name); #ifdef __cplusplus #include "../../apps/utils/cppUtils.hpp" -#include +#include inline unsigned short htons(unsigned short data) { diff --git a/include/util.h b/include/libc.h similarity index 72% rename from include/util.h rename to include/libc.h index 63b79f1..b0717d5 100644 --- a/include/util.h +++ b/include/libc.h @@ -1,5 +1,5 @@ -#ifndef UTILS_H -#define UTILS_H +#ifndef __LIBC_H +#define __LIBC_H #include /* @@ -75,25 +75,5 @@ do { \ } #endif - -#define roundup(x, n) (((x) + (n) - 1) / (n) * (n)) -#define rounddown(x, n) ((x) / (n) * (n)) - - -/* From linux kernel. */ -#define offsetof(st, m) \ - ((int)((char *)&((st *)0)->m - (char *)0)) -#define container_of(ptr, type, member) ({ \ - const typeof( ((type *)0)->member ) *__mptr = (ptr); \ - (type *)( (char *)__mptr - offsetof(type,member) );}) - -#define STRINGIFY(x) #x - -#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) -#define UNUSED(x) (void)(x) - -#define likely(x) (__builtin_expect(!!(x), 1)) -#define unlikely(x) (__builtin_expect(!!(x), 0)) - unsigned long long rdtsc(void); #endif \ No newline at end of file diff --git a/include/net/skb.h b/include/net/skb.h index aa12a32..f76f94e 100644 --- a/include/net/skb.h +++ b/include/net/skb.h @@ -6,7 +6,7 @@ struct sk_buff; #include #include #include -#include +#include #include #include diff --git a/include/net/socket.h b/include/net/socket.h index a4ab396..c814958 100644 --- a/include/net/socket.h +++ b/include/net/socket.h @@ -3,7 +3,7 @@ struct sock; -#include +#include #include #include #include diff --git a/include/net/tcp.h b/include/net/tcp.h index 676fe8c..fc7fdbd 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -2,7 +2,7 @@ #define __TCP_H #include -#include +#include #include #include diff --git a/include/pcb.h b/include/pcb.h index b7bc1e2..fc37fee 100644 --- a/include/pcb.h +++ b/include/pcb.h @@ -3,7 +3,7 @@ struct pcb; -#include +#include #include #include #include @@ -101,7 +101,7 @@ struct pcb_info { }; extern const char* pcb_status[]; -extern struct pcb* current_running; +extern struct pcb* $current_process; /* Forward declaration */ struct pcb_queue; diff --git a/include/screen.h b/include/screen.h index 80799cf..7802598 100644 --- a/include/screen.h +++ b/include/screen.h @@ -1,7 +1,7 @@ #ifndef SCREEN_H #define SCREEN_H -#include +#include #include #define SCREEN_WIDTH 80 diff --git a/include/script.h b/include/script.h index 2102626..e32f468 100644 --- a/include/script.h +++ b/include/script.h @@ -1,7 +1,7 @@ #ifndef ACA6EF6A_B1AF_4C59_8CE6_403760B3BB1F #define ACA6EF6A_B1AF_4C59_8CE6_403760B3BB1F -#include +#include int script_parse(char* str); #endif /* ACA6EF6A_B1AF_4C59_8CE6_403760B3BB1F */ diff --git a/include/terminal.h b/include/terminal.h index 511b1c4..83f3046 100644 --- a/include/terminal.h +++ b/include/terminal.h @@ -4,10 +4,10 @@ #include #include #include -#include +#include #define TERM_CONTEXT(codeblock) do { \ - struct terminal* term = current_running->term; \ + struct terminal* term = $current_process->term; \ if(term == NULL) { \ break;\ } \ @@ -15,8 +15,8 @@ } while(0) #define twritef(a, ...) \ - if(current_running != NULL && current_running->term != NULL) { \ - current_running->term->ops->writef(current_running->term, a, ##__VA_ARGS__); \ + if($current_process != NULL && $current_process->term != NULL) { \ + $current_process->term->ops->writef($current_process->term, a, ##__VA_ARGS__); \ } typedef enum { diff --git a/kernel/arch/interrupts.c b/kernel/arch/interrupts.c index d5f4625..71a65db 100644 --- a/kernel/arch/interrupts.c +++ b/kernel/arch/interrupts.c @@ -63,7 +63,7 @@ void print_page_fault_info(unsigned long cr2) { unsigned long page_table_entry; /* Get the directory entry from the page directory */ - page_dir_entry = current_running->page_dir[DIRECTORY_INDEX(cr2)]; + page_dir_entry = $current_process->page_dir[DIRECTORY_INDEX(cr2)]; /* Check if the page directory entry is present */ if (page_dir_entry & PRESENT_BIT) { @@ -102,20 +102,20 @@ void page_fault_interrupt(unsigned long cr2, unsigned long err) interrupt_counter[14]++; ENTER_CRITICAL(); - dbgprintf("Page fault: 0x%x (Stack: 0x%x) %d (%s)\n", cr2, current_running->stackptr, err, current_running->name); + dbgprintf("Page fault: 0x%x (Stack: 0x%x) %d (%s)\n", cr2, $current_process->stackptr, err, $current_process->name); /* print page_table entry */ print_page_fault_info(cr2); - pcb_dbg_print(current_running); + pcb_dbg_print($current_process); - if(current_running->is_process){ + if($current_process->is_process){ kernel_exit(); } #ifdef KERNEL_PANIC_ON_PAGE_FAULT kernel_panic("A critical kernel thread encountered a page fault."); #endif - //vesa_printf(0, 0, "Page fault: 0x%x (Stack: 0x%x) %d (%s)\n", cr2, current_running->stackptr, err, current_running->name); + //vesa_printf(0, 0, "Page fault: 0x%x (Stack: 0x%x) %d (%s)\n", cr2, $current_process->stackptr, err, $current_process->name); kernel_exit(); UNREACHABLE(); @@ -124,8 +124,8 @@ void page_fault_interrupt(unsigned long cr2, unsigned long err) void general_protection_fault() { ENTER_CRITICAL(); - dbgprintf("General Protection Fault: 0x%x - %s\n", current_running->stackptr, current_running->name); - pcb_dbg_print(current_running); + dbgprintf("General Protection Fault: 0x%x - %s\n", $current_process->stackptr, $current_process->name); + pcb_dbg_print($current_process); /* TODO: Some kind of feedback */ EOI(13); @@ -146,9 +146,9 @@ void interrupt_install_handler(int i, void (*handler)()) static void __interrupt_exception_handler(int i) { interrupt_counter[i]++; - dbgprintf("[exception] %d %s (%s)\n", i, __exceptions_names[i], current_running->name); - pcb_dbg_print(current_running); - if(current_running->is_process){ + dbgprintf("[exception] %d %s (%s)\n", i, __exceptions_names[i], $current_process->name); + pcb_dbg_print($current_process); + if($current_process->is_process){ kernel_exit(); UNREACHABLE(); } diff --git a/kernel/arch/tss.c b/kernel/arch/tss.c index e575a44..4e5d4ba 100644 --- a/kernel/arch/tss.c +++ b/kernel/arch/tss.c @@ -1,6 +1,6 @@ #include #include -#include +#include #define FLUSH_TSS() asm volatile ("ltr %0" : : "m" (tss_selector)) diff --git a/kernel/cmds.c b/kernel/cmds.c index 36c0781..b37e5db 100644 --- a/kernel/cmds.c +++ b/kernel/cmds.c @@ -264,7 +264,7 @@ static int __kthread_entry __tcp_reader(int argc, char *argv[]) buffer[ret] = 0; twritef("%s", buffer); - current_running->term->ops->commit(current_running->term); + $current_process->term->ops->commit($current_process->term); } return 0; @@ -301,7 +301,7 @@ static int tcp(int argc, char *argv[]) } twritef("Connected to %s:%s\n", argv[1], argv[2]); - current_running->term->ops->commit(current_running->term); + $current_process->term->ops->commit($current_process->term); char socket_str[10] = {0}; itoa(socket->socket, socket_str); @@ -311,7 +311,7 @@ static int tcp(int argc, char *argv[]) int ret; char* buffer = kalloc(1024); while(1){ - ret = current_running->term->ops->scan(current_running->term, buffer, 255); + ret = $current_process->term->ops->scan($current_process->term, buffer, 255); if(ret < 0){ break; } @@ -373,7 +373,7 @@ static int conf(int argc, char *argv[]) EXPORT_KSYMBOL(conf); static int clear(){ - current_running->term->ops->reset(current_running->term); + $current_process->term->ops->reset($current_process->term); return 0; } EXPORT_KSYMBOL(clear); diff --git a/kernel/diskdev.c b/kernel/diskdev.c index acb8610..4904451 100644 --- a/kernel/diskdev.c +++ b/kernel/diskdev.c @@ -10,7 +10,7 @@ */ #include -#include +#include #include #include #include diff --git a/kernel/env.c b/kernel/env.c index d3e307e..37974ef 100644 --- a/kernel/env.c +++ b/kernel/env.c @@ -10,7 +10,7 @@ */ #include -#include +#include struct environment_variable { char* name; diff --git a/kernel/helpers.s b/kernel/helpers.s index 7705e63..345c380 100644 --- a/kernel/helpers.s +++ b/kernel/helpers.s @@ -134,7 +134,7 @@ pcb_restore_context: .global _start_pcb _start_pcb: subl $1, cli_cnt - # movl current_running, %eax + # movl $current_process, %eax movl 4(%esp), %eax movl PCB_KESP(%eax), %esp diff --git a/kernel/kernel.c b/kernel/kernel.c index 8034ca7..69282d3 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -12,7 +12,7 @@ #include #include -#include +#include #include #include #include diff --git a/kernel/kmem.c b/kernel/kmem.c index c417f9a..9e19a07 100644 --- a/kernel/kmem.c +++ b/kernel/kmem.c @@ -107,7 +107,7 @@ void* kalloc(int size) void* ptr = (void*)(KERNEL_MEMORY_START + start_block * KMEM_BLOCK_SIZE + sizeof(int)); __kmemory_used += num_blocks * KMEM_BLOCK_SIZE; - current_running->kallocs++; + $current_process->kallocs++; /* sanity check */ if(__kmemory_used > KERNEL_MEMORY_END-KERNEL_MEMORY_START){ @@ -153,7 +153,7 @@ void kfree(void* ptr) /* Read the size of the allocated block from the metadata block */ int* metadata = (int*) (KERNEL_MEMORY_START + block_index * KMEM_BLOCK_SIZE); int num_blocks = *metadata; - dbgprintf("[MEMORY] %s freeing %d blocks of data\n", current_running->name, num_blocks); + dbgprintf("[MEMORY] %s freeing %d blocks of data\n", $current_process->name, num_blocks); /* Mark the blocks as free in the bitmap */ for (int i = 0; i < num_blocks; i++) { @@ -219,5 +219,5 @@ void kmem_init() memset(__kmemory_bitmap, 0, (memory_map_get()->kernel.total) / KMEM_BLOCK_SIZE / KMEM_BLOCKS_PER_BYTE); __kmemory_lock = 0; - dbgprintf("Lock 0x%x initiated by %s\n", &__kmemory_lock, current_running->name); + dbgprintf("Lock 0x%x initiated by %s\n", &__kmemory_lock, $current_process->name); } \ No newline at end of file diff --git a/kernel/ksyms.c b/kernel/ksyms.c index ac8c8a6..e3a19b7 100644 --- a/kernel/ksyms.c +++ b/kernel/ksyms.c @@ -8,7 +8,7 @@ * @copyright Copyright (c) 2024 * */ -#include +#include #include #include #include diff --git a/kernel/kthreads.c b/kernel/kthreads.c index 7be9452..729b04a 100644 --- a/kernel/kthreads.c +++ b/kernel/kthreads.c @@ -33,12 +33,12 @@ static struct kthread { */ void __noreturn kthread_entry(int argc, char* args[]) { - if(current_running->is_process){ + if($current_process->is_process){ kernel_exit(); } - void (*entry)(int argc, char* argv[]) = (void (*)(int argc, char* argv[]))current_running->thread_eip; - entry(current_running->args, current_running->argv); + void (*entry)(int argc, char* argv[]) = (void (*)(int argc, char* argv[]))$current_process->thread_eip; + entry($current_process->args, $current_process->argv); kernel_exit(); UNREACHABLE(); diff --git a/kernel/kthreads/dhcpd.c b/kernel/kthreads/dhcpd.c index 8860028..80d4c77 100644 --- a/kernel/kthreads/dhcpd.c +++ b/kernel/kthreads/dhcpd.c @@ -18,7 +18,7 @@ #include #include -#include +#include #include diff --git a/kernel/kthreads/kclock.c b/kernel/kthreads/kclock.c index 93391f4..7896432 100644 --- a/kernel/kthreads/kclock.c +++ b/kernel/kthreads/kclock.c @@ -10,7 +10,7 @@ */ #include -#include +#include #include #include #include diff --git a/kernel/kthreads/login.c b/kernel/kthreads/login.c index 75409f4..be5334b 100644 --- a/kernel/kthreads/login.c +++ b/kernel/kthreads/login.c @@ -11,7 +11,7 @@ #include #include -#include +#include #include #include #include diff --git a/kernel/kthreads/networking.c b/kernel/kthreads/networking.c index 9b2975e..09271b1 100644 --- a/kernel/kthreads/networking.c +++ b/kernel/kthreads/networking.c @@ -289,7 +289,7 @@ void __kthread_entry networking_main() netd.skb_tx_queue = skb_new_queue(); } - netd.instance = current_running; + netd.instance = $current_process; /* sanity check that loopback interface exists */ __net_config_loopback(); @@ -333,7 +333,7 @@ void __kthread_entry networking_main() } if(todos == 0){ - current_running->state = BLOCKED; + $current_process->state = BLOCKED; } kernel_yield(); diff --git a/kernel/kthreads/shell.c b/kernel/kthreads/shell.c index 37ea2e1..4ffce2b 100644 --- a/kernel/kthreads/shell.c +++ b/kernel/kthreads/shell.c @@ -72,7 +72,7 @@ static char* about_text = "\nRetrOS-32 - 32bit Operating System\n " KERNEL_RE void shell_clear() { struct gfx_theme* theme = kernel_gfx_current_theme(); - kernel_gfx_draw_rectangle(current_running->gfx_window, 0, SHELL_POSITION, gfx_get_window_height(), 8, theme->terminal.background); + kernel_gfx_draw_rectangle($current_process->gfx_window, 0, SHELL_POSITION, gfx_get_window_height(), 8, theme->terminal.background); } void reset_shell() @@ -81,7 +81,7 @@ void reset_shell() memset(&shell_buffer, 0, SHELL_MAX_SIZE); shell_column = strlen(shell_name)+1; shell_buffer_length = 0; - kernel_gfx_draw_text(current_running->gfx_window, 0, SHELL_POSITION, shell_name, COLOR_VGA_MISC); + kernel_gfx_draw_text($current_process->gfx_window, 0, SHELL_POSITION, shell_name, COLOR_VGA_MISC); shell_column += 1; } @@ -103,7 +103,7 @@ void ps(int argc, char* argv[]) if(spin){ while(1){ - current_running->term->ops->reset(current_running->term); + $current_process->term->ops->reset($current_process->term); twritef(" PID USAGE TYPE STATE NAME\n"); for (int i = 1; i < MAX_NUM_OF_PCBS; i++){ struct pcb_info info; @@ -113,7 +113,7 @@ void ps(int argc, char* argv[]) twritef(" %d %s%d% %s %s %s\n", info.pid, usage < 10 ? " ": "", usage, info.is_process ? "process" : "kthread", pcb_status[info.state], info.name); } - current_running->term->ops->commit(current_running->term); + $current_process->term->ops->commit($current_process->term); struct gfx_event event; gfx_event_loop(&event, GFX_EVENT_NONBLOCKING); @@ -482,8 +482,8 @@ EXPORT_KSYMBOL(socks); void reset(int argc, char* argv[]) { - kernel_gfx_draw_rectangle(current_running->gfx_window, 0,0, gfx_get_window_width(), gfx_get_window_height(), COLOR_VGA_BG); - current_running->term->ops->reset(current_running->term); + kernel_gfx_draw_rectangle($current_process->gfx_window, 0,0, gfx_get_window_width(), gfx_get_window_height(), COLOR_VGA_BG); + $current_process->term->ops->reset($current_process->term); reset_shell(); } EXPORT_KSYMBOL(reset); @@ -527,7 +527,7 @@ void shell_put(unsigned char c) if(shell_buffer_length < 1) return; shell_column -= 1; - kernel_gfx_draw_rectangle(current_running->gfx_window, shell_column*8, SHELL_POSITION, 8, 8, COLOR_VGA_BG); + kernel_gfx_draw_rectangle($current_process->gfx_window, shell_column*8, SHELL_POSITION, 8, 8, COLOR_VGA_BG); gfx_commit(); shell_buffer[shell_buffer_length] = 0; shell_buffer_length--; @@ -537,7 +537,7 @@ void shell_put(unsigned char c) if(shell_column == SHELL_MAX_SIZE) return; - kernel_gfx_draw_char(current_running->gfx_window, shell_column*8, SHELL_POSITION, uc, COLOR_VGA_FG); + kernel_gfx_draw_char($current_process->gfx_window, shell_column*8, SHELL_POSITION, uc, COLOR_VGA_FG); gfx_commit(); shell_buffer[shell_buffer_length] = uc; shell_buffer_length++; @@ -571,7 +571,7 @@ void __kthread_entry shell(int argc, char* argv[]) return; } dbgprintf("shell: window 0x%x\n", window); - kernel_gfx_draw_rectangle(current_running->gfx_window, 0,0, gfx_get_window_width(), gfx_get_window_height(), COLOR_VGA_BG); + kernel_gfx_draw_rectangle($current_process->gfx_window, 0,0, gfx_get_window_width(), gfx_get_window_height(), COLOR_VGA_BG); struct terminal* term = terminal_create(TERMINAL_GRAPHICS_MODE); term->ops->attach(term); diff --git a/kernel/kthreads/snake.c b/kernel/kthreads/snake.c index afcd1ec..ac5b55d 100644 --- a/kernel/kthreads/snake.c +++ b/kernel/kthreads/snake.c @@ -15,7 +15,7 @@ #include #include -#include +#include #include #include #include @@ -55,7 +55,7 @@ void draw() { } int get_input() { - return current_running->term->ops->getchar(current_running->term); + return $current_process->term->ops->getchar($current_process->term); } int update() { diff --git a/kernel/kthreads/sysinf.c b/kernel/kthreads/sysinf.c index a0115eb..fe2bd4b 100644 --- a/kernel/kthreads/sysinf.c +++ b/kernel/kthreads/sysinf.c @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #include diff --git a/kernel/kthreads/tcpd.c b/kernel/kthreads/tcpd.c index 25617b7..d9c127c 100644 --- a/kernel/kthreads/tcpd.c +++ b/kernel/kthreads/tcpd.c @@ -16,7 +16,7 @@ #include #include -#include +#include #include #include diff --git a/kernel/kutils.c b/kernel/kutils.c index b54ed4f..83b1931 100644 --- a/kernel/kutils.c +++ b/kernel/kutils.c @@ -9,7 +9,7 @@ * */ -#include +#include #include #include #include @@ -106,7 +106,7 @@ void kernel_panic(const char* reason) vesa_put_char16((uint8_t*)vbe_info->framebuffer, message[i], 16+(i*16), vbe_info->height/3 - 24, 15); } - struct pcb* pcb = current_running; + struct pcb* pcb = $current_process; vesa_printf((uint8_t*)vbe_info->framebuffer, 16, vbe_info->height/3, 15, "A critical error has occurred and your system is unable to continue operating.\nThe cause of this failure appears to be an essential system component.\n\nReason:\n%s\n\n###### PCB ######\npid: %d\nname: %s\nesp: 0x%x\nebp: 0x%x\nkesp: 0x%x\nkebp: 0x%x\neip: 0x%x\nstate: %s\nstack limit: 0x%x\nstack size: 0x%x (0x%x - 0x%x)\nPage Directory: 0x%x\nCS: %d\nDS:%d\n\n\nPlease power off and restart your device.\nRestarting may resolve the issue if it was caused by a temporary problem.\nIf this screen appears again after rebooting, it indicates a more serious issue.", reason, pcb->pid, pcb->name, pcb->ctx.esp, pcb->ctx.ebp, pcb->kesp, pcb->kebp, pcb->ctx.eip, pcb_status[pcb->state], pcb->stackptr, (int)((pcb->stackptr+0x2000-1) - pcb->ctx.esp), (pcb->stackptr+0x2000-1), pcb->ctx.esp, pcb->page_dir, pcb->cs, pcb->ds); diff --git a/kernel/memory.c b/kernel/memory.c index 57f2c66..727c7a6 100644 --- a/kernel/memory.c +++ b/kernel/memory.c @@ -99,11 +99,11 @@ void free(void* ptr) if(ptr == NULL)return; /* lock on free as multiple threads can free at the same time */ - spin_lock(¤t_running->allocations->spinlock); + spin_lock(&$current_process->allocations->spinlock); - vmem_stack_free(current_running, ptr); + vmem_stack_free($current_process, ptr); - spin_unlock(¤t_running->allocations->spinlock); + spin_unlock(&$current_process->allocations->spinlock); } void* malloc(unsigned int size) @@ -115,19 +115,19 @@ void* malloc(unsigned int size) size = ALIGN(size, PTR_SIZE); /* lock on malloc as multiple threads can malloc at the same time */ - spin_lock(¤t_running->allocations->spinlock); + spin_lock(&$current_process->allocations->spinlock); - void* ptr = vmem_stack_alloc(current_running, size); + void* ptr = vmem_stack_alloc($current_process, size); if(ptr == NULL){ - spin_unlock(¤t_running->allocations->spinlock); + spin_unlock(&$current_process->allocations->spinlock); return NULL; } - //vmem_dump_heap(current_running->allocations->head); + //vmem_dump_heap($current_process->allocations->head); dbgprintf("Allocated %d bytes at %x\n", size, ptr); - spin_unlock(¤t_running->allocations->spinlock); + spin_unlock(&$current_process->allocations->spinlock); return ptr; } diff --git a/kernel/partition.c b/kernel/partition.c index e58094b..972d5e9 100644 --- a/kernel/partition.c +++ b/kernel/partition.c @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include diff --git a/kernel/pcb.c b/kernel/pcb.c index 2830b68..b3be317 100644 --- a/kernel/pcb.c +++ b/kernel/pcb.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include @@ -31,7 +31,7 @@ static struct pcb pcb_table[MAX_NUM_OF_PCBS]; * Current running PCB, used for context aware * functions such as windows drawing to the screen. */ -struct pcb* current_running = NULL; +struct pcb* $current_process = NULL; //#include const char* pcb_status[] = {"stopped ", "running ", "new ", "blocked ", "sleeping", "zombie"}; @@ -207,7 +207,7 @@ void init_pcbs() pcb_table[i].next = NULL; } - current_running = &pcb_table[0]; + $current_process = &pcb_table[0]; dbgprintf("[PCB] All process control blocks are ready.\n"); } @@ -301,7 +301,7 @@ void pcb_dbg_print(struct pcb* pcb) int pcb_cleanup_routine(void* arg) { int pid = (int)arg; - assert(pid != current_running->pid && !(pid < 0 || pid > MAX_NUM_OF_PCBS)); + assert(pid != $current_process->pid && !(pid < 0 || pid > MAX_NUM_OF_PCBS)); dbgprintf("%d\n", cli_cnt); struct pcb* pcb = &pcb_table[pid]; @@ -417,8 +417,8 @@ error_t pcb_create_process(char* program, int argc, char** argv, pcb_flag_t flag pcb->data_size = size; memcpy(pcb->name, program, strlen(program)+1); - pcb->term = current_running->term; - pcb->parent = current_running; + pcb->term = $current_process->term; + pcb->parent = $current_process; pcb->thread_eip = 0; @@ -471,7 +471,7 @@ error_t pcb_create_kthread(void (*entry)(), char* name, int argc, char** argv) } pcb->parent = NULL; - pcb->term = current_running->term; + pcb->term = $current_process->term; pcb->thread_eip = (uintptr_t) entry; pcb->page_dir = kernel_page_dir; diff --git a/kernel/pcb_queue.c b/kernel/pcb_queue.c index 9f9d88f..53b792c 100644 --- a/kernel/pcb_queue.c +++ b/kernel/pcb_queue.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include /* Prototype functions for pcb queue interface */ diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 4c1b652..46e3fa1 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -224,7 +224,7 @@ static error_t sched_round_robin(struct scheduler* sched) } sched->ctx.running = next; - current_running = next; + $current_process = next; load_page_directory(next->page_dir); //load_data_segments(GDT_KERNEL_DS); start_pcb(next); @@ -264,7 +264,7 @@ static error_t sched_round_robin(struct scheduler* sched) } while(next->state != RUNNING); sched->ctx.running = next; - current_running = next; + $current_process = next; if(next->is_process){ tss.esp_0 = (uint32_t)next->kebp; @@ -285,7 +285,7 @@ static error_t sched_default(struct scheduler* sched) if (sched->ctx.running == NULL){ sched->ctx.running = sched->queue->ops->pop(sched->queue); /* Temporary fix */ - current_running = sched->ctx.running; + $current_process = sched->ctx.running; } sched->ctx.running->yields++; diff --git a/kernel/smp.c b/kernel/smp.c index b239a5e..5df12ba 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -10,7 +10,7 @@ */ #include -#include +#include #include #include diff --git a/kernel/sync.c b/kernel/sync.c index 566f6fb..6ca2fb6 100644 --- a/kernel/sync.c +++ b/kernel/sync.c @@ -38,7 +38,7 @@ void mutex_init(mutex_t* l) { l->blocked = pcb_new_queue(); l->state = UNLOCKED; - dbgprintf("Lock 0x%x initiated by %s\n", l, current_running->name); + dbgprintf("Lock 0x%x initiated by %s\n", l, $current_process->name); } diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 573f62c..4cee589 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -26,7 +26,7 @@ void add_system_call(int index, syscall_t fn) int sys_create_thread(void (*entry)(), void* arg, byte_t flags) { - return pcb_create_thread(current_running, entry, arg, flags); + return pcb_create_thread($current_process, entry, arg, flags); } EXPORT_SYSCALL(SYSCALL_CREATE_THREAD, sys_create_thread); diff --git a/kernel/terminal.c b/kernel/terminal.c index 0f8a515..6e436e9 100644 --- a/kernel/terminal.c +++ b/kernel/terminal.c @@ -26,14 +26,14 @@ int scan(ubyte_t* data, int size) { - if(current_running == NULL || current_running->term == NULL) return -1; + if($current_process == NULL || $current_process->term == NULL) return -1; - return current_running->term->ops->scan(current_running->term, data, size); + return $current_process->term->ops->scan($current_process->term, data, size); } void terminal_set_color(color_t color) { - //current_running->term->text_color = color; + //$current_process->term->text_color = color; } static void __terminal_syntax(unsigned char c) @@ -61,8 +61,8 @@ static void __terminal_syntax(unsigned char c) void terminal_attach(struct terminal* term) { - current_running->term = term; - term->screen = current_running->gfx_window; + $current_process->term = term; + term->screen = $current_process->gfx_window; } static int __next_newline(void* _data) @@ -99,13 +99,13 @@ static void __terminal_scroll(struct terminal* term) void terminal_commit() { - current_running->term->ops->commit(current_running->term); + $current_process->term->ops->commit($current_process->term); } void terminal_putchar(char c) { return; - current_running->term->ops->putchar(current_running->term, c); + $current_process->term->ops->putchar($current_process->term, c); } /* terminal prototypes */ @@ -185,7 +185,7 @@ struct terminal* terminal_create(terminal_flags_t flags) term->text_color = VGA_COLOR_WHITE; } - current_running->term = term; + $current_process->term = term; kref_init(&term->ref); return term; @@ -378,7 +378,7 @@ static int __terminal_putchar_graphics(struct terminal* term, char c) } /* should be a flush syscall */ - if(term->screen != NULL && term->screen != current_running->gfx_window){ + if(term->screen != NULL && term->screen != $current_process->gfx_window){ term->ops->commit(term); } } @@ -387,7 +387,7 @@ static int __terminal_putchar_graphics(struct terminal* term, char c) serial_put(c); - if(term->screen != NULL && term->screen != current_running->gfx_window){ + if(term->screen != NULL && term->screen != $current_process->gfx_window){ term->screen->changed = 1; } else { gfx_commit(); @@ -431,9 +431,9 @@ static int __terminal_attach(struct terminal* term) if(term == NULL) return -1; /* This is a BAD solution, FIXME Badly */ - current_running->term = term; + $current_process->term = term; if(term->screen == NULL){ - term->screen = current_running->gfx_window; + term->screen = $current_process->gfx_window; } kref_get(&term->ref); @@ -445,7 +445,7 @@ static int __terminal_detach(struct terminal* term) { if(term == NULL) return -1; - current_running->term = NULL; + $current_process->term = NULL; term->screen = NULL; kref_put(&term->ref); diff --git a/kernel/work.c b/kernel/work.c index 4978434..6ab3403 100644 --- a/kernel/work.c +++ b/kernel/work.c @@ -10,7 +10,7 @@ */ #include #include -#include +#include #include #include #include diff --git a/lib/graphics.c b/lib/graphics.c index bdf247e..30e71e7 100644 --- a/lib/graphics.c +++ b/lib/graphics.c @@ -11,7 +11,7 @@ #include #include -#include +#include #include #ifdef __cplusplus diff --git a/lib/hashmap.c b/lib/hashmap.c index 98aa827..c981917 100644 --- a/lib/hashmap.c +++ b/lib/hashmap.c @@ -11,7 +11,7 @@ #include #include -#include +#include inline int simple_hash(char* key) { diff --git a/lib/util.c b/lib/libc.c similarity index 99% rename from lib/util.c rename to lib/libc.c index 363f07c..6c06921 100644 --- a/lib/util.c +++ b/lib/libc.c @@ -15,7 +15,7 @@ extern "C" { #endif -#include +#include int cli_cnt = 0; diff --git a/lib/netlib.c b/lib/netlib.c index 157fa08..17704ad 100644 --- a/lib/netlib.c +++ b/lib/netlib.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #ifdef __cplusplus diff --git a/lib/printf.c b/lib/printf.c index a1ba6c0..f7bbed5 100644 --- a/lib/printf.c +++ b/lib/printf.c @@ -14,7 +14,7 @@ extern "C" { #include #include -#include +#include /** * Writes the given string to the terminal with terminal_putchar diff --git a/lib/syscall.c b/lib/syscall.c index 8982b1a..292be29 100644 --- a/lib/syscall.c +++ b/lib/syscall.c @@ -17,7 +17,7 @@ extern "C" #include #include #include -#include +#include #include int invoke_syscall(int i, int arg1, int arg2, int arg3) diff --git a/net/dns.c b/net/dns.c index d84bd3a..8e233be 100644 --- a/net/dns.c +++ b/net/dns.c @@ -17,7 +17,7 @@ #include #include -#include +#include #define DNS_PORT 53 diff --git a/net/ipv4.c b/net/ipv4.c index 45fc1d1..c7c3d1a 100644 --- a/net/ipv4.c +++ b/net/ipv4.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/socket.c b/net/socket.c index 430d984..c079d7c 100644 --- a/net/socket.c +++ b/net/socket.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include #include @@ -108,8 +108,8 @@ error_t net_sock_read(struct sock* sock, uint8_t* buffer, unsigned int length) dbgprintf(" [SOCK] Waiting for data... %d\n", sock); /* Should be blocking */ while(!net_sock_data_ready(sock, length)){ - sock->waiting = current_running; - current_running->state = BLOCKED; + sock->waiting = $current_process; + $current_process->state = BLOCKED; kernel_yield(); } @@ -416,7 +416,7 @@ struct sock* kernel_socket_create(int domain, int type, int protocol) socket_table[current]->waiting = NULL; socket_table[current]->accept_sock = NULL; - socket_table[current]->owner = current_running; + socket_table[current]->owner = $current_process; mutex_init(&(socket_table[current]->lock)); diff --git a/net/tcp.c b/net/tcp.c index ca2755f..64cc531 100644 --- a/net/tcp.c +++ b/net/tcp.c @@ -92,8 +92,8 @@ struct tcb* tcb_new() #define IS_TCP_SOCKET(sock) (sock->type == SOCK_STREAM && sock->tcp != NULL) #define TCP_BLOCK(sock)\ - sock->waiting = current_running;\ - current_running->state = BLOCKED;\ + sock->waiting = $current_process;\ + $current_process->state = BLOCKED;\ kernel_yield(); #define TCP_UNBLOCK(sock)\ diff --git a/rootfs/symbols.map b/rootfs/symbols.map index a22f288..2638fb4 100644 --- a/rootfs/symbols.map +++ b/rootfs/symbols.map @@ -412,442 +412,442 @@ 0001f284 vesa_printf 0001f4f1 ksyms_init 0001f718 ksyms_add_symbol -0001f7cc __ksymbol_backtrace -0001f7e6 ksyms_list -0001f846 ksyms_resolve_symbol -0001f8f9 __backtrace_from -0001fa16 backtrace -0001fa27 ws_fullscreen -0001fba1 ws_remove -0001fc51 ws_add -0001fd3c ws_destroy -0001fde2 ws_draw -0002008f ws_raw_wallpaper -00020175 ws_set_background_file -00020452 ws_init -00020535 ws_set_background -000205e0 ws_new -0002066d encode_run_length -000206ea decode_run_length -00020755 __mouse_handler -0002086c mouse_wait -000208b4 mouse_write -000208f6 mouse_get_event -00020937 mouse_init -00020a1c sys_ipc_open -00020a6a __add_systemcall_sys_ipc_open -00020a81 __add_systemcall_sys_ipc_close -00020a98 __add_systemcall_sys_ipc_send -00020aaf __add_systemcall_sys_ipc_receive -00020ac6 sys_ipc_close -00020b0f sys_ipc_send -00020b76 sys_ipc_receive -00020bdc sysinf -0002192e __register_kthread_sysinf -00021948 echo -00021981 res -000219c0 ifconfig -000219cd __ksymbol_ifconfig -000219e7 __ksymbol_ps -00021a01 __ksymbol_tree -00021a1b __ksymbol_fat16 -00021a35 __ksymbol_xxd -00021a4f __ksymbol_sh -00021a69 __ksymbol_ed -00021a83 __ksymbol_exec -00021a9d __ksymbol_ths -00021ab7 __ksymbol_dns -00021ad1 __ksymbol_th -00021aeb __ksymbol_kill -00021b05 __ksymbol_echo -00021b1f __ksymbol_fdisk -00021b39 __ksymbol_meminfo -00021b53 __ksymbol_res -00021b6d __ksymbol_bg -00021b87 __ksymbol_exit -00021ba1 __ksymbol_socks -00021bbb __ksymbol_reset -00021bd5 exit -00021c07 ps -00021e61 print_pcb_tree -00021f5a tree -00021f9a fat16 -00021fc2 xxd -000220b1 sh -000221ab ed -000221f6 exec -00022352 ths -000223ba dns -0002242a th -00022448 kill -00022466 fdisk -000225df meminfo -000227ae bg -0002282b socks -00022abb __register_kthread_shell -00022ad5 __register_kthread_textshell -00022aef shell_clear -00022b30 reset_shell -00022b9f reset -00022bef shell_put -00022dc8 shell -00023010 cleanup_function -00023037 testfn -0002306b draw_box -00023150 __textshell_reset_box -000231e0 textshell -0002344c __net_find_interface -000234ac net_drop_packet -000234cd net_handle_recieve -000235f4 net_get_interfaces -000235fa net_configure_iface -0002364c net_incoming_packet -000236fd net_get_iface -00023773 net_iface_up -0002379a net_iface_down -000237c1 net_list_ifaces -000238d1 net_register_interface -00023902 net_send_skb -0002398a net_get_info -000239b1 networking_main -00023b8d __dhcp_add_option -00023bfd __dhcp_send_discovery -00023d3f __dhcp_send_request -00023ebc dhcp_get_state -00023ec4 dhcp_get_dns -00023eca dhcp_get_ip -00023edf dhcp_get_gw -00023ef4 dhcpd -00024173 udp_server -000241fe tcp_server -00024372 __net_terminal_writef -000243d7 __register_kthread_tcp_server -000243f1 __register_kthread_udp_server -0002440b __register_kthread_udptest -00024425 udptest -000244b0 tcpd -00024594 logd -000245ff __register_kthread_logd -00024619 logd_attach_by_pid -0002465d taskbar_readme -00024676 taskbar_about -0002468f taskbar_clock -000246a8 taskbar_sysinf -000246c1 taskbar_bg_retro -000246f8 taskbar_bg_lotr2 -0002470d taskbar_bg_lotr -00024722 taskbar_bg_default_color_gray -00024734 taskbar_bg_default_color -00024746 taskbar_wolfstein -00024781 taskbar_bg_graph -000247bc taskbar_bg_calc -000247f7 taskbar_colors -00024832 taskbar_cube -0002486d taskbar_editor -000248a8 taskbar_finder -000248e3 taskbar_terminal -0002492c __register_kthread_taskbar -00024946 taskbar_hdr_opt_event -000249d0 taskbar -00024f87 about -00025152 __register_kthread_about -0002516c __register_kthread_readme -00025186 readme -000252e8 gfx_default_hover -00025407 gfx_destory_window -00025494 gfx_window_resize -0002553d gfx_window_maximize -000255b6 gfx_default_mouse_up -00025684 gfx_default_mouse_down -00025746 gfx_default_click -0002596f gfx_draw_window -0002675b gfx_window_set_resizable -0002676e kernel_gfx_window_border_color -00026797 gfx_new_window -000269eb gfx_point_in_rectangle -00026a18 gfx_draw_component -00026a5a gfx_composition_remove_window -00026a84 gfx_composition_add_window -00026acb gfx_set_background_color -00026b1c gfx_raw_background -00026b69 gfx_decode_background_image -00026bb6 gfx_set_taskbar -00026c09 gfx_compositor_main -00026c7d kernel_gfx_draw_circle_helper -00026f29 gfx_get_window_width -00026f3c gfx_get_window_height -00026f4f gfx_push_event -0002700b gfx_put_icon16 -000270ff gfx_put_icon32 -000271f3 gfx_event_loop -0002730a kernel_gfx_draw_rectangle -00027404 kernel_gfx_draw_contoured_box -000274a4 kernel_gfx_draw_pixel -00027542 kernel_gfx_draw_bitmap -00027660 kernel_gfx_draw_char -00027760 kernel_gfx_set_position -0002777c gfx_commit -00027793 kernel_gfx_draw_text -0002781d gfx_button_ext -00027942 gfx_button -00027960 kernel_gfx_set_title -000279c8 kernel_gfx_set_header -00027a30 kernel_gfx_draw_line -00027bcb kernel_gfx_draw_circle -00027c4a kernel_gfx_draw_section -00027c50 kernel_gfx_draw_format_text -00027fa2 gfx_syscall_hook -00028151 gfx_total_themes -00028157 kernel_gfx_current_theme -0002815d kernel_gfx_update_theme -0002822b kernel_gfx_default_theme -00028231 kernel_gfx_set_theme -00028256 kernel_gfx_get_theme -00028271 gfx_new_ctx -000282cd gfx_init_framebuffer -00028439 netdev_attach_driver -000284e2 is_netdev_attached -000284f0 netdev_transmit -0002850b netdev_recieve -00028534 net_ethernet_add_header -000285c8 net_ethernet_parse -0002863c __skb_queue_remove -0002867a __skb_queue_add -000286ca skb_free_queue -00028702 skb_new_queue -00028769 skb_free -000287a4 skb_new -0002880f skb_consume -00028840 __net_arp_send -00028900 net_init_arp -0002894c net_arp_add_entry -000289db net_arp_find_entry -00028a26 net_arp_respond -00028a9b net_net_arp_request -00028b21 arp_parse -00028bcb net_ipv4_print -00028bd1 net_ipv4_add_header -00028d08 net_is_ipv4 -00028d45 net_ipv4_parse -00028e72 ntohl -00028e9e htonl -00028eb1 ntohs -00028ebe htons -00028ecb checksum -00028f22 transport_checksum -00028f77 ip_to_int -00029015 net_icmp_handle -000290da net_icmp_response -000290e0 net_icmp_request -000291a3 ping -000291fc net_icmp_parse -0002926c net_udp_send -000293a1 net_udp_parse -000294c9 socket_type_to_str -000294d8 socket_domain_to_str -000294e7 socket_protocol_to_str -000294f6 net_sock_bind -00029541 net_get_sockets -0002955d sock_get -0002957e get_total_sockets -00029584 net_sock_is_established -000295c8 net_sock_awaiting_ack -0002960c net_sock_data_ready -00029665 net_sock_read -00029765 net_sock_add_data -000299c5 sock_find_listen_tcp -00029a09 net_sock_find_tcp -00029bfb net_prepare_tcp_sock -00029c87 net_sock_accept -00029c9a net_socket_find_udp -00029d05 kernel_sock_shutdown -00029d32 kernel_sock_cleanup -00029db8 kernel_sock_close -00029dec kernel_socket_create -00029f6d net_init_sockets -00029fb3 gethostname -0002a4cd __add_systemcall_gethostname -0002a4e4 net_init_dns -0002a513 route -0002a560 tcb_init -0002a57e tcb_new -0002a6ea tcp_state_to_str -0002a703 tcp_new_connection -0002a78b tcp_free_connection -0002a7ae tcp_is_listening -0002a7c4 tcp_set_listening -0002a824 tcp_calculate_checksum -0002a8e8 __tcp_send -0002aa04 tcp_send_segment -0002ab47 tcp_accept_connection -0002ac87 tcp_send_ack -0002adbd tcp_read -0002adc3 tcp_recv_segment -0002adc9 tcp_connect -0002ae6c tcp_send_syn -0002ae72 tcp_recv_ack -0002aef5 tcp_recv_fin -0002aefb tcp_recv_syn -0002b02d tcp_send_fin -0002b0f9 tcp_close_connection -0002b138 tcp_parse -0002b5d1 kernel_bind -0002b606 kernel_recvfrom -0002b60c kernel_recv -0002b67e kernel_recv_timeout -0002b6a4 kernel_connect -0002b7a8 kernel_sendto -0002b862 kernel_accept -0002b8c5 kernel_listen -0002b8ed kernel_send -0002b973 sys_kernel_bind -0002b9a5 __add_systemcall_sys_kernel_bind -0002b9bc __add_systemcall_sys_kernel_accept -0002b9d3 __add_systemcall_sys_kernel_connect -0002b9ea __add_systemcall_sys_kernel_listen -0002ba01 __add_systemcall_sys_kernel_recv -0002ba18 __add_systemcall_sys_kernel_recvfrom -0002ba2f __add_systemcall_sys_kernel_recv_timeout -0002ba46 __add_systemcall_sys_kernel_send -0002ba5d __add_systemcall_sys_kernel_sendto -0002ba74 __add_systemcall_sys_socket_create -0002ba8b __add_systemcall_sys_kernel_sock_close -0002baa2 sys_kernel_accept -0002bae2 sys_kernel_connect -0002bb14 sys_kernel_listen -0002bb43 sys_kernel_recv -0002bb7b sys_kernel_recvfrom -0002bbbb sys_kernel_recv_timeout -0002bbf9 sys_kernel_send -0002bc31 sys_kernel_sendto -0002bc71 sys_socket_create -0002bc98 sys_kernel_sock_close -0002bcd9 __iface_send -0002bd08 __iface_recieve -0002bd37 __iface_assign -0002bd4a __iface_detach -0002bd5e __iface_set_gateway -0002bd71 __iface_set_netmask -0002bd84 __iface_configure -0002bdd4 __iface_attach -0002bdf9 net_interface_create -0002be31 net_register_netdev -0002bf49 net_interface_destroy -0002bf5e __default_restart -0002bf64 __default_stop -0002bfc9 __default_start -0002c043 nm_new -0002c0cc nm_free -0002c111 net_firewall_create -0002c134 fs_file2fd -0002c19b fs_alloc_file -0002c1e6 fs_free_file -0002c240 fs_register -0002c30f fs_init -0002c315 fs_unregister -0002c378 fs_get -0002c37e fs_close -0002c3f0 fs_open -0002c46a fs_seek -0002c4e7 fs_read -0002c5fc fs_load_from_file -0002c688 fs_write -0002c743 fat16_rmdir -0002c749 fat16_stat -0002c74f fat16_close -0002c7b9 fat16_rename -0002c84e fat16_mkdir -0002c933 fat16_remove -0002c9a6 fat16_open -0002caf0 fat16_read -0002cc54 fat16_write -0002cd82 fat16_list -0002d04a fat16_init -0002d0fe path_next_iter -0002d16d inode_from_path_recursise -0002d1eb inode_from_path -0002d2a9 ext_get_root -0002d2b2 ext_get_current_dir -0002d2bf ext_get_size -0002d2c5 ext_get_inodes -0002d2cb ext_get_blocks -0002d2d1 ext_sync -0002d344 ext_create -0002d42f ext_read -0002d4aa ext_seek -0002d4f1 ext_write -0002d55d ext_close -0002d5bf ext_open_from_directory -0002d6c5 ext_open -0002d77c ext_size -0002d7a5 change_directory -0002d80b ext_create_directory -0002d9a5 ext_create_file_system -0002dc72 init_ext -0002de0e listdir -0002df31 __inode_sync -0002df94 __inode_cache_insert -0002e08a __inode_load -0002e0fe inodes_sync -0002e139 inode_get -0002e196 inode_read -0002e37e inode_write -0002e5dc alloc_inode -0002e695 mkdir -0002e73a sync -0002e76c mkfs -0002e779 fat16_read_data_from_cluster -0002e7c7 fat16_read_data -0002e8a8 fat16_find_cluster_by_offset -0002e923 fat16_write_data_to_cluster_with_offset -0002e95e fat16_print_cluster_chain -0002e98c fat16_write_data_to_cluster -0002e9bf fat16_write_data -0002eadb get_fat_start_block -0002eae3 get_root_directory_start_block -0002eaf2 get_data_start_block -0002eb04 fat16_get_fat_entry -0002eb1f fat16_set_fat_entry -0002eb5f fat16_sync_fat_table -0002ebd7 fat16_allocate_cluster -0002ebef fat16_free_cluster -0002ec04 fat16_get_free_cluster -0002ec59 fat16_sync_directory_entry -0002ecdb fat16_read_entry -0002ed88 fat16_find_entry -0002eec3 fat16_rename_entry -0002ef34 fat16_free_clusters -0002ef7b fat16_delete_entry -0002efe2 fat16_add_entry -0002f149 fat16_used_blocks -0002f182 fat16_to_upper -0002f1ae fat16_name_compare -0002f2d3 sstrtok -0002f394 fat16_directory_entry_debug -0002f464 fat16_get_directory_entry -0002f65c fat16_create_directory -0002f761 fat16_read_file -0002f7b2 fat16_create_file -0002f830 fat16_create_empty_file -0002f8f0 fat16_directory_entries -0002f9d6 fat16_mbr_clear -0002fa7f fat16_mbr_add_entry -0002fb70 fat16_print_root_directory_entries -0002fb88 fat16_change_directory -0002fc10 fat16_bootblock_info -0002fd8d fat16_set_time -0002fdc1 fat16_set_date -0002fdf9 fat16_load -0002ff78 fat16_format -0003022d mbr_partition_type_string -000302b0 mbr_partitions_parse -00030379 mbr_get -0003037f mbr_partition_load -0003039d __ksymbol_snakegame -000303b7 init_game -00030405 draw -00030461 get_input -0003047e update -00030605 game_loop -0003062b snakegame -00030674 _code_end +0001f7cf __ksymbol_backtrace +0001f7e9 ksyms_list +0001f849 ksyms_resolve_symbol +0001f8fc __backtrace_from +0001fa19 backtrace +0001fa2a ws_fullscreen +0001fba4 ws_remove +0001fc54 ws_add +0001fd3f ws_destroy +0001fde5 ws_draw +00020092 ws_raw_wallpaper +00020178 ws_set_background_file +00020455 ws_init +00020538 ws_set_background +000205e3 ws_new +00020670 encode_run_length +000206ed decode_run_length +00020758 __mouse_handler +0002086f mouse_wait +000208b7 mouse_write +000208f9 mouse_get_event +0002093a mouse_init +00020a1f sys_ipc_open +00020a6d __add_systemcall_sys_ipc_open +00020a84 __add_systemcall_sys_ipc_close +00020a9b __add_systemcall_sys_ipc_send +00020ab2 __add_systemcall_sys_ipc_receive +00020ac9 sys_ipc_close +00020b12 sys_ipc_send +00020b79 sys_ipc_receive +00020bdf sysinf +00021931 __register_kthread_sysinf +0002194b echo +00021984 res +000219c3 ifconfig +000219d0 __ksymbol_ifconfig +000219ea __ksymbol_ps +00021a04 __ksymbol_tree +00021a1e __ksymbol_fat16 +00021a38 __ksymbol_xxd +00021a52 __ksymbol_sh +00021a6c __ksymbol_ed +00021a86 __ksymbol_exec +00021aa0 __ksymbol_ths +00021aba __ksymbol_dns +00021ad4 __ksymbol_th +00021aee __ksymbol_kill +00021b08 __ksymbol_echo +00021b22 __ksymbol_fdisk +00021b3c __ksymbol_meminfo +00021b56 __ksymbol_res +00021b70 __ksymbol_bg +00021b8a __ksymbol_exit +00021ba4 __ksymbol_socks +00021bbe __ksymbol_reset +00021bd8 exit +00021c0a ps +00021e64 print_pcb_tree +00021f5d tree +00021f9d fat16 +00021fc5 xxd +000220b4 sh +000221ae ed +000221f9 exec +00022355 ths +000223bd dns +0002242d th +0002244b kill +00022469 fdisk +000225e2 meminfo +000227b1 bg +0002282e socks +00022abe __register_kthread_shell +00022ad8 __register_kthread_textshell +00022af2 shell_clear +00022b33 reset_shell +00022ba2 reset +00022bf2 shell_put +00022dcb shell +00023013 cleanup_function +0002303a testfn +0002306e draw_box +00023153 __textshell_reset_box +000231e3 textshell +0002344f __net_find_interface +000234af net_drop_packet +000234d0 net_handle_recieve +000235f7 net_get_interfaces +000235fd net_configure_iface +0002364f net_incoming_packet +00023700 net_get_iface +00023776 net_iface_up +0002379d net_iface_down +000237c4 net_list_ifaces +000238d4 net_register_interface +00023905 net_send_skb +0002398d net_get_info +000239b4 networking_main +00023b90 __dhcp_add_option +00023c00 __dhcp_send_discovery +00023d42 __dhcp_send_request +00023ebf dhcp_get_state +00023ec7 dhcp_get_dns +00023ecd dhcp_get_ip +00023ee2 dhcp_get_gw +00023ef7 dhcpd +00024176 udp_server +00024201 tcp_server +00024375 __net_terminal_writef +000243da __register_kthread_tcp_server +000243f4 __register_kthread_udp_server +0002440e __register_kthread_udptest +00024428 udptest +000244b3 tcpd +00024597 logd +00024602 __register_kthread_logd +0002461c logd_attach_by_pid +00024660 taskbar_readme +00024679 taskbar_about +00024692 taskbar_clock +000246ab taskbar_sysinf +000246c4 taskbar_bg_retro +000246fb taskbar_bg_lotr2 +00024710 taskbar_bg_lotr +00024725 taskbar_bg_default_color_gray +00024737 taskbar_bg_default_color +00024749 taskbar_wolfstein +00024784 taskbar_bg_graph +000247bf taskbar_bg_calc +000247fa taskbar_colors +00024835 taskbar_cube +00024870 taskbar_editor +000248ab taskbar_finder +000248e6 taskbar_terminal +0002492f __register_kthread_taskbar +00024949 taskbar_hdr_opt_event +000249d3 taskbar +00024f8a about +00025155 __register_kthread_about +0002516f __register_kthread_readme +00025189 readme +000252eb gfx_default_hover +0002540a gfx_destory_window +00025497 gfx_window_resize +00025540 gfx_window_maximize +000255b9 gfx_default_mouse_up +00025687 gfx_default_mouse_down +00025749 gfx_default_click +00025972 gfx_draw_window +0002675e gfx_window_set_resizable +00026771 kernel_gfx_window_border_color +0002679a gfx_new_window +000269ee gfx_point_in_rectangle +00026a1b gfx_draw_component +00026a5d gfx_composition_remove_window +00026a87 gfx_composition_add_window +00026ace gfx_set_background_color +00026b1f gfx_raw_background +00026b6c gfx_decode_background_image +00026bb9 gfx_set_taskbar +00026c0c gfx_compositor_main +00026c80 kernel_gfx_draw_circle_helper +00026f2c gfx_get_window_width +00026f3f gfx_get_window_height +00026f52 gfx_push_event +0002700e gfx_put_icon16 +00027102 gfx_put_icon32 +000271f6 gfx_event_loop +0002730d kernel_gfx_draw_rectangle +00027407 kernel_gfx_draw_contoured_box +000274a7 kernel_gfx_draw_pixel +00027545 kernel_gfx_draw_bitmap +00027663 kernel_gfx_draw_char +00027763 kernel_gfx_set_position +0002777f gfx_commit +00027796 kernel_gfx_draw_text +00027820 gfx_button_ext +00027945 gfx_button +00027963 kernel_gfx_set_title +000279cb kernel_gfx_set_header +00027a33 kernel_gfx_draw_line +00027bce kernel_gfx_draw_circle +00027c4d kernel_gfx_draw_section +00027c53 kernel_gfx_draw_format_text +00027fa5 gfx_syscall_hook +00028154 gfx_total_themes +0002815a kernel_gfx_current_theme +00028160 kernel_gfx_update_theme +0002822e kernel_gfx_default_theme +00028234 kernel_gfx_set_theme +00028259 kernel_gfx_get_theme +00028274 gfx_new_ctx +000282d0 gfx_init_framebuffer +0002843c netdev_attach_driver +000284e5 is_netdev_attached +000284f3 netdev_transmit +0002850e netdev_recieve +00028537 net_ethernet_add_header +000285cb net_ethernet_parse +0002863f __skb_queue_remove +0002867d __skb_queue_add +000286cd skb_free_queue +00028705 skb_new_queue +0002876c skb_free +000287a7 skb_new +00028812 skb_consume +00028843 __net_arp_send +00028903 net_init_arp +0002894f net_arp_add_entry +000289de net_arp_find_entry +00028a29 net_arp_respond +00028a9e net_net_arp_request +00028b24 arp_parse +00028bce net_ipv4_print +00028bd4 net_ipv4_add_header +00028d0b net_is_ipv4 +00028d48 net_ipv4_parse +00028e75 ntohl +00028ea1 htonl +00028eb4 ntohs +00028ec1 htons +00028ece checksum +00028f25 transport_checksum +00028f7a ip_to_int +00029018 net_icmp_handle +000290dd net_icmp_response +000290e3 net_icmp_request +000291a6 ping +000291ff net_icmp_parse +0002926f net_udp_send +000293a4 net_udp_parse +000294cc socket_type_to_str +000294db socket_domain_to_str +000294ea socket_protocol_to_str +000294f9 net_sock_bind +00029544 net_get_sockets +00029560 sock_get +00029581 get_total_sockets +00029587 net_sock_is_established +000295cb net_sock_awaiting_ack +0002960f net_sock_data_ready +00029668 net_sock_read +00029768 net_sock_add_data +000299c8 sock_find_listen_tcp +00029a0c net_sock_find_tcp +00029bfe net_prepare_tcp_sock +00029c8a net_sock_accept +00029c9d net_socket_find_udp +00029d08 kernel_sock_shutdown +00029d35 kernel_sock_cleanup +00029dbb kernel_sock_close +00029def kernel_socket_create +00029f70 net_init_sockets +00029fb6 gethostname +0002a4d0 __add_systemcall_gethostname +0002a4e7 net_init_dns +0002a516 route +0002a563 tcb_init +0002a581 tcb_new +0002a6ed tcp_state_to_str +0002a706 tcp_new_connection +0002a78e tcp_free_connection +0002a7b1 tcp_is_listening +0002a7c7 tcp_set_listening +0002a827 tcp_calculate_checksum +0002a8eb __tcp_send +0002aa07 tcp_send_segment +0002ab4a tcp_accept_connection +0002ac8a tcp_send_ack +0002adc0 tcp_read +0002adc6 tcp_recv_segment +0002adcc tcp_connect +0002ae6f tcp_send_syn +0002ae75 tcp_recv_ack +0002aef8 tcp_recv_fin +0002aefe tcp_recv_syn +0002b030 tcp_send_fin +0002b0fc tcp_close_connection +0002b13b tcp_parse +0002b5d4 kernel_bind +0002b609 kernel_recvfrom +0002b60f kernel_recv +0002b681 kernel_recv_timeout +0002b6a7 kernel_connect +0002b7ab kernel_sendto +0002b865 kernel_accept +0002b8c8 kernel_listen +0002b8f0 kernel_send +0002b976 sys_kernel_bind +0002b9a8 __add_systemcall_sys_kernel_bind +0002b9bf __add_systemcall_sys_kernel_accept +0002b9d6 __add_systemcall_sys_kernel_connect +0002b9ed __add_systemcall_sys_kernel_listen +0002ba04 __add_systemcall_sys_kernel_recv +0002ba1b __add_systemcall_sys_kernel_recvfrom +0002ba32 __add_systemcall_sys_kernel_recv_timeout +0002ba49 __add_systemcall_sys_kernel_send +0002ba60 __add_systemcall_sys_kernel_sendto +0002ba77 __add_systemcall_sys_socket_create +0002ba8e __add_systemcall_sys_kernel_sock_close +0002baa5 sys_kernel_accept +0002bae5 sys_kernel_connect +0002bb17 sys_kernel_listen +0002bb46 sys_kernel_recv +0002bb7e sys_kernel_recvfrom +0002bbbe sys_kernel_recv_timeout +0002bbfc sys_kernel_send +0002bc34 sys_kernel_sendto +0002bc74 sys_socket_create +0002bc9b sys_kernel_sock_close +0002bcdc __iface_send +0002bd0b __iface_recieve +0002bd3a __iface_assign +0002bd4d __iface_detach +0002bd61 __iface_set_gateway +0002bd74 __iface_set_netmask +0002bd87 __iface_configure +0002bdd7 __iface_attach +0002bdfc net_interface_create +0002be34 net_register_netdev +0002bf4c net_interface_destroy +0002bf61 __default_restart +0002bf67 __default_stop +0002bfcc __default_start +0002c046 nm_new +0002c0cf nm_free +0002c114 net_firewall_create +0002c137 fs_file2fd +0002c19e fs_alloc_file +0002c1e9 fs_free_file +0002c243 fs_register +0002c312 fs_init +0002c318 fs_unregister +0002c37b fs_get +0002c381 fs_close +0002c3f3 fs_open +0002c46d fs_seek +0002c4ea fs_read +0002c5ff fs_load_from_file +0002c68b fs_write +0002c746 fat16_rmdir +0002c74c fat16_stat +0002c752 fat16_close +0002c7bc fat16_rename +0002c851 fat16_mkdir +0002c936 fat16_remove +0002c9a9 fat16_open +0002caf3 fat16_read +0002cc57 fat16_write +0002cd85 fat16_list +0002d04d fat16_init +0002d101 path_next_iter +0002d170 inode_from_path_recursise +0002d1ee inode_from_path +0002d2ac ext_get_root +0002d2b5 ext_get_current_dir +0002d2c2 ext_get_size +0002d2c8 ext_get_inodes +0002d2ce ext_get_blocks +0002d2d4 ext_sync +0002d347 ext_create +0002d432 ext_read +0002d4ad ext_seek +0002d4f4 ext_write +0002d560 ext_close +0002d5c2 ext_open_from_directory +0002d6c8 ext_open +0002d77f ext_size +0002d7a8 change_directory +0002d80e ext_create_directory +0002d9a8 ext_create_file_system +0002dc75 init_ext +0002de11 listdir +0002df34 __inode_sync +0002df97 __inode_cache_insert +0002e08d __inode_load +0002e101 inodes_sync +0002e13c inode_get +0002e199 inode_read +0002e381 inode_write +0002e5df alloc_inode +0002e698 mkdir +0002e73d sync +0002e76f mkfs +0002e77c fat16_read_data_from_cluster +0002e7ca fat16_read_data +0002e8ab fat16_find_cluster_by_offset +0002e926 fat16_write_data_to_cluster_with_offset +0002e961 fat16_print_cluster_chain +0002e98f fat16_write_data_to_cluster +0002e9c2 fat16_write_data +0002eade get_fat_start_block +0002eae6 get_root_directory_start_block +0002eaf5 get_data_start_block +0002eb07 fat16_get_fat_entry +0002eb22 fat16_set_fat_entry +0002eb62 fat16_sync_fat_table +0002ebda fat16_allocate_cluster +0002ebf2 fat16_free_cluster +0002ec07 fat16_get_free_cluster +0002ec5c fat16_sync_directory_entry +0002ecde fat16_read_entry +0002ed8b fat16_find_entry +0002eec6 fat16_rename_entry +0002ef37 fat16_free_clusters +0002ef7e fat16_delete_entry +0002efe5 fat16_add_entry +0002f14c fat16_used_blocks +0002f185 fat16_to_upper +0002f1b1 fat16_name_compare +0002f2d6 sstrtok +0002f397 fat16_directory_entry_debug +0002f467 fat16_get_directory_entry +0002f65f fat16_create_directory +0002f764 fat16_read_file +0002f7b5 fat16_create_file +0002f833 fat16_create_empty_file +0002f8f3 fat16_directory_entries +0002f9d9 fat16_mbr_clear +0002fa82 fat16_mbr_add_entry +0002fb73 fat16_print_root_directory_entries +0002fb8b fat16_change_directory +0002fc13 fat16_bootblock_info +0002fd90 fat16_set_time +0002fdc4 fat16_set_date +0002fdfc fat16_load +0002ff7b fat16_format +00030230 mbr_partition_type_string +000302b3 mbr_partitions_parse +0003037c mbr_get +00030382 mbr_partition_load +000303a0 __ksymbol_snakegame +000303ba init_game +00030408 draw +00030464 get_input +00030481 update +00030608 game_loop +0003062e snakegame +00030677 _code_end diff --git a/tests/include/mocks.h b/tests/include/mocks.h index 28fe6b5..f8ef1b8 100644 --- a/tests/include/mocks.h +++ b/tests/include/mocks.h @@ -39,7 +39,7 @@ struct pcb { }; -extern struct pcb* current_running; +extern struct pcb* $current_process; extern int failed; diff --git a/tests/utils/mocks.c b/tests/utils/mocks.c index e308b43..6263579 100644 --- a/tests/utils/mocks.c +++ b/tests/utils/mocks.c @@ -27,10 +27,10 @@ int disk_attached() return 1; } -struct pcb __current_running = { +struct pcb __$current_process = { }; -struct pcb* current_running = &__current_running; +struct pcb* $current_process = &__$current_process; int failed = 0; int tests = 0; From e5da9d5bc4c3595c3a93803690a272d081d5d3ae Mon Sep 17 00:00:00 2001 From: Joe Bayer Date: Wed, 10 Jan 2024 11:00:27 +0100 Subject: [PATCH 12/13] New system for external variables --- Makefile | 1 - apps/Makefile | 13 - apps/libcore.a | Bin 18540 -> 18542 bytes apps/libgraphic.a | Bin 15500 -> 15502 bytes docs/readme.md | 12 + drivers/timer.c | 4 +- fs/ext.c | 2 +- fs/vfs.c | 2 +- graphics/api.c | 12 +- graphics/gfxlib.c | 50 +- graphics/window.c | 18 +- include/kernel.h | 2 + include/kutils.h | 13 +- include/libc.h | 2 - include/pcb.h | 7 +- include/terminal.h | 6 +- kernel/arch/interrupts.c | 20 +- kernel/cmds.c | 8 +- kernel/helpers.s | 4 +- kernel/irs_entry.s | 4 +- kernel/kernel.c | 31 +- kernel/kmem.c | 6 +- kernel/kthreads.c | 6 +- kernel/kthreads/login.c | 5 +- kernel/kthreads/networking.c | 4 +- kernel/kthreads/shell.c | 20 +- kernel/kthreads/snake.c | 2 +- kernel/kthreads/taskbar.c | 4 +- kernel/kutils.c | 2 +- kernel/memory.c | 16 +- kernel/pcb.c | 22 +- kernel/scheduler.c | 6 +- kernel/sync.c | 2 +- kernel/syscalls.c | 2 +- kernel/terminal.c | 26 +- lib/libc.c | 2 +- net/socket.c | 6 +- net/tcp.c | 4 +- readme.md | 24 +- rootfs/symbols.map | 1680 +++++++++++++++++----------------- tests/include/mocks.h | 6 +- tests/pcb_test.c | 2 +- tests/utils/mocks.c | 8 +- 43 files changed, 1040 insertions(+), 1026 deletions(-) diff --git a/Makefile b/Makefile index 7ffa58c..61cd4eb 100644 --- a/Makefile +++ b/Makefile @@ -49,7 +49,6 @@ else LD=i386-elf-ld endif - # ---------------- Objects to compile ---------------- PROGRAMOBJ = bin/shell.o bin/networking.o bin/dhcpd.o bin/tcpd.o bin/logd.o bin/taskbar.o bin/about.o diff --git a/apps/Makefile b/apps/Makefile index 2ffb169..30524e5 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -37,7 +37,6 @@ LIB_COMMON_OBJS = ../bin/syscall.o ../bin/libc.o ../bin/printf.o bin/cppUtils.o LIB_GRAPHICS_OBJS = ../bin/graphics.o ../bin/libc.o LIB_NET_OBJS = ../bin/netlib.o - .PHONY: all new programs all: new @@ -59,18 +58,6 @@ programs: staticlibs bin/crt0.o ${USROBJS} @make -C cube/ @echo [USR] All user programs created and linked! -# bin/%.o: %.c bin/crt0.o -# @$(CC) -o $@ -c $< $(CCFLAGS) -# @$(LD) -o $(basename $@) $@ -L. -l:lib.a $(LDFLAGS) -T ./utils/linker.ld -# @cp $(basename $@) ../rootfs/bin/ -# @echo [USR] Compiling $(basename $@) - -# bin/%.o: %.cpp bin/crt0.o -# @$(CPP) -o $@ -c $< $(CCFLAGS) -fno-exceptions -fno-rtti -# @$(LD) -o $(basename $@) $@ $(LDFLAGS) -L. -l:lib.a -T ./utils/linker.ld -# @cp $(basename $@) ../rootfs/bin/ -# @echo [USR] Compiling $(basename $@) - bin/%.o: utils/%.cpp @$(CPP) -o $@ -c $< $(CCFLAGS) -fno-exceptions -fno-rtti -I ./../include/ @echo [USR] Compiling C++ $(basename $@) diff --git a/apps/libcore.a b/apps/libcore.a index 8e151d2b4cd477e9dff87ca028533c9c006bb97d..44e38c07177a2a5ca9627a411d9b78645bac9f32 100644 GIT binary patch delta 394 zcmaDef$`l0#tGK-W(r`Cz{SA85X`{9VniLxdyj#E7+g<`B4X4iA7fxZ#=3_X7|^j% z8v_Fxjz$-tB7br_*Y?fcOm`WX;^Q}Kuv9s4#>Xe;WX31wm26(^(#p)pGTG3>8UW`) BP3`~y delta 379 zcmaDif$_}*#tGK-CJJDXz{SA85X`{9Vn7|tdxwF67+g<`B4X4iA7NlX#<~X>7|^j% m3j+fhjz$-tB7brx*Y?fcOm`V4|B>g|Y{XLJu=$VtDP{l#ze&OX diff --git a/apps/libgraphic.a b/apps/libgraphic.a index f96025f43d5ff53b520480aec6bf1de7d45e265d..2b743059990cc0e852adeb3a075e3a3b3984c532 100644 GIT binary patch delta 317 zcmeCF?5mt$Rd1pI0SR0T3=ED849snWvA{kC1}fotq6|`7#=t-uEP~D8%|46preempts++; + $process->current->preempts++; EOI(32); - if($current_process != NULL) + if($process->current != NULL) { kernel_yield(); } diff --git a/fs/ext.c b/fs/ext.c index 4075675..41f3a22 100644 --- a/fs/ext.c +++ b/fs/ext.c @@ -83,7 +83,7 @@ inode_t ext_get_root() inode_t ext_get_current_dir() { - return $current_process->current_directory; + return $process->current->current_directory; } diff --git a/fs/vfs.c b/fs/vfs.c index b3dfd46..9563959 100644 --- a/fs/vfs.c +++ b/fs/vfs.c @@ -36,7 +36,7 @@ void mkdir(int argc, char* argv[]) return; } - int ret = ext_create_directory(argv[1], $current_process->current_directory); + int ret = ext_create_directory(argv[1], $process->current->current_directory); if(ret == -FS_ERR_INODE_MISSING){ twritef("Unable to find current directory\n"); return; diff --git a/graphics/api.c b/graphics/api.c index 0d64ec5..d4025da 100644 --- a/graphics/api.c +++ b/graphics/api.c @@ -23,31 +23,31 @@ int gfx_syscall_hook(int option, void* data, int flags) if(!(flags >= 0 && flags < 255))return -1; ERR_ON_NULL(data); - ERR_ON_NULL($current_process); + ERR_ON_NULL($process->current); switch (option){ case GFX_DRAW_CHAR_OPT:; struct gfx_char* c = (struct gfx_char*)data; - kernel_gfx_draw_char($current_process->gfx_window, c->x, c->y, c->data, c->color); + kernel_gfx_draw_char($process->current->gfx_window, c->x, c->y, c->data, c->color); break; case GFX_DRAW_RECTANGLE_OPT:; struct gfx_rectangle* r = (struct gfx_rectangle*)data; - kernel_gfx_draw_rectangle($current_process->gfx_window, r->x, r->y, r->width, r->height, r->palette == GFX_VGA ? r->color : rgb_to_vga(r->color)); + kernel_gfx_draw_rectangle($process->current->gfx_window, r->x, r->y, r->width, r->height, r->palette == GFX_VGA ? r->color : rgb_to_vga(r->color)); break; case GFX_DRAW_CIRCLE_OPT:; struct gfx_circle* circle = (struct gfx_circle*)data; - kernel_gfx_draw_circle($current_process->gfx_window, circle->x, circle->y, circle->r, circle->color, circle->fill); + kernel_gfx_draw_circle($process->current->gfx_window, circle->x, circle->y, circle->r, circle->color, circle->fill); break; case GFX_DRAW_LINE_OPT:; struct gfx_line* line = (struct gfx_line*)data; - kernel_gfx_draw_line($current_process->gfx_window, line->x0, line->y0, line->x1, line->y1, rgb_to_vga(line->color)); + kernel_gfx_draw_line($process->current->gfx_window, line->x0, line->y0, line->x1, line->y1, rgb_to_vga(line->color)); break; case GFX_DRAW_PIXEL:; struct gfx_pixel* pixel = (struct gfx_pixel*)data; - kernel_gfx_draw_pixel($current_process->gfx_window, pixel->x, pixel->y, rgb_to_vga(pixel->color)); + kernel_gfx_draw_pixel($process->current->gfx_window, pixel->x, pixel->y, rgb_to_vga(pixel->color)); break; case GFX_EVEN_LOOP_OPT: diff --git a/graphics/gfxlib.c b/graphics/gfxlib.c index 80b9cb2..d5dc0e3 100644 --- a/graphics/gfxlib.c +++ b/graphics/gfxlib.c @@ -21,12 +21,12 @@ int gfx_get_window_width() { - return $current_process->gfx_window->inner_width; + return $process->current->gfx_window->inner_width; } int gfx_get_window_height() { - return $current_process->gfx_window->inner_height; + return $process->current->gfx_window->inner_height; } int gfx_push_event(struct window* w, struct gfx_event* e) @@ -63,12 +63,12 @@ int gfx_button(int x, int y, int width, int height, char* name) int gfx_button_ext(int x, int y, int width, int height, char* name, color_t color) { - kernel_gfx_draw_rectangle($current_process->gfx_window, x, y, width, height, color); - kernel_gfx_draw_rectangle($current_process->gfx_window, x, y, width-1, 1, 31); - kernel_gfx_draw_rectangle($current_process->gfx_window, x, y, 1, height, 31); - kernel_gfx_draw_rectangle($current_process->gfx_window, x+width-1, y, 1, height, COLOR_VGA_MEDIUM_DARK_GRAY+5); - kernel_gfx_draw_rectangle($current_process->gfx_window, x, y+height-1, width-1, 1, COLOR_VGA_MEDIUM_DARK_GRAY+5); - kernel_gfx_draw_rectangle($current_process->gfx_window, x, y+height, width-1, 1, 31); + kernel_gfx_draw_rectangle($process->current->gfx_window, x, y, width, height, color); + kernel_gfx_draw_rectangle($process->current->gfx_window, x, y, width-1, 1, 31); + kernel_gfx_draw_rectangle($process->current->gfx_window, x, y, 1, height, 31); + kernel_gfx_draw_rectangle($process->current->gfx_window, x+width-1, y, 1, height, COLOR_VGA_MEDIUM_DARK_GRAY+5); + kernel_gfx_draw_rectangle($process->current->gfx_window, x, y+height-1, width-1, 1, COLOR_VGA_MEDIUM_DARK_GRAY+5); + kernel_gfx_draw_rectangle($process->current->gfx_window, x, y+height, width-1, 1, 31); /* center the text */ int text_width = strlen(name)*PIXELS_PER_CHAR; @@ -76,7 +76,7 @@ int gfx_button_ext(int x, int y, int width, int height, char* name, color_t colo int text_x = x + (width/2) - (text_width/2); int text_y = y + (height/2) - (text_height/2); - kernel_gfx_draw_text($current_process->gfx_window, text_x, text_y, name, 0x0); + kernel_gfx_draw_text($process->current->gfx_window, text_x, text_y, name, 0x0); return 0; } @@ -89,9 +89,9 @@ int gfx_put_icon16(unsigned char icon[], int x, int y) /* for new icons we use 0xfa for transparent */ if (icon[l*16+i] != 0xfa) { - if((x)+i < 0 || (y)+l < 0 || (x)+i > $current_process->gfx_window->inner_width || (y)+l > $current_process->gfx_window->inner_height) + if((x)+i < 0 || (y)+l < 0 || (x)+i > $process->current->gfx_window->inner_width || (y)+l > $process->current->gfx_window->inner_height) continue; - putpixel($current_process->gfx_window->inner, (x)+i, (y)+l, rgb_to_vga(icon[l*16+i]), $current_process->gfx_window->pitch); + putpixel($process->current->gfx_window->inner, (x)+i, (y)+l, rgb_to_vga(icon[l*16+i]), $process->current->gfx_window->pitch); } } } @@ -106,9 +106,9 @@ int gfx_put_icon32(unsigned char icon[], int x, int y) /* for new icons we use 0xfa for transparent */ if (icon[l*32+i] != 0xfa) { - if((x)+i < 0 || (y)+l < 0 || (x)+i > $current_process->gfx_window->inner_width || (y)+l > $current_process->gfx_window->inner_height) + if((x)+i < 0 || (y)+l < 0 || (x)+i > $process->current->gfx_window->inner_width || (y)+l > $process->current->gfx_window->inner_height) continue; - putpixel($current_process->gfx_window->inner, (x)+i, (y)+l, rgb_to_vga(icon[l*32+i]), $current_process->gfx_window->pitch); + putpixel($process->current->gfx_window->inner, (x)+i, (y)+l, rgb_to_vga(icon[l*32+i]), $process->current->gfx_window->pitch); } } } @@ -118,18 +118,18 @@ int gfx_put_icon32(unsigned char icon[], int x, int y) int gfx_event_loop(struct gfx_event* event, gfx_event_flag_t flags) { - ERR_ON_NULL($current_process->gfx_window); + ERR_ON_NULL($process->current->gfx_window); /** * The gfx event loop is PCB specific, * checks if there is an event if true return. * Else block. */ while(1){ - if($current_process->gfx_window->events.tail == $current_process->gfx_window->events.head){ + if($process->current->gfx_window->events.tail == $process->current->gfx_window->events.head){ if(flags & GFX_EVENT_BLOCKING){ /* FIXME: Should not global block, perhaps window manager block queue? */ - $current_process->state = BLOCKED; + $process->current->state = BLOCKED; kernel_yield(); } else { return -1; @@ -137,9 +137,9 @@ int gfx_event_loop(struct gfx_event* event, gfx_event_flag_t flags) continue; } - SPINLOCK($current_process->gfx_window, { - memcpy(event, &$current_process->gfx_window->events.list[$current_process->gfx_window->events.tail], sizeof(struct gfx_event)); - $current_process->gfx_window->events.tail = ($current_process->gfx_window->events.tail + 1) % GFX_MAX_EVENTS; + SPINLOCK($process->current->gfx_window, { + memcpy(event, &$process->current->gfx_window->events.list[$process->current->gfx_window->events.tail], sizeof(struct gfx_event)); + $process->current->gfx_window->events.tail = ($process->current->gfx_window->events.tail + 1) % GFX_MAX_EVENTS; }); return 0; } @@ -239,9 +239,9 @@ void kernel_gfx_set_position(struct window* w, int x, int y) void gfx_commit() { - if($current_process->gfx_window == NULL) + if($process->current->gfx_window == NULL) return; - $current_process->gfx_window->changed = 1; + $process->current->gfx_window->changed = 1; } /** @@ -269,8 +269,8 @@ int kernel_gfx_set_title(char* title) if(strlen(title) > GFX_MAX_WINDOW_NAME_SIZE) return -1; - memset($current_process->gfx_window->name, 0, GFX_MAX_WINDOW_NAME_SIZE); - memcpy($current_process->gfx_window->name, title, strlen(title)); + memset($process->current->gfx_window->name, 0, GFX_MAX_WINDOW_NAME_SIZE); + memcpy($process->current->gfx_window->name, title, strlen(title)); return 0; } @@ -280,8 +280,8 @@ int kernel_gfx_set_header(const char* header) if(strlen(header) > GFX_MAX_WINDOW_NAME_SIZE) return -1; - memset($current_process->gfx_window->header, 0, GFX_MAX_WINDOW_NAME_SIZE); - memcpy($current_process->gfx_window->header, header, strlen(header)); + memset($process->current->gfx_window->header, 0, GFX_MAX_WINDOW_NAME_SIZE); + memcpy($process->current->gfx_window->header, header, strlen(header)); return 0; } diff --git a/graphics/window.c b/graphics/window.c index af41f3d..8280bc3 100644 --- a/graphics/window.c +++ b/graphics/window.c @@ -185,7 +185,7 @@ void gfx_draw_window(uint8_t* buffer, struct window* window) void gfx_window_set_resizable() { - $current_process->gfx_window->is_resizable = 1; + $process->current->gfx_window->is_resizable = 1; } /* under construction */ @@ -353,8 +353,8 @@ static void gfx_default_mouse_up(struct window* window, int x, int y) int kernel_gfx_window_border_color(uint8_t color) { - if($current_process->gfx_window == NULL) return -1; - $current_process->gfx_window->color.border = color; + if($process->current->gfx_window == NULL) return -1; + $process->current->gfx_window->color.border = color; return ERROR_OK; } @@ -399,8 +399,8 @@ static int gfx_window_maximize(struct window* window) */ struct window* gfx_new_window(int width, int height, window_flag_t flags) { - if($current_process->gfx_window != NULL) - return $current_process->gfx_window; + if($process->current->gfx_window != NULL) + return $process->current->gfx_window; struct window* w = create(struct window); if(w == NULL){ @@ -434,7 +434,7 @@ struct window* gfx_new_window(int width, int height, window_flag_t flags) w->height += 16; } - w->owner = $current_process; + w->owner = $process->current; w->pitch = w->inner_width; w->x = 32; w->y = 32; @@ -464,13 +464,13 @@ struct window* gfx_new_window(int width, int height, window_flag_t flags) w->is_moving.state = GFX_WINDOW_STATIC; /* Window can just use the name of the owner? */ - memcpy(w->name, $current_process->name, strlen($current_process->name)+1); + memcpy(w->name, $process->current->name, strlen($process->current->name)+1); memset(w->header, 0, GFX_MAX_WINDOW_NAME_SIZE); w->in_focus = 0; - dbgprintf("[Window] Created new window for %s at 0x%x: inner 0x%x (total %x - %x)\n", $current_process->name, w, w->inner, sizeof(struct window), width*height); + dbgprintf("[Window] Created new window for %s at 0x%x: inner 0x%x (total %x - %x)\n", $process->current->name, w, w->inner, sizeof(struct window), width*height); - $current_process->gfx_window = w; + $process->current->gfx_window = w; gfx_composition_add_window(w); return w; diff --git a/include/kernel.h b/include/kernel.h index 2fb92fa..0462c81 100644 --- a/include/kernel.h +++ b/include/kernel.h @@ -42,7 +42,9 @@ struct kernel_context { graphic_modes_t graphic_mode; }; +extern struct kernel_context* $kernel; struct kernel_context* kernel_get_context(); + #endif /* !__RETROS_KERNEL_H__ */ diff --git a/include/kutils.h b/include/kutils.h index e84f877..73fb677 100644 --- a/include/kutils.h +++ b/include/kutils.h @@ -69,15 +69,18 @@ void init_kctors(); #define call(addr) __asm__ __volatile__ ("call *%0" : : "m" (addr)) #define ret() __asm__ __volatile__ ("ret") -extern int cli_cnt; +typedef volatile int signal_value_t; + +/* exeception to the exernal naming as its never supposed to be accessed without macro. */ +extern int __cli_cnt; #define ENTER_CRITICAL()\ - cli_cnt++;\ + __cli_cnt++;\ asm ("cli");\ #define LEAVE_CRITICAL()\ - cli_cnt--;\ - if(cli_cnt == 0){\ + __cli_cnt--;\ + if(__cli_cnt == 0){\ asm ("sti");\ }\ @@ -123,7 +126,7 @@ extern int cli_cnt; LEAVE_CRITICAL(); \ } while (0) -#define ASSERT_CRITICAL() assert(cli_cnt > 0) +#define ASSERT_CRITICAL() assert(__cli_cnt > 0) typedef enum { false = 0, diff --git a/include/libc.h b/include/libc.h index b0717d5..041c28b 100644 --- a/include/libc.h +++ b/include/libc.h @@ -55,8 +55,6 @@ int isdigit(char c); int isspace(char c); int rand(void); -typedef volatile int signal_value_t; - struct args { int argc; char* argv[10]; diff --git a/include/pcb.h b/include/pcb.h index fc37fee..afc51cf 100644 --- a/include/pcb.h +++ b/include/pcb.h @@ -100,8 +100,13 @@ struct pcb_info { char name[PCB_MAX_NAME_LENGTH]; }; +struct process { + struct pcb* current; + /* more */ +}; +extern struct process* $process; + extern const char* pcb_status[]; -extern struct pcb* $current_process; /* Forward declaration */ struct pcb_queue; diff --git a/include/terminal.h b/include/terminal.h index 83f3046..05c0fc8 100644 --- a/include/terminal.h +++ b/include/terminal.h @@ -7,7 +7,7 @@ #include #define TERM_CONTEXT(codeblock) do { \ - struct terminal* term = $current_process->term; \ + struct terminal* term = $process->current->term; \ if(term == NULL) { \ break;\ } \ @@ -15,8 +15,8 @@ } while(0) #define twritef(a, ...) \ - if($current_process != NULL && $current_process->term != NULL) { \ - $current_process->term->ops->writef($current_process->term, a, ##__VA_ARGS__); \ + if($process->current != NULL && $process->current->term != NULL) { \ + $process->current->term->ops->writef($process->current->term, a, ##__VA_ARGS__); \ } typedef enum { diff --git a/kernel/arch/interrupts.c b/kernel/arch/interrupts.c index 71a65db..0111381 100644 --- a/kernel/arch/interrupts.c +++ b/kernel/arch/interrupts.c @@ -63,7 +63,7 @@ void print_page_fault_info(unsigned long cr2) { unsigned long page_table_entry; /* Get the directory entry from the page directory */ - page_dir_entry = $current_process->page_dir[DIRECTORY_INDEX(cr2)]; + page_dir_entry = $process->current->page_dir[DIRECTORY_INDEX(cr2)]; /* Check if the page directory entry is present */ if (page_dir_entry & PRESENT_BIT) { @@ -102,20 +102,20 @@ void page_fault_interrupt(unsigned long cr2, unsigned long err) interrupt_counter[14]++; ENTER_CRITICAL(); - dbgprintf("Page fault: 0x%x (Stack: 0x%x) %d (%s)\n", cr2, $current_process->stackptr, err, $current_process->name); + dbgprintf("Page fault: 0x%x (Stack: 0x%x) %d (%s)\n", cr2, $process->current->stackptr, err, $process->current->name); /* print page_table entry */ print_page_fault_info(cr2); - pcb_dbg_print($current_process); + pcb_dbg_print($process->current); - if($current_process->is_process){ + if($process->current->is_process){ kernel_exit(); } #ifdef KERNEL_PANIC_ON_PAGE_FAULT kernel_panic("A critical kernel thread encountered a page fault."); #endif - //vesa_printf(0, 0, "Page fault: 0x%x (Stack: 0x%x) %d (%s)\n", cr2, $current_process->stackptr, err, $current_process->name); + //vesa_printf(0, 0, "Page fault: 0x%x (Stack: 0x%x) %d (%s)\n", cr2, $process->current->stackptr, err, $process->current->name); kernel_exit(); UNREACHABLE(); @@ -124,8 +124,8 @@ void page_fault_interrupt(unsigned long cr2, unsigned long err) void general_protection_fault() { ENTER_CRITICAL(); - dbgprintf("General Protection Fault: 0x%x - %s\n", $current_process->stackptr, $current_process->name); - pcb_dbg_print($current_process); + dbgprintf("General Protection Fault: 0x%x - %s\n", $process->current->stackptr, $process->current->name); + pcb_dbg_print($process->current); /* TODO: Some kind of feedback */ EOI(13); @@ -146,9 +146,9 @@ void interrupt_install_handler(int i, void (*handler)()) static void __interrupt_exception_handler(int i) { interrupt_counter[i]++; - dbgprintf("[exception] %d %s (%s)\n", i, __exceptions_names[i], $current_process->name); - pcb_dbg_print($current_process); - if($current_process->is_process){ + dbgprintf("[exception] %d %s (%s)\n", i, __exceptions_names[i], $process->current->name); + pcb_dbg_print($process->current); + if($process->current->is_process){ kernel_exit(); UNREACHABLE(); } diff --git a/kernel/cmds.c b/kernel/cmds.c index b37e5db..55a5464 100644 --- a/kernel/cmds.c +++ b/kernel/cmds.c @@ -264,7 +264,7 @@ static int __kthread_entry __tcp_reader(int argc, char *argv[]) buffer[ret] = 0; twritef("%s", buffer); - $current_process->term->ops->commit($current_process->term); + $process->current->term->ops->commit($process->current->term); } return 0; @@ -301,7 +301,7 @@ static int tcp(int argc, char *argv[]) } twritef("Connected to %s:%s\n", argv[1], argv[2]); - $current_process->term->ops->commit($current_process->term); + $process->current->term->ops->commit($process->current->term); char socket_str[10] = {0}; itoa(socket->socket, socket_str); @@ -311,7 +311,7 @@ static int tcp(int argc, char *argv[]) int ret; char* buffer = kalloc(1024); while(1){ - ret = $current_process->term->ops->scan($current_process->term, buffer, 255); + ret = $process->current->term->ops->scan($process->current->term, buffer, 255); if(ret < 0){ break; } @@ -373,7 +373,7 @@ static int conf(int argc, char *argv[]) EXPORT_KSYMBOL(conf); static int clear(){ - $current_process->term->ops->reset($current_process->term); + $process->current->term->ops->reset($process->current->term); return 0; } EXPORT_KSYMBOL(clear); diff --git a/kernel/helpers.s b/kernel/helpers.s index 345c380..69576fd 100644 --- a/kernel/helpers.s +++ b/kernel/helpers.s @@ -133,8 +133,8 @@ pcb_restore_context: .global _start_pcb _start_pcb: - subl $1, cli_cnt - # movl $current_process, %eax + subl $1, __cli_cnt + # movl $process->current, %eax movl 4(%esp), %eax movl PCB_KESP(%eax), %esp diff --git a/kernel/irs_entry.s b/kernel/irs_entry.s index adb4091..8d9ff9e 100644 --- a/kernel/irs_entry.s +++ b/kernel/irs_entry.s @@ -110,7 +110,7 @@ syscall_return_value: .global _syscall_entry _syscall_entry: cli - addl $1, cli_cnt + addl $1, __cli_cnt pushl %ebp movl %esp, %ebp @@ -147,7 +147,7 @@ _syscall_entry: movl %ebp, %esp popl %ebp - subl $1, cli_cnt + subl $1, __cli_cnt iret page_fault_save: diff --git a/kernel/kernel.c b/kernel/kernel.c index 69282d3..c3ce355 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -65,7 +65,7 @@ #define TEXT_COLOR 15 /* White color for text */ #define LINE_HEIGHT 8 /* Height of each line */ -struct kernel_context kernel_context = { +struct kernel_context __kernel_context = { .sched_ctx = NULL, .graphics.window_server = NULL, .graphics.ctx = NULL, @@ -73,10 +73,11 @@ struct kernel_context kernel_context = { .graphic_mode = KERNEL_FLAG_GRAPHICS, //.graphic_mode = KERNEL_FLAG_TEXTMODE, }; +struct kernel_context* $kernel = &__kernel_context; static void kernel_boot_printf(char* message) { static int kernel_msg = 0; - if(kernel_context.graphic_mode != KERNEL_FLAG_TEXTMODE){ + if(__kernel_context.graphic_mode != KERNEL_FLAG_TEXTMODE){ vesa_printf((uint8_t*)vbe_info->framebuffer, 10, 10 + (kernel_msg++ * LINE_HEIGHT), TEXT_COLOR, message); } else { scrwrite(0, kernel_msg++, message, VGA_COLOR_WHITE); @@ -104,14 +105,14 @@ void kernel(uint32_t magic) vbe_info->pitch = mb_info->framebuffer_width; vbe_info->framebuffer = mb_info->framebuffer_addr; - kernel_context.boot_info->extended_memory_low = 8*1024; - kernel_context.boot_info->extended_memory_high = 0; + __kernel_context.boot_info->extended_memory_low = 8*1024; + __kernel_context.boot_info->extended_memory_high = 0; #else /* Point VBE to magic input and update total memory. */ - kernel_context.boot_info = (struct boot_info*) (0x7e00); - if(kernel_context.boot_info->textmode == 1){ - kernel_context.graphic_mode = KERNEL_FLAG_TEXTMODE; + __kernel_context.boot_info = (struct boot_info*) (0x7e00); + if(__kernel_context.boot_info->textmode == 1){ + __kernel_context.graphic_mode = KERNEL_FLAG_TEXTMODE; } vbe_info = (struct vbe_mode_info_structure*) magic; @@ -129,7 +130,7 @@ void kernel(uint32_t magic) smp_parse(); /* Initilize memory map and then kernel and virtual memory */ - memory_map_init(kernel_context.boot_info->extended_memory_low * 1024, kernel_context.boot_info->extended_memory_high * 64 * 1024); + memory_map_init(__kernel_context.boot_info->extended_memory_low * 1024, __kernel_context.boot_info->extended_memory_high * 64 * 1024); init_memory(); kernel_boot_printf("Memory initialized."); @@ -142,10 +143,10 @@ void kernel(uint32_t magic) kernel_boot_printf("Kernel constructors initialized."); /* Graphics */ - if(kernel_context.graphic_mode != KERNEL_FLAG_TEXTMODE){ + if(__kernel_context.graphic_mode != KERNEL_FLAG_TEXTMODE){ - kernel_context.graphics.ctx = gfx_new_ctx(); - gfx_init_framebuffer(kernel_context.graphics.ctx, vbe_info); + __kernel_context.graphics.ctx = gfx_new_ctx(); + gfx_init_framebuffer(__kernel_context.graphics.ctx, vbe_info); kernel_boot_printf("Graphics initialized."); } else { scr_clear(); @@ -154,7 +155,7 @@ void kernel(uint32_t magic) /* Initilize the keyboard and mouse */ init_keyboard(); - if(kernel_context.graphic_mode != KERNEL_FLAG_TEXTMODE){ + if(__kernel_context.graphic_mode != KERNEL_FLAG_TEXTMODE){ mouse_init(); } kernel_boot_printf("Peripherals initialized."); @@ -223,7 +224,7 @@ void kernel(uint32_t magic) ksyms_init(); start("idled", 0, NULL); - if(kernel_context.graphic_mode != KERNEL_FLAG_TEXTMODE){ + if(__kernel_context.graphic_mode != KERNEL_FLAG_TEXTMODE){ start("wind", 0, NULL); } else { start("textshell", 0, NULL); @@ -237,7 +238,7 @@ void kernel(uint32_t magic) init_pit(1000); kernel_boot_printf("Timer initialized."); - dbgprintf("Critical counter: %d\n", cli_cnt); + dbgprintf("Critical counter: %d\n", __cli_cnt); kernel_boot_printf("Starting OS..."); LEAVE_CRITICAL(); @@ -264,7 +265,7 @@ void init_kctors() struct kernel_context* kernel_get_context() { - return &kernel_context; + return &__kernel_context; } #define HEXDUMP_COLS 8 diff --git a/kernel/kmem.c b/kernel/kmem.c index 9e19a07..995f98d 100644 --- a/kernel/kmem.c +++ b/kernel/kmem.c @@ -107,7 +107,7 @@ void* kalloc(int size) void* ptr = (void*)(KERNEL_MEMORY_START + start_block * KMEM_BLOCK_SIZE + sizeof(int)); __kmemory_used += num_blocks * KMEM_BLOCK_SIZE; - $current_process->kallocs++; + $process->current->kallocs++; /* sanity check */ if(__kmemory_used > KERNEL_MEMORY_END-KERNEL_MEMORY_START){ @@ -153,7 +153,7 @@ void kfree(void* ptr) /* Read the size of the allocated block from the metadata block */ int* metadata = (int*) (KERNEL_MEMORY_START + block_index * KMEM_BLOCK_SIZE); int num_blocks = *metadata; - dbgprintf("[MEMORY] %s freeing %d blocks of data\n", $current_process->name, num_blocks); + dbgprintf("[MEMORY] %s freeing %d blocks of data\n", $process->current->name, num_blocks); /* Mark the blocks as free in the bitmap */ for (int i = 0; i < num_blocks; i++) { @@ -219,5 +219,5 @@ void kmem_init() memset(__kmemory_bitmap, 0, (memory_map_get()->kernel.total) / KMEM_BLOCK_SIZE / KMEM_BLOCKS_PER_BYTE); __kmemory_lock = 0; - dbgprintf("Lock 0x%x initiated by %s\n", &__kmemory_lock, $current_process->name); + dbgprintf("Lock 0x%x initiated by %s\n", &__kmemory_lock, $process->current->name); } \ No newline at end of file diff --git a/kernel/kthreads.c b/kernel/kthreads.c index 729b04a..b511d52 100644 --- a/kernel/kthreads.c +++ b/kernel/kthreads.c @@ -33,12 +33,12 @@ static struct kthread { */ void __noreturn kthread_entry(int argc, char* args[]) { - if($current_process->is_process){ + if($process->current->is_process){ kernel_exit(); } - void (*entry)(int argc, char* argv[]) = (void (*)(int argc, char* argv[]))$current_process->thread_eip; - entry($current_process->args, $current_process->argv); + void (*entry)(int argc, char* argv[]) = (void (*)(int argc, char* argv[]))$process->current->thread_eip; + entry($process->current->args, $process->current->argv); kernel_exit(); UNREACHABLE(); diff --git a/kernel/kthreads/login.c b/kernel/kthreads/login.c index be5334b..e6b1152 100644 --- a/kernel/kthreads/login.c +++ b/kernel/kthreads/login.c @@ -25,15 +25,14 @@ void __kthread_entry login() { - struct kernel_context* kernel_ctx = kernel_get_context(); struct window* w = gfx_new_window(275, 100, GFX_NO_OPTIONS); if(w == NULL){ warningf("Failed to create window for login"); return; } - struct unit unit = calculate_size_unit(kernel_ctx->boot_info->extended_memory_low * 1024); - struct unit unit2 = calculate_size_unit(kernel_ctx->boot_info->extended_memory_high * 64 * 1024); + struct unit unit = calculate_size_unit($kernel->boot_info->extended_memory_low * 1024); + struct unit unit2 = calculate_size_unit($kernel->boot_info->extended_memory_high * 64 * 1024); /* set title */ kernel_gfx_set_title("Welcome to RetrOS-32"); diff --git a/kernel/kthreads/networking.c b/kernel/kthreads/networking.c index 09271b1..ddef376 100644 --- a/kernel/kthreads/networking.c +++ b/kernel/kthreads/networking.c @@ -289,7 +289,7 @@ void __kthread_entry networking_main() netd.skb_tx_queue = skb_new_queue(); } - netd.instance = $current_process; + netd.instance = $process->current; /* sanity check that loopback interface exists */ __net_config_loopback(); @@ -333,7 +333,7 @@ void __kthread_entry networking_main() } if(todos == 0){ - $current_process->state = BLOCKED; + $process->current->state = BLOCKED; } kernel_yield(); diff --git a/kernel/kthreads/shell.c b/kernel/kthreads/shell.c index 4ffce2b..b421e26 100644 --- a/kernel/kthreads/shell.c +++ b/kernel/kthreads/shell.c @@ -72,7 +72,7 @@ static char* about_text = "\nRetrOS-32 - 32bit Operating System\n " KERNEL_RE void shell_clear() { struct gfx_theme* theme = kernel_gfx_current_theme(); - kernel_gfx_draw_rectangle($current_process->gfx_window, 0, SHELL_POSITION, gfx_get_window_height(), 8, theme->terminal.background); + kernel_gfx_draw_rectangle($process->current->gfx_window, 0, SHELL_POSITION, gfx_get_window_height(), 8, theme->terminal.background); } void reset_shell() @@ -81,7 +81,7 @@ void reset_shell() memset(&shell_buffer, 0, SHELL_MAX_SIZE); shell_column = strlen(shell_name)+1; shell_buffer_length = 0; - kernel_gfx_draw_text($current_process->gfx_window, 0, SHELL_POSITION, shell_name, COLOR_VGA_MISC); + kernel_gfx_draw_text($process->current->gfx_window, 0, SHELL_POSITION, shell_name, COLOR_VGA_MISC); shell_column += 1; } @@ -103,7 +103,7 @@ void ps(int argc, char* argv[]) if(spin){ while(1){ - $current_process->term->ops->reset($current_process->term); + $process->current->term->ops->reset($process->current->term); twritef(" PID USAGE TYPE STATE NAME\n"); for (int i = 1; i < MAX_NUM_OF_PCBS; i++){ struct pcb_info info; @@ -113,7 +113,7 @@ void ps(int argc, char* argv[]) twritef(" %d %s%d% %s %s %s\n", info.pid, usage < 10 ? " ": "", usage, info.is_process ? "process" : "kthread", pcb_status[info.state], info.name); } - $current_process->term->ops->commit($current_process->term); + $process->current->term->ops->commit($process->current->term); struct gfx_event event; gfx_event_loop(&event, GFX_EVENT_NONBLOCKING); @@ -482,8 +482,8 @@ EXPORT_KSYMBOL(socks); void reset(int argc, char* argv[]) { - kernel_gfx_draw_rectangle($current_process->gfx_window, 0,0, gfx_get_window_width(), gfx_get_window_height(), COLOR_VGA_BG); - $current_process->term->ops->reset($current_process->term); + kernel_gfx_draw_rectangle($process->current->gfx_window, 0,0, gfx_get_window_width(), gfx_get_window_height(), COLOR_VGA_BG); + $process->current->term->ops->reset($process->current->term); reset_shell(); } EXPORT_KSYMBOL(reset); @@ -527,7 +527,7 @@ void shell_put(unsigned char c) if(shell_buffer_length < 1) return; shell_column -= 1; - kernel_gfx_draw_rectangle($current_process->gfx_window, shell_column*8, SHELL_POSITION, 8, 8, COLOR_VGA_BG); + kernel_gfx_draw_rectangle($process->current->gfx_window, shell_column*8, SHELL_POSITION, 8, 8, COLOR_VGA_BG); gfx_commit(); shell_buffer[shell_buffer_length] = 0; shell_buffer_length--; @@ -537,7 +537,7 @@ void shell_put(unsigned char c) if(shell_column == SHELL_MAX_SIZE) return; - kernel_gfx_draw_char($current_process->gfx_window, shell_column*8, SHELL_POSITION, uc, COLOR_VGA_FG); + kernel_gfx_draw_char($process->current->gfx_window, shell_column*8, SHELL_POSITION, uc, COLOR_VGA_FG); gfx_commit(); shell_buffer[shell_buffer_length] = uc; shell_buffer_length++; @@ -562,7 +562,7 @@ void testfn() int c_test = 0; void __kthread_entry shell(int argc, char* argv[]) { - dbgprintf("shell is running %d!\n", cli_cnt); + dbgprintf("shell is running %d!\n", __cli_cnt); //testfn(); struct window* window = gfx_new_window(SHELL_WIDTH, SHELL_HEIGHT, GFX_IS_RESIZABLE); @@ -571,7 +571,7 @@ void __kthread_entry shell(int argc, char* argv[]) return; } dbgprintf("shell: window 0x%x\n", window); - kernel_gfx_draw_rectangle($current_process->gfx_window, 0,0, gfx_get_window_width(), gfx_get_window_height(), COLOR_VGA_BG); + kernel_gfx_draw_rectangle($process->current->gfx_window, 0,0, gfx_get_window_width(), gfx_get_window_height(), COLOR_VGA_BG); struct terminal* term = terminal_create(TERMINAL_GRAPHICS_MODE); term->ops->attach(term); diff --git a/kernel/kthreads/snake.c b/kernel/kthreads/snake.c index ac5b55d..e0aa6fc 100644 --- a/kernel/kthreads/snake.c +++ b/kernel/kthreads/snake.c @@ -55,7 +55,7 @@ void draw() { } int get_input() { - return $current_process->term->ops->getchar($current_process->term); + return $process->current->term->ops->getchar($process->current->term); } int update() { diff --git a/kernel/kthreads/taskbar.c b/kernel/kthreads/taskbar.c index b4db1a9..2bf7b8b 100644 --- a/kernel/kthreads/taskbar.c +++ b/kernel/kthreads/taskbar.c @@ -382,9 +382,9 @@ static void __callback taskbar_wolfstein() static void __callback taskbar_terminal() { - dbgprintf("Starting terminal %d\n", cli_cnt); + dbgprintf("Starting terminal %d\n", __cli_cnt); start("shell", 0, NULL); - dbgprintf("Started terminal %d\n", cli_cnt); + dbgprintf("Started terminal %d\n", __cli_cnt); } static void __callback taskbar_finder() diff --git a/kernel/kutils.c b/kernel/kutils.c index 83b1931..db90128 100644 --- a/kernel/kutils.c +++ b/kernel/kutils.c @@ -106,7 +106,7 @@ void kernel_panic(const char* reason) vesa_put_char16((uint8_t*)vbe_info->framebuffer, message[i], 16+(i*16), vbe_info->height/3 - 24, 15); } - struct pcb* pcb = $current_process; + struct pcb* pcb = $process->current; vesa_printf((uint8_t*)vbe_info->framebuffer, 16, vbe_info->height/3, 15, "A critical error has occurred and your system is unable to continue operating.\nThe cause of this failure appears to be an essential system component.\n\nReason:\n%s\n\n###### PCB ######\npid: %d\nname: %s\nesp: 0x%x\nebp: 0x%x\nkesp: 0x%x\nkebp: 0x%x\neip: 0x%x\nstate: %s\nstack limit: 0x%x\nstack size: 0x%x (0x%x - 0x%x)\nPage Directory: 0x%x\nCS: %d\nDS:%d\n\n\nPlease power off and restart your device.\nRestarting may resolve the issue if it was caused by a temporary problem.\nIf this screen appears again after rebooting, it indicates a more serious issue.", reason, pcb->pid, pcb->name, pcb->ctx.esp, pcb->ctx.ebp, pcb->kesp, pcb->kebp, pcb->ctx.eip, pcb_status[pcb->state], pcb->stackptr, (int)((pcb->stackptr+0x2000-1) - pcb->ctx.esp), (pcb->stackptr+0x2000-1), pcb->ctx.esp, pcb->page_dir, pcb->cs, pcb->ds); diff --git a/kernel/memory.c b/kernel/memory.c index 727c7a6..3ce45bb 100644 --- a/kernel/memory.c +++ b/kernel/memory.c @@ -99,11 +99,11 @@ void free(void* ptr) if(ptr == NULL)return; /* lock on free as multiple threads can free at the same time */ - spin_lock(&$current_process->allocations->spinlock); + spin_lock(&$process->current->allocations->spinlock); - vmem_stack_free($current_process, ptr); + vmem_stack_free($process->current, ptr); - spin_unlock(&$current_process->allocations->spinlock); + spin_unlock(&$process->current->allocations->spinlock); } void* malloc(unsigned int size) @@ -115,19 +115,19 @@ void* malloc(unsigned int size) size = ALIGN(size, PTR_SIZE); /* lock on malloc as multiple threads can malloc at the same time */ - spin_lock(&$current_process->allocations->spinlock); + spin_lock(&$process->current->allocations->spinlock); - void* ptr = vmem_stack_alloc($current_process, size); + void* ptr = vmem_stack_alloc($process->current, size); if(ptr == NULL){ - spin_unlock(&$current_process->allocations->spinlock); + spin_unlock(&$process->current->allocations->spinlock); return NULL; } - //vmem_dump_heap($current_process->allocations->head); + //vmem_dump_heap($process->current->allocations->head); dbgprintf("Allocated %d bytes at %x\n", size, ptr); - spin_unlock(&$current_process->allocations->spinlock); + spin_unlock(&$process->current->allocations->spinlock); return ptr; } diff --git a/kernel/pcb.c b/kernel/pcb.c index b3be317..3da3038 100644 --- a/kernel/pcb.c +++ b/kernel/pcb.c @@ -27,12 +27,15 @@ #include static struct pcb pcb_table[MAX_NUM_OF_PCBS]; +static struct process __process = { + .current = NULL, +}; +struct process* $process = &__process; + /** * Current running PCB, used for context aware * functions such as windows drawing to the screen. */ -struct pcb* $current_process = NULL; -//#include const char* pcb_status[] = {"stopped ", "running ", "new ", "blocked ", "sleeping", "zombie"}; static int pcb_count = 0; @@ -167,6 +170,7 @@ static struct pcb* __pcb_init_process(byte_t flags, uint32_t entry_point) static int __pcb_init_virt_args(struct pcb* pcb, int argc, char** argv) { + if(argc == 0) return ERROR_OK; struct args* virtual_args = vmem_stack_alloc(pcb, sizeof(struct args)); @@ -207,7 +211,7 @@ void init_pcbs() pcb_table[i].next = NULL; } - $current_process = &pcb_table[0]; + $process->current = &pcb_table[0]; dbgprintf("[PCB] All process control blocks are ready.\n"); } @@ -301,9 +305,9 @@ void pcb_dbg_print(struct pcb* pcb) int pcb_cleanup_routine(void* arg) { int pid = (int)arg; - assert(pid != $current_process->pid && !(pid < 0 || pid > MAX_NUM_OF_PCBS)); + assert(pid != $process->current->pid && !(pid < 0 || pid > MAX_NUM_OF_PCBS)); - dbgprintf("%d\n", cli_cnt); + dbgprintf("%d\n", __cli_cnt); struct pcb* pcb = &pcb_table[pid]; gfx_destory_window(pcb_table[pid].gfx_window); @@ -342,7 +346,7 @@ int pcb_cleanup_routine(void* arg) dbgprintf("[PCB] Cleanup on PID %d [DONE]\n", pid); - dbgprintf("%d\n", cli_cnt); + dbgprintf("%d\n", __cli_cnt); return pid; } @@ -417,8 +421,8 @@ error_t pcb_create_process(char* program, int argc, char** argv, pcb_flag_t flag pcb->data_size = size; memcpy(pcb->name, program, strlen(program)+1); - pcb->term = $current_process->term; - pcb->parent = $current_process; + pcb->term = $process->current->term; + pcb->parent = $process->current; pcb->thread_eip = 0; @@ -471,7 +475,7 @@ error_t pcb_create_kthread(void (*entry)(), char* name, int argc, char** argv) } pcb->parent = NULL; - pcb->term = $current_process->term; + pcb->term = $process->current->term; pcb->thread_eip = (uintptr_t) entry; pcb->page_dir = kernel_page_dir; diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 46e3fa1..7f2e58a 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -224,7 +224,7 @@ static error_t sched_round_robin(struct scheduler* sched) } sched->ctx.running = next; - $current_process = next; + $process->current = next; load_page_directory(next->page_dir); //load_data_segments(GDT_KERNEL_DS); start_pcb(next); @@ -264,7 +264,7 @@ static error_t sched_round_robin(struct scheduler* sched) } while(next->state != RUNNING); sched->ctx.running = next; - $current_process = next; + $process->current = next; if(next->is_process){ tss.esp_0 = (uint32_t)next->kebp; @@ -285,7 +285,7 @@ static error_t sched_default(struct scheduler* sched) if (sched->ctx.running == NULL){ sched->ctx.running = sched->queue->ops->pop(sched->queue); /* Temporary fix */ - $current_process = sched->ctx.running; + $process->current = sched->ctx.running; } sched->ctx.running->yields++; diff --git a/kernel/sync.c b/kernel/sync.c index 6ca2fb6..0441dae 100644 --- a/kernel/sync.c +++ b/kernel/sync.c @@ -38,7 +38,7 @@ void mutex_init(mutex_t* l) { l->blocked = pcb_new_queue(); l->state = UNLOCKED; - dbgprintf("Lock 0x%x initiated by %s\n", l, $current_process->name); + dbgprintf("Lock 0x%x initiated by %s\n", l, $process->current->name); } diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 4cee589..12361dc 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -26,7 +26,7 @@ void add_system_call(int index, syscall_t fn) int sys_create_thread(void (*entry)(), void* arg, byte_t flags) { - return pcb_create_thread($current_process, entry, arg, flags); + return pcb_create_thread($process->current, entry, arg, flags); } EXPORT_SYSCALL(SYSCALL_CREATE_THREAD, sys_create_thread); diff --git a/kernel/terminal.c b/kernel/terminal.c index 6e436e9..bcc0536 100644 --- a/kernel/terminal.c +++ b/kernel/terminal.c @@ -26,14 +26,14 @@ int scan(ubyte_t* data, int size) { - if($current_process == NULL || $current_process->term == NULL) return -1; + if($process->current == NULL || $process->current->term == NULL) return -1; - return $current_process->term->ops->scan($current_process->term, data, size); + return $process->current->term->ops->scan($process->current->term, data, size); } void terminal_set_color(color_t color) { - //$current_process->term->text_color = color; + //$process->current->term->text_color = color; } static void __terminal_syntax(unsigned char c) @@ -61,8 +61,8 @@ static void __terminal_syntax(unsigned char c) void terminal_attach(struct terminal* term) { - $current_process->term = term; - term->screen = $current_process->gfx_window; + $process->current->term = term; + term->screen = $process->current->gfx_window; } static int __next_newline(void* _data) @@ -99,13 +99,13 @@ static void __terminal_scroll(struct terminal* term) void terminal_commit() { - $current_process->term->ops->commit($current_process->term); + $process->current->term->ops->commit($process->current->term); } void terminal_putchar(char c) { return; - $current_process->term->ops->putchar($current_process->term, c); + $process->current->term->ops->putchar($process->current->term, c); } /* terminal prototypes */ @@ -185,7 +185,7 @@ struct terminal* terminal_create(terminal_flags_t flags) term->text_color = VGA_COLOR_WHITE; } - $current_process->term = term; + $process->current->term = term; kref_init(&term->ref); return term; @@ -378,7 +378,7 @@ static int __terminal_putchar_graphics(struct terminal* term, char c) } /* should be a flush syscall */ - if(term->screen != NULL && term->screen != $current_process->gfx_window){ + if(term->screen != NULL && term->screen != $process->current->gfx_window){ term->ops->commit(term); } } @@ -387,7 +387,7 @@ static int __terminal_putchar_graphics(struct terminal* term, char c) serial_put(c); - if(term->screen != NULL && term->screen != $current_process->gfx_window){ + if(term->screen != NULL && term->screen != $process->current->gfx_window){ term->screen->changed = 1; } else { gfx_commit(); @@ -431,9 +431,9 @@ static int __terminal_attach(struct terminal* term) if(term == NULL) return -1; /* This is a BAD solution, FIXME Badly */ - $current_process->term = term; + $process->current->term = term; if(term->screen == NULL){ - term->screen = $current_process->gfx_window; + term->screen = $process->current->gfx_window; } kref_get(&term->ref); @@ -445,7 +445,7 @@ static int __terminal_detach(struct terminal* term) { if(term == NULL) return -1; - $current_process->term = NULL; + $process->current->term = NULL; term->screen = NULL; kref_put(&term->ref); diff --git a/lib/libc.c b/lib/libc.c index 6c06921..9d7480a 100644 --- a/lib/libc.c +++ b/lib/libc.c @@ -17,7 +17,7 @@ extern "C" { #include -int cli_cnt = 0; +int __cli_cnt = 0; float cos_60[60] = {6.123233995736766e-17,0.10452846326765346,0.20791169081775945,0.30901699437494745,0.4067366430758002,0.5000000000000001,0.5877852522924731,0.6691306063588582,0.7431448254773942,0.8090169943749475,0.8660254037844387,0.9135454576426009,0.9510565162951535,0.9781476007338057,0.9945218953682733,1.0,0.9945218953682733,0.9781476007338057,0.9510565162951535,0.9135454576426009,0.8660254037844387,0.8090169943749475,0.7431448254773942,0.6691306063588582,0.5877852522924731,0.5000000000000001,0.4067366430758002,0.30901699437494745,0.20791169081775945,0.10452846326765346,6.123233995736766e-17,-0.10452846326765333,-0.20791169081775912,-0.30901699437494734,-0.4067366430758001,-0.4999999999999998,-0.587785252292473,-0.6691306063588582,-0.7431448254773941,-0.8090169943749473,-0.8660254037844387,-0.9135454576426008,-0.9510565162951535,-0.9781476007338057,-0.9945218953682733,-1.0,-0.9945218953682734,-0.9781476007338057,-0.9510565162951535,-0.9135454576426011,-0.8660254037844386,-0.8090169943749475,-0.7431448254773942,-0.6691306063588585,-0.5877852522924732,-0.5000000000000004,-0.4067366430758001,-0.30901699437494756,-0.2079116908177598,-0.10452846326765336, }; diff --git a/net/socket.c b/net/socket.c index c079d7c..51735e5 100644 --- a/net/socket.c +++ b/net/socket.c @@ -108,8 +108,8 @@ error_t net_sock_read(struct sock* sock, uint8_t* buffer, unsigned int length) dbgprintf(" [SOCK] Waiting for data... %d\n", sock); /* Should be blocking */ while(!net_sock_data_ready(sock, length)){ - sock->waiting = $current_process; - $current_process->state = BLOCKED; + sock->waiting = $process->current; + $process->current->state = BLOCKED; kernel_yield(); } @@ -416,7 +416,7 @@ struct sock* kernel_socket_create(int domain, int type, int protocol) socket_table[current]->waiting = NULL; socket_table[current]->accept_sock = NULL; - socket_table[current]->owner = $current_process; + socket_table[current]->owner = $process->current; mutex_init(&(socket_table[current]->lock)); diff --git a/net/tcp.c b/net/tcp.c index 64cc531..c016212 100644 --- a/net/tcp.c +++ b/net/tcp.c @@ -92,8 +92,8 @@ struct tcb* tcb_new() #define IS_TCP_SOCKET(sock) (sock->type == SOCK_STREAM && sock->tcp != NULL) #define TCP_BLOCK(sock)\ - sock->waiting = $current_process;\ - $current_process->state = BLOCKED;\ + sock->waiting = $process->current;\ + $process->current->state = BLOCKED;\ kernel_yield(); #define TCP_UNBLOCK(sock)\ diff --git a/readme.md b/readme.md index 4e7a7fd..87de796 100644 --- a/readme.md +++ b/readme.md @@ -98,10 +98,20 @@ Docker used for crossplatform compilation. ![](https://img.shields.io/badge/C-00599C?style=for-the-badge&logo=c&logoColor=white) ![](https://img.shields.io/badge/C%2B%2B-00599C?style=for-the-badge&logo=c%2B%2B&logoColor=white) -

(back to top)

+## Hardware +Tested on: +Lenovo x240, +Asus Eee PC series, +Dell Optiplex 780, +Samsung N150 Plus, +Samsung NP-NC10, +IBM Thinkpad a21p +| | | +|:-------------------------:|:-------------------------:| +| | ## Getting Started @@ -188,18 +198,6 @@ To run RetrOS-32:

(back to top)

-## Hardware -Tested on: -Lenovo x240, -Asus Eee PC series, -Dell Optiplex 780, -Samsung N150 Plus, -Samsung NP-NC10, -IBM Thinkpad a21p - - - - ## Project Structure (TBD) NETOS - Project ├── Dockerfile diff --git a/rootfs/symbols.map b/rootfs/symbols.map index 2638fb4..a2a4ff6 100644 --- a/rootfs/symbols.map +++ b/rootfs/symbols.map @@ -11,843 +11,843 @@ 00010103 kernel 00010549 kernel_get_context 0001054f hexdump -0001078b __terminal_set_ops -00010854 __terminal_scanf -0001085a __terminal_write -000108a4 __terminal_getchar_graphics -000108ed __terminal_scan_graphics -000109cb __terminal_reset -00010a0f __terminal_detach -00010a50 __terminal_attach -00010a97 __terminal_commit_graphics -00010b6d __terminal_remove_line -00010bad __terminal_putchar_graphics -00010c72 __terminal_writef -00010f19 __terminal_getchar_textmode -00010f41 __terminal_scan_textmode -00011001 __terminal_commit_textmode -000110b9 __terminal_putchar_textmode -00011105 scan -0001113c terminal_set_color -0001113d terminal_attach -0001115a terminal_commit -00011177 terminal_putchar -00011178 terminal_create -00011294 terminal_destroy -000112cc tlb_flush_addr -000112d4 load_page_directory -000112e4 enable_paging -000112f6 pcb_save_context -00011322 pcb_restore_context -0001134b _start_pcb -0001137d _start_pcb_skip -00011398 __ksymbol_lspci -000113b2 pci_get_class_name -000113c5 pci_get_device_name -00011436 pci_get_vendor_name -00011484 lspci -000115cd pci_get_devices -000115d3 pci_read_word -0001162d pci_write_dword -0001167c pci_enable_device_busmaster -000116d1 pci_register_device -00011752 init_pci -00011903 pci_find_device -00011999 virtual_read -000119c4 virtual_write -000119ef virtual_disk_attach -00011a0e wm_default_changes -00011ab6 wm_default_workspace -00011b18 wm_default_draw -00011bb6 wm_default_add -00011c5d init_windowmanager -00011da7 wm_default_mouse_event -00011fcd wm_default_push_back -000120bf wm_default_push_front -000121ae wm_default_remove -000122bf wm_destroy -0001239d wm_new -00012404 screen_set_cursor -00012464 scrcolor_set -00012478 scrput -0001249e scrwrite -000124e7 scr_clear -00012539 scr_scroll -00012581 scrprintf -000127c5 strlen -000127e7 strcpy -0001281b strncmp -00012856 strcmp -00012896 memcmp -000128d1 parse_arguments -000129b4 strchr -000129e3 getopt -00012af3 memcpy -00012b60 strtok -00012c18 xmemcpy -00012c9f memset -00012d1f isdigit -00012d33 isspace -00012d42 tolower -00012d56 isxdigit -00012d7a htoi -00012e1e atoi -00012eae itoa -00012f54 itohex -00012fd0 rdtsc -00012fd3 rand -00012fef general_protection_fault -0001305c interrupt_get_count -0001306b print_page_fault_info -00013146 page_fault_interrupt -000131ea interrupt_install_handler -000131fc load_data_segments -00013208 isr_handler -000132f6 init_interrupts -0001346f idt_flush -00013477 isr0 -00013484 isr1 -00013491 isr2 -0001349e isr3 -000134ab isr4 -000134b8 isr5 -000134c5 isr6 -000134d2 isr7 -000134df isr8 -000134ec isr9 -000134f9 isr10 -00013506 isr11 -00013513 isr12 -00013520 isr13 -0001352d isr14 -0001353a isr15 -00013547 isr16 -00013554 isr17 -00013561 isr18 -0001356e isr19 -0001357b isr20 -00013588 isr21 -00013595 isr22 -000135a2 isr23 -000135af isr24 -000135bc isr25 -000135c9 isr26 -000135d6 isr27 -000135e3 isr28 -000135f0 isr29 -000135fd isr30 -0001360a isr31 -00013617 isr32 -00013624 isr33 -00013631 isr34 -0001363e isr35 -00013648 isr36 -00013652 isr37 -0001365c isr38 -00013666 isr39 -00013670 isr40 -0001367a isr41 -00013684 isr42 -0001368e isr43 -00013698 isr44 -000136a2 isr45 -000136ac isr46 -000136b6 isr47 -000136c0 isr_entry -000136db syscall_return_value -000136df _syscall_entry -0001371c page_fault_save -00013720 page_fault_error -00013724 _page_fault_entry -00013756 timer_callback -0001378b timer_get_tick -00013791 time_get_difference -000137d4 init_pit -00013838 gdt_set_segment -00013881 init_gdt -0001398f rc -00013b75 __ksymbol_rc -00013b8f __ksymbol_as -00013ba9 __ksymbol_cc -00013bc3 as -00013f6f cc -00013fca __cc -000142b1 vm_print -0001448e eval -00014920 vm_setup -00014961 vm_init -000149bc vm_free -000149eb vm_setup_stack -00014a47 lex_get_error -00014a54 next -00014f5f match -00014fab expression -00016294 statement -0001649d function_parameter -0001665b function_body -00016866 function_declaration -000168ef enum_declaration -000169f6 global_declaration -00016c1f lex_init -00016cba program -00016d5b find_mp_floating_ptr -00016d97 smp_parse -00016edc kb_get_char -00016f28 kb_add_char -00016f63 kb_callback -00017190 init_keyboard -00017207 pcb_await -00017231 __pcb_get_free -000172ef __add_systemcall_pcb_await -00017306 __pcb_free -00017355 __pcb_init_kernel_stack -000173b6 __pcb_init_process -0001747b init_pcbs -000174d6 pcb_total_usage -000174ff pcb_get_info -00017629 pcb_kill -00017646 Genesis -00017648 idletask -00017663 pcb_get_by_pid -00017674 pcb_get_by_name -000176cd pcb_dbg_print -00017747 pcb_cleanup_routine -00017918 pcb_create_thread -000179cb pcb_create_process -00017c12 pcb_create_kthread -00017e9f start_pcb -00017ed7 __pcb_queue_peek -00017f16 __pcb_queue_pop -00017f72 __pcb_queue_remove -00017fe4 __pcb_queue_add -0001805d __pcb_queue_push -000180f6 pcb_new_queue -00018127 memory_map_init -000181ee memory_map_get -000181f4 free -00018259 malloc -000182ee calloc -00018321 get_mem_info -00018379 init_memory -0001840b vmem_free -0001847b vmem_alloc -000184e8 vmem_free_page_region -0001864e vmem_page_region_alloc -00018689 vmem_create_page_region -000187cd vmem_free_allocations -000188fc vmem_continious_allocation_map -00018902 vmem_free_allocation -00018903 vmem_stack_free -000189b4 vmem_stack_alloc -00018d39 vmem_dump_heap -00018dce vmem_init_process_thread -00018ebf vmem_init_process -000191ed vmem_cleanup_process_thead -00019264 vmem_cleanup_process -00019452 vmem_init_kernel -00019613 vmem_allocator_create -00019677 vmem_map_driver_region -000196f5 vmem_total_usage -00019708 vmem_init -0001983a kalloc -000199cf kcalloc -00019a01 kfree -00019a97 palloc -00019ad9 pmemory_used -00019af5 kmemory_used -00019afb kmemory_total -00019b07 kmem_init -00019ba4 e1000_receive -00019c7f e1000_transmit -00019d41 e1000_callback -00019d68 _e1000_tx_init -00019e0c _e1000_rx_init -00019ea6 e1000_attach -0001a0d6 display_get_info -0001a13f kenv_init -0001a156 kenv_set -0001a18b config_list -0001a258 config_load -0001a643 config_get_value -0001a6fe spin_lock -0001a71e spin_unlock -0001a72c mutex_init -0001a749 acquire -0001a7e6 release -0001a888 kthread_entry -0001a8de kthread_list -0001a943 register_kthread -0001aa1c start -0001aabe ata_primary -0001aabf ata_secondary -0001aac0 ata_wait -0001ab3a ata_write -0001acb1 ata_read -0001ae41 ata_ide_init -0001b011 set_bitmap -0001b033 unset_bitmap -0001b057 get_bitmap -0001b079 get_bitmap_size -0001b08d create_bitmap -0001b0c1 destroy_bitmap -0001b0d4 bitmap_unset_continous -0001b10e bitmap_get_continous -0001b1aa get_free_bitmap -0001b1ff __rtc_check_in_progress -0001b221 __rtc_get_register -0001b241 get_current_time -0001b38c get_time -0001b3b6 init_tss -0001b3e4 exec_cmd -0001b4e8 __ksymbol_exec_cmd -0001b502 align_to_pointer_size -0001b510 calculate_size_unit -0001b572 kernel_panic -0001b590 kref_init -0001b5aa kref_get -0001b5d2 kref_put -0001b5fa csprintf -0001b7fb script_parse -0001b8ce login -0001bb0c __register_kthread_login -0001bb26 help -0001bd64 clear -0001bd83 __ksymbol_new -0001bd9d __ksymbol_list -0001bdb7 __ksymbol_color -0001bdd1 __ksymbol_about -0001bdeb __ksymbol_help -0001be05 __ksymbol_view -0001be1f __ksymbol_file -0001be39 __ksymbol_tcp -0001be53 __ksymbol_conf -0001be6d __ksymbol_clear -0001be87 new -0001bfbf list -0001c0bc file -0001c27b color -0001c319 about -0001c354 view -0001c560 tcp -0001c831 __tcp_reader -0001c94d conf -0001cbca attach_disk_dev -0001cbee disk_attached -0001cbf6 disk_name -0001cbff disk_device_get -0001cc05 disk_size -0001cc21 write_block -0001cc5e write_block_offset -0001cca1 read_block -0001ccde read_block_offset -0001cd48 sched_consume -0001cd89 sched_add -0001cde3 sched_prioritize -0001ce98 sched_round_robin -0001d079 sched_exit -0001d132 sched_block -0001d250 sched_default -0001d324 sched_sleep -0001d3ca sched_init_default -0001d44b get_scheduler -0001d451 kernel_sleep -0001d46c kernel_yield -0001d4af kernel_exit -0001d4e1 block -0001d50a unblock -0001d50b work_queue_add -0001d5f3 init_worker -0001d60b worker_thread -0001d6aa __ring_buffer_add -0001d752 __ring_buffer_read -0001d85c rbuffer_new -0001d8c5 rbuffer_free -0001d8e7 error_get_string -0001d923 kclock -0001de03 __register_kthread_kclock -0001de1d tar_extract -0001e064 __ksymbol_tar -0001e07e tar_list -0001e182 tar -0001e3f6 rgb_to_vga -0001e406 rgb_to_components -0001e42d color_distance_squared -0001e498 rgb_init_color_table -0001e529 iface_loopback_write -0001e5ea iface_loopback_interrupt -0001e601 iface_loopback_read -0001e6a4 net_init_loopback -0001e6bb serial_put -0001e6fb serial_write -0001e73d serial_printf -0001e8dd init_serial -0001e9a3 inportb -0001e9ac inportw -0001e9b6 inportl -0001e9bf outportb -0001e9cd outportw -0001e9dc outportl -0001e9e9 sys_create_thread -0001ea07 __add_systemcall_sys_create_thread -0001ea12 add_system_call -0001ea52 system_call -0001eabd hashmap_put -0001eb24 hashmap_get -0001eba8 hashmap_add -0001ec32 hashmap_free -0001ec33 reset_vga_palette -0001ec79 vga_set_palette -0001ed64 b8to16 -0001ed74 vesa_put_pixel -0001ed9e vesa_put_box -0001ee19 vesa_put_block -0001ee94 vesa_put_char -0001ef0f vesa_put_char16 -0001efa2 vesa_put_icon16 -0001f01b vesa_write -0001f05a vesa_write_str -0001f088 vesa_fill -0001f10a vesa_fillrect -0001f17c vesa_inner_box -0001f284 vesa_printf -0001f4f1 ksyms_init -0001f718 ksyms_add_symbol -0001f7cf __ksymbol_backtrace -0001f7e9 ksyms_list -0001f849 ksyms_resolve_symbol -0001f8fc __backtrace_from -0001fa19 backtrace -0001fa2a ws_fullscreen -0001fba4 ws_remove -0001fc54 ws_add -0001fd3f ws_destroy -0001fde5 ws_draw -00020092 ws_raw_wallpaper -00020178 ws_set_background_file -00020455 ws_init -00020538 ws_set_background -000205e3 ws_new -00020670 encode_run_length -000206ed decode_run_length -00020758 __mouse_handler -0002086f mouse_wait -000208b7 mouse_write -000208f9 mouse_get_event -0002093a mouse_init -00020a1f sys_ipc_open -00020a6d __add_systemcall_sys_ipc_open -00020a84 __add_systemcall_sys_ipc_close -00020a9b __add_systemcall_sys_ipc_send -00020ab2 __add_systemcall_sys_ipc_receive -00020ac9 sys_ipc_close -00020b12 sys_ipc_send -00020b79 sys_ipc_receive -00020bdf sysinf -00021931 __register_kthread_sysinf -0002194b echo -00021984 res -000219c3 ifconfig -000219d0 __ksymbol_ifconfig -000219ea __ksymbol_ps -00021a04 __ksymbol_tree -00021a1e __ksymbol_fat16 -00021a38 __ksymbol_xxd -00021a52 __ksymbol_sh -00021a6c __ksymbol_ed -00021a86 __ksymbol_exec -00021aa0 __ksymbol_ths -00021aba __ksymbol_dns -00021ad4 __ksymbol_th -00021aee __ksymbol_kill -00021b08 __ksymbol_echo -00021b22 __ksymbol_fdisk -00021b3c __ksymbol_meminfo -00021b56 __ksymbol_res -00021b70 __ksymbol_bg -00021b8a __ksymbol_exit -00021ba4 __ksymbol_socks -00021bbe __ksymbol_reset -00021bd8 exit -00021c0a ps -00021e64 print_pcb_tree -00021f5d tree -00021f9d fat16 -00021fc5 xxd -000220b4 sh -000221ae ed -000221f9 exec -00022355 ths -000223bd dns -0002242d th -0002244b kill -00022469 fdisk -000225e2 meminfo -000227b1 bg -0002282e socks -00022abe __register_kthread_shell -00022ad8 __register_kthread_textshell -00022af2 shell_clear -00022b33 reset_shell -00022ba2 reset -00022bf2 shell_put -00022dcb shell -00023013 cleanup_function -0002303a testfn -0002306e draw_box -00023153 __textshell_reset_box -000231e3 textshell -0002344f __net_find_interface -000234af net_drop_packet -000234d0 net_handle_recieve -000235f7 net_get_interfaces -000235fd net_configure_iface -0002364f net_incoming_packet -00023700 net_get_iface -00023776 net_iface_up -0002379d net_iface_down -000237c4 net_list_ifaces -000238d4 net_register_interface -00023905 net_send_skb -0002398d net_get_info -000239b4 networking_main -00023b90 __dhcp_add_option -00023c00 __dhcp_send_discovery -00023d42 __dhcp_send_request -00023ebf dhcp_get_state -00023ec7 dhcp_get_dns -00023ecd dhcp_get_ip -00023ee2 dhcp_get_gw -00023ef7 dhcpd -00024176 udp_server -00024201 tcp_server -00024375 __net_terminal_writef -000243da __register_kthread_tcp_server -000243f4 __register_kthread_udp_server -0002440e __register_kthread_udptest -00024428 udptest -000244b3 tcpd -00024597 logd -00024602 __register_kthread_logd -0002461c logd_attach_by_pid -00024660 taskbar_readme -00024679 taskbar_about -00024692 taskbar_clock -000246ab taskbar_sysinf -000246c4 taskbar_bg_retro -000246fb taskbar_bg_lotr2 -00024710 taskbar_bg_lotr -00024725 taskbar_bg_default_color_gray -00024737 taskbar_bg_default_color -00024749 taskbar_wolfstein -00024784 taskbar_bg_graph -000247bf taskbar_bg_calc -000247fa taskbar_colors -00024835 taskbar_cube -00024870 taskbar_editor -000248ab taskbar_finder -000248e6 taskbar_terminal -0002492f __register_kthread_taskbar -00024949 taskbar_hdr_opt_event -000249d3 taskbar -00024f8a about -00025155 __register_kthread_about -0002516f __register_kthread_readme -00025189 readme -000252eb gfx_default_hover -0002540a gfx_destory_window -00025497 gfx_window_resize -00025540 gfx_window_maximize -000255b9 gfx_default_mouse_up -00025687 gfx_default_mouse_down -00025749 gfx_default_click -00025972 gfx_draw_window -0002675e gfx_window_set_resizable -00026771 kernel_gfx_window_border_color -0002679a gfx_new_window -000269ee gfx_point_in_rectangle -00026a1b gfx_draw_component -00026a5d gfx_composition_remove_window -00026a87 gfx_composition_add_window -00026ace gfx_set_background_color -00026b1f gfx_raw_background -00026b6c gfx_decode_background_image -00026bb9 gfx_set_taskbar -00026c0c gfx_compositor_main -00026c80 kernel_gfx_draw_circle_helper -00026f2c gfx_get_window_width -00026f3f gfx_get_window_height -00026f52 gfx_push_event -0002700e gfx_put_icon16 -00027102 gfx_put_icon32 -000271f6 gfx_event_loop -0002730d kernel_gfx_draw_rectangle -00027407 kernel_gfx_draw_contoured_box -000274a7 kernel_gfx_draw_pixel -00027545 kernel_gfx_draw_bitmap -00027663 kernel_gfx_draw_char -00027763 kernel_gfx_set_position -0002777f gfx_commit -00027796 kernel_gfx_draw_text -00027820 gfx_button_ext -00027945 gfx_button -00027963 kernel_gfx_set_title -000279cb kernel_gfx_set_header -00027a33 kernel_gfx_draw_line -00027bce kernel_gfx_draw_circle -00027c4d kernel_gfx_draw_section -00027c53 kernel_gfx_draw_format_text -00027fa5 gfx_syscall_hook -00028154 gfx_total_themes -0002815a kernel_gfx_current_theme -00028160 kernel_gfx_update_theme -0002822e kernel_gfx_default_theme -00028234 kernel_gfx_set_theme -00028259 kernel_gfx_get_theme -00028274 gfx_new_ctx -000282d0 gfx_init_framebuffer -0002843c netdev_attach_driver -000284e5 is_netdev_attached -000284f3 netdev_transmit -0002850e netdev_recieve -00028537 net_ethernet_add_header -000285cb net_ethernet_parse -0002863f __skb_queue_remove -0002867d __skb_queue_add -000286cd skb_free_queue -00028705 skb_new_queue -0002876c skb_free -000287a7 skb_new -00028812 skb_consume -00028843 __net_arp_send -00028903 net_init_arp -0002894f net_arp_add_entry -000289de net_arp_find_entry -00028a29 net_arp_respond -00028a9e net_net_arp_request -00028b24 arp_parse -00028bce net_ipv4_print -00028bd4 net_ipv4_add_header -00028d0b net_is_ipv4 -00028d48 net_ipv4_parse -00028e75 ntohl -00028ea1 htonl -00028eb4 ntohs -00028ec1 htons -00028ece checksum -00028f25 transport_checksum -00028f7a ip_to_int -00029018 net_icmp_handle -000290dd net_icmp_response -000290e3 net_icmp_request -000291a6 ping -000291ff net_icmp_parse -0002926f net_udp_send -000293a4 net_udp_parse -000294cc socket_type_to_str -000294db socket_domain_to_str -000294ea socket_protocol_to_str -000294f9 net_sock_bind -00029544 net_get_sockets -00029560 sock_get -00029581 get_total_sockets -00029587 net_sock_is_established -000295cb net_sock_awaiting_ack -0002960f net_sock_data_ready -00029668 net_sock_read -00029768 net_sock_add_data -000299c8 sock_find_listen_tcp -00029a0c net_sock_find_tcp -00029bfe net_prepare_tcp_sock -00029c8a net_sock_accept -00029c9d net_socket_find_udp -00029d08 kernel_sock_shutdown -00029d35 kernel_sock_cleanup -00029dbb kernel_sock_close -00029def kernel_socket_create -00029f70 net_init_sockets -00029fb6 gethostname -0002a4d0 __add_systemcall_gethostname -0002a4e7 net_init_dns -0002a516 route -0002a563 tcb_init -0002a581 tcb_new -0002a6ed tcp_state_to_str -0002a706 tcp_new_connection -0002a78e tcp_free_connection -0002a7b1 tcp_is_listening -0002a7c7 tcp_set_listening -0002a827 tcp_calculate_checksum -0002a8eb __tcp_send -0002aa07 tcp_send_segment -0002ab4a tcp_accept_connection -0002ac8a tcp_send_ack -0002adc0 tcp_read -0002adc6 tcp_recv_segment -0002adcc tcp_connect -0002ae6f tcp_send_syn -0002ae75 tcp_recv_ack -0002aef8 tcp_recv_fin -0002aefe tcp_recv_syn -0002b030 tcp_send_fin -0002b0fc tcp_close_connection -0002b13b tcp_parse -0002b5d4 kernel_bind -0002b609 kernel_recvfrom -0002b60f kernel_recv -0002b681 kernel_recv_timeout -0002b6a7 kernel_connect -0002b7ab kernel_sendto -0002b865 kernel_accept -0002b8c8 kernel_listen -0002b8f0 kernel_send -0002b976 sys_kernel_bind -0002b9a8 __add_systemcall_sys_kernel_bind -0002b9bf __add_systemcall_sys_kernel_accept -0002b9d6 __add_systemcall_sys_kernel_connect -0002b9ed __add_systemcall_sys_kernel_listen -0002ba04 __add_systemcall_sys_kernel_recv -0002ba1b __add_systemcall_sys_kernel_recvfrom -0002ba32 __add_systemcall_sys_kernel_recv_timeout -0002ba49 __add_systemcall_sys_kernel_send -0002ba60 __add_systemcall_sys_kernel_sendto -0002ba77 __add_systemcall_sys_socket_create -0002ba8e __add_systemcall_sys_kernel_sock_close -0002baa5 sys_kernel_accept -0002bae5 sys_kernel_connect -0002bb17 sys_kernel_listen -0002bb46 sys_kernel_recv -0002bb7e sys_kernel_recvfrom -0002bbbe sys_kernel_recv_timeout -0002bbfc sys_kernel_send -0002bc34 sys_kernel_sendto -0002bc74 sys_socket_create -0002bc9b sys_kernel_sock_close -0002bcdc __iface_send -0002bd0b __iface_recieve -0002bd3a __iface_assign -0002bd4d __iface_detach -0002bd61 __iface_set_gateway -0002bd74 __iface_set_netmask -0002bd87 __iface_configure -0002bdd7 __iface_attach -0002bdfc net_interface_create -0002be34 net_register_netdev -0002bf4c net_interface_destroy -0002bf61 __default_restart -0002bf67 __default_stop -0002bfcc __default_start -0002c046 nm_new -0002c0cf nm_free -0002c114 net_firewall_create -0002c137 fs_file2fd -0002c19e fs_alloc_file -0002c1e9 fs_free_file -0002c243 fs_register -0002c312 fs_init -0002c318 fs_unregister -0002c37b fs_get -0002c381 fs_close -0002c3f3 fs_open -0002c46d fs_seek -0002c4ea fs_read -0002c5ff fs_load_from_file -0002c68b fs_write -0002c746 fat16_rmdir -0002c74c fat16_stat -0002c752 fat16_close -0002c7bc fat16_rename -0002c851 fat16_mkdir -0002c936 fat16_remove -0002c9a9 fat16_open -0002caf3 fat16_read -0002cc57 fat16_write -0002cd85 fat16_list -0002d04d fat16_init -0002d101 path_next_iter -0002d170 inode_from_path_recursise -0002d1ee inode_from_path -0002d2ac ext_get_root -0002d2b5 ext_get_current_dir -0002d2c2 ext_get_size -0002d2c8 ext_get_inodes -0002d2ce ext_get_blocks -0002d2d4 ext_sync -0002d347 ext_create -0002d432 ext_read -0002d4ad ext_seek -0002d4f4 ext_write -0002d560 ext_close -0002d5c2 ext_open_from_directory -0002d6c8 ext_open -0002d77f ext_size -0002d7a8 change_directory -0002d80e ext_create_directory -0002d9a8 ext_create_file_system -0002dc75 init_ext -0002de11 listdir -0002df34 __inode_sync -0002df97 __inode_cache_insert -0002e08d __inode_load -0002e101 inodes_sync -0002e13c inode_get -0002e199 inode_read -0002e381 inode_write -0002e5df alloc_inode -0002e698 mkdir -0002e73d sync -0002e76f mkfs -0002e77c fat16_read_data_from_cluster -0002e7ca fat16_read_data -0002e8ab fat16_find_cluster_by_offset -0002e926 fat16_write_data_to_cluster_with_offset -0002e961 fat16_print_cluster_chain -0002e98f fat16_write_data_to_cluster -0002e9c2 fat16_write_data -0002eade get_fat_start_block -0002eae6 get_root_directory_start_block -0002eaf5 get_data_start_block -0002eb07 fat16_get_fat_entry -0002eb22 fat16_set_fat_entry -0002eb62 fat16_sync_fat_table -0002ebda fat16_allocate_cluster -0002ebf2 fat16_free_cluster -0002ec07 fat16_get_free_cluster -0002ec5c fat16_sync_directory_entry -0002ecde fat16_read_entry -0002ed8b fat16_find_entry -0002eec6 fat16_rename_entry -0002ef37 fat16_free_clusters -0002ef7e fat16_delete_entry -0002efe5 fat16_add_entry -0002f14c fat16_used_blocks -0002f185 fat16_to_upper -0002f1b1 fat16_name_compare -0002f2d6 sstrtok -0002f397 fat16_directory_entry_debug -0002f467 fat16_get_directory_entry -0002f65f fat16_create_directory -0002f764 fat16_read_file -0002f7b5 fat16_create_file -0002f833 fat16_create_empty_file -0002f8f3 fat16_directory_entries -0002f9d9 fat16_mbr_clear -0002fa82 fat16_mbr_add_entry -0002fb73 fat16_print_root_directory_entries -0002fb8b fat16_change_directory -0002fc13 fat16_bootblock_info -0002fd90 fat16_set_time -0002fdc4 fat16_set_date -0002fdfc fat16_load -0002ff7b fat16_format -00030230 mbr_partition_type_string -000302b3 mbr_partitions_parse -0003037c mbr_get -00030382 mbr_partition_load -000303a0 __ksymbol_snakegame -000303ba init_game -00030408 draw -00030464 get_input -00030481 update -00030608 game_loop -0003062e snakegame -00030677 _code_end +0001079d __terminal_set_ops +00010866 __terminal_scanf +0001086c __terminal_write +000108b6 __terminal_getchar_graphics +000108ff __terminal_scan_graphics +000109dd __terminal_reset +00010a21 __terminal_detach +00010a64 __terminal_attach +00010aaf __terminal_commit_graphics +00010b85 __terminal_remove_line +00010bc5 __terminal_putchar_graphics +00010c8e __terminal_writef +00010f35 __terminal_getchar_textmode +00010f5d __terminal_scan_textmode +0001101d __terminal_commit_textmode +000110d5 __terminal_putchar_textmode +00011121 scan +0001115a terminal_set_color +0001115b terminal_attach +0001117c terminal_commit +0001119b terminal_putchar +0001119c terminal_create +000112ba terminal_destroy +000112f0 tlb_flush_addr +000112f8 load_page_directory +00011308 enable_paging +0001131a pcb_save_context +00011346 pcb_restore_context +0001136f _start_pcb +000113a1 _start_pcb_skip +000113bc __ksymbol_lspci +000113d6 pci_get_class_name +000113e9 pci_get_device_name +0001145a pci_get_vendor_name +000114a8 lspci +000115f5 pci_get_devices +000115fb pci_read_word +00011655 pci_write_dword +000116a4 pci_enable_device_busmaster +000116f9 pci_register_device +0001177a init_pci +0001192b pci_find_device +000119c1 virtual_read +000119ec virtual_write +00011a17 virtual_disk_attach +00011a36 wm_default_changes +00011ade wm_default_workspace +00011b40 wm_default_draw +00011bde wm_default_add +00011c85 init_windowmanager +00011dcf wm_default_mouse_event +00011ff5 wm_default_push_back +000120e7 wm_default_push_front +000121d6 wm_default_remove +000122e7 wm_destroy +000123c5 wm_new +0001242c screen_set_cursor +0001248c scrcolor_set +000124a0 scrput +000124c6 scrwrite +0001250f scr_clear +00012561 scr_scroll +000125a9 scrprintf +000127ed strlen +0001280f strcpy +00012843 strncmp +0001287e strcmp +000128be memcmp +000128f9 parse_arguments +000129dc strchr +00012a0b getopt +00012b1b memcpy +00012b88 strtok +00012c40 xmemcpy +00012cc7 memset +00012d47 isdigit +00012d5b isspace +00012d6a tolower +00012d7e isxdigit +00012da2 htoi +00012e46 atoi +00012ed6 itoa +00012f7c itohex +00012ff8 rdtsc +00012ffb rand +00013017 general_protection_fault +00013087 interrupt_get_count +00013096 print_page_fault_info +00013173 page_fault_interrupt +0001321c interrupt_install_handler +0001322e load_data_segments +0001323a isr_handler +0001332d init_interrupts +000134a6 idt_flush +000134ae isr0 +000134bb isr1 +000134c8 isr2 +000134d5 isr3 +000134e2 isr4 +000134ef isr5 +000134fc isr6 +00013509 isr7 +00013516 isr8 +00013523 isr9 +00013530 isr10 +0001353d isr11 +0001354a isr12 +00013557 isr13 +00013564 isr14 +00013571 isr15 +0001357e isr16 +0001358b isr17 +00013598 isr18 +000135a5 isr19 +000135b2 isr20 +000135bf isr21 +000135cc isr22 +000135d9 isr23 +000135e6 isr24 +000135f3 isr25 +00013600 isr26 +0001360d isr27 +0001361a isr28 +00013627 isr29 +00013634 isr30 +00013641 isr31 +0001364e isr32 +0001365b isr33 +00013668 isr34 +00013675 isr35 +0001367f isr36 +00013689 isr37 +00013693 isr38 +0001369d isr39 +000136a7 isr40 +000136b1 isr41 +000136bb isr42 +000136c5 isr43 +000136cf isr44 +000136d9 isr45 +000136e3 isr46 +000136ed isr47 +000136f7 isr_entry +00013712 syscall_return_value +00013716 _syscall_entry +00013753 page_fault_save +00013757 page_fault_error +0001375b _page_fault_entry +0001378d timer_callback +000137c5 timer_get_tick +000137cb time_get_difference +0001380e init_pit +00013872 gdt_set_segment +000138bb init_gdt +000139c9 rc +00013bb8 __ksymbol_rc +00013bd2 __ksymbol_as +00013bec __ksymbol_cc +00013c06 as +00013fc8 cc +00014024 __cc +00014318 vm_print +00014515 eval +000149af vm_setup +000149f0 vm_init +00014a4b vm_free +00014a7a vm_setup_stack +00014ad6 lex_get_error +00014ae3 next +00014fee match +0001503c expression +0001633d statement +00016546 function_parameter +00016708 function_body +00016917 function_declaration +000169a0 enum_declaration +00016ab3 global_declaration +00016ce0 lex_init +00016d7b program +00016e1c find_mp_floating_ptr +00016e58 smp_parse +00016f9d kb_get_char +00016fe9 kb_add_char +00017024 kb_callback +00017251 init_keyboard +000172c8 pcb_await +000172f2 __pcb_get_free +000173b0 __add_systemcall_pcb_await +000173c7 __pcb_free +00017416 __pcb_init_kernel_stack +00017477 __pcb_init_process +0001753c init_pcbs +00017598 pcb_total_usage +000175c1 pcb_get_info +000176eb pcb_kill +00017708 Genesis +0001770a idletask +00017725 pcb_get_by_pid +00017736 pcb_get_by_name +0001778f pcb_dbg_print +00017809 pcb_cleanup_routine +000179dc pcb_create_thread +00017a8f pcb_create_process +00017cda pcb_create_kthread +00017f69 start_pcb +00017fa1 __pcb_queue_peek +00017fe0 __pcb_queue_pop +0001803c __pcb_queue_remove +000180ae __pcb_queue_add +00018127 __pcb_queue_push +000181c0 pcb_new_queue +000181f1 memory_map_init +000182b8 memory_map_get +000182be free +00018328 malloc +000183c4 calloc +000183f7 get_mem_info +0001844f init_memory +000184e1 vmem_free +00018551 vmem_alloc +000185be vmem_free_page_region +00018724 vmem_page_region_alloc +0001875f vmem_create_page_region +000188a3 vmem_free_allocations +000189d2 vmem_continious_allocation_map +000189d8 vmem_free_allocation +000189d9 vmem_stack_free +00018a8a vmem_stack_alloc +00018e0f vmem_dump_heap +00018ea4 vmem_init_process_thread +00018f95 vmem_init_process +000192c3 vmem_cleanup_process_thead +0001933a vmem_cleanup_process +00019528 vmem_init_kernel +000196e9 vmem_allocator_create +0001974d vmem_map_driver_region +000197cb vmem_total_usage +000197de vmem_init +00019910 kalloc +00019aa7 kcalloc +00019ad9 kfree +00019b6f palloc +00019bb1 pmemory_used +00019bcd kmemory_used +00019bd3 kmemory_total +00019bdf kmem_init +00019c7c e1000_receive +00019d57 e1000_transmit +00019e19 e1000_callback +00019e40 _e1000_tx_init +00019ee4 _e1000_rx_init +00019f7e e1000_attach +0001a1ae display_get_info +0001a217 kenv_init +0001a22e kenv_set +0001a263 config_list +0001a334 config_load +0001a71f config_get_value +0001a7da spin_lock +0001a7fa spin_unlock +0001a808 mutex_init +0001a825 acquire +0001a8c2 release +0001a964 kthread_entry +0001a9be kthread_list +0001aa25 register_kthread +0001aafe start +0001aba0 ata_primary +0001aba1 ata_secondary +0001aba2 ata_wait +0001ac1c ata_write +0001ad93 ata_read +0001af23 ata_ide_init +0001b0f3 set_bitmap +0001b115 unset_bitmap +0001b139 get_bitmap +0001b15b get_bitmap_size +0001b16f create_bitmap +0001b1a3 destroy_bitmap +0001b1b6 bitmap_unset_continous +0001b1f0 bitmap_get_continous +0001b28c get_free_bitmap +0001b2e1 __rtc_check_in_progress +0001b303 __rtc_get_register +0001b323 get_current_time +0001b46e get_time +0001b498 init_tss +0001b4c6 exec_cmd +0001b5ca __ksymbol_exec_cmd +0001b5e4 align_to_pointer_size +0001b5f2 calculate_size_unit +0001b654 kernel_panic +0001b672 kref_init +0001b68c kref_get +0001b6b4 kref_put +0001b6dc csprintf +0001b8dd script_parse +0001b9b2 login +0001bbf0 __register_kthread_login +0001bc0a help +0001be70 clear +0001be91 __ksymbol_new +0001beab __ksymbol_list +0001bec5 __ksymbol_color +0001bedf __ksymbol_about +0001bef9 __ksymbol_help +0001bf13 __ksymbol_view +0001bf2d __ksymbol_file +0001bf47 __ksymbol_tcp +0001bf61 __ksymbol_conf +0001bf7b __ksymbol_clear +0001bf95 new +0001c0d6 list +0001c1d6 file +0001c3a4 color +0001c445 about +0001c482 view +0001c697 tcp +0001c974 __tcp_reader +0001ca95 conf +0001cd1a attach_disk_dev +0001cd3e disk_attached +0001cd46 disk_name +0001cd4f disk_device_get +0001cd55 disk_size +0001cd71 write_block +0001cdae write_block_offset +0001cdf1 read_block +0001ce2e read_block_offset +0001ce98 sched_consume +0001ced9 sched_add +0001cf33 sched_prioritize +0001cfe8 sched_round_robin +0001d1ce sched_exit +0001d287 sched_block +0001d3a5 sched_default +0001d47f sched_sleep +0001d525 sched_init_default +0001d5a6 get_scheduler +0001d5ac kernel_sleep +0001d5c7 kernel_yield +0001d60a kernel_exit +0001d63c block +0001d665 unblock +0001d666 work_queue_add +0001d74e init_worker +0001d766 worker_thread +0001d805 __ring_buffer_add +0001d8ad __ring_buffer_read +0001d9b7 rbuffer_new +0001da20 rbuffer_free +0001da42 error_get_string +0001da7e kclock +0001df5e __register_kthread_kclock +0001df78 tar_extract +0001e1c8 __ksymbol_tar +0001e1e2 tar_list +0001e2ec tar +0001e575 rgb_to_vga +0001e585 rgb_to_components +0001e5ac color_distance_squared +0001e617 rgb_init_color_table +0001e6a8 iface_loopback_write +0001e769 iface_loopback_interrupt +0001e780 iface_loopback_read +0001e823 net_init_loopback +0001e83a serial_put +0001e87a serial_write +0001e8bc serial_printf +0001ea5c init_serial +0001eb22 inportb +0001eb2b inportw +0001eb35 inportl +0001eb3e outportb +0001eb4c outportw +0001eb5b outportl +0001eb68 sys_create_thread +0001eb87 __add_systemcall_sys_create_thread +0001eb92 add_system_call +0001ebd2 system_call +0001ec3d hashmap_put +0001eca4 hashmap_get +0001ed28 hashmap_add +0001edb2 hashmap_free +0001edb3 reset_vga_palette +0001edf9 vga_set_palette +0001eee4 b8to16 +0001eef4 vesa_put_pixel +0001ef1e vesa_put_box +0001ef99 vesa_put_block +0001f014 vesa_put_char +0001f08f vesa_put_char16 +0001f122 vesa_put_icon16 +0001f19b vesa_write +0001f1da vesa_write_str +0001f208 vesa_fill +0001f28a vesa_fillrect +0001f2fc vesa_inner_box +0001f404 vesa_printf +0001f671 ksyms_init +0001f898 ksyms_add_symbol +0001f951 __ksymbol_backtrace +0001f96b ksyms_list +0001f9cd ksyms_resolve_symbol +0001fa80 __backtrace_from +0001fb9d backtrace +0001fbae ws_fullscreen +0001fd28 ws_remove +0001fdd8 ws_add +0001fec3 ws_destroy +0001ff69 ws_draw +00020216 ws_raw_wallpaper +000202fc ws_set_background_file +000205d9 ws_init +000206bc ws_set_background +00020767 ws_new +000207f4 encode_run_length +00020871 decode_run_length +000208dc __mouse_handler +000209f3 mouse_wait +00020a3b mouse_write +00020a7d mouse_get_event +00020abe mouse_init +00020ba3 sys_ipc_open +00020bf1 __add_systemcall_sys_ipc_open +00020c08 __add_systemcall_sys_ipc_close +00020c1f __add_systemcall_sys_ipc_send +00020c36 __add_systemcall_sys_ipc_receive +00020c4d sys_ipc_close +00020c96 sys_ipc_send +00020cfd sys_ipc_receive +00020d63 sysinf +00021ab5 __register_kthread_sysinf +00021acf echo +00021b0a res +00021b4b ifconfig +00021b58 __ksymbol_ifconfig +00021b72 __ksymbol_ps +00021b8c __ksymbol_tree +00021ba6 __ksymbol_fat16 +00021bc0 __ksymbol_xxd +00021bda __ksymbol_sh +00021bf4 __ksymbol_ed +00021c0e __ksymbol_exec +00021c28 __ksymbol_ths +00021c42 __ksymbol_dns +00021c5c __ksymbol_th +00021c76 __ksymbol_kill +00021c90 __ksymbol_echo +00021caa __ksymbol_fdisk +00021cc4 __ksymbol_meminfo +00021cde __ksymbol_res +00021cf8 __ksymbol_bg +00021d12 __ksymbol_exit +00021d2c __ksymbol_socks +00021d46 __ksymbol_reset +00021d60 exit +00021d94 ps +00021ffa print_pcb_tree +000220f9 tree +00022139 fat16 +00022161 xxd +00022256 sh +00022356 ed +000223a3 exec +00022507 ths +00022573 dns +000225e7 th +00022605 kill +00022623 fdisk +000227b5 meminfo +00022994 bg +00022a13 socks +00022cb9 __register_kthread_shell +00022cd3 __register_kthread_textshell +00022ced shell_clear +00022d30 reset_shell +00022da1 reset +00022df5 shell_put +00022fd6 shell +0002322c cleanup_function +00023253 testfn +00023287 draw_box +0002336c __textshell_reset_box +000233fc textshell +00023676 __net_find_interface +000236d6 net_drop_packet +000236f7 net_handle_recieve +0002381e net_get_interfaces +00023824 net_configure_iface +00023876 net_incoming_packet +00023927 net_get_iface +0002399d net_iface_up +000239c4 net_iface_down +000239eb net_list_ifaces +00023b05 net_register_interface +00023b36 net_send_skb +00023bbe net_get_info +00023be5 networking_main +00023dc5 __dhcp_add_option +00023e35 __dhcp_send_discovery +00023f77 __dhcp_send_request +000240f4 dhcp_get_state +000240fc dhcp_get_dns +00024102 dhcp_get_ip +00024117 dhcp_get_gw +0002412c dhcpd +000243ab udp_server +00024436 tcp_server +000245aa __net_terminal_writef +0002460f __register_kthread_tcp_server +00024629 __register_kthread_udp_server +00024643 __register_kthread_udptest +0002465d udptest +000246e8 tcpd +000247cc logd +00024837 __register_kthread_logd +00024851 logd_attach_by_pid +00024895 taskbar_readme +000248ae taskbar_about +000248c7 taskbar_clock +000248e0 taskbar_sysinf +000248f9 taskbar_bg_retro +00024930 taskbar_bg_lotr2 +00024945 taskbar_bg_lotr +0002495a taskbar_bg_default_color_gray +0002496c taskbar_bg_default_color +0002497e taskbar_wolfstein +000249b9 taskbar_bg_graph +000249f4 taskbar_bg_calc +00024a2f taskbar_colors +00024a6a taskbar_cube +00024aa5 taskbar_editor +00024ae0 taskbar_finder +00024b1b taskbar_terminal +00024b64 __register_kthread_taskbar +00024b7e taskbar_hdr_opt_event +00024c08 taskbar +000251bf about +0002538a __register_kthread_about +000253a4 __register_kthread_readme +000253be readme +00025520 gfx_default_hover +0002563f gfx_destory_window +000256cc gfx_window_resize +00025775 gfx_window_maximize +000257ee gfx_default_mouse_up +000258bc gfx_default_mouse_down +0002597e gfx_default_click +00025ba7 gfx_draw_window +00026993 gfx_window_set_resizable +000269a8 kernel_gfx_window_border_color +000269d3 gfx_new_window +00026c33 gfx_point_in_rectangle +00026c60 gfx_draw_component +00026ca2 gfx_composition_remove_window +00026ccc gfx_composition_add_window +00026d13 gfx_set_background_color +00026d64 gfx_raw_background +00026db1 gfx_decode_background_image +00026dfe gfx_set_taskbar +00026e51 gfx_compositor_main +00026ec5 kernel_gfx_draw_circle_helper +00027171 gfx_get_window_width +00027186 gfx_get_window_height +0002719b gfx_push_event +00027257 gfx_put_icon16 +0002734f gfx_put_icon32 +00027447 gfx_event_loop +00027566 kernel_gfx_draw_rectangle +00027660 kernel_gfx_draw_contoured_box +00027700 kernel_gfx_draw_pixel +0002779e kernel_gfx_draw_bitmap +000278bc kernel_gfx_draw_char +000279bc kernel_gfx_set_position +000279d8 gfx_commit +000279f1 kernel_gfx_draw_text +00027a7b gfx_button_ext +00027bae gfx_button +00027bcc kernel_gfx_set_title +00027c38 kernel_gfx_set_header +00027ca4 kernel_gfx_draw_line +00027e3f kernel_gfx_draw_circle +00027ebe kernel_gfx_draw_section +00027ec4 kernel_gfx_draw_format_text +00028216 gfx_syscall_hook +000283cd gfx_total_themes +000283d3 kernel_gfx_current_theme +000283d9 kernel_gfx_update_theme +000284a7 kernel_gfx_default_theme +000284ad kernel_gfx_set_theme +000284d2 kernel_gfx_get_theme +000284ed gfx_new_ctx +00028549 gfx_init_framebuffer +000286b5 netdev_attach_driver +0002875e is_netdev_attached +0002876c netdev_transmit +00028787 netdev_recieve +000287b0 net_ethernet_add_header +00028844 net_ethernet_parse +000288b8 __skb_queue_remove +000288f6 __skb_queue_add +00028946 skb_free_queue +0002897e skb_new_queue +000289e5 skb_free +00028a20 skb_new +00028a8b skb_consume +00028abc __net_arp_send +00028b7c net_init_arp +00028bc8 net_arp_add_entry +00028c57 net_arp_find_entry +00028ca2 net_arp_respond +00028d17 net_net_arp_request +00028d9d arp_parse +00028e47 net_ipv4_print +00028e4d net_ipv4_add_header +00028f84 net_is_ipv4 +00028fc1 net_ipv4_parse +000290ee ntohl +0002911a htonl +0002912d ntohs +0002913a htons +00029147 checksum +0002919e transport_checksum +000291f3 ip_to_int +00029291 net_icmp_handle +00029356 net_icmp_response +0002935c net_icmp_request +0002941f ping +00029478 net_icmp_parse +000294e8 net_udp_send +0002961d net_udp_parse +00029745 socket_type_to_str +00029754 socket_domain_to_str +00029763 socket_protocol_to_str +00029772 net_sock_bind +000297bd net_get_sockets +000297d9 sock_get +000297fa get_total_sockets +00029800 net_sock_is_established +00029844 net_sock_awaiting_ack +00029888 net_sock_data_ready +000298e1 net_sock_read +000299e3 net_sock_add_data +00029c43 sock_find_listen_tcp +00029c87 net_sock_find_tcp +00029e79 net_prepare_tcp_sock +00029f05 net_sock_accept +00029f18 net_socket_find_udp +00029f83 kernel_sock_shutdown +00029fb0 kernel_sock_cleanup +0002a036 kernel_sock_close +0002a06a kernel_socket_create +0002a1ed net_init_sockets +0002a233 gethostname +0002a74d __add_systemcall_gethostname +0002a764 net_init_dns +0002a793 route +0002a7e0 tcb_init +0002a7fe tcb_new +0002a96a tcp_state_to_str +0002a983 tcp_new_connection +0002aa0b tcp_free_connection +0002aa2e tcp_is_listening +0002aa44 tcp_set_listening +0002aaa4 tcp_calculate_checksum +0002ab68 __tcp_send +0002ac84 tcp_send_segment +0002adc7 tcp_accept_connection +0002af09 tcp_send_ack +0002b03f tcp_read +0002b045 tcp_recv_segment +0002b04b tcp_connect +0002b0ee tcp_send_syn +0002b0f4 tcp_recv_ack +0002b177 tcp_recv_fin +0002b17d tcp_recv_syn +0002b2af tcp_send_fin +0002b37b tcp_close_connection +0002b3ba tcp_parse +0002b853 kernel_bind +0002b888 kernel_recvfrom +0002b88e kernel_recv +0002b900 kernel_recv_timeout +0002b926 kernel_connect +0002ba2a kernel_sendto +0002bae4 kernel_accept +0002bb47 kernel_listen +0002bb6f kernel_send +0002bbf5 sys_kernel_bind +0002bc27 __add_systemcall_sys_kernel_bind +0002bc3e __add_systemcall_sys_kernel_accept +0002bc55 __add_systemcall_sys_kernel_connect +0002bc6c __add_systemcall_sys_kernel_listen +0002bc83 __add_systemcall_sys_kernel_recv +0002bc9a __add_systemcall_sys_kernel_recvfrom +0002bcb1 __add_systemcall_sys_kernel_recv_timeout +0002bcc8 __add_systemcall_sys_kernel_send +0002bcdf __add_systemcall_sys_kernel_sendto +0002bcf6 __add_systemcall_sys_socket_create +0002bd0d __add_systemcall_sys_kernel_sock_close +0002bd24 sys_kernel_accept +0002bd64 sys_kernel_connect +0002bd96 sys_kernel_listen +0002bdc5 sys_kernel_recv +0002bdfd sys_kernel_recvfrom +0002be3d sys_kernel_recv_timeout +0002be7b sys_kernel_send +0002beb3 sys_kernel_sendto +0002bef3 sys_socket_create +0002bf1a sys_kernel_sock_close +0002bf5b __iface_send +0002bf8a __iface_recieve +0002bfb9 __iface_assign +0002bfcc __iface_detach +0002bfe0 __iface_set_gateway +0002bff3 __iface_set_netmask +0002c006 __iface_configure +0002c056 __iface_attach +0002c07b net_interface_create +0002c0b3 net_register_netdev +0002c1cb net_interface_destroy +0002c1e0 __default_restart +0002c1e6 __default_stop +0002c24b __default_start +0002c2c5 nm_new +0002c34e nm_free +0002c393 net_firewall_create +0002c3b6 fs_file2fd +0002c41d fs_alloc_file +0002c468 fs_free_file +0002c4c2 fs_register +0002c591 fs_init +0002c597 fs_unregister +0002c5fa fs_get +0002c600 fs_close +0002c672 fs_open +0002c6ec fs_seek +0002c769 fs_read +0002c87e fs_load_from_file +0002c90a fs_write +0002c9c5 fat16_rmdir +0002c9cb fat16_stat +0002c9d1 fat16_close +0002ca3b fat16_rename +0002cad0 fat16_mkdir +0002cbb5 fat16_remove +0002cc28 fat16_open +0002cd72 fat16_read +0002ced6 fat16_write +0002d004 fat16_list +0002d2d2 fat16_init +0002d386 path_next_iter +0002d3f5 inode_from_path_recursise +0002d473 inode_from_path +0002d531 ext_get_root +0002d53a ext_get_current_dir +0002d549 ext_get_size +0002d54f ext_get_inodes +0002d555 ext_get_blocks +0002d55b ext_sync +0002d5ce ext_create +0002d6b9 ext_read +0002d734 ext_seek +0002d77b ext_write +0002d7e7 ext_close +0002d849 ext_open_from_directory +0002d94f ext_open +0002da06 ext_size +0002da2f change_directory +0002da95 ext_create_directory +0002dc2f ext_create_file_system +0002defc init_ext +0002e098 listdir +0002e1b9 __inode_sync +0002e21c __inode_cache_insert +0002e312 __inode_load +0002e386 inodes_sync +0002e3c1 inode_get +0002e41e inode_read +0002e606 inode_write +0002e864 alloc_inode +0002e91d mkdir +0002e9ca sync +0002e9fe mkfs +0002ea0b fat16_read_data_from_cluster +0002ea59 fat16_read_data +0002eb3a fat16_find_cluster_by_offset +0002ebb5 fat16_write_data_to_cluster_with_offset +0002ebf0 fat16_print_cluster_chain +0002ec1e fat16_write_data_to_cluster +0002ec51 fat16_write_data +0002ed6d get_fat_start_block +0002ed75 get_root_directory_start_block +0002ed84 get_data_start_block +0002ed96 fat16_get_fat_entry +0002edb1 fat16_set_fat_entry +0002edf1 fat16_sync_fat_table +0002ee69 fat16_allocate_cluster +0002ee81 fat16_free_cluster +0002ee96 fat16_get_free_cluster +0002eeeb fat16_sync_directory_entry +0002ef6d fat16_read_entry +0002f01a fat16_find_entry +0002f155 fat16_rename_entry +0002f1c6 fat16_free_clusters +0002f20d fat16_delete_entry +0002f274 fat16_add_entry +0002f3db fat16_used_blocks +0002f414 fat16_to_upper +0002f440 fat16_name_compare +0002f565 sstrtok +0002f626 fat16_directory_entry_debug +0002f6f6 fat16_get_directory_entry +0002f8ee fat16_create_directory +0002f9f3 fat16_read_file +0002fa44 fat16_create_file +0002fac2 fat16_create_empty_file +0002fb82 fat16_directory_entries +0002fc68 fat16_mbr_clear +0002fd11 fat16_mbr_add_entry +0002fe02 fat16_print_root_directory_entries +0002fe1a fat16_change_directory +0002fea2 fat16_bootblock_info +0003001f fat16_set_time +00030053 fat16_set_date +0003008b fat16_load +0003020a fat16_format +000304bf mbr_partition_type_string +00030542 mbr_partitions_parse +0003060b mbr_get +00030611 mbr_partition_load +0003062f __ksymbol_snakegame +00030649 init_game +00030697 draw +000306f3 get_input +00030712 update +00030899 game_loop +000308bf snakegame +0003090a _code_end diff --git a/tests/include/mocks.h b/tests/include/mocks.h index f8ef1b8..000c2a4 100644 --- a/tests/include/mocks.h +++ b/tests/include/mocks.h @@ -39,7 +39,11 @@ struct pcb { }; -extern struct pcb* $current_process; +struct process { + struct pcb* current; +}; + +extern struct process* $process; extern int failed; diff --git a/tests/pcb_test.c b/tests/pcb_test.c index 4ae1dcd..091f2d8 100644 --- a/tests/pcb_test.c +++ b/tests/pcb_test.c @@ -3,7 +3,7 @@ FILE* filesystem = NULL; unsigned int* kernel_page_dir = 0; -int cli_cnt = 0; +int __cli_cnt = 0; int kernel_size = 50000; int main(int argc, char const *argv[]) diff --git a/tests/utils/mocks.c b/tests/utils/mocks.c index 6263579..e03d19e 100644 --- a/tests/utils/mocks.c +++ b/tests/utils/mocks.c @@ -17,7 +17,6 @@ #include #include - #define DEBUG 0 #define DISKSIZE (32*1024*1024) @@ -27,10 +26,13 @@ int disk_attached() return 1; } -struct pcb __$current_process = { +struct pcb __mock_pcb = { }; -struct pcb* $current_process = &__$current_process; +struct process __mock_process = { + .current = &__mock_pcb, +}; +struct process* $process = &__mock_process; int failed = 0; int tests = 0; From 26e4e17bf04130ec26fc6176f7d3d05259fc6796 Mon Sep 17 00:00:00 2001 From: Joe Bayer Date: Wed, 10 Jan 2024 15:34:26 +0100 Subject: [PATCH 13/13] Bug fixes, cleanup and msgbox thread --- Makefile | 2 +- include/kutils.h | 4 +- include/pcb.h | 14 +- kernel/kernel.c | 2 + kernel/kthreads/logd.c | 3 +- kernel/kthreads/login.c | 48 +- kernel/kthreads/msgbox.c | 43 ++ kernel/kthreads/taskbar.c | 10 + kernel/kutils.c | 12 +- rootfs/default.cfg | 2 +- rootfs/symbols.map | 1103 +++++++++++++++++++------------------ 11 files changed, 658 insertions(+), 585 deletions(-) create mode 100644 kernel/kthreads/msgbox.c diff --git a/Makefile b/Makefile index 61cd4eb..d8b4d6e 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,7 @@ KERNELOBJ = bin/kernel.o bin/terminal.o bin/helpers.o bin/pci.o bin/virtualdisk. bin/sync.o bin/kthreads.o bin/ata.o bin/bitmap.o bin/rtc.o bin/tss.o bin/kutils.o bin/login.o bin/cmds.o \ bin/diskdev.o bin/scheduler.o bin/work.o bin/rbuffer.o bin/errors.o bin/kclock.o bin/tar.o bin/color.o bin/loopback.o \ bin/serial.o bin/io.o bin/syscalls.o bin/list.o bin/hashmap.o bin/vbe.o bin/ksyms.o bin/windowserver.o bin/encoding.o\ - bin/mouse.o bin/ipc.o bin/sysinf.o ${PROGRAMOBJ} ${GFXOBJ} bin/font8.o bin/net.o bin/fs.o bin/ext.o bin/fat16.o bin/partition.o bin/snake.o + bin/mouse.o bin/ipc.o bin/sysinf.o ${PROGRAMOBJ} ${GFXOBJ} bin/font8.o bin/net.o bin/fs.o bin/ext.o bin/fat16.o bin/partition.o bin/snake.o bin/msgbox.o BOOTOBJ = bin/bootloader.o diff --git a/include/kutils.h b/include/kutils.h index 73fb677..234ba30 100644 --- a/include/kutils.h +++ b/include/kutils.h @@ -92,9 +92,9 @@ extern int __cli_cnt; /* validate flag */ #define SET_FlAG(flags, flag) (flags |= flag) -#define CLEAR_FLAG(flags, flag) (flags &= ~flag) #define HAS_FLAG(flags, flag) (flags & flag) +#define CLEAR_FLAG(flags, flag) (flags &= ~flag) #define roundup(x, n) (((x) + (n) - 1) / (n) * (n)) #define rounddown(x, n) ((x) / (n) * (n)) @@ -156,7 +156,7 @@ unsigned char* encode_run_length(const unsigned char* data, int length, unsigne unsigned char* decode_run_length(const unsigned char* encodedData, int encodedLength, unsigned char* out, int* decodedLength); int exec_cmd(char* str); void kernel_panic(const char* reason); - +void reboot(); #endif /* __KERNEL_UTILS_H */ diff --git a/include/pcb.h b/include/pcb.h index afc51cf..3511539 100644 --- a/include/pcb.h +++ b/include/pcb.h @@ -15,6 +15,16 @@ struct pcb; #define PCB_STACK_SIZE 0x2000 +#define AS_THREAD(block) \ +do { \ + void* __kthread_internal(void* _unused) { \ + block \ + return NULL; \ + } \ + pcb_create_kthread(_kthread_func, "kthread", 0, NULL); \ +} while (0) + + typedef int pid_t; /* TODO: Move to new file */ @@ -102,11 +112,11 @@ struct pcb_info { struct process { struct pcb* current; - /* more */ + /* */ }; -extern struct process* $process; extern const char* pcb_status[]; +extern struct pcb* $current_process; /* Forward declaration */ struct pcb_queue; diff --git a/kernel/kernel.c b/kernel/kernel.c index c3ce355..7b5382e 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -121,8 +121,10 @@ void kernel(uint32_t magic) /* Calculate kernel size */ __deprecated kernel_size = _end-_code; +#ifdef KDEBUG_SERIAL /* Serial is used for debuging purposes. */ init_serial(); +#endif dbgprintf("INF: %s - %s\n", KERNEL_NAME, KERNEL_VERSION); kernel_boot_printf("Booting OS..."); diff --git a/kernel/kthreads/logd.c b/kernel/kthreads/logd.c index 143c3a9..4723105 100644 --- a/kernel/kthreads/logd.c +++ b/kernel/kthreads/logd.c @@ -46,8 +46,7 @@ void __kthread_entry logd(int argc, char* argv[]) w->ops->move(w, 50, 50); - while (1) - { + while (1){ struct gfx_event event; int ret = gfx_event_loop(&event, GFX_EVENT_BLOCKING); if(ret == -1) continue; diff --git a/kernel/kthreads/login.c b/kernel/kthreads/login.c index e6b1152..15f0856 100644 --- a/kernel/kthreads/login.c +++ b/kernel/kthreads/login.c @@ -58,34 +58,32 @@ void __kthread_entry login() w->draw->textf(w, 10+10, 10+10+10+10+20+10+10, 0x0, "Extended Memory: %d %s", unit2.size, unit2.unit); gfx_commit(); - while (1) - { + while (1){ struct gfx_event event; - int ret = gfx_event_loop(&event, GFX_EVENT_BLOCKING); - if(ret == -1) continue; - - switch (event.event){ - case GFX_EVENT_MOUSE:{ - /* check if OK is clicked x = event.data, y = event.data2 */ - if(event.data > 10+10 && event.data < 10+10+50 && event.data2 > 10+10+10+10 && event.data2 < 10+10+10+10+20){ - /* OK is clicked */ - start("kclock", 0, NULL); - pid_t taskbar = start("taskbar", 0, NULL); - if(taskbar <= 0){ - warningf("Failed to start taskbar"); - } - - dbgprintf("Taskbar started with pid: %d\n", taskbar); - - gfx_set_taskbar(taskbar); - return; + int ret = gfx_event_loop(&event, GFX_EVENT_BLOCKING); + if(ret == -1) continue; + + switch (event.event){ + case GFX_EVENT_MOUSE:{ + /* check if OK is clicked x = event.data, y = event.data2 */ + if(event.data > 10+10 && event.data < 10+10+50 && event.data2 > 10+10+10+10 && event.data2 < 10+10+10+10+20){ + /* OK is clicked */ + start("kclock", 0, NULL); + pid_t taskbar = start("taskbar", 0, NULL); + if(taskbar <= 0){ + warningf("Failed to start taskbar"); } - } - break; - default: - break; - } + dbgprintf("Taskbar started with pid: %d\n", taskbar); + + gfx_set_taskbar(taskbar); + return; + } + } + break; + default: + break; + } } } EXPORT_KTHREAD(login); \ No newline at end of file diff --git a/kernel/kthreads/msgbox.c b/kernel/kthreads/msgbox.c new file mode 100644 index 0000000..8617f17 --- /dev/null +++ b/kernel/kthreads/msgbox.c @@ -0,0 +1,43 @@ +/** + * @file msbox.c + * @author Joe Bayer (joexbayer) + * @brief Generic message box + * @version 0.1 + * @date 2024-01-10 + * + * @copyright Copyright (c) 2024 + * + */ + +#include +#include +#include +#include +#include +#include + +void __kthread_entry msgbox(int argc, char* argv[]) +{ + struct window* w = gfx_new_window(250, 100, GFX_NO_OPTIONS); + if(w == NULL){ + warningf("Failed to create window for msgbox"); + return; + } + + w->ops->move(w, 100, 100); + + while (1){ + struct gfx_event event; + int ret = gfx_event_loop(&event, GFX_EVENT_BLOCKING); + if(ret == -1) continue; + + switch (event.event){ + case GFX_EVENT_EXIT: + return; + default: + break; + } + + } +} +EXPORT_KTHREAD(msgbox); \ No newline at end of file diff --git a/kernel/kthreads/taskbar.c b/kernel/kthreads/taskbar.c index 2bf7b8b..b161dfd 100644 --- a/kernel/kthreads/taskbar.c +++ b/kernel/kthreads/taskbar.c @@ -56,6 +56,7 @@ static void __callback taskbar_bg_default_color_gray(); static void __callback taskbar_sysinf(); static void __callback taskbar_about(); static void __callback taskbar_readme(); +static void __callback taskbar_reboot(); /* prototype to taskbar thread */ static void __kthread_entry taskbar(void); @@ -194,6 +195,11 @@ struct taskbar_options { .icon = desktop_16, .name = "Readme", .callback = &taskbar_readme + }, + { + .icon = desktop_16, + .name = "Reboot", + .callback = &taskbar_reboot } } }, @@ -480,4 +486,8 @@ static void __callback taskbar_about() static void __callback taskbar_readme() { start("readme", 0, NULL); +} + +static void __callback taskbar_reboot(){ + reboot(); } \ No newline at end of file diff --git a/kernel/kutils.c b/kernel/kutils.c index db90128..98394e0 100644 --- a/kernel/kutils.c +++ b/kernel/kutils.c @@ -17,12 +17,22 @@ #include #include #include - +#include #include #include static char *units[] = {"b ", "kb", "mb"}; +void reboot() +{ + ENTER_CRITICAL(); + uint8_t good = 0x02; + while (good & 0x02) + good = inportb(0x64); + outportb(0x64, 0xFE); + HLT(); +} + /* Function to align a given size to the size of a void* */ int align_to_pointer_size(int size) { diff --git a/rootfs/default.cfg b/rootfs/default.cfg index 3ac2eb8..85c8856 100644 --- a/rootfs/default.cfg +++ b/rootfs/default.cfg @@ -4,4 +4,4 @@ background=0x0 text=0x1c [network] -loopback enable +loopback=enable diff --git a/rootfs/symbols.map b/rootfs/symbols.map index a2a4ff6..1fd4020 100644 --- a/rootfs/symbols.map +++ b/rootfs/symbols.map @@ -300,554 +300,555 @@ 0001b498 init_tss 0001b4c6 exec_cmd 0001b5ca __ksymbol_exec_cmd -0001b5e4 align_to_pointer_size -0001b5f2 calculate_size_unit -0001b654 kernel_panic -0001b672 kref_init -0001b68c kref_get -0001b6b4 kref_put -0001b6dc csprintf -0001b8dd script_parse -0001b9b2 login -0001bbf0 __register_kthread_login -0001bc0a help -0001be70 clear -0001be91 __ksymbol_new -0001beab __ksymbol_list -0001bec5 __ksymbol_color -0001bedf __ksymbol_about -0001bef9 __ksymbol_help -0001bf13 __ksymbol_view -0001bf2d __ksymbol_file -0001bf47 __ksymbol_tcp -0001bf61 __ksymbol_conf -0001bf7b __ksymbol_clear -0001bf95 new -0001c0d6 list -0001c1d6 file -0001c3a4 color -0001c445 about -0001c482 view -0001c697 tcp -0001c974 __tcp_reader -0001ca95 conf -0001cd1a attach_disk_dev -0001cd3e disk_attached -0001cd46 disk_name -0001cd4f disk_device_get -0001cd55 disk_size -0001cd71 write_block -0001cdae write_block_offset -0001cdf1 read_block -0001ce2e read_block_offset -0001ce98 sched_consume -0001ced9 sched_add -0001cf33 sched_prioritize -0001cfe8 sched_round_robin -0001d1ce sched_exit -0001d287 sched_block -0001d3a5 sched_default -0001d47f sched_sleep -0001d525 sched_init_default -0001d5a6 get_scheduler -0001d5ac kernel_sleep -0001d5c7 kernel_yield -0001d60a kernel_exit -0001d63c block -0001d665 unblock -0001d666 work_queue_add -0001d74e init_worker -0001d766 worker_thread -0001d805 __ring_buffer_add -0001d8ad __ring_buffer_read -0001d9b7 rbuffer_new -0001da20 rbuffer_free -0001da42 error_get_string -0001da7e kclock -0001df5e __register_kthread_kclock -0001df78 tar_extract -0001e1c8 __ksymbol_tar -0001e1e2 tar_list -0001e2ec tar -0001e575 rgb_to_vga -0001e585 rgb_to_components -0001e5ac color_distance_squared -0001e617 rgb_init_color_table -0001e6a8 iface_loopback_write -0001e769 iface_loopback_interrupt -0001e780 iface_loopback_read -0001e823 net_init_loopback -0001e83a serial_put -0001e87a serial_write -0001e8bc serial_printf -0001ea5c init_serial -0001eb22 inportb -0001eb2b inportw -0001eb35 inportl -0001eb3e outportb -0001eb4c outportw -0001eb5b outportl -0001eb68 sys_create_thread -0001eb87 __add_systemcall_sys_create_thread -0001eb92 add_system_call -0001ebd2 system_call -0001ec3d hashmap_put -0001eca4 hashmap_get -0001ed28 hashmap_add -0001edb2 hashmap_free -0001edb3 reset_vga_palette -0001edf9 vga_set_palette -0001eee4 b8to16 -0001eef4 vesa_put_pixel -0001ef1e vesa_put_box -0001ef99 vesa_put_block -0001f014 vesa_put_char -0001f08f vesa_put_char16 -0001f122 vesa_put_icon16 -0001f19b vesa_write -0001f1da vesa_write_str -0001f208 vesa_fill -0001f28a vesa_fillrect -0001f2fc vesa_inner_box -0001f404 vesa_printf -0001f671 ksyms_init -0001f898 ksyms_add_symbol -0001f951 __ksymbol_backtrace -0001f96b ksyms_list -0001f9cd ksyms_resolve_symbol -0001fa80 __backtrace_from -0001fb9d backtrace -0001fbae ws_fullscreen -0001fd28 ws_remove -0001fdd8 ws_add -0001fec3 ws_destroy -0001ff69 ws_draw -00020216 ws_raw_wallpaper -000202fc ws_set_background_file -000205d9 ws_init -000206bc ws_set_background -00020767 ws_new -000207f4 encode_run_length -00020871 decode_run_length -000208dc __mouse_handler -000209f3 mouse_wait -00020a3b mouse_write -00020a7d mouse_get_event -00020abe mouse_init -00020ba3 sys_ipc_open -00020bf1 __add_systemcall_sys_ipc_open -00020c08 __add_systemcall_sys_ipc_close -00020c1f __add_systemcall_sys_ipc_send -00020c36 __add_systemcall_sys_ipc_receive -00020c4d sys_ipc_close -00020c96 sys_ipc_send -00020cfd sys_ipc_receive -00020d63 sysinf -00021ab5 __register_kthread_sysinf -00021acf echo -00021b0a res -00021b4b ifconfig -00021b58 __ksymbol_ifconfig -00021b72 __ksymbol_ps -00021b8c __ksymbol_tree -00021ba6 __ksymbol_fat16 -00021bc0 __ksymbol_xxd -00021bda __ksymbol_sh -00021bf4 __ksymbol_ed -00021c0e __ksymbol_exec -00021c28 __ksymbol_ths -00021c42 __ksymbol_dns -00021c5c __ksymbol_th -00021c76 __ksymbol_kill -00021c90 __ksymbol_echo -00021caa __ksymbol_fdisk -00021cc4 __ksymbol_meminfo -00021cde __ksymbol_res -00021cf8 __ksymbol_bg -00021d12 __ksymbol_exit -00021d2c __ksymbol_socks -00021d46 __ksymbol_reset -00021d60 exit -00021d94 ps -00021ffa print_pcb_tree -000220f9 tree -00022139 fat16 -00022161 xxd -00022256 sh -00022356 ed -000223a3 exec -00022507 ths -00022573 dns -000225e7 th -00022605 kill -00022623 fdisk -000227b5 meminfo -00022994 bg -00022a13 socks -00022cb9 __register_kthread_shell -00022cd3 __register_kthread_textshell -00022ced shell_clear -00022d30 reset_shell -00022da1 reset -00022df5 shell_put -00022fd6 shell -0002322c cleanup_function -00023253 testfn -00023287 draw_box -0002336c __textshell_reset_box -000233fc textshell -00023676 __net_find_interface -000236d6 net_drop_packet -000236f7 net_handle_recieve -0002381e net_get_interfaces -00023824 net_configure_iface -00023876 net_incoming_packet -00023927 net_get_iface -0002399d net_iface_up -000239c4 net_iface_down -000239eb net_list_ifaces -00023b05 net_register_interface -00023b36 net_send_skb -00023bbe net_get_info -00023be5 networking_main -00023dc5 __dhcp_add_option -00023e35 __dhcp_send_discovery -00023f77 __dhcp_send_request -000240f4 dhcp_get_state -000240fc dhcp_get_dns -00024102 dhcp_get_ip -00024117 dhcp_get_gw -0002412c dhcpd -000243ab udp_server -00024436 tcp_server -000245aa __net_terminal_writef -0002460f __register_kthread_tcp_server -00024629 __register_kthread_udp_server -00024643 __register_kthread_udptest -0002465d udptest -000246e8 tcpd -000247cc logd -00024837 __register_kthread_logd -00024851 logd_attach_by_pid -00024895 taskbar_readme -000248ae taskbar_about -000248c7 taskbar_clock -000248e0 taskbar_sysinf -000248f9 taskbar_bg_retro -00024930 taskbar_bg_lotr2 -00024945 taskbar_bg_lotr -0002495a taskbar_bg_default_color_gray -0002496c taskbar_bg_default_color -0002497e taskbar_wolfstein -000249b9 taskbar_bg_graph -000249f4 taskbar_bg_calc -00024a2f taskbar_colors -00024a6a taskbar_cube -00024aa5 taskbar_editor -00024ae0 taskbar_finder -00024b1b taskbar_terminal -00024b64 __register_kthread_taskbar -00024b7e taskbar_hdr_opt_event -00024c08 taskbar -000251bf about -0002538a __register_kthread_about -000253a4 __register_kthread_readme -000253be readme -00025520 gfx_default_hover -0002563f gfx_destory_window -000256cc gfx_window_resize -00025775 gfx_window_maximize -000257ee gfx_default_mouse_up -000258bc gfx_default_mouse_down -0002597e gfx_default_click -00025ba7 gfx_draw_window -00026993 gfx_window_set_resizable -000269a8 kernel_gfx_window_border_color -000269d3 gfx_new_window -00026c33 gfx_point_in_rectangle -00026c60 gfx_draw_component -00026ca2 gfx_composition_remove_window -00026ccc gfx_composition_add_window -00026d13 gfx_set_background_color -00026d64 gfx_raw_background -00026db1 gfx_decode_background_image -00026dfe gfx_set_taskbar -00026e51 gfx_compositor_main -00026ec5 kernel_gfx_draw_circle_helper -00027171 gfx_get_window_width -00027186 gfx_get_window_height -0002719b gfx_push_event -00027257 gfx_put_icon16 -0002734f gfx_put_icon32 -00027447 gfx_event_loop -00027566 kernel_gfx_draw_rectangle -00027660 kernel_gfx_draw_contoured_box -00027700 kernel_gfx_draw_pixel -0002779e kernel_gfx_draw_bitmap -000278bc kernel_gfx_draw_char -000279bc kernel_gfx_set_position -000279d8 gfx_commit -000279f1 kernel_gfx_draw_text -00027a7b gfx_button_ext -00027bae gfx_button -00027bcc kernel_gfx_set_title -00027c38 kernel_gfx_set_header -00027ca4 kernel_gfx_draw_line -00027e3f kernel_gfx_draw_circle -00027ebe kernel_gfx_draw_section -00027ec4 kernel_gfx_draw_format_text -00028216 gfx_syscall_hook -000283cd gfx_total_themes -000283d3 kernel_gfx_current_theme -000283d9 kernel_gfx_update_theme -000284a7 kernel_gfx_default_theme -000284ad kernel_gfx_set_theme -000284d2 kernel_gfx_get_theme -000284ed gfx_new_ctx -00028549 gfx_init_framebuffer -000286b5 netdev_attach_driver -0002875e is_netdev_attached -0002876c netdev_transmit -00028787 netdev_recieve -000287b0 net_ethernet_add_header -00028844 net_ethernet_parse -000288b8 __skb_queue_remove -000288f6 __skb_queue_add -00028946 skb_free_queue -0002897e skb_new_queue -000289e5 skb_free -00028a20 skb_new -00028a8b skb_consume -00028abc __net_arp_send -00028b7c net_init_arp -00028bc8 net_arp_add_entry -00028c57 net_arp_find_entry -00028ca2 net_arp_respond -00028d17 net_net_arp_request -00028d9d arp_parse -00028e47 net_ipv4_print -00028e4d net_ipv4_add_header -00028f84 net_is_ipv4 -00028fc1 net_ipv4_parse -000290ee ntohl -0002911a htonl -0002912d ntohs -0002913a htons -00029147 checksum -0002919e transport_checksum -000291f3 ip_to_int -00029291 net_icmp_handle -00029356 net_icmp_response -0002935c net_icmp_request -0002941f ping -00029478 net_icmp_parse -000294e8 net_udp_send -0002961d net_udp_parse -00029745 socket_type_to_str -00029754 socket_domain_to_str -00029763 socket_protocol_to_str -00029772 net_sock_bind -000297bd net_get_sockets -000297d9 sock_get -000297fa get_total_sockets -00029800 net_sock_is_established -00029844 net_sock_awaiting_ack -00029888 net_sock_data_ready -000298e1 net_sock_read -000299e3 net_sock_add_data -00029c43 sock_find_listen_tcp -00029c87 net_sock_find_tcp -00029e79 net_prepare_tcp_sock -00029f05 net_sock_accept -00029f18 net_socket_find_udp -00029f83 kernel_sock_shutdown -00029fb0 kernel_sock_cleanup -0002a036 kernel_sock_close -0002a06a kernel_socket_create -0002a1ed net_init_sockets -0002a233 gethostname -0002a74d __add_systemcall_gethostname -0002a764 net_init_dns -0002a793 route -0002a7e0 tcb_init -0002a7fe tcb_new -0002a96a tcp_state_to_str -0002a983 tcp_new_connection -0002aa0b tcp_free_connection -0002aa2e tcp_is_listening -0002aa44 tcp_set_listening -0002aaa4 tcp_calculate_checksum -0002ab68 __tcp_send -0002ac84 tcp_send_segment -0002adc7 tcp_accept_connection -0002af09 tcp_send_ack -0002b03f tcp_read -0002b045 tcp_recv_segment -0002b04b tcp_connect -0002b0ee tcp_send_syn -0002b0f4 tcp_recv_ack -0002b177 tcp_recv_fin -0002b17d tcp_recv_syn -0002b2af tcp_send_fin -0002b37b tcp_close_connection -0002b3ba tcp_parse -0002b853 kernel_bind -0002b888 kernel_recvfrom -0002b88e kernel_recv -0002b900 kernel_recv_timeout -0002b926 kernel_connect -0002ba2a kernel_sendto -0002bae4 kernel_accept -0002bb47 kernel_listen -0002bb6f kernel_send -0002bbf5 sys_kernel_bind -0002bc27 __add_systemcall_sys_kernel_bind -0002bc3e __add_systemcall_sys_kernel_accept -0002bc55 __add_systemcall_sys_kernel_connect -0002bc6c __add_systemcall_sys_kernel_listen -0002bc83 __add_systemcall_sys_kernel_recv -0002bc9a __add_systemcall_sys_kernel_recvfrom -0002bcb1 __add_systemcall_sys_kernel_recv_timeout -0002bcc8 __add_systemcall_sys_kernel_send -0002bcdf __add_systemcall_sys_kernel_sendto -0002bcf6 __add_systemcall_sys_socket_create -0002bd0d __add_systemcall_sys_kernel_sock_close -0002bd24 sys_kernel_accept -0002bd64 sys_kernel_connect -0002bd96 sys_kernel_listen -0002bdc5 sys_kernel_recv -0002bdfd sys_kernel_recvfrom -0002be3d sys_kernel_recv_timeout -0002be7b sys_kernel_send -0002beb3 sys_kernel_sendto -0002bef3 sys_socket_create -0002bf1a sys_kernel_sock_close -0002bf5b __iface_send -0002bf8a __iface_recieve -0002bfb9 __iface_assign -0002bfcc __iface_detach -0002bfe0 __iface_set_gateway -0002bff3 __iface_set_netmask -0002c006 __iface_configure -0002c056 __iface_attach -0002c07b net_interface_create -0002c0b3 net_register_netdev -0002c1cb net_interface_destroy -0002c1e0 __default_restart -0002c1e6 __default_stop -0002c24b __default_start -0002c2c5 nm_new -0002c34e nm_free -0002c393 net_firewall_create -0002c3b6 fs_file2fd -0002c41d fs_alloc_file -0002c468 fs_free_file -0002c4c2 fs_register -0002c591 fs_init -0002c597 fs_unregister -0002c5fa fs_get -0002c600 fs_close -0002c672 fs_open -0002c6ec fs_seek -0002c769 fs_read -0002c87e fs_load_from_file -0002c90a fs_write -0002c9c5 fat16_rmdir -0002c9cb fat16_stat -0002c9d1 fat16_close -0002ca3b fat16_rename -0002cad0 fat16_mkdir -0002cbb5 fat16_remove -0002cc28 fat16_open -0002cd72 fat16_read -0002ced6 fat16_write -0002d004 fat16_list -0002d2d2 fat16_init -0002d386 path_next_iter -0002d3f5 inode_from_path_recursise -0002d473 inode_from_path -0002d531 ext_get_root -0002d53a ext_get_current_dir -0002d549 ext_get_size -0002d54f ext_get_inodes -0002d555 ext_get_blocks -0002d55b ext_sync -0002d5ce ext_create -0002d6b9 ext_read -0002d734 ext_seek -0002d77b ext_write -0002d7e7 ext_close -0002d849 ext_open_from_directory -0002d94f ext_open -0002da06 ext_size -0002da2f change_directory -0002da95 ext_create_directory -0002dc2f ext_create_file_system -0002defc init_ext -0002e098 listdir -0002e1b9 __inode_sync -0002e21c __inode_cache_insert -0002e312 __inode_load -0002e386 inodes_sync -0002e3c1 inode_get -0002e41e inode_read -0002e606 inode_write -0002e864 alloc_inode -0002e91d mkdir -0002e9ca sync -0002e9fe mkfs -0002ea0b fat16_read_data_from_cluster -0002ea59 fat16_read_data -0002eb3a fat16_find_cluster_by_offset -0002ebb5 fat16_write_data_to_cluster_with_offset -0002ebf0 fat16_print_cluster_chain -0002ec1e fat16_write_data_to_cluster -0002ec51 fat16_write_data -0002ed6d get_fat_start_block -0002ed75 get_root_directory_start_block -0002ed84 get_data_start_block -0002ed96 fat16_get_fat_entry -0002edb1 fat16_set_fat_entry -0002edf1 fat16_sync_fat_table -0002ee69 fat16_allocate_cluster -0002ee81 fat16_free_cluster -0002ee96 fat16_get_free_cluster -0002eeeb fat16_sync_directory_entry -0002ef6d fat16_read_entry -0002f01a fat16_find_entry -0002f155 fat16_rename_entry -0002f1c6 fat16_free_clusters -0002f20d fat16_delete_entry -0002f274 fat16_add_entry -0002f3db fat16_used_blocks -0002f414 fat16_to_upper -0002f440 fat16_name_compare -0002f565 sstrtok -0002f626 fat16_directory_entry_debug -0002f6f6 fat16_get_directory_entry -0002f8ee fat16_create_directory -0002f9f3 fat16_read_file -0002fa44 fat16_create_file -0002fac2 fat16_create_empty_file -0002fb82 fat16_directory_entries -0002fc68 fat16_mbr_clear -0002fd11 fat16_mbr_add_entry -0002fe02 fat16_print_root_directory_entries -0002fe1a fat16_change_directory -0002fea2 fat16_bootblock_info -0003001f fat16_set_time -00030053 fat16_set_date -0003008b fat16_load -0003020a fat16_format -000304bf mbr_partition_type_string -00030542 mbr_partitions_parse -0003060b mbr_get -00030611 mbr_partition_load -0003062f __ksymbol_snakegame -00030649 init_game -00030697 draw -000306f3 get_input -00030712 update -00030899 game_loop -000308bf snakegame -0003090a _code_end +0001b5e4 reboot +0001b618 align_to_pointer_size +0001b626 calculate_size_unit +0001b688 kernel_panic +0001b6a6 kref_init +0001b6c0 kref_get +0001b6e8 kref_put +0001b710 csprintf +0001b911 script_parse +0001b9e6 login +0001bc24 __register_kthread_login +0001bc3e help +0001bea4 clear +0001bec5 __ksymbol_new +0001bedf __ksymbol_list +0001bef9 __ksymbol_color +0001bf13 __ksymbol_about +0001bf2d __ksymbol_help +0001bf47 __ksymbol_view +0001bf61 __ksymbol_file +0001bf7b __ksymbol_tcp +0001bf95 __ksymbol_conf +0001bfaf __ksymbol_clear +0001bfc9 new +0001c10a list +0001c20a file +0001c3d8 color +0001c479 about +0001c4b6 view +0001c6cb tcp +0001c9a8 __tcp_reader +0001cac9 conf +0001cd4e attach_disk_dev +0001cd72 disk_attached +0001cd7a disk_name +0001cd83 disk_device_get +0001cd89 disk_size +0001cda5 write_block +0001cde2 write_block_offset +0001ce25 read_block +0001ce62 read_block_offset +0001cecc sched_consume +0001cf0d sched_add +0001cf67 sched_prioritize +0001d01c sched_round_robin +0001d202 sched_exit +0001d2bb sched_block +0001d3d9 sched_default +0001d4b3 sched_sleep +0001d559 sched_init_default +0001d5da get_scheduler +0001d5e0 kernel_sleep +0001d5fb kernel_yield +0001d63e kernel_exit +0001d670 block +0001d699 unblock +0001d69a work_queue_add +0001d782 init_worker +0001d79a worker_thread +0001d839 __ring_buffer_add +0001d8e1 __ring_buffer_read +0001d9eb rbuffer_new +0001da54 rbuffer_free +0001da76 error_get_string +0001dab2 kclock +0001df92 __register_kthread_kclock +0001dfac tar_extract +0001e1fc __ksymbol_tar +0001e216 tar_list +0001e320 tar +0001e5a9 rgb_to_vga +0001e5b9 rgb_to_components +0001e5e0 color_distance_squared +0001e64b rgb_init_color_table +0001e6dc iface_loopback_write +0001e79d iface_loopback_interrupt +0001e7b4 iface_loopback_read +0001e857 net_init_loopback +0001e86e serial_put +0001e8ae serial_write +0001e8f0 serial_printf +0001ea90 init_serial +0001eb56 inportb +0001eb5f inportw +0001eb69 inportl +0001eb72 outportb +0001eb80 outportw +0001eb8f outportl +0001eb9c sys_create_thread +0001ebbb __add_systemcall_sys_create_thread +0001ebc6 add_system_call +0001ec06 system_call +0001ec71 hashmap_put +0001ecd8 hashmap_get +0001ed5c hashmap_add +0001ede6 hashmap_free +0001ede7 reset_vga_palette +0001ee2d vga_set_palette +0001ef18 b8to16 +0001ef28 vesa_put_pixel +0001ef52 vesa_put_box +0001efcd vesa_put_block +0001f048 vesa_put_char +0001f0c3 vesa_put_char16 +0001f156 vesa_put_icon16 +0001f1cf vesa_write +0001f20e vesa_write_str +0001f23c vesa_fill +0001f2be vesa_fillrect +0001f330 vesa_inner_box +0001f438 vesa_printf +0001f6a5 ksyms_init +0001f8cc ksyms_add_symbol +0001f985 __ksymbol_backtrace +0001f99f ksyms_list +0001fa01 ksyms_resolve_symbol +0001fab4 __backtrace_from +0001fbd1 backtrace +0001fbe2 ws_fullscreen +0001fd5c ws_remove +0001fe0c ws_add +0001fef7 ws_destroy +0001ff9d ws_draw +0002024a ws_raw_wallpaper +00020330 ws_set_background_file +0002060d ws_init +000206f0 ws_set_background +0002079b ws_new +00020828 encode_run_length +000208a5 decode_run_length +00020910 __mouse_handler +00020a27 mouse_wait +00020a6f mouse_write +00020ab1 mouse_get_event +00020af2 mouse_init +00020bd7 sys_ipc_open +00020c25 __add_systemcall_sys_ipc_open +00020c3c __add_systemcall_sys_ipc_close +00020c53 __add_systemcall_sys_ipc_send +00020c6a __add_systemcall_sys_ipc_receive +00020c81 sys_ipc_close +00020cca sys_ipc_send +00020d31 sys_ipc_receive +00020d97 sysinf +00021ae9 __register_kthread_sysinf +00021b03 echo +00021b3e res +00021b7f ifconfig +00021b8c __ksymbol_ifconfig +00021ba6 __ksymbol_ps +00021bc0 __ksymbol_tree +00021bda __ksymbol_fat16 +00021bf4 __ksymbol_xxd +00021c0e __ksymbol_sh +00021c28 __ksymbol_ed +00021c42 __ksymbol_exec +00021c5c __ksymbol_ths +00021c76 __ksymbol_dns +00021c90 __ksymbol_th +00021caa __ksymbol_kill +00021cc4 __ksymbol_echo +00021cde __ksymbol_fdisk +00021cf8 __ksymbol_meminfo +00021d12 __ksymbol_res +00021d2c __ksymbol_bg +00021d46 __ksymbol_exit +00021d60 __ksymbol_socks +00021d7a __ksymbol_reset +00021d94 exit +00021dc8 ps +0002202e print_pcb_tree +0002212d tree +0002216d fat16 +00022195 xxd +0002228a sh +0002238a ed +000223d7 exec +0002253b ths +000225a7 dns +0002261b th +00022639 kill +00022657 fdisk +000227e9 meminfo +000229c8 bg +00022a47 socks +00022ced __register_kthread_shell +00022d07 __register_kthread_textshell +00022d21 shell_clear +00022d64 reset_shell +00022dd5 reset +00022e29 shell_put +0002300a shell +00023265 cleanup_function +0002328c testfn +000232c0 draw_box +000233a5 __textshell_reset_box +00023435 textshell +000236af __net_find_interface +0002370f net_drop_packet +00023730 net_handle_recieve +00023857 net_get_interfaces +0002385d net_configure_iface +000238af net_incoming_packet +00023960 net_get_iface +000239d6 net_iface_up +000239fd net_iface_down +00023a24 net_list_ifaces +00023b3e net_register_interface +00023b6f net_send_skb +00023bf7 net_get_info +00023c1e networking_main +00023dfe __dhcp_add_option +00023e6e __dhcp_send_discovery +00023fb0 __dhcp_send_request +0002412d dhcp_get_state +00024135 dhcp_get_dns +0002413b dhcp_get_ip +00024150 dhcp_get_gw +00024165 dhcpd +000243e4 udp_server +0002446f tcp_server +000245e3 __net_terminal_writef +00024648 __register_kthread_tcp_server +00024662 __register_kthread_udp_server +0002467c __register_kthread_udptest +00024696 udptest +00024721 tcpd +00024805 logd +00024870 __register_kthread_logd +0002488a logd_attach_by_pid +000248ce taskbar_readme +000248e7 taskbar_about +00024900 taskbar_clock +00024919 taskbar_sysinf +00024932 taskbar_bg_retro +00024969 taskbar_bg_lotr2 +0002497e taskbar_bg_lotr +00024993 taskbar_bg_default_color_gray +000249a5 taskbar_bg_default_color +000249b7 taskbar_wolfstein +000249f2 taskbar_bg_graph +00024a2d taskbar_bg_calc +00024a68 taskbar_colors +00024aa3 taskbar_cube +00024ade taskbar_editor +00024b19 taskbar_finder +00024b54 taskbar_terminal +00024b9d __register_kthread_taskbar +00024bb7 taskbar_hdr_opt_event +00024c41 taskbar +000251f8 about +000253c3 __register_kthread_about +000253dd __register_kthread_readme +000253f7 readme +00025559 gfx_default_hover +00025678 gfx_destory_window +00025705 gfx_window_resize +000257ae gfx_window_maximize +00025827 gfx_default_mouse_up +000258f5 gfx_default_mouse_down +000259b7 gfx_default_click +00025be0 gfx_draw_window +000269cc gfx_window_set_resizable +000269e1 kernel_gfx_window_border_color +00026a0c gfx_new_window +00026c6c gfx_point_in_rectangle +00026c99 gfx_draw_component +00026cdb gfx_composition_remove_window +00026d05 gfx_composition_add_window +00026d4c gfx_set_background_color +00026d9d gfx_raw_background +00026dea gfx_decode_background_image +00026e37 gfx_set_taskbar +00026e8a gfx_compositor_main +00026efe kernel_gfx_draw_circle_helper +000271aa gfx_get_window_width +000271bf gfx_get_window_height +000271d4 gfx_push_event +00027290 gfx_put_icon16 +00027388 gfx_put_icon32 +00027480 gfx_event_loop +0002759f kernel_gfx_draw_rectangle +00027699 kernel_gfx_draw_contoured_box +00027739 kernel_gfx_draw_pixel +000277d7 kernel_gfx_draw_bitmap +000278f5 kernel_gfx_draw_char +000279f5 kernel_gfx_set_position +00027a11 gfx_commit +00027a2a kernel_gfx_draw_text +00027ab4 gfx_button_ext +00027be7 gfx_button +00027c05 kernel_gfx_set_title +00027c71 kernel_gfx_set_header +00027cdd kernel_gfx_draw_line +00027e78 kernel_gfx_draw_circle +00027ef7 kernel_gfx_draw_section +00027efd kernel_gfx_draw_format_text +0002824f gfx_syscall_hook +00028406 gfx_total_themes +0002840c kernel_gfx_current_theme +00028412 kernel_gfx_update_theme +000284e0 kernel_gfx_default_theme +000284e6 kernel_gfx_set_theme +0002850b kernel_gfx_get_theme +00028526 gfx_new_ctx +00028582 gfx_init_framebuffer +000286ee netdev_attach_driver +00028797 is_netdev_attached +000287a5 netdev_transmit +000287c0 netdev_recieve +000287e9 net_ethernet_add_header +0002887d net_ethernet_parse +000288f1 __skb_queue_remove +0002892f __skb_queue_add +0002897f skb_free_queue +000289b7 skb_new_queue +00028a1e skb_free +00028a59 skb_new +00028ac4 skb_consume +00028af5 __net_arp_send +00028bb5 net_init_arp +00028c01 net_arp_add_entry +00028c90 net_arp_find_entry +00028cdb net_arp_respond +00028d50 net_net_arp_request +00028dd6 arp_parse +00028e80 net_ipv4_print +00028e86 net_ipv4_add_header +00028fbd net_is_ipv4 +00028ffa net_ipv4_parse +00029127 ntohl +00029153 htonl +00029166 ntohs +00029173 htons +00029180 checksum +000291d7 transport_checksum +0002922c ip_to_int +000292ca net_icmp_handle +0002938f net_icmp_response +00029395 net_icmp_request +00029458 ping +000294b1 net_icmp_parse +00029521 net_udp_send +00029656 net_udp_parse +0002977e socket_type_to_str +0002978d socket_domain_to_str +0002979c socket_protocol_to_str +000297ab net_sock_bind +000297f6 net_get_sockets +00029812 sock_get +00029833 get_total_sockets +00029839 net_sock_is_established +0002987d net_sock_awaiting_ack +000298c1 net_sock_data_ready +0002991a net_sock_read +00029a1c net_sock_add_data +00029c7c sock_find_listen_tcp +00029cc0 net_sock_find_tcp +00029eb2 net_prepare_tcp_sock +00029f3e net_sock_accept +00029f51 net_socket_find_udp +00029fbc kernel_sock_shutdown +00029fe9 kernel_sock_cleanup +0002a06f kernel_sock_close +0002a0a3 kernel_socket_create +0002a226 net_init_sockets +0002a26c gethostname +0002a786 __add_systemcall_gethostname +0002a79d net_init_dns +0002a7cc route +0002a819 tcb_init +0002a837 tcb_new +0002a9a3 tcp_state_to_str +0002a9bc tcp_new_connection +0002aa44 tcp_free_connection +0002aa67 tcp_is_listening +0002aa7d tcp_set_listening +0002aadd tcp_calculate_checksum +0002aba1 __tcp_send +0002acbd tcp_send_segment +0002ae00 tcp_accept_connection +0002af42 tcp_send_ack +0002b078 tcp_read +0002b07e tcp_recv_segment +0002b084 tcp_connect +0002b127 tcp_send_syn +0002b12d tcp_recv_ack +0002b1b0 tcp_recv_fin +0002b1b6 tcp_recv_syn +0002b2e8 tcp_send_fin +0002b3b4 tcp_close_connection +0002b3f3 tcp_parse +0002b88c kernel_bind +0002b8c1 kernel_recvfrom +0002b8c7 kernel_recv +0002b939 kernel_recv_timeout +0002b95f kernel_connect +0002ba63 kernel_sendto +0002bb1d kernel_accept +0002bb80 kernel_listen +0002bba8 kernel_send +0002bc2e sys_kernel_bind +0002bc60 __add_systemcall_sys_kernel_bind +0002bc77 __add_systemcall_sys_kernel_accept +0002bc8e __add_systemcall_sys_kernel_connect +0002bca5 __add_systemcall_sys_kernel_listen +0002bcbc __add_systemcall_sys_kernel_recv +0002bcd3 __add_systemcall_sys_kernel_recvfrom +0002bcea __add_systemcall_sys_kernel_recv_timeout +0002bd01 __add_systemcall_sys_kernel_send +0002bd18 __add_systemcall_sys_kernel_sendto +0002bd2f __add_systemcall_sys_socket_create +0002bd46 __add_systemcall_sys_kernel_sock_close +0002bd5d sys_kernel_accept +0002bd9d sys_kernel_connect +0002bdcf sys_kernel_listen +0002bdfe sys_kernel_recv +0002be36 sys_kernel_recvfrom +0002be76 sys_kernel_recv_timeout +0002beb4 sys_kernel_send +0002beec sys_kernel_sendto +0002bf2c sys_socket_create +0002bf53 sys_kernel_sock_close +0002bf94 __iface_send +0002bfc3 __iface_recieve +0002bff2 __iface_assign +0002c005 __iface_detach +0002c019 __iface_set_gateway +0002c02c __iface_set_netmask +0002c03f __iface_configure +0002c08f __iface_attach +0002c0b4 net_interface_create +0002c0ec net_register_netdev +0002c204 net_interface_destroy +0002c219 __default_restart +0002c21f __default_stop +0002c284 __default_start +0002c2fe nm_new +0002c387 nm_free +0002c3cc net_firewall_create +0002c3ef fs_file2fd +0002c456 fs_alloc_file +0002c4a1 fs_free_file +0002c4fb fs_register +0002c5ca fs_init +0002c5d0 fs_unregister +0002c633 fs_get +0002c639 fs_close +0002c6ab fs_open +0002c725 fs_seek +0002c7a2 fs_read +0002c8b7 fs_load_from_file +0002c943 fs_write +0002c9fe fat16_rmdir +0002ca04 fat16_stat +0002ca0a fat16_close +0002ca74 fat16_rename +0002cb09 fat16_mkdir +0002cbee fat16_remove +0002cc61 fat16_open +0002cdab fat16_read +0002cf0f fat16_write +0002d03d fat16_list +0002d30b fat16_init +0002d3bf path_next_iter +0002d42e inode_from_path_recursise +0002d4ac inode_from_path +0002d56a ext_get_root +0002d573 ext_get_current_dir +0002d582 ext_get_size +0002d588 ext_get_inodes +0002d58e ext_get_blocks +0002d594 ext_sync +0002d607 ext_create +0002d6f2 ext_read +0002d76d ext_seek +0002d7b4 ext_write +0002d820 ext_close +0002d882 ext_open_from_directory +0002d988 ext_open +0002da3f ext_size +0002da68 change_directory +0002dace ext_create_directory +0002dc68 ext_create_file_system +0002df35 init_ext +0002e0d1 listdir +0002e1f2 __inode_sync +0002e255 __inode_cache_insert +0002e34b __inode_load +0002e3bf inodes_sync +0002e3fa inode_get +0002e457 inode_read +0002e63f inode_write +0002e89d alloc_inode +0002e956 mkdir +0002ea03 sync +0002ea37 mkfs +0002ea44 fat16_read_data_from_cluster +0002ea92 fat16_read_data +0002eb73 fat16_find_cluster_by_offset +0002ebee fat16_write_data_to_cluster_with_offset +0002ec29 fat16_print_cluster_chain +0002ec57 fat16_write_data_to_cluster +0002ec8a fat16_write_data +0002eda6 get_fat_start_block +0002edae get_root_directory_start_block +0002edbd get_data_start_block +0002edcf fat16_get_fat_entry +0002edea fat16_set_fat_entry +0002ee2a fat16_sync_fat_table +0002eea2 fat16_allocate_cluster +0002eeba fat16_free_cluster +0002eecf fat16_get_free_cluster +0002ef24 fat16_sync_directory_entry +0002efa6 fat16_read_entry +0002f053 fat16_find_entry +0002f18e fat16_rename_entry +0002f1ff fat16_free_clusters +0002f246 fat16_delete_entry +0002f2ad fat16_add_entry +0002f414 fat16_used_blocks +0002f44d fat16_to_upper +0002f479 fat16_name_compare +0002f59e sstrtok +0002f65f fat16_directory_entry_debug +0002f72f fat16_get_directory_entry +0002f927 fat16_create_directory +0002fa2c fat16_read_file +0002fa7d fat16_create_file +0002fafb fat16_create_empty_file +0002fbbb fat16_directory_entries +0002fca1 fat16_mbr_clear +0002fd4a fat16_mbr_add_entry +0002fe3b fat16_print_root_directory_entries +0002fe53 fat16_change_directory +0002fedb fat16_bootblock_info +00030058 fat16_set_time +0003008c fat16_set_date +000300c4 fat16_load +00030243 fat16_format +000304f8 mbr_partition_type_string +0003057b mbr_partitions_parse +00030644 mbr_get +0003064a mbr_partition_load +00030668 __ksymbol_snakegame +00030682 init_game +000306d0 draw +0003072c get_input +0003074b update +000308d2 game_loop +000308f8 snakegame +00030943 _code_end