From ba3a83b49647193bd61c0bba0dc9802b545a506f Mon Sep 17 00:00:00 2001 From: Sumiinix <164983436+Sumiinix@users.noreply.github.com> Date: Sun, 5 Jul 2026 17:24:04 +0900 Subject: [PATCH] Update article.md --- 2-ui/1-document/11-coordinates/article.md | 193 +++++++++++------- .../11-coordinates/coordinates-negative.svg | 1 + .../1-document/11-coordinates/coordinates.svg | 1 + 2-ui/1-document/11-coordinates/coords.png | Bin 17891 -> 0 bytes 2-ui/1-document/11-coordinates/coords@2x.png | Bin 45226 -> 0 bytes ...cument-and-window-coordinates-scrolled.svg | 1 + .../document-window-coordinates-scroll.png | Bin 331989 -> 0 bytes .../document-window-coordinates-scroll@2x.png | Bin 752584 -> 0 bytes .../document-window-coordinates-zero.png | Bin 287690 -> 0 bytes .../document-window-coordinates-zero@2x.png | Bin 665386 -> 0 bytes 10 files changed, 121 insertions(+), 75 deletions(-) create mode 100644 2-ui/1-document/11-coordinates/coordinates-negative.svg create mode 100644 2-ui/1-document/11-coordinates/coordinates.svg delete mode 100644 2-ui/1-document/11-coordinates/coords.png delete mode 100644 2-ui/1-document/11-coordinates/coords@2x.png create mode 100644 2-ui/1-document/11-coordinates/document-and-window-coordinates-scrolled.svg delete mode 100644 2-ui/1-document/11-coordinates/document-window-coordinates-scroll.png delete mode 100644 2-ui/1-document/11-coordinates/document-window-coordinates-scroll@2x.png delete mode 100644 2-ui/1-document/11-coordinates/document-window-coordinates-zero.png delete mode 100644 2-ui/1-document/11-coordinates/document-window-coordinates-zero@2x.png diff --git a/2-ui/1-document/11-coordinates/article.md b/2-ui/1-document/11-coordinates/article.md index 0da4273062..2dc6374b51 100644 --- a/2-ui/1-document/11-coordinates/article.md +++ b/2-ui/1-document/11-coordinates/article.md @@ -1,64 +1,105 @@ # 座標 -要素を移動させるには、座標についてよく知っている必要があります。 +要素を移動させるためには、座標系の仕組みを理解しておく必要があります。 ほとんどの JavaScript メソッドは2つの座標系のいずれかを扱います: -1. ウィンドウ(もしくは別のビューポート)の 上/左 を基準にします -2. ドキュメントの 上/左 を基準とします +1. **ウィンドウ相対座標** - `position:fixed`と同様で、ウィンドウの上端/左端を基準として計算されます。 + - これらの座標は`clientX/clientY`と表記します。このような名前の理由については、イベントプロパティについて学習する際に明らかになります。 +2. **ドキュメント座標** - ドキュメントルートにおける`position:absolute`と同様で、ドキュメントの上端/左端を基準として計算されます。 + - これらの座標は`pageX/pageY`と表記します。 -違いを理解し、どのタイプがどこにあるかを理解することは重要です。 +ページを一番最初までスクロールして、ウィンドウの左上端がドキュメントの左上端と完全に一致した状態であれば、これらの座標は互いに等しくなります。しかし、ドキュメントがスクロールされると、要素がウィンドウ内を移動するため、要素のウィンドウ相対座標は変化しますが、ドキュメント相対座標は変わりません。 -[cut] +この画像では、ドキュメント内の特定の一点を、スクロール前(左)とスクロール後(右)の座標で示しています。 -## ウィンドウ座標: getBoundingClientRect + -ウィンドウ座標はウィンドウの左上端から始まります。 +ドキュメントがスクロールされた場合: +- `pageY` – ドキュメント相対座標は変化しません。これはドキュメントの最上部(すでにスクロールアウトした部分)を基準に数えられています。 +- `clientY` – ウィンドウ相対座標は変化します(矢印が短くなっています)。同じ点がウィンドウの最上部に近づいたためです。 -メソッド `elem.getBoundingClientRect()` はプロパティを持つオブジェクトとして `elem` に対するウィンドウ座標を返します。: +## 要素の座標取得: `getBoundingClientRect()` -- `top` -- 要素の上端の Y-座標, -- `left` -- 要素の左端の X-座標, -- `right` -- 要素の右端の X-座標, -- `bottom` -- 要素の下端の Y-座標. +`elem.getBoundingClientRect()`メソッドは、`elem`を囲った最小の長方形のウィンドウ座標を、組み込みの [DOMRect](https://www.w3.org/TR/geometry-1/#domrect) クラスのオブジェクトとして返します。 -このようになります: +`DOMRect`の主要なプロパティ: - +- `x/y` -- ウィンドウに対する、長方形の原点のX/Y座標。 +- `width/height` -- 長方形の幅/高さ(負の値も可)。 +さらに、派生したプロパティもあります: -ウィンドウ座標はドキュメントのスクロールアウト部分を考慮せず、ウィンドウの左上端から計算されたものになります。 - -言い換えると、ページをスクロールするとき、要素は上下に移動し、*そのウィンドウ座標は変わります*。これはとても重要です。 - +- `top/bottom` -- 長方形の上端/下端のY座標。 +- `left/right` -- 長方形の左端/右端のX座標。 ```online -ボタンをクリックしてウィンドウ座標を見てみてください: +例えば、このボタンをクリックして、そのウィンドウ座標を見てください。 - +
-もしページをスクロールすると、ボタン位置は代わり、ウィンドウ座標も同様に変わります。 +繰り返しページをスクロールしていると、ウィンドウ内のボタンの位置が変化するにつれて、そのウィンドウ相対座標(縦方向にスクロールした場合は `y/top/bottom` 座標)も変化することに気づくでしょう。 +``` + +以下が`elem.getBoundingClientRect()`の出力の図です: + + + +ご覧のとおり、`x/y`と`width/height`で長方形を完全に表しています。これらから、派生プロパティを簡単に計算できます: + +- `left = x` +- `top = y` +- `right = x + width` +- `bottom = y + height` + +注意点: + +- 座標は`10.5`のような小数になる場合があります。これは正常で、ブラウザは内部で計算に小数を使用しています。`style.left/top`を設定する際に、小数を丸める必要はありません。 +- 座標が負の値になることもあります。例えば、ページをスクロールして`elem`がウィンドウの上部にある場合、`elem.getBoundingClientRect().top`は負の値になります。 + +```smart header="派生プロパティはなぜ必要ですか? x/yが存在するのに、なぜtop/leftが存在するのですか?" +数学的には、長方形は開始点` (x, y)`と方向ベクトル` (width, height)`によって一意に定義されます。したがって、追加の派生プロパティは利便性のためのものです。 + +技術的には、`width/height`が負の値になることも可能であり、これにより「方向性を持った」長方形(例えば、適切にマークされた開始点と終了点を持つマウスの選択範囲など)を表現できます。 + +`width/height`の値が負の場合、長方形が右下端から始まり、左上に向かって「伸びる」ことを意味します。 + +以下に、負の`width`と`height`を持つ長方形(例:`width=-200`、`height=-100`)を示します: + + + +ご覧の通り、このような場合、`left/top`は`x/y`と等しくありません。 + +ただし、実際には`elem.getBoundingClientRect()`は常に正の`width/height`を返します。ここで負の`width/height`に言及するのは、これらの一見重複しているプロパティが実際には重複していないことを理解していただくためです。 ``` -また: +```warn header="Internet Explorer:x/yのサポートなし" +Internet Explorerは歴史的な理由から`x/y`プロパティをサポートしていません。 -- 座標は小数の場合があります。それは正常で、内部的にはブラウザは計算のためにそれを使用します。私たちは `style.position.left/top` へ設定するときにそれらを丸める必要はありません。ブラウザで小数は問題ありません。 -- 座標は負の値になる場合があります。例えば、ページが下にスクロールされ、`elem` の上端がウィンドウの上にある場合、`elem.getBoundingClientRect().top` は負の値になります。 -- Chromeような一部のブラウザでは、結果 `getBoundingClientRect` にプロパティ `width` と `height` も追加します。減算することでもそれらを取得することは可能です: `height=bottom-top`, `width=right-left`。 +したがって、ポリフィルを作成する(`DomRect.prototype`にゲッターを追加する)か、単に`top/left`を使用することができます。なぜなら、`width/height`が正の値である場合、これらは常に`x/y`と等しいからです。特に`elem.getBoundingClientRect()`の結果がこれに該当します。 +``` -```warn header="座標 右/下 は CSS プロパティとは異なります" -ウィンドウ座標と CSSの配置を比較すると、`position:fixed` との明らかな類似点があります -- ビューポートを基準とした位置も同じです。 +```warn header="座標 right/bottom はCSSのpositionプロパティとは異なります" +ウィンドウ相対座標とCSSの`position:fixed`の間には、明白な類似点があります。 -しかし、CSS では `right` プロパティは右端からの距離を意味し、`bottom` は -- 下端からの距離です。 +しかし、CSSの配置において、`right`プロパティは右端からの距離を意味し、`bottom`プロパティは下端からの距離を意味します。 -上の図を見た時、JavaScriptではそうでないことが分かります。すべてのウィンドウ座標は左上隅から数えられます。 +上記の図を見れば分かるように、JavaScriptではそうではありません。これらの座標も含め、すべてのウィンドウ座標は左上端から数えられます。 ``` ## elementFromPoint(x, y) @@ -71,7 +112,7 @@ function showRect(elem) { let elem = document.elementFromPoint(x, y); ``` -例えば、下のコードは今ウィンドウの中央にある要素のタグを強調表示し、出力します。: +例えば、以下のコードは、現在ウィンドウの中央にある要素のタグを強調表示して出力します。: ```js run let centerX = document.documentElement.clientWidth / 2; @@ -88,11 +129,9 @@ alert(elem.tagName); ````warn header="ウィンドウ外の座標の場合、`elementFromPoint` は `null` を返します。" メソッド `document.elementFromPoint(x,y)` は `(x,y)` が可視領域にある場合にのみ動作します。 -もしある座標が負の値またはウィンドウの幅/高さを超えている場合、`null` を返します。 - -ほとんどの場合、このような振る舞いは問題ではありませんが、それを心に留めておく必要があります。 +もし座標のいずれかが負の値であるか、ウィンドウの幅/高さを超えている場合、`null` を返します。 -これは、それをチェックしない場合に発生する可能性のある典型的なエラーです: +チェックを怠ると、以下のような典型的なエラーが発生する可能性があります: ```js let elem = document.elementFromPoint(x, y); @@ -103,13 +142,13 @@ elem.style.background = ''; // エラー! ``` ```` -## position:fixed を用いる +## 「fixed」配置の使用 -多くの場合、何かを配置するために座標を必要とします。CSS ではビューポートを基準として要素を配置するために、`left/top` (または `right/bottom`) と一緒に `position:fixed` を使います。 +ほとんどの場合、何かを配置するには座標が必要です。 -私たちは、`getBoundingClientRect` を使って要素の座標を取得し、その近くに何かを表示することができます。 +要素の近くに何かを表示するには、`getBoundingClientRect`を使用してその座標を取得し、次にCSSの`position`と`left/top`(または`right/bottom`)を組み合わせて使用します。 -例えば、下の関数 `createMessageUnder(elem, html)` は `elem` の下にメッセージを表示します。: +例えば、以下の`createMessageUnder(elem, html)`関数は、`elem`の下にメッセージを表示します。 ```js let elem = document.getElementById("coords-show-mark"); @@ -134,7 +173,7 @@ function createMessageUnder(elem, html) { } // 使用例: -// ドキュメント上に5秒間追加します +// ドキュメントに5秒間追加する let message = createMessageUnder(elem, 'Hello, world!'); document.body.append(message); setTimeout(() => message.remove(), 5000); @@ -146,67 +185,71 @@ setTimeout(() => message.remove(), 5000); ``` -このコードを変更して、メッセージを左、右、下に表示したり、"フェードイン" するための CSS アニメーションを適用することができます。私たちは要素のすべての座標とサイズを知っているので簡単にできます。 +このコードは、メッセージを左、右、下に表示したり、CSSアニメーションを適用して「フェードイン」させたりするように修正できます。要素のすべての座標とサイズが分かっているため、これは簡単です。 -しかし、重要な点に注意してください: ページがスクロールされたとき、メッセージはボタンから離れていきます。 +しかし、重要な点に注意してください。ページをスクロールすると、メッセージがボタンから離れていきます。 -理由は明らかです: メッセージ要素は `position:fixed` に依存しているので、ページがスクロールしている間、ウィンドウの同じ場所にい続けます。 +その理由は明白です。メッセージ要素が`position:fixed`に依存しているため、ページがスクロールしてもウィンドウの同じ位置に留まろうとするからです。 -変更するためには、ドキュメントベースの座標を使い、`position:absolute` を使う必要があります。 +これを変えるには、ドキュメント基準の座標と`position:absolute`を使用する必要があります。 -## ドキュメント座標 +## ドキュメント座標 -ドキュメント相対座標は、ウィンドウではなくドキュメントの左上端から始めます。 +ドキュメント相対座標は、ウィンドウではなくドキュメントの左上端から始まります。 -CSS では、ウィンドウ座標は `position:fixed` に対応する一方、ドキュメント座標は `position:absolute` に似ています。 +CSSでは、ウィンドウ座標は`position:fixed`に対応し、ドキュメント座標はそれに近い`position:absolute`に対応します。 -`position:absolute` と `top/left` を使うことで、ドキュメント上の特定の場所に何かを置くことができます。なので、ページのスクロール時にそこに残ることができます。しかし、最初に正しい座標が必要です。 +`position:absolute` と `top/left` を使用すると、ドキュメント内の特定の位置に要素を配置し、ページをスクロールしてもその位置に留まるようにすることができます。ただし、そのためにはまず正しい座標が必要です。 -分かりやすくするために、ウィンドウ座標 `(clientX,clientY)` とドキュメント座標 `(pageX,pageY)` を呼び出します。 +要素のドキュメント座標を取得するための標準メソッドはありません。しかし、それを記述するのは簡単です。 -ページがスクロールされていないとき、ウィンドウ座標とドキュメント座標はまったく同じです。それらのゼロの点も一致します: +これら2つの座標系は、以下の式で結びつけられます: +- `pageY` = `clientY` + ドキュメントのスクロールアウトした垂直部分の高さ。 +- `pageX` = `clientX` + ドキュメントのスクロールアウトした水平部分の幅。 - +`getCoords(elem)`関数は、`elem.getBoundingClientRect()`からウィンドウ座標を取得し、現在のスクロール量を加算します: -そして、スクロールをすると、`(clientX,clientY)` が変わります。なぜなら、それらはウィンドウに相対的なためです。しかし、`(pageX,pageY)` は同じままです。 - -これは縦スクロール後の同じページです: +```js +// 要素のドキュメント座標を取得 +function getCoords(elem) { + let box = elem.getBoundingClientRect(); - + return { + top: box.top + window.pageYOffset, + right: box.right + window.pageXOffset, + bottom: box.bottom + window.pageYOffset, + left: box.left + window.pageXOffset + }; +} +``` -- 要素は今ウィンドウの上部にあるので、ヘッダー `"From today's featured article"` の `clientY` は `0` になりました。 -- 水平スクロールをしなかったため、`clientX` は変わりませんでした。 -- 要素の `pageX` と `pageY` 座標は依然として同じです。なぜなら、それらはドキュメントに相対的だからです。 +もし上記の例でこれを`position:absolute`で使用した場合、メッセージはスクロールしても要素の近くに留まり続けます。 -## ドキュメント座標の取得 +変更された`createMessageUnder`関数は以下の通りです: -要素のドキュメント座標を取得するための標準メソッドはありません。しかし、簡単に書けます。 +```js +function createMessageUnder(elem, html) { + let message = document.createElement('div'); + message.style.cssText = "*!*position:absolute*/!*; color: red"; -2つの座標系は次の式で繋がれます: -- `pageY` = `clientY` + ドキュメントのスクロールアウトした垂直部分の高さ -- `pageX` = `clientX` + ドキュメントのスクロールアウトした水平部分の幅 + let coords = *!*getCoords(elem);*/!* -関数 `getCoords(elem)` は `elem.getBoundingClientRect()` からウィンドウ座標を取り、それらに現在のスクロールを加えます。: + message.style.left = coords.left + "px"; + message.style.top = coords.bottom + "px"; -```js -// 要素のドキュメント座標を取得 -function getCoords(elem) { - let box = elem.getBoundingClientRect(); + message.innerHTML = html; - return { - top: box.top + pageYOffset, - left: box.left + pageXOffset - }; + return message; } ``` ## サマリ -ページ上に任意の点は座標を持っています: +ページ上のあらゆる点は、座標を持っています: 1. ウィンドウに相対的 -- `elem.getBoundingClientRect()` 2. ドキュメントに相対的 -- `elem.getBoundingClientRect()` + 現在のページスクロール -ウィンドウ座標は `position:fixed` と一緒に使用するのが賢明で、ドキュメント座標は `position:absolute` と上手くやります。 +ウィンドウ座標は`position:fixed`で使用するのが適しており、ドキュメント座標は`position:absolute`で使用するのが適しています。 -どちらの座標系も "長所" と "短所" を持っており、CSS の `position` `absolute` と `fixed` のように、どちらか一方が必要なときがあります。 +どちらの座標系も長所と短所を持っており、CSS の `position` `absolute` と `fixed` のように、どちらか一方が必要なときがあります。 diff --git a/2-ui/1-document/11-coordinates/coordinates-negative.svg b/2-ui/1-document/11-coordinates/coordinates-negative.svg new file mode 100644 index 0000000000..4f2e78687c --- /dev/null +++ b/2-ui/1-document/11-coordinates/coordinates-negative.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2-ui/1-document/11-coordinates/coordinates.svg b/2-ui/1-document/11-coordinates/coordinates.svg new file mode 100644 index 0000000000..261ff66966 --- /dev/null +++ b/2-ui/1-document/11-coordinates/coordinates.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2-ui/1-document/11-coordinates/coords.png b/2-ui/1-document/11-coordinates/coords.png deleted file mode 100644 index 58fd533fba62ae0b8158ead52bc134c6b4cbc020..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17891 zcmeIaXEfYV7cU$_L=q&C5K$AIAc@{dg6KjJJ)#rD7`;po5xw``I|)W-A_<~*qKpxY zGRkO!F=plt^4xphcfD)9_uKvQe6XxD|MTB-&OZD6_TIm<&xC4eC{bLyf9=wxOBBj4 zUua*tM1&&z1zx>E_yp~2XiNA<HSm(mYw5|n`COXlgZEvMKCUu*CR1Q7Sv0ENLjXQs@zfy zps@IM9OZzmOVMjkN<67#Xgb1lm3A}U`6c2!Hkc9Ln$I`dvnkLc(yM$Vs%xoVK^5la z)%pGBWZCzuL@^ry@`v)@G>?iRyQ_s`^T^`}5M(QaQ%AmnWUC`t9 z_U1al*fd6}Vl`s+%)Md BhIrUf+J9ucUgIC4iQ>E5S~-j9@N%iSJLA-
NbPPh$wEusY8TXP zyxRx_@lMO{tS{3X_nnHPro;8HodzfitF5T-Yp+bg24-LBo^;!Tu~Vu^71Ob0{N6V2 zgMd_OFO#G{Y}QgniexU78NhTkIl3(|f%>JGmbBRMECH zT7YsES15}PnO+u<6@%7Iztn#a@+(&7gn=#^v?o6iU+tHooE1b?{&FY>_DZrYO1kkw zD%A>r-*2b`@__HQJJJ+vi ^cmDF`B z0~Ry7zj0Z8-ppjN?A|In0NNJDGn`tQrcM%;jB|g5J|OA#%OhlvOUHRMXrP*yU$}1q z8rez1>$hlt4g`xA4ZX3Bv3Rm*P4U4i5-tk~+b8S(n)+ctZql;lFcGjP9FZVMpW66h zn^xZ*4Wn0CVYbdsz;n65;`HsE0?J$Zx4lBqJs9{#(Jlmwc0;Aj<@5iHkcjphsN-Kx zfK`W_Q7pE61cWkDO+#JKQNuq7aT(1O4xftv$xxMW!elsF@h=geAyAMFj~`E;d3eI6 zG9>h!jI)+L55un35f10uf&+TaxF5o ;e`oWzH5Y{!IbcFCSjj%%{V)16ClHC(FULz?^sQtk^yOQZGS%! I(O+wGwwHP@##}`>jcL-Ew{XV#9WDQ6#@44pTXJ@+3T5$+H-2|&}bhfkSQ z`e;^rg@zK|tmLP9+^W6~e0FqfwA4s7IpFk`tpici_-r%jj4d{|R?z0r8}B*4eZ2^G zMd)I<`Rncxl)9(WOk?BYn_K@U9kY c*o_*y|w zrZA{8xR!<=veu678_fRp7X3wQzOLD|+S6sr%Fw4Z&jUHALSPJSYz8tK77=v&dcOLl zf0_oTqi|Ox46 Z1}AFu*r(o@0WcbkeaMNZf!&0oBHu88XI6Y)XH?i z;epjeuXIwTwg_J`5HVSoVQ`Hw7nYJ$O(QFC0mo}mp@iHQ`(_F5wNI=XRDB&iJ=eY! zI#46ItK$ig^M=~YQZc^)#44J+1$2X{;-P~G;yV8DpwCEWU}&;#zRgF8zPE4lE=+V- zzErT|Ne@tvR_drqZ{_ocw@ANJAsBQsFptd94rQaEDU<|yI^^B%frZ$altdonj?<;3 zcs$hHBIcETkliEL6joGUd|)lqTzTwv%$RqjKC%d>u2SyQBe54LmwRm(Yg)oL`?BpU z&_hzNr-D5@ulxIVa+_(eg*W~V$nV48w13Dq33vPi2;m)5&9Se_u7yFI6QL|hvrB%9 zuAfoT-P~j7xjkyhC~oEtMFrANVwKbIn?_O#-SR+;)cW9&NmE(HX5Usz* cXujd?bYy;rFZ`;-OlGz5y 9{mAbYeu z6WNj#cwLwBN&Br6CXos=s+LaQ7W?(ltsZm_(jeT_(@M<%qI=7+icV)<^y+Hmu|cAC zZUv@6W?-R%EcsIrR7l(sCi-Cu^kB6#c_0I_r+?Q9` Ca%f1hxOM0QW7z}k6=&Q0tm#`Y;NPHd9LnWg(+z}Pyo|j7 zMI~D6YSgz}+}Nf S~HU2x;?xUf}ZH|NCWRF9lxgAS^!~KU)mhp6{LOC zveb@Nb$)7oYL_~<;J$)yRN0Y|-Q`C5_`L|G_BHJ>cZTAsC(JkHv&|}IG)5IQlU!#x ze`QQ_(_YEgtiz>|sM5FBmO?5J@GmuZhp;)VBbUwA@2PgT7}42bd-*LVr@n6!_i*F* z2S-qBSEGQU mX!wPABnGA`bI93 zlkNV;yc6*1JM*|k?Od{c;18+0BeMH;&sxx4tAPTlUP@h=hO8#&%Z07x-$wM&X#dBZ zncLC4ZNtbSSf!>G98Bi+{Iv)nzlmZ>Qmsl}zQAkJ7_xh*tSbH=o(eUGGZq*RH}x zbiRXpk<|HHjV|HZ$o?~lm7u%%+b!S<{?Cf{Uv4wrYoE5=$qk)hqM%L-jbLUTMz*To zRo?a!MgSnny@oBs9X2u|z7HSyd7>gv{;86sRY&pu=I7-6lgi$%sgr01D+uqcilSL; z`p=WZU_HO}0EMCI1GFxm0lF2iGAk)l;lCBoo#ivev!5r@p$g#lkAjqFJi{<3*W(Fr zuTg3UwqM#vH(q@An0mwWtC=Z3iLXx7TL%s4H^m~&!~Q)(s>1!=@26|c!P0u(mzm-K zs3#+D?G(`DemaGyv6c1{d+>n+jM^!x2mN8)re2R9Fcx}>9Vv7 YxieWzruKbVc1ojXj(Uk43%Tdt3n1*@7x zwAG?QYO1zo6o!r*9#2XYl@Gj^HLdV)N-zz|8O!xy+y?bce+z&vCEX+lY`ffj3mj3K-W9J8uB07Q+1{E)%0!2n0unUhlW3+sy>}GP~@J?!I0%)$8Ms z? -NU3x|i; zg!)j^8`&ZW UH`)qi!f=Xq3@m ztHt*l*CGv9_V b7sV`ka({w=F4`6tABB+{VvSxaKAG@`wlw$Nueo ed6A83>d*)St zh0`e9KX5b`#$7^JA=0 kh0sQi$v*-< z(LhF5}WRJJ9Z9-26kfL;z{o-~woe{f%L9&4+mMBMv3_#G# AYpI+IDfy-vYU z@`8*3@m{=kTACL)xm40AavN^^LZ&9k@VPD9+!oW*0i$Q0n&gpWY{{Db-R#;N-SikI z4WHhoo#c#(Y(il07TTnQ5qJ0TEh?Q)Y2<& }V%& z5bQfa8Y!KzN)s~?4O%~Fc1yK1tZU#h&cj%jGwL*czk*>Dz57eS&Jdp`F$av4< fbl9LY @g )CW_1URq)#CF08EV*Wk$c2AGQdO3WH{uH2ZibgO;T>G#K?{ z5&Mb!`@eMm0MZt&hjI?w4JN~^vv-(s>fN|Etf3 fpLZa#rw9dood30dXO)G<6?+`p)4}dx#>U7W6)-%~2ogCSb7{>fcsX z(kJSBe|K$RRl#J(4CgTsH(})d**)!`nk}$m QRRPgtp}l*;`1R1-?VaR}<-l8JG_t=ta~UhbKHPzX2Z8qG za#o_vnGzBo)_?p6$x+XWaZi mU#|-wKyzkB4|irfnLedCoU8wIZLS7KUtZ~>?{s~pgvsbcG+Sva z_ubk@i{(I+3c8lNXTU=-nPSa~O}m%KnT)(hNp&WO?Mq~eIKIgP&eis;c>(#PXid4v z5rfj29>KNli+*N;nT=A!&TjQj!?7B%Z@(#uW1bhX7VURHaV>eSt7ZyEPm_;P5_iQl ztCDan#%TYB%^u2)?V0K*rSZ&~=dQKJ8SZe}W~J=d@`CL{yZ9gyh$!*hP=?VSDNil* z$6~9dDjudR4wETZRb0;ESZXjY3<&qrSITUbov(5zgx;IWl`LH?nDuk7vpALm>*!pr z)ReC9*(rYhnW9lA&=~neZ`OA@$n)#-sKGwJg?(C*lknAc@j84{Ks_Yc-BSkul3($A zB*_#T1yvc0aIB~L iA>IDsk#mpy>nEqKR;34h GMb zcHA=QUb@LsdG|1=D`RE|R-Lluf9ST`p%;|`ff7=(zS+mPoRQc)S3=gJ$mF M8a&*8TAHpY>x$dQ>$})zBbD+x7*}s> z;a#WyZr(S< CUWM|ZHK$}tbJ<%QOMUJ_^_M`5T)dJ_)?yi*~ zyw5=5=72#qmDnof79@Jk4Dau{x7(-3;0KH~Y?DZkPX0yei+kxpIDr5#PG Ck?`93y9h0y zIE689bWe;Zk;S%IWcs#k@UKRXN*;cxQ=NOFWn*3Bw%;a}Nx9~|oD^LT(QO$(Sf-20 zj$tt@`Z(EPi{Zj#xOykz4iKyG)8U=&)Os|BhR1}m_6J#6Pv2e_k>Me0?I(fW9EOew zB2c`Y-!6c_;Kbf8S6JBRj@gEh1$yHgnbpY={sI~2#W`p7AaWmbOfN;gyn8{_>=2W< z)nC4#j;_5RJYu0x7QT4IQc_ECK{08u5NIP}yO(7F=f`=M 1fRB%jXh^0wrcIgc6eyE{+Jq zd@i_uA>rou^p%T&aNQ)(NdZD^6BiOb<_wCQvsoYI0tgpTt`|Hgy>dY`5vFn>l;pot z`R}Uy*T8NP_WFPK${D=;zYt80B=E;=&!Zl0him1E<5$i=gT;hEy8f@~2XTHvvbcLC z&+`I|3V7wT&WQYr)^a1^7F##{mw)#KW2y*E6YkM}brMSiuw-y%2|KR={wUW>XaWmg z{%b{D|B&q+C3>^-`PuOg_g7rr-zq16lVaI22hBc|P`j@>x9gS!4MI!_5j;~fe*J7{ z3$C1Jg;D!9hcnvTe;&J^pN%BgGhNhM5r*DE%q%4X7o%UZ5$s81{m;F<<=l_RDvgQ4 ztPtJY-;o5Qq$heOasia+vpagpNqHF;^ARF6ok_k-|C?PnVLE1pVStM(EW=+2RkWhS zzuuoI2}X*TAIn6da!*m$KNOfkC|oZf`Zq5DqD_TqgD)-`=J*quSdspVlLVG(0_1y5 z7~eU&!}QzuW5|%DQ&P1mp|l b_=KQ_a6*AAOVZY^F265pK^_bAe- z??qDZ+YzGHw%%!WYNvD`rRRNWxDI_ujbrRsI=#xzvx Y@}U&cgroCShGZcg zbxyB1=1 nn|1?Vw&b5BNgIEl^#ieU>ZF?qQqq>e05bhku9@^NYk+A>)~Y z7d3gOGz$~uj^qCE{B*)*#13ztp_0NIkv!#Pl~HCN;Nwcj%GM7rqTNRp5-mrF8F4FN zrLLT81j2ButwjN;tCF3Y81?cJY$AAj4m!JJRK>@KSOej8i $&M$`szN* z+40?3xS~f>3Pm0X{3j_4Bgh@JVPQK6Ug?V4?4~ IH_(+Xl*+~_XjUeZHX>l`jNNA;P2G!c_1f`O%-Z7JUH2{H6 zdN31S=oI{oUuA8THl1tCWbAIJm!3&gW^;eEQL)|$>R9t0>_n~7itc>fe?KRjOwE2B zDFC%f(7+63{1HDP4ZU;Q8R+gtWK#0HHW-NcWwbhY)ndX`n`UU8mF= 9A();MRCt&Y^GDd9BekO+t>I?0BC6nPHM&hkKF!L4ckFHtVvVAzNgW z80Q$EQ#fi~{V=;pOaLl%wxiLk3(PW0s(s-md&L83hT4JNI&i}eO+B)7ld5DVp5=Mc zSbN}2Ccx64nlVRX$P<^7)(ORR8~|ALoDnp$_BK94A8*@7u**_>CPX;%oqDUoL|2c6 zk7JV56_{tw&aJ&R@f+^#e(-U2hf#xnH|(0Y<&xi1)`wGuk@1*FDQ&-kIOy*_%)bo@ z`W<~6l9>h<@V{<6!q=PX6Up!Ii>y*`HU;(k#=mTksF{_~K=UrBADG|0Bb{rEky+ gV1kd#mbt{av7Bk3DpNmmL>(Y5J`Jy@n$&@WTAT82)53-Fv2j{xfrC z<1HUD>1YWhce^tDn|Gb2=y^e+&VHHGr!UT8LPEW|EPV}kL){2A%f=Dvq@)&A?G`Jt z%_|y-o$(^ eLZd|E%-&Q4uf7lD8sE_dG&fj+L7XI$2?+ z5HB;_05o~G%o(`VOv;BslAmSebX|m-XLoIeH*;_+q}{;v9Pb;t0X)eq6}^P2bb)A5 z^&4q&^MUG0lNTVm$sOaOm2Hw6_y8Jm7`xy26D%?{X~`L~)brL YhE>`tE&Oqy`CY({bWiHSa7Gzv@CAlmBJx7pTzUTgsPdL7I%vK@ z!_Iwy>4ei {J@1NM$cE_T8L$ot?z z7?!3;$7qj$DU<))g=C3g46r6cHFvIw`R&@LuE>f)OrGSJ*fksmExXt6X;npthGNDy z_&fepF5g)oZb}*-sBEnzltt?!Kb95F!jD>^% O+}4lD&yAcAf<9V!#>kZ~X&L9phW%BP zuPS(2oXyF7QF<%KQYc4#GMfJNWv{N_t$%OKy!rkz*}EdL?>pjOubfn3!cSJvmw^ZR zLpuNSStO~il;}(&sNO~V&A&R3t3o<*^xzq>Vx+UR%%k&SZvwD7K3b?~fvq|IeP4Lc z;%H2x7yXY9P^bCefO0po@=l1Jz5m9;D}LWx{$i)zwACTX-?Wm+;&if`^%=Gj%yf;P zt$R_y@NbAuX+PMH%5X-;n|c)5Z|fjkMy>Rl9}`NiyLFbHa$1pJNHNs?-tFKx0hYdE z>TU(-ln{?Q^>^+`(0Tm=#wDonQe)}tg6J9G5bDdh+q9dGkFzd!^Oc&E4UwRh`_F&l z }tO e_K|qz {1OBHSgkNpBq^zLvqUzb(!2bc9i*%s? diff --git a/2-ui/1-document/11-coordinates/coords@2x.png b/2-ui/1-document/11-coordinates/coords@2x.png deleted file mode 100644 index c3469f4cdef5d587f610fd09ead23b16ff245822..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45226 zcmeFZXH-*L_bx67ilCw(A|gdmX#y$&N(U8?-a)z)sR8LF1VluogY@2euc0MTdhb0H z=`{&8ln`>md4KOYz_}m(pZ;UqJMIU<9 U(hlu17{x2-O(~S6E1oq03;ui|L@2y<8AbR258!=TEg7wKOpKmom_BV4^ zV;~pELk2F|7(LZ%O=0 aEU#OP~kenazIU;B{|^-+JGb6{pbGtGnN9dZGG7 zsyGo eJM@zHTNq=z2cs47f z|KpK1I~X>)HtV+ mDW3HyhSy@{LoqDf-Xf?wOZr$Flqv#8=@Ef`S9YspWJml zWxh;0=et1CtA#798P>?EII8T+1T~RcB0e{ndBJvD=O^zSCSHGnp-s&4FusVMhJT)X zvCwCn3^ni4&05ZOmAdPwtP){M|IaM{b9MJd@2sQ10XERuyAT7s_{y*?w q)I0-29&8Jb8OWxvSr~D8G@@m03!GOQeG7pB?|} zN>N*sZHRSH4EIthuq(UPIm18OrR&an%BssWqYuvA`&rbDIQ^!F Rz8JX6R+~`W*PY>Poqb{Dw9)-FL5Lm!Qy25(a1k 0f`|Zqu!{214#W?5?Id6A|gO@hL`H_a-#CZ|tp`Qm+A*#75{J_{PQQa%s47xqg z8D9sd*qZYO)cQ?yp
ZUch%>Lg~&6=s xs z<28NvwDi33g~$^S?mDb0^POLtcld#ruShtZ^(_QM{j8$NiSoLu5~n=QUq=59KhVS9 zt^cwbeqxfrfgG91^9%CuWT1z4#?EUmm36_(jo&ec_PlBj@dJesF$tWPbmbPKqCys@ z >yhl40-055UZs%Op{jQ% zF+y2^5kBEbG#tXaf>@ #Wf+$?P8nwP z$*nT9-u}+x$Fs-fDVFQ4fC{V#t8~MCrGxs(B6wPoe}RC >hlp(a}JV6Ke%Bk0+K zg?WW=nydi+r^AR*#f7QRanPE92%4SjCdK0iZx(WE!TFw>h2I@ir=0gg)~33`QkrWH z7FD F*eAF75^=RTrqdx9v+xSDI5cH;SUZ%JRI4UH5ZzyPJyANT!-IHcNR?qu`q6 z9Oi+~`trNo))ubL8eU-`YBXQnr kySO224h$NvSM{t;~wbdoIVbF+Jx- zYlkQ{aEWdFyR?5&+1`VsMAEN~{8o_3jH@EJK6__|I2TUsmbhd05%R!Lsuc^7^ufsp zt|^{Zy1UHUHVfO%p6}W=%9L~D+adw-9<{N5tbi~~sdHkY>O}m}yx18x^88Uql$TqU z;`jGxR=AYMw1-`#N^b9Cbc+|0FirscjFhQ{tNdfuNtG3gIoD<{GPO)Zx0$r)z zq7R(O$C?f<^MqD7W@W5TLmNUxEOZ}*pY^E9>><01FUDr9+-Hzt=x VH_i=N6HBm z<_nV}<=Iw#q}5qt-_wr@66AV*Rs4MW7J3NqtC^a$xc(}?;RPo8Fu?soa(GoAM~RKC zDeI53yQ0Z>@wdJOFh9L@eak9`8UB73g2GB86l2xknMhC%*#5AEhuxm^`B+L~<;=nR ziz -m97jI;NMb-3>0G*5&huWnS`sL)>Wiu?T8 z*x%0;qTy9@( pg6xQmpBNujS-OtU5_in6_R#X>eQa|k*3BNS(%PWa7 Xcpba_8z+MJpWfke0O0{X8oyKt$<9@Ns7Idb6eo-HzxO-(Ga#9G~@7Opug-muO z{}FNqhXH|=+(ft2GF g%C_iSQf73FkzGOfr{Egb8k2p%wn0 0q3x1}mH%DP`)`qwp0Ji=bDXTdJ4J*9TNejsvTUl9 zf9bd@W@H$4&|Sd67GEze^i3A1=CW9MOZ~l#8d}eNn)?_`4%@Hk6e%v6q7OZLhDbu4 zy=rRBzF(_5em^~;k;Sdar#wB4U0?HvC4)WW49O4r(Ko&v+&{#S( a9RLx;YU5^J7XmdTm@evyPEI`U>Spemc8)^OJB)^yGw{{Q#&Wm& zFJW}Mp=g2nX#LC@R%aP+2*OimM2t@`ezhit{Pd#TFe?z9y0mKjXY#Th4sOvS(!eoh z&GD7phQSbB0?Iu)sGOozQPR&{TNa*Qbo>bRjKw~ffvV;|{#4eEUUBDk*04bV=V_*= zqgRhBD}^y{eUVPxyBg*xT({7Z$btec^{Hi%IH{dM&Wkp!<6#Ju=hxXzdsVM5RIO{G zle!TNnCX2tK2L3tf-WMXMp}+qWjpT#6YTFGIsrF)*! 08XqbW z+3PmU1O$YoTo+Z1j3N3GQYq7wWo |^j%FfJ8qbSkp1p~FuxA|ojTDg+&ZK-AqnOp{P$(n zdqG|)8SZi{o<6#^o07EaMfqF|=BI`HEc%@AgmCMSa241Du~mr*(O226Bp`BMXU4Ii z`GNKKtYD#|*16cOA-lcD0{%y??o;BUeA~@#YXV7qx+JbYo~R`tu#=C|2NzfAwgwuy zAx>%9(t0Fw0Spb2GDzfdghb7_2Ab}{>s-)iG>5=j2mAePp$MU7)pfs~4&k%lLkrIW zhDnvrvpcU_q{a^vi=5xPkhX}boe}@UCxm>(Lv;#G
NoIE zozOr3{7C8Ac&I*EKNx(*(=dJ(r8wbB2BB1E>|OMNmjfA|FKI^~p7D41o210?16_Gi zdY*uXSfB7EG8K_CYU7FKI}$u!@_MU&UebOJJk7EGu=+0+a^-|C6}S4Gm$c@DFLB6X zU(EK7Jsg+wcD+DHy+YH9k2E=T&=1gy&1Y9 mlcC_qoWa$j~_D Tg4y&;M?&VshswjN*_sQ0A+ Yk zO_9*v9^sr-em|${tuEfBetjkZ&~Y5mK!`qO=jh>8cHy|4!FYam#%_fehV^ZIScs7p zxacX#U;8ss6fz#=Nd}y~A|T*l$1kApFDh-U{EIVX53%m9#hj`F-O(j|)NsFSu<-6n z{xHpQpYz((5ckui*B-+o_F0cv5H#l3rELpT&xU6Ffr+~z<(h0gvML$)Qy;8giK~+% zc`kL{xRqH#wnQg)3tHZfaE#Ff# z_&!kNc#Z>4X(+e^+qW6yT4MXkpkPmnVZZ7Kf}TABPo z%qt4h@?TAyysRT4#exMp1V36J50hEnz=v5!uY)p-N8^c=Sx+Blt624V{KQ87F~bPg zq#>%))_>KGFKi{OuT5N+%J()pEoiF(LG|W
y9V4_iFhqprBx$;Jk(H76nJ+$_d?kqV7Hz7 zbV{WE38Rcm4^KN;Edw}danUZ-Z6RknTzTPD9}Ryf81GJ9fh)@|Pfc0PVW2;$Ls{I6 zT5>AVo~j)sC1mOj7mr^+YwJ-yg4f{Pls4{~!O brFsBu9kCF{ z9YO^DPA@&pZ>KC*l$Thzy5>l;b{@N&Om01$LEPd~6{yd11E&AO$V7I93h&a2xK8Il zdmj^vD?`IxZXEVgY|n4o9_4!NW8LW~K|MkE;hiST&x8U}sbr2qMwaA`DErs<6?>{> z#J``~rdAs-zGgI=g&9#`f@QX>aQX;XD;ZkueuoUy3B`|wE+P;*MOu=RiE12>yvZp9 zJWhov&(oQDhw-i$K2BwN8sDYA7j4HX02QoqOYD7Jw->5P)CdC;I-)lFdOGnz$#g3I z_9<7-Vn)#O;$AkN6Q{n?UF}D`qt)(oTv&M+e)hvabAo?-zZWl4@rqxHuFuV^7cUKf zoRL|-uO2w3{%3GlX#bq-NeWXs*6EafW)}(dO74D`j^U)en=7!i^}<1zVSx5Ov)p3` zbqC;Q`513be0rAq$pIQugQ9U^SvmZ63+^Xd$By=yASc`vht>pKJ9X<-(mO`!iZv@^ zc5%#+eBK}#4HbYbu~^NM9A~`vhaP0;Q=*6_QxPWV>3Y;W&9x6x8x<_6ll$0-z1sDj zt~Xw=T143``XtXNYcX*9l;sgWVSJt0W`g>?5!OZ<-d6FKAz6+jD`H+J>t$<1+MY@j zgnS@a@c(#uwQas@<7w=q4qotHt9#EYr9X>8)ZA~KVQ S(SQH3Ix}O(p$V zo%pP(>2TceDUDgA2-4zU>p~aI-o+$aRf12}rm_pJj3HVDtXOcL1{D1dZ%~wu?PXoo z{r_+;<3`)iLd$r@x+Jr91^Zn4V{K0AEwC| nwvqQgbsTSne}3MV zZaQ%B^KkgJ)z;?9M|lKV%8zM{(z@19OcHmu_u?scxuqrQ`>EsNu6lUaZLJdn;8?31 z=ft0K$X39q?5)==k~;nr=TRw7DVaPw6J0tEj-)`lg7?I|v87{o*a06U@lZ 9?Hj|6NsD7!(=VBT-#h`Gt|T832(Z+^syO{k4DUc$oQo&id)ep>1fN zlg(7p?LY@^q9R%;O`rOP*OIn!=IW_EB6)G2QF}wHvXM o<<&gEiN|G5hIdap zfTzTDhCKC9GTllihr;U`8kTEqZw^#DkF!#PWCJ32OPTRs5dvzRGB(B{;_ywaBfL~z zS*3-IH7br1w>560w+FfXq$GJ1m2kG6Aj)_{m-%Zf?Y*I?+$$Bq-b|CC9*|e9p?Pq; z(+$m~BC0Q7ba|@LA`L5L$4{l}sdWl|GTIRHPvJVr@2(z2`YsL8W;@51t+#(`pLcV! z8ioy#VfTXUrb!72cXeRP?^hYT+#>&&-~Q)36A*35B?Af=TfuoMQrJg|T 3^R<{MPsj+^aEV-TsjuWuKrHd^a|C9o2!0+va d?F`lqn| a#v&P5G`2H!EndcTD}Z$g^qLgKd;j%!85^73eu*{laRv_IVpd7M!R67CdI1O~ zTg3+I+&BJhE97kXVm=k``8f5c4j+D$f8|;AV#`^)Ej=;M70$zS*(K3AEaYQI-*YQg z_;24cAZtDh|21LVf~z|f{0}_R#19q3RCuMK>e6cT_e?D;1KdT~sL1*QZ_}0!szm5R z+Fc%}zg2R6v}?P&+q6CZUb&qMZtg6wS?D|*_5H Ql GoRzpCMyW z)G^?IL zQzfgmMF^==Tol2Q*Vb_Tv@>7~F(T~DUK%BCTSAULLNdd_S=jDNjhM`aE=o4GB)@Nt zzz>ZNfzt=RXzUVVopNkRUG`2{sv+`=!la9-+`VnNX-e)dB{CcxR*9o2psm{2SFW9h ze{_l~xDiwXsQ3HqH`TNQnW=};EkOZ+J+K=B!}Wa9!=06vUDq*x)&{BLjn3|i@d<^6 zYb1XjC-?m+pksjeX56suI)Hrd^6qJ!U*2UAP4x++9A6&5bcCFfgK7X#O*?U5CKWzb zjiMKu(p >% zd@$32^1BX#V^ky)%%T!T>YC*aXOH)h8WS+Xmi(M0k$j&jbDNqK4SPL5as>P6?O{AN zs47?s|5G(w4f2IjFc2+`o#o3u4@Hypq%^qwjrt@&eek{g7e=xX2|Nrh?6 ~zWt?@UGU z7A;sMb F&GQCBgDCY8Rh)2lNZEtJ64Y+gTo(xk^^ee|sE^nh+ z?5FW{VsOoz_M#wWj4n(PrzrIbP6y9|k|W$dZNkwJR^;XgNLs{o_Gt%-_IR`Dj46eV zRujBEqrY^-wJW??<`b{a%jriOA?Z{kf}V?4S6(lDEvQ6-+ce)3gw#Ez6gY(|@O1Jz z-a#+*HnqBGTq0L@(sB_m@M!FzlyQ|hay4qyx0=#SMz+_L+RpSG-s88+1|0&|9WBr) zD53HVYYOxwvV~)kSyOG_E&n;o!XabJ>((*bJ8 G9yE%ZnzD{4ifLCah(0y)2VO1c>uRM1- zh;@7!Ud~&)I+*3dC0JG~&wu5tCP5^vcvcVRGs!?QRa9rM{aQ zDjOwY;L?A+Qg0-2rL17l)XOx*B*egQGd$80%&sxzTCK}@wB~TP_@p5KP=_=p&$mNK zd-7;s#Sm_RtuV;%;iD|^aSh|LSwCZvZ)jmLBb+o1)1#h)8)Ai|RhS ziRzW-7JsM2S-xL9#}(-byTN(K=pRtU@`Ru#%=8^A?8(<#$}0&zJp2;)JPpT9mS|Dz z&=p975G2UdCxV4fBA(ePRwZ!D`0CrYo i-Ql{$rlAb~ zqm#& h)$*@rN7w!th;&FctdA~DE%qFZ z1oZ8e(d#sKddS>h^%nIzsgvO5SAQd3r<(nMcxLHXx+W^GMnkSkOA&70!b&S%`+JW> z`H8I)1Xt6GnInk+qeICEZxFEK;}{*@`Bg2tOb6vhhFQm#ZL~G+(1b|_mUS#LcgH_J zG*)nYnVc{CBPLAJrZP;uNFuO$1+&L_C}|iYkQET~A^iB84Bxmr9~-)kp5jqiMlUt# zijRP^av$ES!>pNq6~bK6^;EtKuOu#b?U2noBqO0T6Gsf*@@l!Q-Ld|5ISUuk!hyfO zDGC+|V_|gV|LkFi9f661W^`|gSX0GfTsT&v=qAt77eOr=+Ak=as_b1?(VVTtaYigf zlm(cFIpb#n;&*FE_-j*nIv&9I`r9%~`Efdqrr-V9nzR!8kk^^(U}ax=F?wKDo&QaF zFm6K64HNz>YRbLm3-cFyd{Y%8H{mPl>=qFs>y9BNiLZ5~oCH4iUy`$&D(%hZiK+s4 z5_N7lOq-n#uH~k~moe7bnRPL|{K3R4z=2(Prbf&9Y|j4WIYfRW*`$9!xbq~x B0crU#P5 z^SgXDWgs+#LD+*mNpvQty;q`=iBDm*=Zv4Wd#E8caWr% d4_(rgm~OAje38EoBMLlZ{9ZWqas18E|Oe zT-e=0ydoi4esemv#<{PKRA9!VWxh|v3Of3vF3y}wXuWk)ylzv(vHd50&&(-XrIV5L zgw)rmA#pErN2hr(8i N@?wTB1D`j4e4~JR*UqlXp)&} zhmm*agPK2?c)+M|FGjcd`0KS^Bd;0(Q|THyOFqlBdG1-CmAxmfEW#k %R$wP z_CSMrte;DO6m59ydRoN8hvQ3eL?YevgI5N9o`uHB+6wUYPFr2XGA r<`~1)(HYx7ncFRUgp;QtF8{Pe-ZI=C*4Q z gv^NN6mXHC{+TEr8v)-PQy*i$K7 zltMom-!pDc-Pp}OR8amJBhV5=rLxpR4V8&|X3{8%A*w tN*0IsE)YmW`@8fQf89!1CW@w;6=ln$PSA#?b_;jC@=V?5VV3~`c zog e3 zx+j3NTHeAo8&qG5B{Z;saKfG)ir7Fs&C5*ZXwAHh@r5U4#x*ZDL(kgd!!bEtgxH?S z(#mGNu#leXOyl!=Od$X-4$7Xq-CvPG_L1pMYEqS#r7-^!uR?ge@OTc34rohbP?XkN zyc;S`$C7>+iEU{Fe~}0*nrKvCS1B=k>(I< +!mF<*HM_ z(ZqI_$-oll 7|)ZGR0cqaM&-24Pmqk2l^k#v89&GR%0anu1YuKT4C1sXGs3=%XOi}dhXh}fz0VL z1Cu5-Ciy2EoHZkvo=wNK)r-Q8eEx;uI335vq h>9*OgRz8Y!1$KeiL zIl{MycsY>ZqgUcfgFQw5xR0<`0oWf3g`6VlF=o{iGj>ea`^s(z%8pN`+L1&H$yD)F z<~w3;58*xIq2p%oPC-D$;|)u$gPPgiVk<8W;Wu5FEq(8G6IUe2aG+Ujw6jSgilLx> zN(t?;MV{I7erpPPrKs_NV^H95j~XpjsAs!oxwY`xG;XYnffsC*&@P1+Ec^<-_agD- zDkl&XWxLne=_?d2Pbc_G#kx`mtyrU?a;#X>c>RoEq{L|Ad8C>}mq&t@kM2b-G_F>2 z!rk+T5S_`-yi1PKUZ>w#_h=+ve5g{HQ*(0IIZi6&LLR*sdTDTdW_41W5qSog|BSSs zUCP48xaP}ek=+HacxpUO5>j%Te!W6px^f;W;sb{3{TskvMtVEp@@E+w31jaiB2p&_ z$Tb~-Z>KsSM7IdFL^6Gjzq4nnv9x8?Gf&@pgolu>c#<{W#p3l(Iz)7eRJPVR6vzzh z0*-AvF*@AyBD`&|0wmDa`S$If+fJ@RJWrVTG*4Q~E0$i{Zi*?BpWY)roPRru0~W>2 zgx`-4;}r}vJ3 ib@ AcjAbS_xR^97_^g}?qv51QUuh1)5= zn$l(tcP5Xb0+4tJJkauN 81hj!iSds0j%!FF)9)wj1e?SVT=Csl?9r`mS3mXGDel`In|?% z4911XdTh 3tjwqhdN+_YV;x zQ1IK7zAa>OaoQezX{FG1?5z~4y+N>IqC30=$wXeG`pkTufY$}od1)zlTok*`C>0!` zTv{eaOQURo=*&sWykvp~2wX|KUT`o*o!-)3oh)!1505I<#$!*qAQ64a^xCV1iH)Ub zO?IWcY0fn~+YaF5U^~QnF=qsJv!&^agR^*Ualw+matC}oVZx?wNBNM!3X72C-MJ z|3MJ>#UaXi?PdMcItaLuuEaO)oo9$GUXk$i$oPO_# ;^GI%OWkSND-=kQ2>{Y^nV`q^@C{Ubi-!)1cw*iQa-WZ{6L_O{ha#w7(O2P7;nt z-;d+{ tN+5%Bi-FJ2QwT=WC)(RyDku zQShN50m{JHdK}{Kv0nMxw0XWy0Fk;4Dx2Ek8~BK`RsY0k3;c^93`ksF;m(TpOw* Oz(ht@&^9+B8DAM`^CoyUo{spavxC*`P~$-Jp*qdq3yjY@@|U`W*L z7kE|>z5DjM5Br4e`rJn(zyKH8_u5VBRb$wcVHC1C$8l$E0DmYA7Uz{3^5M3X--1Sh zgvwrg8q*d-9<}xFO;q3BAvzN iRgFQ}DZu$B+ zkye|OQ^?ivDVcQ#fDc{?5)!_XAPoF%h|$~Dzhr{w7`W6G-3vrP=EV$eS0bVAwCN+A zA@GH@GJL@2lX9Mn+5J 83k0RI@bWvh^k6_t`zGz00^NM zP`3kyco<||r~87{fm38JjZ>wFoN<_h`)x2o$ z4j4J!FSQ7i>9fGa5^9g-VeH4=Zn$pXtHR#?Z>awPHh5z}kd8*cLmT@#R$CXx%~Ki- zTim8WGw5G;cEu2an4tN@;JJZ4PU2vNwj=14I1pv(EC;8Zbp{;$(cj$_mo9^$`Z+#u zb&`9zebCd8I92YxKuG)~`E?4GT&HZVyki1fH8ZX~03W)lo#SR2oOV;q{&H=HCF*ri zA!}F#9V~Mio#G&2h19W`M!ekH(_IvY4P2B+PNdhcINMOw|M(9LNY#BoSsj-oP)RUV zD^|1f_K3ani!r9x8TBLfVy)4GKJaXCSxHf eAL<$*a7c+AdTI-ct)%g I2I&oWJd7}GV@o}I&LnRNi6 zVC}KY*BQzTv>D^NJ$%` -!b|R>VCGw-g8_8Yo-v{FGZ=?Xx zfU}^B X74;BO9rG+&myL&GoA4*6Xe=R2Yn8s}Z=SlN&Jej`P*czreQmE#~gde=;0w1`L; zoHsyTvFi}W3;ZD0%b+ier!OhkY4TCbpM?p5%z%3)U)_E$3bb~w{li`gb()U&a!qAd zT*E+=hYd(g);=}g{vl^sn(aEez1trKFJKNU6Or+l(XkzjbxheZ0wU?N$L!@cqpKnj zPVALy+km5*UjJs>Fw(?O_IHWKSp3%|KomXy@}WozxWZ)C6~h3f@_g_CHW&ZMskC%P zA!T@A?i<2j$&)S z*L9N^$~2~xIZ1+(KApH@iXH`+>F;)3wNOgL`raHmi|x2B?k$*mkSv!;jd}W|=}g$> z62+cPjq{9vgld#!j=sDgwE%Bwx4`(^w%S`~*^;@cE(m}_Sf~=!ybv?#yE5>RtEy2x zDwtcMD9^E5-B4%>Tx4BqHx40dR>k`;?SgG$Cq_JGnasBtjTNx|pSH6%_S<3PUg9@K zH)eI$NI%>Q_;0t!)=4p~W~3-5g3wW>{7FU%)#U#lM}lg{hphAp5IZX= 8KyIKS?#ISipzO;&*adM?b&=NI%cr22E!dof!>6)LA| zbyc1@+Nt!~nI79%Tgz5TZazDm6F7%1$Gkf%<6`vexa}a)bu2qwo9^jYMs`b4f^e6x zCi?2>=9V{J!`;i5cBw3ce(#Sy2$3P2NK2H_@P?j6_ax;fY=;-ee&GyI#}_*|Pl_G= zL&;oc4CVqMKo8Fnx^Scy{>iHTb%mdSXtmmbXPN9Ye>rKw! Uh zRTNS+vEqw+#3u#m|2>T)T0L;?T7GtJH3{(j9n>35CT8ar=isCr!*e8n{w)0?xmAo` z<^MOqiS7MgvqYWP*3SRF3*djV;iB1}Tbg_Ei41vz{2PgP`cRg(@8pokv4ewtkwQ01 zU>Hr?4az%wbtoEWxFm0*((e166=KT~q{Xs3G&7jNV=+QvwIe+Arcom#Sh&nh4;tj- z@wZh~Gve)xOv6i E|x7W7@teXA7^$? zQMekj5f!*`nSFsy8Iv!>MkRzuVi T&GNx+$CixSQ zyFM-t+Q%|ekjEvIU`~Bis3KU^&50l0Dlyr=Kje#W8$vI73m&|{)GRLxK`ZrTh!_x( z_*Wam{|UjT@Be2^eEN!LwJlDG(5sGGQ5s2}U-~k(WC6k-ncaV&?9%jp{gNCr$wPZx zdf-RIgS7eH>`hPR09@RUa8u#RqXiAh-1!@SGbY9>1W2X-Jd6;+@AV7 3&gmd2#J%U10{MTr|hOU;lc4!pc z1tDX;J1O?j1}LXlH3FlV8{L2-TWiw(3_^$Nu_JRG9)M+Pe%2mb+Rv%?n=97(=C6=H zKY(EKXrUZl;ZpZqfRW_RT0!|ikc`X`OV1NGhZS}isNkQk*G&-DtHwxNOMcE?z?kha zKNwOgTN2qj)b=%*D4`7l5l<2;f0Jj>@EA6q>%gd+&p;mgz|_^_B Lgy5 zjnGGv5KfJb5I#jS+e{(weYQ?zu2qrI_^rTd3E5rL@y5EozAZvmunu?C+@W^A(i?<$ zi;98aJE;_+$h(8-oED?RAG?LBPnnCasvtCL^`ECsx2PW$ImPb@RvPa5G1`=lWRx6V z9(j~4U<;?fHIG}ip*|QU{qtO&-8+1PO;q6}kQn1-;s<)h_P(tAtt22{(1PYmsQ>sf z%oCuA<9OSS3%ll4+XMlwYby8|1@`OH@a6AmOn^GYs*CwQ#b2vmBU&lhPP{jJ#pVYb ztdQ*ddkZkddk`ZidfV~?^g~BP^A-ZbWRV(Y6#~u8Ur%0;&h@ZeDkS|r9=JYPyJu@T zQW!|If_~|4m6eK9u7|yoQZVN@e(1Qn|AWNGPiPawRHuDZ3`Ngw9jh#I=wkDdb!O3D z?A@HX*hsNO;kh>J6H{3rhbvcHa~UGTnuC``y6+@t<_~Yuzuz$reIX>6!I|w?Pj5!& zHfC+;Rb$#{38hFA@5iVc3JcHz7-qRvuMKk1O_};B9m}$cqmMm3p?wy0;h`7TH5e5} zEw|N_p1>?%MEj_gD2PL~wo=Htqb-)4y>HUP_mfwaRiG_{v+nxLLrMYs(`QEHHYM z?;jtaL-FT>-G30xE0&GMQW)%DV`~Tr8FfU8Mb^iwvMrF(E`unjW?P_}xO*Z*=1jm0 z@iN`dx6^yHp&z>&WRCL#7z(!2ooV5E3*FU8l9BnoUHKxFZo4&-Q3Z(x9U@eNH?0u* z2Ka0PKc{N0dI)r{9I}TUmEZcxSfo7+(rM}S=S`2N$G6!XfngbkgnN(bQAzK&RU;Va zmS`bx5RJh_WHoj0GDbvfY#&iIleJ3{^;NG#|LXd+eni`76sbh;h<2A!yUWNJ*HaJX z2tgL8&g^kmPyX@JT*ruxnfJ1rDc1Yw#LG|BnQ(b(SmFj43rY&gpvEpZ5z;jzegBf> zW-tH+ILOpK*w`=CpoVX9khOmgKPuFf`veh?N7qyx_h?rhKEO1!Pk%Z50%)bKAastJ z(!#0Y=r4gx{_bG;y9@EF=yg)FN2`Kua88D#`R|R0U=CgT_PPu%tO#V1cF__7Ro~0t zM=yJew=`u{)9BE)4p(zcNFl866dm|-rKJ~Ufm{>1>_r=wx!0qJM1p%zQ%2A=?ro2d zMY=z@WOY%lG?65j6Jq$!5oJ%^7Sy!U|945;Z+ek@&xA)fX&+BB80h7T)}=}%CK$H0 zlqa|es;YV1&lUJIY$EE`rt1V$KYfj;xH8GHIYP6W-jZohW;cE09Y54)UrV9w+3zcl zI=%g;LEuH*rDp0R;-!gUH_ulut=k-L_UqGz+gQc1;Z%?5d5878|8{j__;)h&WC{bA zLL>>>sd;2ty{#n!U1v9&xQ03ddOTM$CY?Ady02Pl9!Op?(W ?=_%o6B#ZCxLXZM*OT%g}mT%Kuga^Zdr$3xbD97hpI M6?RrRy z!6Zjdg(st>5Ez8q;8YqEX9Rnt3C3j;151&PzHUyTViU}2$A#@yIQr&m{<{B7Uf?@r ziB`?iG7O1G^+hcpB}f*v0@2 oA)#Ra<#*v4 z_gy+MvinMh-i??w#5(9CL&~-4YJ+cgSo_!wNiEI$QvN_ePCj3feH)+b^02&UAaXp4 z01oA Aq+jWEXS z6{mQF{@oE ?`LoT%!SOt3;0yBu<=!b9s9h7OlBL8UIagu9_JS9P z;wZ;AVK+?;PB|bbK$%o!ILY}6MK@o@zO7J>0u}B09 6-fXz;E^f0i$QPA}`R0 5`6=|IXE~QYVigQrDU|g zsV-GO-6N!(19t^z>BdJs<{p*3B#QmJ0sQ$%6S=M3-8UD!0!ZID19FOl(sC_}dcZO3 zm?2Bzn!@;7ThrF+HM!2H*+W7P%4;L6D*C_`c@?O}63TvW{$O$`ag1XUz^CQucSH;D z4*MJEcwHGh_^#^}7(9dLleE;)xY^n`#OncG=I3u@vmZX|k}7)gOzsX9@J<}?OC5+< z2cNW2xy2zT+tIwaggad4U~)*fJX)bKHb{~86OitQS$}lz|J&`(n ztb2$EAr`BcGG~d_E@gtO@;9xAAy?CRn8es@Tn%~QOMP?Sl7@3f<|@!N>Fpx6R`>n} z<34Qo*3`eA4e5;*O=sJjSuB}wnsiu1f`>D^p99j4n7&x+3)W3H`b+K{h<&m`-7cc6 zvzQwa2*R46k$`b*e@}UDQA<|GCj@hPt$iX|-mk|fsz&5!ncGt1lKIV>kd8~pP<&Q9 z1I (ffqYKLjSOWtS8SGQ;s=x?oG*2e6Y^6#0l8?8QJ7^xq;LXp;t zkyKPDt|)^|(+Z?czl{o7#xY1oGtjJv+>YNa&$%+YmvzwPrZ`TDDReAY7=ohrV7anw zMVEGov{@aK45k++IOXOu@v2S&TPhSqf)%#Io$Ky7HG{p&$-0FKvVI<;05x>-^^$q_ zudvp4tK;+yW7VfdOT00S&Aiqw)7+eNQ#L7zcA|#DObtuTSwaWvaY 5cKVr3cDulKO5d`eHH0MgGJHs_<)-XirTG?Dh2a z>7k_6>4xN P`ZuJ?J_EZ(i5uimHr^|>tCsEGBI(2%Fh|YAahpqk zjS2V^?x Z73z{5uIrQN#8>nBq z7ij?v+45lOdP04twl3tHwhLIj zI+r)oI9Ae# pNbl6tV<^qTz7(A*8aVtrv#@V~;DYQ|lX 3_o>_z zWezr(hq(0VafQ3ag&jUjZhK`vO^E>`Rwm1JB}|9(YW7yn$}>qp(+&H=|Mch2`~CF- zoP- ?=RUWq2mjCvCo2^}i)8)OBcuU0I`l7Wn>_EtE ztb-58bXZ{PI1U92*8{tTvCx}SlFEL&hXbowi$%J%JlUS}e>}d^sXjS|>&1N#i-nI* zSyiYYx#{)M?Q~IBQGC-XtAueiN@fQd7>_;2L?s3|oR}9mmJxL{(^Nq_*Ac`pjIm<% zr!Uq2IC$9qNWExNghE0Gx4#v&)Dm?C9cQoGOpfw=YXqZ4x>-^Q3GbI?WFl`L@(m^C z!7^aq#isviiHx}|)dFJ(xcyi9T}%IhshbX<0&>zU#8 cUvCPSkpF$e zpJ4RhueWA_X}lbc$O{@|Op+7xsMGXe9+&TVd`8aY^!ko3gPi~qyQ`@%oDlC?Lbq@* z2Wm(OLnqJmbJhWlv}PKzOzP0})U90KP3QuQ49y%oG9~R1XuC8+tES2Y+8N`C({bG+ z_I|P0b 3h&1WF zCJ_}-5D<_qLFrNcLW9 zuDRx#^EZEcuC;lBAHvU>^o@0U20YVlsWY+2PpKVls@ZWLp}611PwfJ1N3FRPeT-V! zrI4{UJfwG<-bO?{8Lons%wg9hHVJd=eSHwCKc|H7NxKRC%i;q|+oXfQE=(vtKz2C7 zmy(YR$X~h{!cu _Ec5t0&+}lFL h*KY%#Z 7#w<1hehp$%l|{Ebtm{(}SlL)@kTd+5>SSJwW)ssE0*J x?k|WhZX}IWT5=GS>nGXy}WynfwR}B z)_+9*cm3m=6F@`So>%rfz66G&`5xe&{+@@QJkH;r6wYbBnPfSh_iO#+Zkz49knVlU z?@0iR?0=sGjt<`^yH+v6S^Z#9qK#F?a$r<&aczn;kHq)6o1(WH+l1amt7QuHIczth zOkrhWem1J*X!e+dyz3(K$ob;Hx#CM7b5!hGiOVLr$1i~pDna}mGii%iI>`(|W<+;Y zudky2AINNBOz5|#^*I&K5ru!u4t6Y~Z7e?Dw@UJ150K0twwD#}RQH4;f|oxsC;3bB zIkzeL+s!8GPXzinzi8!Afd;~jE4b 9LQSbH)nN!fnZ1c6YPuS$@F6M{eaAGL?${2#+%T4m%j&;kNauV7VYVlB9C} z!R#N|f7lqY*gu^dNeFI>xk8W<)?$dc*%s?oRb`yG^fAxO{>F_P@BW%eB6e5O1iu$t zex7EqZKJf*{&lu8SRJYhw?3Z>&B XA<+PhnkfbHioSlvouRh2Na1__3?@3Z5Q>Ha!z8ckGXSbIEc66W1c$Jcpgaet z!15zW)ep;iWyau=q-}@l=gY>#Q~~i(v!1ah=UsbtqV%Kx@ROM_g>!OI&I#`@hZ9Al z %CSiAO_=tp3OW#w4tK`|rsW{h{9t=0>rzhrVvmNJCLg=Fv7D5&j97)KG z-gnmaZQR$CN-Z@|siQ^YHry)1U#OreJ?GrHJ~R(w==*k(4Nz`*2^*(D>eTYnE&B5Y zp=@|VP{I)1mR!8V_+F~$SYKu6TY)@Lwsu`WEIc6guiE?!iA$%7*RTv~igyO3R$zv? zG1VGE7<4LuudU64iVMg7qJ87)_y9i)xs7;6Bk`Y6_Q o8QFi$dzX984uEp&e0A_Sd zWUI9kDkOA^Co^bW+gtvO=KvC-JCt=Mw91fYK2=qYm8VEw0&m&Z(W1mV5q(GAr2}-^ zh@{Yn7}*AIzoh3q(;aU3z-Ywz(!drmqeI^+96_wopm*lOoZsNkZWLAO7Oth4qW$W0 zB47LPd;&WQ8OhP7)&tqJd$RR$bDzsl!APa{GoewjO_{(^8_^_gB9L#GNHI_m+o6s0 zZQBMk6rWZh`DDftBMl`@fTkw`hGS%~)O1=4cnC5gx~9xk(}(4fd`j!PXN7lZuDx`D z>;C%{)4$Skk-F`(FgWW_(S&^+IgFN>wxDN=9R6%G$&0)WE3PgjQ@#-}g`s}$FuTqc zvHQqzj4KDpQm(D}k%5`a{G#{gVC2E#PwQ!*yPBs}4)C4Yj5=}k9{cUtQ2`D)?J)aZ zrvaz87x->-DAsO9>8Rh56ATpVsJKc$%;nGR$tfq5_w3}RX3qs_r 0r#Fs^$OM)7+z0{ zYkL>u1*=A?JIB=Mfb_bNJCR`4yeRP4D%bi1%`V9HzMXtm>9oFCJR-=B1aGHyW!7Q+ z3wtaC4}7|E^1c HJaD|yd>tC&IG} HQ$^tt{H$UinmHiNI^jO&D#>nW4WtCUE@(c-|y=BAv;=uvV z+h<>N39t}G3&2DD3PHmiT!rsAdmZhT%RRsOF)HP#hIq)ed!SG+5d%TeSI)S=d7mMZ zg_UBYh9#z*UIEs(i=%8vPL?5>C;PQH;Aa$GU%6@8w{s%Sz3`ecTNn0Dj=R)w;I^w@ zPR8XEXEpEDv+__hCM|A}kGMY8 nU*2rN~*GS z{bH#-cu8HOliTyJ-j3tP1!@wtUTilE{b)9ovJBojm`U|5a1=k@c}0%tYoxs%rTW|p z6Pdng<`{Jb+9%nPlo?A?3RbK`GTsjn3r%9mdodapT%aPI9CYrLhYQ(t%ow%uEl_@& zeB{CVM#04GOtf?ENc8lk^M%_y=NJKNKH-cBe;cox_2`CBp=7&HTA^PDb0^-{ziHoE zlez0nFxw0Twg4csRt`a~&%7~lu2s;();UeR&A_g==a;HtHx6dKRLanq)${V?(UDa# zfCbuX{Ppze`FxwHo6A$I-1g=*p}kX7>>$RK?v|yHH6WERktoHm-`<&g30C*D4m>l3 z^G0^h?PosIL(0vh&@Ue|{XR7=hU(V9_vF^B z2%MQ``!3_g7LL|mDcuR9!_TV~P0DvQH}ke`f1*-@cCwk*CR1M_)bY~lm(XQ_V;!)n zbt6VjsKKn$AYXKdI(nz3EVe5VPZo}ANO jXspJ^tF1On1c&$Y&4pL z_W8%9b0KWxukn&P_?H+D@^O;g4Li#j7uDi)fvq1y&x~UzO7!*4_p7pHy$@G058uQ1 z5H4VWi=`QTjm-2A5K=zj5@CY3;?~I{9DwCMIS@RctowlZ0F%<4Hv%8J(+ItuGNib& z+)X0K)6DO#3a1||y~0Me)in6d2HjN0eW7XHqZ$d{YN$wiXBx3@-d=?C96R%eU5rE> zUBQ42>668lWi9%onBA@jdo&FF7NNbe(;GXI;4H`TkSiudlw@Qs@G90DXO~6CXWo3R zM$O31A$NLuO*g)6r;CjTK-|il8gkO`6DJSMkpcuyKWPc_VGkbD)9J2OLGcYod~3Hp z5t6#V))_iH>$_k>dN la9<=u$jE53Ei@+{8pxt?uX;3R5 H7a$j ztJh`l^he2_u&5T83ZFw~(X_^rsIl*kiy!L@_6zJB6f+K3LP{DaG6qEr*`rB==nS1=VS6i6&EYxuh` z61VLrw2_xH=wduEqcV*xmR0#dp1RiFcI^?=41q(;ln(tc<=3N|PEiA`Y$nyc%j>Px zNsrQu^VS3H(q}!6bBb$Ryo77uD;&~keo6qdU?PnKL%!@c)=`sw@7C?;Vzsbp0G@hg zCWC&z>g^I}IgM)Gl7XeMiGlT^S5xUy7Ox0~b#u8Y%o@c$jB11!QcVQC1_ELPi);NO zK|)Mbsrdc_E1WDaTIQ92)|6{9IKdzd{P_KiEO`0(H9X!^d>g4)>Wb#@&4S>w
tJ5HqK`FqustFMe~Kz P4VL5r-PIlH0wVL%$BI|7!nn~8it%}_erY$c7Q;en*@7<~2Z2p~d6B1( zu+dPp{3mQ9 9&yg{*S<_3 zp7lVp0@Lg5;^-6e0^oqE;g;vK9o{c2txIM{i^I!{yWsL$b=kPc`5@c|S-(j2;Vg8M zc6XUWgR@Gx&tWxaEqcM}^pbRczl7;i>p7vwkJN?Zb4wnS#A!l|HnDa?Wn6i}{X*>Q zHnrMgK{E6vnB(OW=gsad?n^86-@Ub*;)Gg%1QF=AubZ9?*Vmv!q1CCIn $u%;LYw1(Pqb)Vxydm|)d}r^avc8qwwhS^n0(n9AIhQoHThL{FL%bWHSTrbK-o=q z(HPFdkrCFPH= S=DvGwW;1FPA@vbYsos@s=`e3HY{-=>QnV%%2F56Tn9Hc zYRG?XPa Gk3opK;9i_N@XEWHgnS5H^w$gYz-OydDYo+Pi;6 z4FS%?k!5cWOPg8O*NW(R2qm1(M_3B-N3;muDT2dB6yde^zLf$|g%F#1dfgNHFhMNk za3Uw#CbYTgv~>`zSgT|ssleo^_1Eo(>NUKN@kxc#LEKWc%T`{xYh+BreB^>m4bfz3 z(;Mu9y*=Aj9$>YF wt8dT9Qf a4YF2`GT5EfZ5$lv=wf0iW0Ng6T6OI!Q6i)bZRS0Lo+%W{H; (ubiZ}6R;#|h_+}%BN?5+EOrPD1yLb~T#du$v(iSnM zOFvhn+@B3kcJ`_X+%#m5h_-{XR!J5p-k;kJ%QKWIl~R8zOP*Fq0iDckv+K6 !6;1*I@X|J|MD3QucvK*~Yf%}CIFKv=g2iYg7>+#e~ u$dJ==P$ny+51kvMj!q0$oFkH||}$wYDd zpxZ1^y9paSb5=7{Sp)L3phz^|alGAVQ%?*J^f}~n1! )QC6mi z|DySDxRkrplLixG(>n(;XBN(En@*kk>XV>OyTOu$J!2LXi1t7BAhCWMy0{ BHG+D$TegzF(-BCMzpxEd!5}z>)5qd z+c`XcM2?IjMrtk zh z{lk&sv|@`0i*g(H@LA@7>tu3&Th1n!d97UV;hnX`G4ky+Y=6)ao9`FGIHTuhiPztY z>Vr8+ylY(APsT5s2OIE9MfI?rS)VcL(;q{(u78(f@^Yj4{|T#1W*n?yARtrk8VYrj zt4>?_K!co)z3sN}Hr%#6|IN$Cp_|Q3nM39dZHI9fd3(LTrZc)#6*XLgp$x6;K##v4 zN#nMHqRf#(h|Pu-SjzkSQSPhvYnl~5Amgf-U-|Lmhivbwgbj<1%qq9VE6kCnOXarP zdJeak`)Dd8I%AJk)vlIb=A{ucJlE! ?8sB?U-WeafiTjcD!QncCR6 zu+`ei@QaZ_?M+|s9PTeFjgse3I{H`x)`nQ&Kz7 B(Q4$Vox~f7b-*9B8&9FpO z>z`peao(oRm;RbpMlIl*;zH~d*KM~{*u4RYM;O3CW-JV%?{umg93_=$i>O>ahJo*- z=&0N0UA}OPR3&uM$)OE$I8xA^dCRMT(t(ZMgh<9d=h=)hV!1+pbdWBBq*E#m)CaP| z%yXF|96XRw=WI~m!+Klr5}$3$2g0pJ2yPkOm@9r%H&{Hv%`Z4uE5w0z+yCL5pQ2pfT;6`vM9; 3_BgGODbXj&LzzgFU-DsRB zlC}AC7AK_P9q-f?;BAal%UL*|w95l1nP|R2e7sK-*Swd=Bsi)l^tyKb*_~>Mki_H1 z)! cXF}_%RL#}l`sIoO&fwRcZpz9Up^Z0ZQKzOI{W!E z^QU%mBetu~Jo_`pmAt9RfiN4F4lT8(&%7YTB|#=N4M-S<<1A+2_<-GLIxF8AZ |dYx>*rT)MTe2ba( z(26a)X0*DN?KhgyH2iiN&TXbv!J9m{DUuSDj^%epu^?I^P~7Z-pR5gdg1QYMHVY(q zrVd+ND_-Jrr?Y&}{k!D{3ENPq^%2^)kfy|A)~A9~1CC*$9F5%Z81KG#W(Z|c%{27K z7?^T9 NW0@K- zft8QH1nDQ!AiaDK+2>y5u_LRAab>65c++QcA}g;YyJTKI93}h#g6>#bH-mtEY6v9| zl0-->f6I@Jo-yyO MbKMYZIa(%pU=nSG{Mf@S3SlHJ*sS;mXOg~zH|CW z#Dfu=L*M*2PGpT%OwK4*2yW7`b5Bgcbr;Oxd>Tq@5dZ7>-Y$RCfS6=fE;UycX+3*A zw*Q_KrU#@Y+2I{)uYxV%MPKpizKVH0po 4CS7~UmTK(x9aW8idU$-5&Yvs-JoazAv2qX%8%=tZ?&qO{B*06e!#{Y zpK%{<2DW94Lq;!c&3Cd4&j|*FQ%6i;8l~DcIL)oNDY+2kBGN*gGOb)aSRY#1;o~pe z{45zPiHVeao@4#&VpUaX==M3I>hE$pX);w7yBJUt0vt|AS)DU@^re+`cEQ?z4YME_ z-K>gza{Map2*fxKCZmCHnK4qV1kK1-qilQUc=@`%jis!Zm2J*?H)JG>caOm0K @<4u5zg-oZV>ciOloQ5)VNwK@orwX-ONjZr$v**lpt9@qMtv8n9~}82`G3P zvN_CK;2xvu`v63FsDTII{MPNRh7N+?rD4A~NGgpwAe;4rIeS65t}bvxWkK57-|I?S z@RK~hx!yEug#aFDo5i;i_sG+q3pd&yb^EwB63h{B+xPWz&3;a7^ap{Uf)|6Jn|-Op z!5iplgQY3X8p=7d qL`rO-A**LqkE7%~XjIa&nir7= zHcE%7j%wJO-+6!xdeCs!Wk55{U2iu65m;CTR=iRqfmp n5V0Yb0*2AT1BjvhX~`86QtcD3owz-RTx zZsp_a6G5IIk{;N^CEkgtY>+R!Fd7Hqzu7@8YdeM u zDXi==1D;`q8*6MCu9xi=w9fMJNg-isysJZnoz57Om8y=3#9@XoXa&@0TuJntlcMRQ zWwN8s1h;epIn3v@&DOk0&}R=7`C#>c)CQV}Z3LY*P3d?$lGO_;irl;q`E`zBZA*`! z=a5Fk$CFRmWH3g|Az8f)@GC`_rMpC5DApTNZXbA|>D3fIbg*Q~Go5R9*?uqtYG(Kw zfVX>n=Lwr(htpEp(3vWE 6-yxljV=i~TVAks5V7xU0VJg=W|5znL{(QS@A$CyESe0*{L z%Sd}dq_~GNjli$I&_k y+!%m? zBECro387NO$!x5{2FcYb>r-BjUAoqVJf^M$^bQ`hJ%w%?J-tbcL9{;iY9QB9Jz_|C zZG^Y&ld_CwX>~0GzXl5NHDyi* kZ1`#V!p;^O$=VeFoEV$nLRXQuXjmG~>UPP>ZFVgfg|rk p^&4Csa~lE*4(^6JMn1| zivfWb9vY1G o$^)mOblx+p|}LuZ808 zsg^(7e%w1>?da^Sn@UFJSdG4GN86OH4&c%jyA-f-AHAl(Zn(A=w-U6I4fWGo#O;cM zLcut{zIgf5PaQ9;2d&!=+wfMotvkBRl64S_);VQsevP_lyWnI8qt#GtN;^dBECvzy za!v~_sA4 b hE^Ncf1~(LIwp2P-RNW`z @c61a9Pl?R9}DE~r}W)RW#JK2-{q0e$R_F1E$y2g+n{RA`3E^rv??weYn zIynOu5V{}hcZh$py4%z#(PBnw$C#fy&5Z`#b6BYCCdl^vP~3#@Tsw1ENYrC(eCQ@R zTDH+DFg*H5hzFxxq+nXUX>3fn?D&*WjiOeFMb6>dQ;iRs;Wg!{mkX_uH<13+)8D{V zn8;Fsa`bf>4cwas)S4HsxFjpu7OYg%rgx~hJ&raL9Qw|7xqi@PbIYt#4f-RE`U*Sa zDB>!Jz|_c~#?ZIHP~xh;nVs6x+Z=1r;)Sueq_z}P2#mB5qP4G@f|ypw2$&v!qH)VT z8s#5C636n~luSsQbG&!OP2|q ?t);i;oPW(PWOEF(U}Y zD!$KEtIt*+Hb=d!7D2Ehn~MMvEToJS8Ru7L3hGYj{q8eLy7{^eQ`RB8js}Mkv$mKW zpyw<*LLrj;lnh*T7tJ+k!3^VVf4g2uJ$-Ge+9>t?W jTe znw*WSH}&o=-#PO)-}%Du?2aH2C> k$t2eFLuB>e*OtOnlh2*A<{+?GvDN!Qgg(HqxWYVKp>o$a!(><)yy(#^51Lu%FsK zgRNn|b!0ZdAMG|8+PDD~{$W6^Qd_AOaco%36@jbB!q#6j+r8m&3 id*d1Ic zF4dd&VA;l_9RE1qf*GfVep~GgvpM>dmm^wYSS=;y9Bm6n%bh=da4tCY6Me@U^oklI z-knK6ZY^}~xDQoLctmLv$2cB@D!H@ULoIoT)CSk}7mSDN8g6;GRDyKBw%V6iw4TTL z7)DfLK)B8w5JKHyeH>E73JMZB=0;EdzQQYgxZbT?r;Kgx8#~I5a{k>ySBBb(0PrA= z4(lp#ve6xRty*yW4?cSt9A_MixL-tksH3R_e-O39ueVj=4U)z(>{gnEzmsoT#t~Lg zlp@x+REsOH?t=a%mgfv71%8ZF!fJXo2+?%?xji6z&Gw>}qsDpaT9nY!;Hm}LXJuuP zE)rlB=k8U;Yvq7>H@)pM;i%JFGnbBRR?A+PGZx-ZFaE5xlDP?4c}C0P)nH$Xz9>8m z=e2I;=A0(txI#3eAGDyFxLz{fH&0eVvydY%cT*O4$|H4-PM(giXJ@Dh9d;K|gRPfA z GptmWEUP_bMfCGR zVUZ1a7;b35j#ngNR@vFQ{v6Y$j5YAYl1O@|?(d^vF{d(ARliZ{0^`-NlwrkeQk%GU zN+#0f(W~R&$%_L{c!;9q14}_cDX;N%*31m*#8M|pb(iJ`%-#w**A`JsiCa76BE&_% zt?FK-b+f^9?Jq2gfoqr=g48=!rOieP?EV-x# p{hrn{^}}^vaOw~^xtQB z%2XLQjYQY1j@~eG+Obn{Ipx6udo6fNkn=!dNOJ>f;j|={9LYs1EC7#?LBcF>_=A`! zO_80=K$AXm0{xsmEa^Q2W;$DFr#0EU|1Xvo?(7rKxeEiU3Gv^zPCZ5iO`#W*Bc1Gm z11s?Zvd2icjh$J{Q|MddvF1qAQ_d>`vUS^B_Pj$?FRtof2CNVq^edUXSz(qnXG;)v z!=uUUg7V(?D+9xX)jurxTu&F|>Yi9XbWD)+bRXHqB4C^`M3iq;yXoCDKH~V`I-Ps2 ztaau+$16* 6d9<*{rLEQ*XcNxnv1pG*k_81DpeaGm#f$YL{)az7R@Z z2L8DiEO5NrE-RZGr}o5oWkT-CGtfd%4w=Y7RBW!~s8mEG9-H%sE3=3cWI(h$ur*T= zPx2!CYgN&AGK2qq(4E we{pfY-7VQ!#gB^dWTgQqUwtD|O$B{nSu|eh01f&q!IJFKyS1Hc%Zp zsVzP&;)fpu{hK2t`#5y6&r$R4&R>RaliA=E(NM1ddOGlAA2DIfS7|?Wtt$j43URAv zDWj+thBPm1MkN(CBC#$C+)wufo@H{eVGZyMy;PgL5ZydSEuF3Jff{)TaX)@5iz2qc zl&e?m^qVbN<=z};{|tjHa=~On=aIE xU)wk7g7CLeoBYYFL_ zg&Y?=I8xq@I1}LxmX9@X%3C1EHO*#1U&GOW980GAoC3I$VQKFHA=&_)$aOi=Rj`bgpQ{^}J?6y~yT2_B=iTR79 zcE`%c+%-=2589^ Gxv6?=I P#Qr}OZko@QHs74`;C*ou<>L5op;C!!0VxnLHFZqTu2B XVJ;f-!s*cMoCyvYTeRoWWK8*=BO{ ON^4`Ik4ZTy@}}%c@A9fHw$fJS9hbxFl5Q} zSk{9gMxT4JGwrG69#qGt(Jn}q{j|)@FGShZw$*x6@Z**k4Th7Ndo