From 481ca0b0fc8e683c7bbb044f00ad4654ed0890c1 Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Tue, 26 Mar 2019 17:01:35 +0400 Subject: [PATCH 001/117] Signed-off-by: Dmitry Ponyatov --- codein/codein.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/codein/codein.py b/codein/codein.py index b97b198..03fb92e 100644 --- a/codein/codein.py +++ b/codein/codein.py @@ -79,7 +79,7 @@ def t_number(t): class Symbol(Source): pass def t_symbol(t): r'[a-zA-Z0-9_]+' - return Symbol(t) + t.value = Symbol(t) ; return t class Semicolon(Source): pass def t_semicolon(t): @@ -170,6 +170,8 @@ def t_error(t): raise SyntaxError(t) def p_error(p): raise SyntaxError(p) def p_repl_none(p): ' repl : ' +def p_repl_comment(p): + ' repl : repl comment ' def p_repl_recur(p): ' repl : repl expression ' print p[2], p[2].__class__ @@ -180,6 +182,11 @@ def p_ex_include(p): print p[2],p[2].__class__ p[0] = p[1].nest.append(p[2]) +def p_ex_vardef(p): + ' expression : symbol symbol semicolon ' +# p[0] = p[1] / p[2] ; + print p[1]/p[2] ; sys.exit(0) + lexer = lex.lex() parser = yacc.yacc(debug=False, write_tables=False) From d86b99ca325adc62f0f47709936153b4cd34e372 Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Tue, 26 Mar 2019 17:06:48 +0400 Subject: [PATCH 002/117] Signed-off-by: Dmitry Ponyatov --- book/mcu/arm/setup.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/book/mcu/arm/setup.tex b/book/mcu/arm/setup.tex index ff74cdd..beb7b55 100644 --- a/book/mcu/arm/setup.tex +++ b/book/mcu/arm/setup.tex @@ -18,7 +18,7 @@ на более контролируемый инструмент}\ CubeMX. Его использование обеспечит вам быстрый старт, он возьмет на себя часть сложности по начальной инициализации микроконтроллера. При этом никто не -запрещает вам спутстится на более низкий уровень, уйти на программирование на +запрещает вам спуститься на более низкий уровень, уйти на программирование на чистом CMSIS, и избавиться от vendor lock\ --- с этого момента вы не будете зависеть от закидонов ST Microelectronics, известной своей политикой левой пятки с библиотеками StdPeriph, HAL и напахал. @@ -26,7 +26,7 @@ \secrel{Расширение \metal/mcu} \noindent -Если вы этого еще не сделале, склонируйте корневой проект \metal: +Если вы этого еще не сделали, склонируйте корневой проект \metal: \begin{verbatim} $ cd ~ @@ -74,4 +74,4 @@ \fig{mcu/arm/f0install.png}{height=.35\textheight} Install Now -\secup \ No newline at end of file +\secup From 2a3c009449fb1942fa940409d50088d4b3826484 Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Tue, 26 Mar 2019 17:16:50 +0400 Subject: [PATCH 003/117] Signed-off-by: Dmitry Ponyatov --- book/web/dump.tex | 2 +- book/web/templ.tex | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/book/web/dump.tex b/book/web/dump.tex index 8317571..a8d0406 100644 --- a/book/web/dump.tex +++ b/book/web/dump.tex @@ -1,6 +1,6 @@ \secrel{Дамп произвольного объекта из словаря} -Часно нужно мониторить конкретные объекты в словаре, вы выводя его полный дамп, +Часно нужно мониторить конкретные объекты в словаре, выводя его полный дамп, и не используя командную строку. Для этого можно использовать прямую ссылку: \url{http://127.0.0.1:8888/dump/W} diff --git a/book/web/templ.tex b/book/web/templ.tex index a7d63a1..0ef8c35 100644 --- a/book/web/templ.tex +++ b/book/web/templ.tex @@ -1,8 +1,8 @@ \secrel{Шаблоны и CSS} При разработке сайтов и веб-приложений все страницы должны выводиться в -контролируемом оформлении (цвета, шрифты, расположение элементов). и в одном -стиле. За это отвечают каскадные листы стилей\ --- CSS. +контролируемом оформлении (цвета, шрифты, расположение элементов), +и в одном стиле. За это отвечают каскадные листы стилей\ --- CSS. Для веб-приложений, и современных сайтов с \term{активным бэкендом}\note{когда на сервере находится выполняемый код, осуществуляющий связку веб-представления с @@ -27,4 +27,4 @@ \clearpage \lst{web/templ.css}{title=static/dark.css} \lst{web/templ.html}{title=templates/index.html} -\fig{web/templ.png}{width=\textwidth} \ No newline at end of file +\fig{web/templ.png}{width=\textwidth} From 414bd2cb896d3488d12fa8aa22b6779bdd0bdaa8 Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Wed, 27 Mar 2019 09:14:29 +0400 Subject: [PATCH 004/117] Signed-off-by: Dmitry Ponyatov --- .gitmodules | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .gitmodules diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index defcff9..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "mcu"] - path = mcu - url = git@github.com:ponyatov/mcu.git From e6385e4a5bc9c02d4d8fc6cf727ff8844307f0cf Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Wed, 27 Mar 2019 09:44:40 +0400 Subject: [PATCH 005/117] + Atollic Signed-off-by: Dmitry Ponyatov --- book/mcu/arm/setup.tex | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/book/mcu/arm/setup.tex b/book/mcu/arm/setup.tex index beb7b55..58e09e8 100644 --- a/book/mcu/arm/setup.tex +++ b/book/mcu/arm/setup.tex @@ -74,4 +74,11 @@ \fig{mcu/arm/f0install.png}{height=.35\textheight} Install Now +\secrel{Atollic TrueSTUDIO} + +\url{https://atollic.com/truestudio/} + +\href{http://download.atollic.com/TrueSTUDIO/installers/Atollic_TrueSTUDIO_for_STM32_linux_x86_64_v9.3.0_20190212-0734.tar.gz}{Download v9.3.0} + + \secup From 679588726022debf3dc7fc016273e5350e5a8161 Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Wed, 27 Mar 2019 09:45:59 +0400 Subject: [PATCH 006/117] Signed-off-by: Dmitry Ponyatov --- book/code/cpp.tex | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/book/code/cpp.tex b/book/code/cpp.tex index 25eed36..463b656 100644 --- a/book/code/cpp.tex +++ b/book/code/cpp.tex @@ -1,7 +1,8 @@ -\secrel{загрузчик кода embedded \cpp) +\secrel{загрузчик кода embedded \cpp} \url{http://port70.net/~nsz/c/} -%\url{http://eli-project.sourceforge.net/c_html/c.html} + +\url{http://eli-project.sourceforge.net/c_html/c.html} \lst{../codein/codein.rc}{title=codein.rc} From 32a08036f8975a5348af4f1e7e4e83cc70d06d85 Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Wed, 27 Mar 2019 10:55:10 +0400 Subject: [PATCH 007/117] Signed-off-by: Dmitry Ponyatov --- book/mcu/arm/setup.tex | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/book/mcu/arm/setup.tex b/book/mcu/arm/setup.tex index 58e09e8..75b35c2 100644 --- a/book/mcu/arm/setup.tex +++ b/book/mcu/arm/setup.tex @@ -80,5 +80,23 @@ \href{http://download.atollic.com/TrueSTUDIO/installers/Atollic_TrueSTUDIO_for_STM32_linux_x86_64_v9.3.0_20190212-0734.tar.gz}{Download v9.3.0} +\href{http://easyelectronics.ru/cozdanie-minimalnogo-proekta-pod-stm32-v-atollic-true-studio.html}{пошаговое руководство по созданию пустого проекта без Makefile} + +\begin{itemize} +\item +\href{https://istarik.ru/blog/arduino/102.html}{Описание платы F103 BluePill и запуск Arduino STM32} +\item +\href{https://istarik.ru/blog/arduino/104.html}{прерывания Arduino STM32} +\item +\href{https://istarik.ru/blog/arduino/105.html}{таймеры и ШИМ Arduino STM32} +\item +\href{https://istarik.ru/blog/stm32/106.html}{создание проекта в CubeMX и программирование через USB Serial} +\end{itemize} + +\begin{lstlisting} +$ cd /tmp/ ; tar zx < ~/Загрузки/Atollic_TrueSTUDIO_for_STM32_linux_x86_64_v9.3.0_20190212-0734.tar.gz +$ cd Atollic_TrueSTUDIO_for_STM32_9.3.0_installer/ +$ sudo ./install.sh +\end{lstlisting} \secup From 47686db36de21af9899bd827bc9869b0f064f7ed Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Wed, 27 Mar 2019 11:57:15 +0400 Subject: [PATCH 008/117] Signed-off-by: Dmitry Ponyatov --- book/mcu/arm/setup.tex | 25 +++++++++++++++++++++++++ mcu | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/book/mcu/arm/setup.tex b/book/mcu/arm/setup.tex index 75b35c2..9ccfdb8 100644 --- a/book/mcu/arm/setup.tex +++ b/book/mcu/arm/setup.tex @@ -90,6 +90,8 @@ \item \href{https://istarik.ru/blog/arduino/105.html}{таймеры и ШИМ Arduino STM32} \item +\href{https://istarik.ru/blog/stm32/107.html}{Перешивка BluePill в ST-Link} +\item \href{https://istarik.ru/blog/stm32/106.html}{создание проекта в CubeMX и программирование через USB Serial} \end{itemize} @@ -97,6 +99,29 @@ $ cd /tmp/ ; tar zx < ~/Загрузки/Atollic_TrueSTUDIO_for_STM32_linux_x86_64_v9.3.0_20190212-0734.tar.gz $ cd Atollic_TrueSTUDIO_for_STM32_9.3.0_installer/ $ sudo ./install.sh + +Do you want to install to '/opt/Atollic_TrueSTUDIO_for_STM32_x86_64_9.3.0/'? +3) Change + +/home/ponyatov/metaL/mcu/Atollic + +~/metaL/mcu$ ./Atollic/ide/TrueSTUDIO + +Workspace: /home/ponyatov/metaL/mcu/test +[v] use as default + +File > New > General Project > cubeF030 + +File > New > Convert to C/C++ Project + +C Project > Executable/Atollic ARM Tools + +project > \rms > Properties > + Resourse > UTF-8/Unix > Apply + C/C++ Build + > Settings > [x] GNU Elf parser + > Toolchain Editor > Current builder > GNU Make builder + \end{lstlisting} \secup diff --git a/mcu b/mcu index 242bc9b..51de173 160000 --- a/mcu +++ b/mcu @@ -1 +1 @@ -Subproject commit 242bc9bdad57192ab69fdd8117946690baaecbc1 +Subproject commit 51de173b4211cee77413e23030cbab9beaefbb97 From ecc91856c6758f8e7b65317ef650460539a56386 Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Wed, 27 Mar 2019 20:18:13 +0400 Subject: [PATCH 009/117] Signed-off-by: Dmitry Ponyatov --- mcu | 1 - 1 file changed, 1 deletion(-) delete mode 160000 mcu diff --git a/mcu b/mcu deleted file mode 160000 index 51de173..0000000 --- a/mcu +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 51de173b4211cee77413e23030cbab9beaefbb97 From 364170471ee79b7e5e0fbe9811d77699c576a9db Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Wed, 27 Mar 2019 20:31:36 +0400 Subject: [PATCH 010/117] Signed-off-by: Dmitry Ponyatov --- .gitmodules | 4 ++++ mcu | 1 + 2 files changed, 5 insertions(+) create mode 100644 .gitmodules create mode 160000 mcu diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..bb8ab36 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "mcu"] + path = mcu + url = git@bitbucket.org:ponyatov/mcu.git + branch = ponyatov diff --git a/mcu b/mcu new file mode 160000 index 0000000..0803f5d --- /dev/null +++ b/mcu @@ -0,0 +1 @@ +Subproject commit 0803f5d4131256f7ec22109c0b36888df655e1a3 From 8da243112fc808316f5bcbf4bed6f947672f1ddb Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Wed, 27 Mar 2019 20:36:28 +0400 Subject: [PATCH 011/117] Signed-off-by: Dmitry Ponyatov --- mcu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mcu b/mcu index 0803f5d..480af40 160000 --- a/mcu +++ b/mcu @@ -1 +1 @@ -Subproject commit 0803f5d4131256f7ec22109c0b36888df655e1a3 +Subproject commit 480af402e84f76e849ee15742426cde5cb385134 From 656e0f09a41555e17da2c20d270d5fac8f6622bd Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Thu, 28 Mar 2019 13:52:47 +0400 Subject: [PATCH 012/117] + parse/ragel Signed-off-by: Dmitry Ponyatov --- book/Makefile | 2 ++ book/mcu/mcu.tex | 2 ++ book/mcu/parse/bin.tex | 1 + book/mcu/parse/ragel.tex | 41 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 book/mcu/parse/bin.tex create mode 100644 book/mcu/parse/ragel.tex diff --git a/book/Makefile b/book/Makefile index e1f763e..f28c956 100644 --- a/book/Makefile +++ b/book/Makefile @@ -32,6 +32,8 @@ LST += meta/header.ini meta/vimfiles.ini TEX += mcu/mcu.tex mcu/ardu/ino.tex mcu/msp/msp.tex TEX += mcu/arm/cortex.tex mcu/arm/setup.tex +TEX += mcu/parse/ragel.tex mcu/parse/bin.tex + TEX += mcu/arm/cortex.tex mcu/gnu/gcc.tex FIG += /tmp/gnugcc.pdf TEX += mcu/arm/f030.tex diff --git a/book/mcu/mcu.tex b/book/mcu/mcu.tex index 4df3fd5..cf26333 100644 --- a/book/mcu/mcu.tex +++ b/book/mcu/mcu.tex @@ -9,5 +9,7 @@ \input{mcu/ardu/ino} \input{mcu/msp/msp} \input{mcu/arm/cortex} +\input{mcu/parse/ragel} +\input{mcu/parse/bin} \input{mcu/gnu/gcc} \secup diff --git a/book/mcu/parse/bin.tex b/book/mcu/parse/bin.tex new file mode 100644 index 0000000..2595ea0 --- /dev/null +++ b/book/mcu/parse/bin.tex @@ -0,0 +1 @@ +\secrel{Бинарный парсинг}\label{binparse} diff --git a/book/mcu/parse/ragel.tex b/book/mcu/parse/ragel.tex new file mode 100644 index 0000000..e5f2fcc --- /dev/null +++ b/book/mcu/parse/ragel.tex @@ -0,0 +1,41 @@ +\secrel{Синтаксический разбор команд на ragel}\label{ragel} + +\url{https://github.com/calio/ragel-cheat-sheet} + +\bigskip +Для обработки команд управления во встраиваемых системах необходим +\term{парсинг} текстового синтаксиса. Для обычных компьютеров существует +множество библиотек и утилит, легко решающих эту проблему: \file{flex/bison}, +\file{ANTLR}, \file{PLY},\ldots Но эти средства не подходят для +микроконтроллеров с \emph{крайне ограниченным объемом ОЗУ\note{от +1Кило(!)байта}}, и очень урезанными библиотеками ввода/вывода и буферизации. +Также некоторой проблемой является \emph{применение таблиц разбора} в +сгененированном коде парсера, что сильно \emph{усложняет отладку}. Тем не менее +для микроконтроллеров есть пара утилит, генерирующих вполне вменяемый код +парсеров команд. + +\clearpage +\url{http://www.colm.net/open-source/ragel/} + +\bigskip +Утилита \file{ragel} умеет генерировать код на \emc\ явно реализующий конечный +автомат для разбора регулярных выражений. Большим достоинством является +\begin{itemize}[nosep] +\item +возможность задавать произвольный код на \emc\ не только \emph{на выходе} из +регулярного выражения, +\item +но и \emph{на входе} при переходе в состояние автомата, соответствующего началу +этого выражения. +\item +для связи кода парсера с остальной прошивкой достаточно всего двух указателей: +на начало и конец буфера в памяти; никаких внешних библиотек типа \file{libc}, +или оберточного кода не требуется +\item +поддерживаются 8- и 16-битные символы +\item +возможен разбор бинарных форматов, использующих байтовую организацию: +\term{бинарный парсинг} это отдельная большая тема +\ref{binparse} +\end{itemize} + From c82a82ed1a01be8881cb7d31b5faa0e751847b93 Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Thu, 28 Mar 2019 14:38:10 +0400 Subject: [PATCH 013/117] + serlex Signed-off-by: Dmitry Ponyatov --- book/bib/bib.tex | 7 +++++++ book/bib/serlex.jpg | Bin 0 -> 16814 bytes 2 files changed, 7 insertions(+) create mode 100644 book/bib/serlex.jpg diff --git a/book/bib/bib.tex b/book/bib/bib.tex index 017f64e..ec7f328 100644 --- a/book/bib/bib.tex +++ b/book/bib/bib.tex @@ -14,6 +14,13 @@ М.: Вильямс, 2008.\\ ISBN 978-5-8459-1349-4.\\ \url{https://www.ozon.ru/context/detail/id/148568229/} +\clearpage +\bibitem{serlex} \bibfig{bib/serlex.jpg}\\ +\textbf{Теория и реализация языков программирование}\\ +В.А.Серебряков, М.П.Галочкин, Д.Р.Гончар, М.Г.Фуругян\\ +\url{http://trpl7.ru/t-books/TRYAP_BOOK_Details.htm}\\ +pdf: \url{http://trpl7.ru/t-books/_TRYAPBOOK_pdf.pdf} + \clearpage \bibitem{sicp} \bibfig{bib/sicp.jpg}\ \textbf{\emph{SICP}\\ \href{https://drive.google.com/file/d/0B0u4WeMjO894X3lnWmhjUktKRk0/view?usp=sharing}{Структура diff --git a/book/bib/serlex.jpg b/book/bib/serlex.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ef7a298727bc560890e071a40b1c75dc05edf18 GIT binary patch literal 16814 zcmb5VbyOTr&@Q~oF78gyB{&3vyDSo17AIIBgy3!gLU0Z4?yf-=mjJ;R1CedqupAP4|_w*G6BK-B-y@1Jd||FvzOZPx!C^Pd|YAPRu$S-U|99!^g|0l1W9scL@|7qzDPVX%tFl#4wCpT*+XNaseMBm2ogOisVfR~$FP?Vcb zl!qU}Bk;Tx<>duDgUbK^fT867U+1RJ9zp+WL;m-qY@Gp*|DFJ}(z0?8ZErVsO9wZI zoQ;)@ySY6?$-&&p#?cD!?>m4H12_wO1p>YVpb!ER`YX)XEc1})CDtaD%9u9uiSDYL` zY;0_NTzpzWLRu&XBM0>VxBUA7sC+&p00;>D?_&M008v2Cz|b)W06-AvKl>RSIt~c< zd_hqNL121R9yB6pVoh@wbds06febRP2?g~tq~wfzT1mZ3`~vUY6B{seKe%n3os+T1 z%DvInu}ChQ-DVaPvV5NAKly(XJ?sCOi}2Ys2#kV)@{HsE_C4<=r03z)Bq9crNSnWO zDF{6Kw*vSN!!rUxfE3_?4x2Ac5x#Sz)Z==vCiiX9J7{*Rc`(#!`sUR`>f=vfb=(RT zhghHlQda5gEg)oDSDwq@T!Bq2vEkzOC8-{l+#fwtV-|w^-cilbMzW$*6dduWEQrTj zkWBtO7?Z)BFuH7HO`9I=<$M?tPGyJ&@9(F;AZ|-E1BfOn0=#N!b!#eYt~{_m&bA%{ z9OQNFDmvj4Zin+zjUb>Kmq4IF>qJ`ZSXw zVflB$OAF`vXd}2$4;h2)rC0r=tVU$)3ACee{oa_7@--{)l|?p?8NkhLRXE`%6KbcN zd@}Zi95`-#Vlc^v;Luqyn0Cv2h*h^jxoNLP7y0%f_AjPkL})ZyW>=0j$%&Y(pM{!im#7we@%#)8J_7;8LK98;vjR zdSjo9Wn88;^oQWv3WK&9&bCt7IMxv&m$)Wo0c>KmQ*!=4hO)+1@BM#%yDv?AQb?Qe zc5Ca8kv=8_JWjl!p;NATI~Y$&z2st6Zl<^)9`zoV3a7i#k8GYalVYC?#pM{tb8RUL z=OEMN-!!RlcH$?Hhh$rPukKfCCc8Rl3;kWXy?2?x2mb7=yeNvBUb(1kL&v%j3r^Eu ziw7U4NJUv&X(Jv@<{!ID6l@HrvLyfuhcTRZ z1{l)LEH1+x0g%QFW=+&EZ{thrn}Jr|3w!|t?JUU{Tl z<*VJuK{%GKFUy?0z`1y-mvNc%4+{U!C z3{f#2rjU3V*4dzj+XWt1QQ-GStbY%u<750&BW6ld%O);ag7s$d6UiY$JYJ<>M)EA% zOQz!sZLNr{=xKeGdQooQcO{oJX_xGDDXj&6yS!D~U*WGfBu*;tYq`95ZUzMhmxz`x zjr0s1IP6ASOlp)j+IFF@2XQ;Kj~K6X0_Ka zrrXI=ZaA7Pot&O(OEpThSd%40NWLK;7gIvKGdJC?i} z#}kL4Xp}GTOnT#56DbJ;Nh*0u1iQ0VZiE%xRD%czk7>&>C!OOx#glOeh+IY)W#sa0 z0O?*nEELcPER2|xJONh7pIY@Q)$Rj2Waz?6K|`VF%uO&QHLcWNE4AP_J*zvJ%`S$V zj6c0@t!!&+Y$bVDhW=aFMc#=cbi$AWRJCQr?jjP8559k3t&m0iHZUvumlhV zxhCYqOGV)w%2)@2K14&PA=Y=r!59M997s`*7^AA#_k++~>onm+5R^uV5xCdZBCaAc zyS31wW1F=Qj|=Y^O<k(LQG9$K+m%IFDx-B+sc*3Fk0w zE@&lFcNjDAkT04N&`)iv#us1W6FC|~MO)u|ad>Rwn5#Cg`Vre;hFi&<8Wh}?jC5&E zkk8?BJK{IqOS=$F&V_9_+PgzE66ZUtu(iLnwG?<;eK=9*$V>m5CU}C&Vlzyom|XGJ z*~ZR9d#+M4z=8L+?Z*@&?rrL$IlA=Ucg2Vn0i;g#C~TJ22I}JGor&(vz|gDvh0#vH zL~=H?M!BY|bhN8Lyfg5}kBAMRSWIecnN#1235S>QGU9h-W=ZUa_}M{`NwHrz3`iYZ5En6s`TJR%X77|mGQrh2>@uAF#-3fbCxJ>(qIb62^QNoo`Py%4HW2@^oXgrS^Exk* zXOZPE0~;V^Gi*>LAP;xQ;4tAjXn;QfsKOfZeH3+uD=I?Hmz92rNEM%C1-2IiDYYoX z#e)>ty_0WqEYK?9kZ)eM+TtdLNDMO z$CP*iqOC7t9+0aRKcrE{63yr=0_JR-Ueik$jRHagR|ErP)g1n`x3@Qy4kFAgEp$7( zhj9To(ZC%zTph)~YO$jD-I|j4&BE#K&c|s`+ynr>obxCbzxXkZ-&~ z&_dA?dL2f&mj#=oRW1^x>tw6VhArr;hb=yM_(kVay_6gszpeiP0=Nbaq8!rKEL|ih ziB5pi{{Y`K{{a9dV_O$$jMs0een-$M2Zh;-r+`pxNa(psbpe&pERoOqfxs@eEONzn-7|>C$jP`Z@?*Or)N(Hw3nMMA8fYD4fUmn;M;7@>QZn96hkgj?wLtmsklQvK}0kg3y5F=y$6ISn%uFKV4bUj zy4n%f*g$Y_cB!Xy95@PtL$4G4c*Y^6##rSEqfX)g@eeTFBqDWG_reYNOYdhN#^g>B}=Y_ED3_x>+5htJiCBED)4GiFw9E*0?XF>wtTPrRD z6^cT_?cr7U_BG+JNEMocCw&BOTG6Gw{sH!9{#zbZzb-hw9(0==oJuDpm@E1pW5fOL z^BZbze2a!TQ1Eu&NI83>zV}HfhQ(fuvr$z7N$|mw%PMBEKQ%$BCmA8dG-qML&|zpS z<1Ksec5>v1`e#N6q*tj3G@|qC1HTy^7~6st;~=9~-WP)tUcq8F9;!Fp} zhW4E62T_K|G9W_THy+5-5U`oLR1$tZI#CbvR^s@)1Z zTMG5ve1x`claee{{?dD0)AL(;*U3)i$y19xhNVA{7tdk-=57!=e2BTgsuwFS_6wxx z)f6Kw)?)#}c-rG(IN61jG72{G^Z?(tasXepAW?8x8x=(KS{HplMWZSE@qn5_(Klb2 zg{oNa#fh|urm$i>z7JzUKshxdQ}=;aq%=E#U;PWc9!sz4XDu-b9pe_(UQA$2yu=(S zh9b!b6ddcBtWF>VjgYiy`Ys(Gkqiua?;51)7?Vw)822*}FEZx>wiZ)>3JnMff-w

