diff --git a/docs/indicators.md b/docs/indicators.md
index 8d599a5a..2e388c36 100644
--- a/docs/indicators.md
+++ b/docs/indicators.md
@@ -433,7 +433,9 @@ Mathematical transformations and derivative indicators. Building blocks for anal
| [**WEIBULLDIST**](../lib/numerics/weibulldist/Weibulldist.md) | Weibull Distribution (CDF) | Rolling Weibull CDF — two-parameter closed-form probability transform via pow + exp |
| [**CHANGE**](../lib/numerics/change/Change.md) | Percentage Change | Relative price movement |
| [**CWT**](../lib/numerics/cwt/Cwt.md) | Continuous Wavelet Transform | Morlet CWT magnitude at a specified scale — time-frequency decomposition |
+| [**DECAY**](../lib/numerics/decay/Decay.md) | Linear Decay | Peak envelope with linear degradation |
| [**DWT**](../lib/numerics/dwt/Dwt.md) | Discrete Wavelet Transform | À trous Haar stationary DWT — multi-resolution approximation + detail, WarmupPeriod = 2^levels |
+| [**EDECAY**](../lib/numerics/edecay/Edecay.md) | Exponential Decay | Peak envelope with exponential degradation |
| [**EXPTRANS**](../lib/numerics/exptrans/Exptrans.md) | Exponential Transform | e^x for log-space reversal |
| [**HIGHEST**](../lib/numerics/highest/Highest.md) | Rolling Maximum | O(1) via monotonic deque |
| [**MAXINDEX**](../lib/numerics/maxindex/Maxindex.md) | Rolling Maximum Index | Position of max in window |
diff --git a/lib/filters/baxterking/BaxterKing.md b/lib/filters/baxterking/BaxterKing.md
index 95db8030..ca5e77dc 100644
--- a/lib/filters/baxterking/BaxterKing.md
+++ b/lib/filters/baxterking/BaxterKing.md
@@ -8,7 +8,6 @@
| **Outputs** | Single series (BaxterKing) |
| **Output range** | Oscillates around zero |
| **Warmup** | `2K+1` bars (default 25) |
-| **Signature** | [baxterking_signature](baxterking_signature.md) |
### TL;DR
diff --git a/lib/filters/baxterking/baxterking_signature.md b/lib/filters/baxterking/baxterking_signature.md
deleted file mode 100644
index 1661f0cf..00000000
--- a/lib/filters/baxterking/baxterking_signature.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# BAXTERKING Signature
-
-
\ No newline at end of file
diff --git a/lib/filters/baxterking/baxterking_signature.svg b/lib/filters/baxterking/baxterking_signature.svg
deleted file mode 100644
index 911bb505..00000000
--- a/lib/filters/baxterking/baxterking_signature.svg
+++ /dev/null
@@ -1,19710 +0,0 @@
-
-
-
diff --git a/lib/filters/bpf/Bpf.md b/lib/filters/bpf/Bpf.md
index e254ff34..9d03cd08 100644
--- a/lib/filters/bpf/Bpf.md
+++ b/lib/filters/bpf/Bpf.md
@@ -8,7 +8,6 @@
| **Outputs** | Single series (BPF) |
| **Output range** | Oscillates around zero |
| **Warmup** | `Math.Max(lowerPeriod, upperPeriod)` bars |
-| **Signature** | [bpf_signature](bpf_signature.md) |
### TL;DR
diff --git a/lib/filters/bpf/bpf_signature.md b/lib/filters/bpf/bpf_signature.md
deleted file mode 100644
index 5add5eb2..00000000
--- a/lib/filters/bpf/bpf_signature.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# BPF Signature
-
-
\ No newline at end of file
diff --git a/lib/filters/bpf/bpf_signature.svg b/lib/filters/bpf/bpf_signature.svg
deleted file mode 100644
index a5d4e1ba..00000000
--- a/lib/filters/bpf/bpf_signature.svg
+++ /dev/null
@@ -1,19881 +0,0 @@
-
-
-
diff --git a/lib/filters/cfitz/Cfitz.md b/lib/filters/cfitz/Cfitz.md
index 0546d61d..b1b21549 100644
--- a/lib/filters/cfitz/Cfitz.md
+++ b/lib/filters/cfitz/Cfitz.md
@@ -8,7 +8,6 @@
| **Outputs** | Single series (Cfitz) |
| **Output range** | Oscillates around zero |
| **Warmup** | `2` bars |
-| **Signature** | [cfitz_signature](cfitz_signature.md) |
### TL;DR
diff --git a/lib/filters/cfitz/cfitz_signature.md b/lib/filters/cfitz/cfitz_signature.md
deleted file mode 100644
index 328bf330..00000000
--- a/lib/filters/cfitz/cfitz_signature.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# CFITZ Signature
-
-
\ No newline at end of file
diff --git a/lib/filters/cfitz/cfitz_signature.svg b/lib/filters/cfitz/cfitz_signature.svg
deleted file mode 100644
index 84b043a2..00000000
--- a/lib/filters/cfitz/cfitz_signature.svg
+++ /dev/null
@@ -1,19647 +0,0 @@
-
-
-
diff --git a/lib/filters/gauss/Gauss.md b/lib/filters/gauss/Gauss.md
index a8513e03..9184562f 100644
--- a/lib/filters/gauss/Gauss.md
+++ b/lib/filters/gauss/Gauss.md
@@ -8,6 +8,8 @@
| **Outputs** | Single series (Gauss) |
| **Output range** | Tracks input |
| **Warmup** | 1 bar |
+| **Signature** | [gauss_signature](gauss_signature.md) |
+
### TL;DR
diff --git a/lib/filters/gauss/gauss_signature.md b/lib/filters/gauss/gauss_signature.md
new file mode 100644
index 00000000..a8b6f344
--- /dev/null
+++ b/lib/filters/gauss/gauss_signature.md
@@ -0,0 +1,3 @@
+# ELLIPTIC Signature
+
+
\ No newline at end of file
diff --git a/lib/filters/hp/Hp.md b/lib/filters/hp/Hp.md
index 1083d8ab..2588944b 100644
--- a/lib/filters/hp/Hp.md
+++ b/lib/filters/hp/Hp.md
@@ -8,6 +8,8 @@
| **Outputs** | Single series (HP) |
| **Output range** | Tracks input |
| **Warmup** | 1 bar |
+| **Signature** | [hp_signature](hp_signature.md) |
+
### TL;DR
diff --git a/lib/filters/hp/hp_signature.md b/lib/filters/hp/hp_signature.md
new file mode 100644
index 00000000..f086fab4
--- /dev/null
+++ b/lib/filters/hp/hp_signature.md
@@ -0,0 +1,3 @@
+# ELLIPTIC Signature
+
+
\ No newline at end of file
diff --git a/lib/filters/hpf/Hpf.md b/lib/filters/hpf/Hpf.md
index d090ddad..f44e6bbb 100644
--- a/lib/filters/hpf/Hpf.md
+++ b/lib/filters/hpf/Hpf.md
@@ -8,7 +8,6 @@
| **Outputs** | Single series (HPF) |
| **Output range** | Tracks input |
| **Warmup** | 1 bar |
-| **Signature** | [hpf_signature](hpf_signature.md) |
### TL;DR
diff --git a/lib/filters/hpf/hpf_signature.md b/lib/filters/hpf/hpf_signature.md
deleted file mode 100644
index 9e17f05c..00000000
--- a/lib/filters/hpf/hpf_signature.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# HPF Signature
-
-
\ No newline at end of file
diff --git a/lib/filters/hpf/hpf_signature.svg b/lib/filters/hpf/hpf_signature.svg
deleted file mode 100644
index acf0015d..00000000
--- a/lib/filters/hpf/hpf_signature.svg
+++ /dev/null
@@ -1,19689 +0,0 @@
-
-
-
diff --git a/lib/filters/kalman/Kalman.md b/lib/filters/kalman/Kalman.md
index acd879a1..9dd240ca 100644
--- a/lib/filters/kalman/Kalman.md
+++ b/lib/filters/kalman/Kalman.md
@@ -8,6 +8,8 @@
| **Outputs** | Single series (Kalman) |
| **Output range** | Tracks input |
| **Warmup** | `10` bars |
+| **Signature** | [kalman_signature](kalman_signature.md) |
+
### TL;DR
diff --git a/lib/filters/kalman/kalman_signature.md b/lib/filters/kalman/kalman_signature.md
new file mode 100644
index 00000000..1f959745
--- /dev/null
+++ b/lib/filters/kalman/kalman_signature.md
@@ -0,0 +1,3 @@
+# ELLIPTIC Signature
+
+
\ No newline at end of file
diff --git a/lib/filters/laguerre/Laguerre.md b/lib/filters/laguerre/Laguerre.md
index 391b255e..add129d3 100644
--- a/lib/filters/laguerre/Laguerre.md
+++ b/lib/filters/laguerre/Laguerre.md
@@ -8,6 +8,8 @@
| **Outputs** | Single series (Laguerre) |
| **Output range** | Tracks input |
| **Warmup** | `WarmupBars` bars |
+| **Signature** | [laguerre_signature](laguerre_signature.md) |
+
### TL;DR
diff --git a/lib/filters/laguerre/laguerre_signature.md b/lib/filters/laguerre/laguerre_signature.md
new file mode 100644
index 00000000..81199426
--- /dev/null
+++ b/lib/filters/laguerre/laguerre_signature.md
@@ -0,0 +1,3 @@
+# ELLIPTIC Signature
+
+
\ No newline at end of file
diff --git a/lib/filters/loess/loess_signature.svg b/lib/filters/loess/loess_signature.svg
index d4e24468..03e8381d 100644
--- a/lib/filters/loess/loess_signature.svg
+++ b/lib/filters/loess/loess_signature.svg
@@ -6,7 +6,7 @@
- 2026-03-02T14:19:36.373048
+ 2026-03-10T19:40:09.112705
image/svg+xml
@@ -30,28 +30,313 @@ z
-
+
+
+
+
+
+
+
+
+
-
-
+
-
-
+
+
-
-
-
-
+
+
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
+
-
+
-
+
+
+
+
+
-
+
-
+
-
-
-
-
+
@@ -300,126 +840,449 @@ z
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
@@ -627,233 +1399,1176 @@ z
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
+
-
+
-
-
-
+
+
+
-
+
+
-
+
+
+
+
-
+
-
-
-
+
+
+
-
+
+
-
+
+
+
+
-
+
-
-
-
+
+
+
+
+
+
-
+
+
-
+
+
+
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
-
+
+
+
+
-
+
-
-
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
+
-
+
-
-
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
-
+
-
+
-
+
-
-
+
+
+
+
+
-
+
-
+
-
+
-
-
+
+
+
+
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
@@ -2574,29 +9407,449 @@ z
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
+
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
+
+
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+