xjhI#Y^#tKF9N5$!^oRR@Lp-FF&Y=&J?seh)1N=pV58b0m zwfU$)KL@_myC%GFxWMd?oC?yB(%XcT{|qfAc`RtpXQ&*M$jtirc*LNodfYC%A)*-X zEOe%le9f~HQ6^E7Yk?>PwFS_Z;(sB57t|)KRZ}E`T(zyWhE#Gk*#{3$=v7pk%*E{k z&^ch}?qH~N9|}-JBiTv{OcD>mRR4_SMz2H_2PV;+0f2w70|=8NbCOsw#*1FW5tY4hG z)mx{VZyA2|m8RQ)HGq#R*nUA3Ifkh{=EiyxT+PsOXaQrhs2cK&r8ME=>u z0)K!~OoRMG9qJ*STs^#`ca5RcNXvoh(K3Z2==(dp9Jb0^;Xx%HmH{8JuUUHc@*ds6 zHp;c%j?e@z8Xq$SQ~&NX$jY^yxNvW5F@`8q{~4muRX+2SOhnxaw9-n=<`T%7km=5` zvyiW=H!NXE?aue6CSY$hkIluS}X>+d&S!*qePFcx?IO)as40HwOUd#^0OSItW=LV-Vcu8Nm;`}9%d=Eg9V;gSE zS_~Sp;IB+O3^*w2Rq5{j?XHtgAKT{Rg23Q=E=Pg@JxXoK8&a4rfIweIlXtBYhk-q$ zIn8Xu_C=&zoxfoINcJjc@k$$3>+aV*sJ{2_34uBpX?zq}XVzw(6jY7cGXQ=eqoq(LVqyyL*O*gI;cAVXHPy zB_`>SPB?Hw7LdN|^2v64+=Y%-Yg>}BqIjXAs-vZ;L^HWcuV9!;CFKWsyivf5>|acN zTCrJ{PR^rE_V$OJL~rDc>TAI#A28Ls6Uubw*f!^%xvc3dq5AF>B{G^8@1+dG{te}u z?xaKQFjN}xLmvl8+SURK2iSIs<1{&U-s%po8;e+8Dc#1o1B;stHC>6ZHaWw3 zYx}1(f$;Z~0Pyj+xgXiZ=*CmHg|~z9UiPJ{ZYeFJNAS}hQ(}Ywd&-?ewm`9s(DmVl zG0f7_=H^2~Xn8q}_BsK#;0sp%J1HF}tb4p!+@gV}#`2Z6o7A~AT$QZKAKieb3isA4 zT;8_Sn;UAr0ddlP(VSIpVK2e7Vw7UBkw$cszODHjh>raLuk|p2J#i&8Awjcns_Hs}l9)$uzynwF!m# z;`Eq7@^y|wN{25?#s+V7kJspQbXqJr6mYW-UoaGKaM~%8KF}M6QWho!ABH3FcAS?Y zDI^sc6e>9mo7l0HQ|({T6+U5u zEBLE2=t(nPV`lX8#A%4O*cQ6*!<<{hy2zdz6bY5yX`*GH^Keqszkj{62Se1@v#s+s zjvRl@gTV{>KMvbCQ~ew*~fEH z@{AiaJTA&URz}_+;a1=1rjN_{8cV4yHp6oDPE^Xwx}@?`wTli`m5ZE|CW?^9mB`b0 z4oRFf6!x(wHvXAFHnS3u;GgtSf|HN0H{Kg$!tk=R~=~nutk-I%r zT*KRZV9^ktSm#?{S&n+>afgXgSCa7?=#6l$*7^i# z#d3;%y~Z}Av~c_eOd;y$d3Rdnxq9$mr>?n7tAig;yJM1K{X~V~ati23XIF%JKP%b8 z`ds=@KvI03v()Yn&tA8SpAps?=TH;;J32x5#CA=^{e)Ru zq(Ak_@tR$g)QMx!#Q~dH_(A+UO=43ZxKs(~{E4{->nN>VZ6n6;D8iAmLSUlC{bJ9i zW;bFtU{FWc+M0TG2hb`RBOK8aDiG|jO7jJIb8)Iy%a+k-XAI?H^j(Vq#?ZKZW0fca zxS-Yi(Ekfv?HM^~M%1Ck!0q&UQsMH=w!$MTDss4uiLF)MHVLh_ertzoAGmU;;Tl%<_duN=SHS)Z4zQ_+YPZFoC!2n2L?9*-^( zwm^OAnEKXa_25%fNKe%&ZLQWh4$nCLY}A~Z4v`nk65F7!hCAJ*6n*88nd{LwDTN?i&sXaUq@4FSVbe7 zDketRx{ZGeE7|u3z~d-4knLYeY7WBs5aCUGx?a0fdu>ncHd8_$rxiFws5|$R#89_9 z_DyZ>>56?PaY|g*$!g$eMwy=n>S`4o29z0hnz%CxWUZ0Qk=~h8ZiE3@mDQJK_4}b8&Z!!cY$LStFVMcFx|l_kqtr2 zbXTx`oO|nIvRKo!E_qpxI54uAbL29|z@-R9t931GH_>|ZXTOohdIwY$;1Bv z^#AIuA2MeZ$D~b{{W40A^gXPXLl8a0;H$O63RJ%+_S`BwGLUIZeMy!2?R&bx^I19a z53|ROOdE&Gxx>}sVhiHjA630@Wd2-U`HFF}D7Cg(`gU~bXIvdlc*2*3xl=X1uZ%Hi9Uy@`8MF-xDP+lIh91^cKJl(raD zRXJb#v>2wAX~W#|G-IvNK!A8xN`PtJ<)RJm1la-IG45aT2yr2Eqqno1hdQlA8n6QO z5|#Hqkxgs21Qd8epiIT@#%k|lutdA&X~f_j->UbF+VjU&aPav{2P$UR8l9{VtB17< z>6{+}HES}$7OkiJ+cU0~?b4_1@GOq;*4w1kM@;3%LYp@Kc=C%?Rh||P3FfHFP+mMu zW$gI~^ce1FwanTh=S!--j>fss+B63OX2cL&IU~Ic1jGni&)|7SfBeEPz7An4q;Gd4 zuLE$rd^?!^1g8%Rbd!Sb75@RYyL~GUn|(kI<+jPlwT=1W6?g@rYIxPNgA*|L?!_b; z%Gfi7D=n(TMxHu^r4P>e!O#WNKmA@2%RZ!qX(Q~4=AFtqX|u`$yxrO3eSC(WT_$x2 zBAkQsTVwOrqW=Mo--$20dUa?`Ce(B=*VNHkd5%1-d^e#8B;{pP8j3xNVI*9G)6vd7 zQGONNKf7PPT0wxVxdzb>jqp#3E|<9d=|vUZJu_Hjw=!0~x!sY`p&!}3pV_?wqr%QB zf7|DdHgeje9JfJF!=tPC7Z#R=D=CDouEYR#ZoXX}DN>?{8nd(m0 z?-(wZeV;7hj}JYl7sqiv%-Tn*2UkXiSLcV#cm7Mw{@p(KrAHT11@`{{pRX^LSr76| zH&yBm%_KZIUn__)yk=>H{qwW-S0*1D|MgmDha`R=R5nj z;pRNqyOb8M`xb9bNy?{C_&wc^n$^Jxat;Lw$5`$Og=^J&ddt3k=;z?)yu*v5nm<1* zfsO?CnNDIZgJ?MfYP#$?!i-iBeztIY4z_QWL#?kEtqL8Oipdf&j>K3c;|h6m!if$) zOWEnAZ0_8&UmRa!n~Isu{!-8Iqyz?7xTWlK9InLI$m-2AXvil{POm{Q$l(eaxwkxtW_b9{FZZONP_zR!s#UWoVSop8`nulLHWiw+ebk*`t2Qtl&+R_|+^(NE8@^R*+GtWwIrL)9R-Y8a?{jTr zvY7N6i(4XLU|A2V^7vHUNkw{N$2fa#2qt( z1leJ8s|0dhC7v<;bp{U{{ z(Ts}zIy!}_V-a}X6%hm^w=+XkCIHC~Z&fGV8j=C)4DH@XBC%g5x>}!M*(5=Ma`p)# zr+T6loFnwG_EJeq8H*3pk}u+hJ$G`l{wlAxLlEx7^@ienkLXUZ;inv)rzA8qV=2_; znZo@7FMhM_@1Z98ls7*)sVj_QL$Is)Ef}p>K?8(b8s-?RKOn(#{@}6~^5FDzm{0gY zrjfABrsjS%J9Z1A$|#GJav?~T>M8<|M--#4fOvjmAro3MAcPb=_OtU`+#B04oU)Eq z92rWi`2vT3w5CLb&(rA^$mcn|jUBSn85@xV^qqV&(!WaZ@EOa*|Ck|P@{w!~EkzJv zZAljHz$-1u7>(vkQZ_(*bZMFkAFsW;#>c>Ef&~FD7^nWFx&7SPD3^Z9 zf-y&V?4~+HWu+H!t)gvb1TUvxZIu|xKuibW+;Pgkce%6Wf6815%W$w$QSPZ+X*zy= zAX-(S?cP>v_fWTwrbLnnRmiJfZO$=={jJic>EQQv}09rcRtTwR8T*79U$XVuh{ zT8!Bqpw$Usj|0BQo7xi3%G~eto2iQEFmu(IO{V0@)H#52c|!uvF|yy+1r>$_c9} zu$e5WGSKoXi4hWA(|a`V9Vu7vMgce;g16aX z$}3&c>L;h#zF$jGyI2IOSsq$xi4t_i<$8(v2x|1D5u6?pWPKYsw(t|qWvxavS%HmP zS-@kwyhaeKb^Disq1)!>s~iobMnA)pU{k+LogsKqcEU|igySs@CUZ%Tn zZDPn8H0Y{n<}xV6(qlO_&9SuNeAA|Ct7D{B!mQ<|Wq$o9=k@Qw9RS2DQAvxr+W&M^ zZj$0oeLFU%z%H|kLvw{U9bSlxV^q_o{w9`*lVNb&q-WQT+cgnW!{NJ#RIA4=p-+*` zg7h+D`wYFwyctUhygD-SNoJG0-@TnGG5lsu@;Le-2@w54KJSNTro_!x8{1!cQ|i^o zMS*n0#k{GA@m|bU{`Z_;19p5OnO-Iy>EvnRrpv7uJ>D+_h4WRo2(5;Y3;rU>pC z5fs4}+BW@D%`@x1T9YN$6GmyPhA<12OmF<=TVU$}IF95Bef4ai_}FxBZvk1;!qZqH zU+!-Qi?Ca#J(8O=n4T*Z32k|vtMOPITWwY&z;yD#(c>rU6HJ^HI^8- zW|!m3;z_hhTW~+N`Kz+@&S+V;qp77xy=(lNo*hGzFnBDVVy%YC?)YUK>ZW1y z!Go913ad0Jm*KRrvHu5=^Br`bNh=C9m#`8V%9J6HPDf)?h3Sr|cJa!1>Au9q5Z_PS zOm49`TS|fEoHA>7C(a}6qrvX3k7L1WvnPf+zxGCsw(ITE7WU<5+{dunEU~yMTyIpM zHJTfXbJOGnt=-c|ANhvLqkGa<#~@UWAdL@$h_VZZ+=kytXZn0}$RoNVnP1Y4&&lx@ z#l`~V&>V7j%Bo^6Y{dbs0(=+5WP9N0<2Rq%Qx2Z@ zt+SaJvK4=;yOa)(Om!-Ao3r63x#rW|CnhK3z@^qtq@&NQhuYjT2|3ptfz3N$hqjP6 zgAF-(WGB(_Oy+@k8T~7tzKPc<=DfP+BeP- z3kt-zfktF>?CyT1OS?Q)(hH^NbPyqm52TkD+Q&fuB1PxS>b67 z%k{^es>Z~%wx)3Y48Dv2?#>&WKG6zYNzIV-adZOO_uyiSR%T}m8m)uM+}(zBo_Ts! z3XCWMGzO#&4l0eHj!;nGcuMYa)B4-Oy`sZe$%my4EB;TIMDY8dYI}<|bgyUuF)ILCn#PW-ZE1AU*aU}NIn}v8R*uI9Gt#MgB z15U=xY#k%k&TX7C$K7$~CfGx6JWCX|y9yK^W4Ws|_U86)^kCoK?k(rNv7+LNpJAER zY;aj;VGkIBrmOS{fIz5h$s;^7^euAuw7*S86GPCRknBokNb{|gQ&6!j6YrI8owYr^ zX}OT{*=&6@`kNYujlZMf#BiI^<96TT_q=Qfo|lbY-bBUJ@9JM5nlapDAGqX+Zl-g4 zKhz;U{d*sDp9wSpTIbbpPJwKRj0T=wc5cxLaM>geDg>eNS`u!}gFY7k1f`dWL+%{| z2{ABSzE90Xg4$s`4QRip@}8 zATX#h?;WZ#bhLmV|C35B@sM1-h@42D(iLOz*9dO5h zQ6Y8`Taj*CKQH2%I7Y(Y{!NIFi-a0GDAzJ%H*X6X1X|X40{6zE=TCnrw zdZzW3Mq(_cn_z(2?Ds!FX5+}mgKuyD0R*iQmz<)GaFdxCzLe90u!55diPm9GQ2{`1 z771~p2y{tn!VKu(oje+*mNCWbKEXm@qR%TFfm*Y0(NJOn=pTjWZ;;41xKeV)#~RZV zx9@ z7AjwmvaDYcGG2tW2ph90-+0?5$W)0}X@pQpYl668v4_X@C(Wqo8*ZQ2_vq(ZS_U=0 zYueWC9gl$!!f}iQ!j|W<-`Ua?_mx4wLKBo`3}i6od&8R~Ycp3W2dsD8G=CslfRr%G z03>=v6lIJHY>d^3d5U0?=%*$eMHi07lf-nxP56Nii}F9mj6ai8eWw5V+1xYu%G3MR z_g8u!s6HwlG$aC;@zAB2Ji_LjgK_P?Mp#oN1(4-DRmqR8=~gJW**M#KexR-^_raL9 z_o&L6_;?d+cb{~KXfD%jwOgCrzCbKMFjqNJ#_HuPM?30OC7oBA)($LIl$O+$hk3bs z6pWV+|7vRJ%zF4q#we4`4`8kj8Z4qWedlDzDs%n2U+F2TSLJ2y=G?Eh&~eZ<=vS*x zfIp8-RyQ!gBJW^&ISZu_8BOHLu9obvV!6t+IQmPriIFAAv~6VaGUk&27piD}gm?om zuExD~mw)i1341MDbQ72DOofMfj6!3h^}c&Hxkdy2MvKt+DIMuOiM63asGSLASn&Ht z(XCp$?1R@}{@nK>uH4|^5rS^cLzXuUTVGzaH^IHjK6=|~nJ0~m19$Tx@6)i~F-%sg z3a|F;>M>Ib-}shL)%cGJ=H2!qrGlbXx>7{1Sbe@*oKUmX{|yOCgeJw29%dd!jE{BB z6TZlB_(t9~UZ!56z^@X@?&xiO4lrl8OraVdLdOhJ@Oh+IwKb;7e>*+xaL}-jVrXB7 zI)SlNs@IhWM6O6xy>Uel?E*Q&8* z@w((mnJu;RTEy9j$zFNPdTDvgGF(mYA3)cvpa?sB2XcTK#q3eP5 zyFwYx4LY1J-IM4x|4w?VPE%jiFB$FduD{9Q=$&4H@^%rDtfkrayW84_fNh|74Wm68 z8J+5iM{dEvMQxp7yvJ@Rv$4_q?(U~t(~n;Lfw%gxk{Xw*3W<^m7pn?CG+Z?!)~eN8 z%c+09s*Onh(-Sq|;%%DKrO+_g2``T1jJ#iL9Hs5-x163sq_Rq8Q(%i0y;o^d3rngi>GOU@tyMUjKf#V@J|;Zj=Pw7*safA=sr@od0^kl>(% zWuH1#ACvB{L;CzzW1cr&{5I>Np}drAT|dGVpg5{tqvw-#F3hiT=#J96NQ|Q@BE1S* zE3+E|QQhE`vm&p1;xs^3!m4@QT@cI(v%bBsbMP6w=TxumXmU8t$k5NZ5ET zrcs6!`P$BSLwS8v&7lkLiFUVW|OIL_?8!Q8v|t*vL@$5BtU@ph_dr z;1KK15bK%IdB)CStd}2ic!?2ZVQz&-Ve`ITi7LW!K=cRCjFh06MS)kow$dlg37 zUF9n&j*tgoJELj*+k;j^%Puio-VQdAlU)IpCih;W=9r!4!v0H}CU0{W_{U5ZF3;mP zd`Zzsf@NN4XOTT+1c*D#Sn zo^v`)6TmcM0OQ>&`)%A1Ud{*+MUFp5sgXhp}m*u++MZS)4SOyC{wYOOsJUB>S%G|p}?j3zIM9S z8F*$GL;5P5g96$7bJ))H-lF5a{}?;2FrsP<&ouL8-7C)6I_08?{@|ti!0H|IgqTUs zw;AK!ZNc(>>3pI5j%@k~@Tv{IMj>F_N484lT426G18UNw(+_sfv*!XdzU(M z9D+61V}Wi(DVAE?W2dz9agE*O>`15!w?LJHk@_V$Rxm z)1!{selb?icDCD3B~|yuO5(W*qd)F?8{k@76QYoD`1+7FJ&5_J6|Zk~sgK@JJZR0gwosBC z4-oK1o?|F-)yC3c`b*Em-ufLC89#7QZMohl^$)_ z89eUt(W90*STQNFq zlw#kFV3&fYz@eu=HZGJ`>Fly^ZI76UnVDR&B*&94H_{#+7#N)ZK%vV0!<*Ap;3B4Lx=b*iqXgTmng_5KN!2nHh0HkbG!IYDY_39I8xb#X5{nn zw5PO;mvV``*4P@rWtVvFmYE@W*St=?M0w71s0mA*3-~==6)J_w#Apb!F7F$itX$xa za_GgiIX_x!_U`>o@0wGlQ_O}aR5=X74(GS%m~!KAon8D^Zfd-kIK3Q4R{Jnjq_-eQ-52k6m6;A|E0>nm`+eDrv#Ha zA9E0f2xTG?C#B{h0$p%2i0pYva+Enss{Y|}!t|HbqUCy6RR8&gZxQ>yq^g_Xm4B9i z6^H{j?o#i&(aVpbTr-W9qrOQIm`zrW6(`~_RfcNtY;-wz4@_N1AO{icvkz>|z491Z zNvFji9#TKKqP9dAD^>7ZM`E7JGq9dww)mC6aHnI&3sKN!wnDxKwo|G?)qSTWcMVQ7 zXAGe2l@O-2$juKJ#|>y`#7wjpAq3iIO2c?)`jWAWsZ2W-TU^ z5E-;POiU(N1g1<2z>wr3`1vCewIl( zTKXtj`p~ld-#BhyTMsE2rqWFqHcQ914^EUjrVmRTDxNFwVWB?b{IFh;O)!ycsrFhpE~uME8noa`6D2Pol%HJe>fM}?Jxp1ws*l|rT>Ote$mhLW@~){FT|f*SJX6;dLHiN*FrDaN%>0T3 z^b;t>IwMM8@Y5D}lnAB;9D2|R_`r+Jd^z ziM;1aIWrf?SuE%{;__3F$_S6Y1aLFEU^dEEs9&u&ci_rQ4}H!?*)R~MqAeu3s4Kpx zD_y5i9&Mz(*T-?QX~}um>UvUfj8XQe5G-Lq=jk)tn&U$4!J98ro10jbH65Jw;=p98 z;hXyhsQ2WrQdl=x=dhMQp(Au6r)WY$#1LabFGQ1*NksXOdljn?g#vhD zjV-4b#i=Ar#{fXa87X1jCwNjLpu?1(5aI^ga`BIGUYS3;|)>BEDf>Vh70GmJx2pc041xhnTo#%8Ds0 zq_2%bc*bMPxut%_wgI8}>bq|yG-Xz5Yz73$t-ikscA0m*YyUNW#eQZs_cHx1`!TW6 z_zuB4p&gOo+VoK4b2FRbMMhu8%uR=~*{CVwQ zXkrAv9g^=?=*LF2Q$d?8T(w;w>cf684DCIGc%1TKckZql*n5WOim7QVLv*;Ol5)!E zs99D~7CTzzsMM<6RyEfO>OdWIK0``ZOP6Zxp(&#H;*+@kO+2VIeaA@|ajw0s?@i@_)pB@MQ4 zhs0On255cZ&G1?(&UnKT+Ypl^tjyDn8k8PKLI{@otnCP6paRE^{PLE^kmi|V0XS+l zy;N|;7wZjjFU9d4@U%03uD@6$54O0_X1U4k&>d63Pu#T&;c*J#S;mjQtN!^}51a2o zh5zwuwf#zjI?hi`Cud%haIx@B+d6-H2p+zV=5~PQTE3iuP6T_lyj%s#2O>EL4uv#Zv)L9b zD+He#7EcfOkdG2M3Mv7Kxhrb~ajPp~LM}hQv`{X)iu#@Oo48w)iv=@%HsdM^*XdInu@EVC{@n{fRG+1ty(I&oOOZXYMwN_r=M6bBoS;W_X zoxTnjm7{)1AZcG}TKvHh*hNA*k+Ul#)~5Q&oO_n40d3Kpttp5ImxmQFNbmvmr4~p+ z*EJg=O#?&I-o0rEoYW;w4$z?tQZ@&Z^s5taB_=FuQk*INfe2z@rt45@js*nad?ZTG zIMLb5&@$pn1_}qn^UU+k21#CF#3zWThRBf+ztqP2K@xF<>6#355BbwcH2gipHUE;D z*FW*_k>R!$uGWp6)GsyT{*>^rXjr<5I{H76NG%RIHEZOsZ2R_0`6E;FdfIa$8TadhHd3Be&tKWA4hwqa$`74bYq*q(BGMA<&H1+RVk|!!(>TyTGF3Ec0XW@5_ zwqA=b`UkD};wWnSWdBS4Nu>~~!Tz9n^?s3a_gUt?`xD^B_rmdRfP8_bttf~PNVaZK Kcqg#p|4jfvLxN`j literal 0 HcmV?d00001 From 0489c1a23b349e07aaa4d7da6f15581936e1cef9 Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Thu, 28 Mar 2019 14:51:12 +0400 Subject: [PATCH 014/117] + parse/bin Signed-off-by: Dmitry Ponyatov --- book/mcu/parse/bin.tex | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/book/mcu/parse/bin.tex b/book/mcu/parse/bin.tex index 2595ea0..2a76694 100644 --- a/book/mcu/parse/bin.tex +++ b/book/mcu/parse/bin.tex @@ -1 +1,39 @@ \secrel{Бинарный парсинг}\label{binparse} + +Большой практической проблемой является анализ бинарных потоков данных. До сих +пор не создано общепринятого инструмента для декларативного описания +произвольного бинарного формата, и тем более средств синтеза кода для анализа +(бесконечных) потоков. + +В качестве примера можно привести создание \term{диссекторов} для анализаторов +сетевых протоколов (Wireshark), и чтение любых файловых систем и бинарных +форматов файлов. + +Бинарные файлы склонны иметь контекстно-чувствительную грамматику, и их разбор +требует средств, способных работать с первым типом по классификации Хомского +\cite{serlex}: + +\medskip +\noindent +\href{http://ru.wikipedia.org/wiki/%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D0%A5%D0%BE%D0%BC%D1%81%D0%BA%D0%BE%D0%B3%D0%BE}{Иерархия +Хомского} + +\noindent +\href{https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0}{Контекстно-зависимая +грамматика} + +\clearpage +Необходима полная поддержка структур \emph{с бинарными полями произвольной +длины}, (тегированных) объединений, и хранение бинарных данных в форматах +little/bigendian: + +\noindent +\url{http://en.wikipedia.org/wiki/Struct_(C_programming_language)} + +\noindent +\url{http://en.wikipedia.org/wiki/Tagged_union} + +\bigskip +Разбор бинарных потоков требует обязательной поддержки восстановления из +ошибок при получении ``битых'' пакетов, также желательна возможность +их частичного разбора. From 993b8497c841cad2d8d2775cc97554fe3693861f Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Thu, 28 Mar 2019 18:07:35 +0400 Subject: [PATCH 015/117] Signed-off-by: Dmitry Ponyatov --- book/mcu/parse/bin.tex | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/book/mcu/parse/bin.tex b/book/mcu/parse/bin.tex index 2a76694..459ce5b 100644 --- a/book/mcu/parse/bin.tex +++ b/book/mcu/parse/bin.tex @@ -37,3 +37,9 @@ Разбор бинарных потоков требует обязательной поддержки восстановления из ошибок при получении ``битых'' пакетов, также желательна возможность их частичного разбора. + +\bigskip +\href{https://qspace.library.queensu.ca/bitstream/handle/1974/22040/ElShakankiry_Ali_201708_MSC.pdf}{ +Context Sensitive and Secure Parser Generation for +Deep Packet Inspection of Binary Protocols} +\copyright\ Ali ElShakankiry \ No newline at end of file From d52598bf9aaf323fe9dca6866739fb5fa2bf8981 Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Thu, 28 Mar 2019 22:21:45 +0400 Subject: [PATCH 016/117] + update Signed-off-by: Dmitry Ponyatov --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index 7705612..eb1192b 100644 --- a/Makefile +++ b/Makefile @@ -17,3 +17,6 @@ release: update: git submodule update --init --recursive + git pull -v + cd mcu ; git pull -v + cd mcu/LoRaMac-node ; git pull -v From b7d4844c96fc2d7c0523419f49ffc620f91e842e Mon Sep 17 00:00:00 2001 From: Dmitry Ponyatov Date: Thu, 28 Mar 2019 22:46:32 +0400 Subject: [PATCH 017/117] + cli/pad,go Signed-off-by: Dmitry Ponyatov --- .../app/src/main/res/layout/activity_main.xml | 2 +- .../app/src/main/res/layout/content_main.xml | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Android/app/src/main/res/layout/activity_main.xml b/Android/app/src/main/res/layout/activity_main.xml index 8bf14bd..24d5b48 100644 --- a/Android/app/src/main/res/layout/activity_main.xml +++ b/Android/app/src/main/res/layout/activity_main.xml @@ -8,7 +8,7 @@ + + + + +