From 5765760cea3fc748d8d2cc999a622ade0de198c0 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Mon, 24 Apr 2023 18:55:00 +0800 Subject: [PATCH] ... ... --- README.md | 164 +++++++----------------- README_zh.md | 134 ++++---------------- docs/index.md | 2 +- docs/plugins.zip | Bin 0 -> 3524 bytes docs/plugins/c.md | 35 ------ docs/plugins/flutter.md | 210 ------------------------------- docs/plugins/unity.md | 78 ------------ docs/quick-start/attr.md | 2 +- docs/quick-start/bind.md | 2 +- docs/quick-start/call.md | 2 +- docs/quick-start/exec.md | 4 +- docs/quick-start/installation.md | 44 +++++-- docs/quick-start/interop.md | 4 +- docs/quick-start/overview.md | 30 ----- docs/quick-start/wrap.md | 4 +- docs/retype.yml | 8 +- docs/sample.png | Bin 46313 -> 0 bytes docs/static/logo.png | Bin 12876 -> 0 bytes docs/static/logo_flat.png | Bin 42542 -> 0 bytes src/vm.h | 4 +- tests/46_star.py | 22 +++- 21 files changed, 141 insertions(+), 608 deletions(-) create mode 100644 docs/plugins.zip delete mode 100644 docs/plugins/c.md delete mode 100644 docs/plugins/flutter.md delete mode 100644 docs/plugins/unity.md delete mode 100644 docs/quick-start/overview.md delete mode 100644 docs/sample.png delete mode 100644 docs/static/logo.png delete mode 100644 docs/static/logo_flat.png diff --git a/README.md b/README.md index 6bbbf02c..70661009 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# PocketPy +# pocketpy: python interpreter in 1 file

@@ -8,21 +8,57 @@ GitHub release

-PocketPy is a lightweight(~8000 LOC) Python interpreter for game engines/apps. - - ---- -#### The first production-ready version is `v1.0.0`, which will be available soon. - ---- **English |** [**简体中文**](README_zh.md) +pkpy is a lightweight(~8000 LOC) Python interpreter for game engine/apps, built on C++17 with STL. + It is extremely easy to embed. Including a compiler, optimizer and bytecode virtual machine. All of them are available in a single header file `pocketpy.h`, without external dependencies. Please see https://pocketpy.dev for details or try [Live Demo](https://pocketpy.dev/static/web/). -![sample_img](docs/sample.png) +## Quick start + +Download the `pocketpy.h` on our GitHub release page. +And `#include` it in your project. + +https://github.com/blueloveTH/pocketpy/releases/latest + +### Compile flags + +To compile it with your project, these flags must be set: + ++ `--std=c++17` flag must be set ++ Exception must be enabled ++ RTTI is not required + +!!! +For maximum performance, we recommend to use `clang++` with `-O2` flag. +!!! + +### Example + +```cpp +#include "pocketpy.h" + +using namespace pkpy; + +int main(){ + // Create a virtual machine + VM* vm = new VM(); + + // Hello world! + vm->exec("print('Hello world!')", "main.py", EXEC_MODE); + + // Create a list + vm->exec("a = [1, 2, 3]", "main.py", EXEC_MODE); + + // Eval the sum of the list + PyObject* result = vm->exec("sum(a)", "", EVAL_MODE); + std::cout << CAST(int, result); // 6 + return 0; +} +``` ## Features @@ -49,114 +85,6 @@ Please see https://pocketpy.dev for details or try [Live Demo](https://pocketpy. | Generator | `yield i` | YES | | Decorator | `@cache` | YES | -## Getting Started - -#### C/C++ - -For C/C++ developers, you can download the `pocketpy.h` on our GitHub release page. - -https://github.com/blueloveTH/pocketpy/releases/latest - -Check [C-API](https://pocketpy.dev/c-api/vm/) for references. For further customization, you can use [C++ API](https://pocketpy.dev/getting-started/cpp/). - -```cpp -#include "pocketpy.h" - -int main(){ - // Create a virtual machine - auto vm = pkpy_new_vm(); - - // Hello world! - pkpy_vm_exec(vm, "print('Hello world!')"); - - // Create a list - pkpy_vm_exec(vm, "a = [1, 2, 3]"); - - // Eval the sum of the list - char* result = pkpy_vm_eval(vm, "sum(a)"); - printf("%s", result); // 6 - - // Free the resources - pkpy_delete(result); - pkpy_delete(vm); - return 0; -} -``` - -#### Unity Engine - -PocketPy for Unity can be installed via Unity Asset Store. - -https://assetstore.unity.com/packages/slug/241120 - -```csharp -using UnityEngine; - -public class Test01 : MonoBehaviour -{ - // Start is called before the first frame update - void Start() - { - // Create a virtual machine - pkpy.VM vm = new pkpy.VM(); - - // Create a list - vm.exec("a = [1, 2, 3]"); - - // Eval the sum of the list - string result = vm.eval("sum(a)"); - Debug.Log(result); // 6 - - // Print to the standard output - vm.exec("print(a)"); - pkpy.PyOutput o = vm.read_output(); - Debug.Log(o.stdout); // [1, 2, 3] - - // Create a binding - vm.bind("builtins", "test", (double x) => x+1); - Debug.Log(vm.eval("test(3.14)")); // '4.14' - } -} -``` - -#### Flutter - -Run the following script to install this plugin. - -``` -flutter pub add pocketpy -``` - -See https://pocketpy.dev/getting-started/flutter/ - -#### Pre-compiled Libs - -You can download `artifact.zip` from [Github Release](https://github.com/blueloveTH/pocketpy/releases/latest) page. In this archive, there are pre-compiled libraries for many platforms. The file structure is as follows. - -``` -- android/ - - arm64-v8a/ - - libpocketpy.so - - armeabi-v7a/ - - libpocketpy.so - - x86_64/ - - libpocketpy.so -- linux/ - - x86_64/ - - pocketpy - - pocketpy.so -- macos/ - - pocketpy.bundle/ -- web/ - - lib/ - - pocketpy.js - - pocketpy.wasm -- windows/ - - x86_64/ - - pocketpy.dll - - pocketpy.exe -``` - ## Contribution All kinds of contributions are welcome. @@ -183,5 +111,5 @@ Check our [Coding Style Guide](https://pocketpy.dev/coding_style_guide/) if you ## License -PocketPy is licensed under the [MIT License](http://opensource.org/licenses/MIT). +pkpy is licensed under the [MIT License](http://opensource.org/licenses/MIT). diff --git a/README_zh.md b/README_zh.md index a3acf1c2..4b5dcd08 100644 --- a/README_zh.md +++ b/README_zh.md @@ -1,4 +1,4 @@ -# PocketPy +# pocketpy: python interpreter in 1 file

@@ -8,46 +8,16 @@ GitHub release

- -PocketPy是一个轻量级的Python解释器,为嵌入至游戏引擎而设计。 +pocketpy是一个轻量级的Python解释器,为嵌入至游戏引擎而设计,基于C++17和STL。 它包含一个编译器和基于字节码的虚拟机,以及交互式命令窗的实现。所有功能均集成在单个头文件`pocketpy.h`中,不包含外部依赖项,能很方便地嵌入至你的应用。 -你可以 [在浏览器中体验](https://pocketpy.dev/static/web/) PocketPy的交互式界面(REPL)。 - -![sample_img](docs/sample.png) - -## 支持的语法特性 - -| 特性 | 示例 | 支持 | -| ------------ | ------------------------------- | ---- | -| 分支 | `if..else..elif` | YES | -| 循环 | `for/while/break/continue` | YES | -| 函数 | `def f(x,*args,y=1):` | YES | -| 类与继承 | `class A(B):` | YES | -| 列表 | `[1, 2, 'a']` | YES | -| 列表生成式 | `[i for i in range(5)]` | YES | -| 切片 | `a[1:2], a[:2], a[1:]` | YES | -| 元组 | `(1, 2, 'a')` | YES | -| 字典 | `{'a': 1, 'b': 2}` | YES | -| 格式化字符串 | `f'value is {x}'` | YES | -| 序列解包 | `a, b = 1, 2` | YES | -| 异常 | `raise/try..catch` | YES | -| 动态分发 | `eval()/exec()` | YES | -| 反射 | `hasattr()/getattr()/setattr()` | YES | -| 导入模块 | `import/from..import` | YES | -| 上下文管理器 | `with as :` | YES | -| 类型标注 | `def f(a:int, b:float=1)` | YES | -| 生成器 | `yield i` | YES | -| 装饰器 | `@cache` | YES | +你可以 [在浏览器中体验](https://pocketpy.dev/static/web/) pocketpy的交互式界面(REPL)。 ## 快速上手 -根据你所使用的语言和平台选择对应的插件。 - -#### C/C++ - -你可以在 [Github Release](https://github.com/blueloveTH/pocketpy/releases/latest) 页面下载`pocketpy.h`,并加入到你的工程中。请参考[C-API](https://pocketpy.dev/c-api/vm/)相关的说明,对于C++,你也可以使用`VM`类的方法操作虚拟机。 +你可以在 [Github Release](https://github.com/blueloveTH/pocketpy/releases/latest) 页面下载`pocketpy.h`, +并加入到你的工程中。请参阅 https://pocketpy.dev 以获取更详细的文档。 ```cpp #include "pocketpy.h" @@ -73,79 +43,29 @@ int main(){ } ``` -#### Unity Engine - -你可以在Unity资源商店下载PocketPy的C#插件,支持Windows/MacOS/Android/iOS平台。 - -https://assetstore.unity.com/packages/slug/241120 - -```csharp -using UnityEngine; - -public class Test01 : MonoBehaviour -{ - void Start() - { - // 创建一个虚拟机 - pkpy.VM vm = new pkpy.VM(); - - // 构造一个列表 - vm.exec("a = [1, 2, 3]"); - - // 对列表进行求和 - string result = vm.eval("sum(a)"); - Debug.Log(result); // 6 - - // 打印变量`a`,并读取标准输出 - vm.exec("print(a)"); - pkpy.PyOutput o = vm.read_output(); - Debug.Log(o.stdout); // [1, 2, 3] - - // 构造一个函数绑定 - vm.bind("builtins", "test", (double x) => x+1); - Debug.Log(vm.eval("test(3.14)")); // '4.14' - } -} -``` - -#### Flutter - -使用下列命令安装pocketpy的[Flutter插件](https://pub.dev/packages/pocketpy),支持Windows/Android/iOS/Web平台。 - -``` -flutter pub add pocketpy -``` - -详细配置请参考 https://pocketpy.dev/getting-started/flutter/ - -#### 预编译库 - -你可以在 [Github Release](https://github.com/blueloveTH/pocketpy/releases/latest) 页面下载`artifact.zip`,这个压缩包中包含了一套预编译库。结构如下。 - -``` -- android/ - - arm64-v8a/ - - libpocketpy.so - - armeabi-v7a/ - - libpocketpy.so - - x86_64/ - - libpocketpy.so -- linux/ - - x86_64/ - - pocketpy - - pocketpy.so -- macos/ - - pocketpy.bundle/ -- web/ - - lib/ - - pocketpy.js - - pocketpy.wasm -- windows/ - - x86_64/ - - pocketpy.dll - - pocketpy.exe -``` +## 支持的语法特性 +| 特性 | 示例 | 支持 | +| ------------ | ------------------------------- | ---- | +| 分支 | `if..else..elif` | YES | +| 循环 | `for/while/break/continue` | YES | +| 函数 | `def f(x,*args,y=1):` | YES | +| 类与继承 | `class A(B):` | YES | +| 列表 | `[1, 2, 'a']` | YES | +| 列表生成式 | `[i for i in range(5)]` | YES | +| 切片 | `a[1:2], a[:2], a[1:]` | YES | +| 元组 | `(1, 2, 'a')` | YES | +| 字典 | `{'a': 1, 'b': 2}` | YES | +| 格式化字符串 | `f'value is {x}'` | YES | +| 序列解包 | `a, b = 1, 2` | YES | +| 异常 | `raise/try..catch` | YES | +| 动态分发 | `eval()/exec()` | YES | +| 反射 | `hasattr()/getattr()/setattr()` | YES | +| 导入模块 | `import/from..import` | YES | +| 上下文管理器 | `with as :` | YES | +| 类型标注 | `def f(a:int, b:float=1)` | YES | +| 生成器 | `yield i` | YES | +| 装饰器 | `@cache` | YES | ## 参考 diff --git a/docs/index.md b/docs/index.md index 8ab4b6a4..a6955be2 100644 --- a/docs/index.md +++ b/docs/index.md @@ -3,7 +3,7 @@ icon: home label: Welcome --- -# Welcome to PocketPy +# Welcome to pocketpy pkpy is a lightweight(~8000 LOC) Python interpreter for game engine/apps. diff --git a/docs/plugins.zip b/docs/plugins.zip new file mode 100644 index 0000000000000000000000000000000000000000..57ff7e03bc74f5cd3c2f1ce0b4ac9ce58b86b9af GIT binary patch literal 3524 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 - -

- -This plugin provides object-oriented interfaces including full functionality of PocketPy [C-API](https://pocketpy.dev/c-api/vm). - -Run the following script to install this plugin. - -``` -flutter pub add pocketpy -``` - -## Requirements - -#### For Android - -You may need to set the Android NDK version to "21.4.7075529" or higher in `android/app/build.gradle`. -``` -android { - ndkVersion "21.4.7075529" -} -``` - -#### For iOS - -It should work without any setup. - -#### For Web - -Download an artifact from https://github.com/blueloveTH/pocketpy/releases/latest. - -Unzip it and copy `web/lib` into your root folder where `index.html` locates. - -``` -... -lib/pocketpy.js -lib/pocketpy.wasm -index.html -... -``` - -Then open `index.html` and add this line before `flutter.js` tag. - -``` -... - - - - - -... -``` - - -#### For Windows - -VS2017 or higher is required to build the windows `.dll`. -Make sure you have C++ component installed. - - -## Basic Example - -```dart -import 'package:pocketpy/pocketpy.dart' as pkpy; - -// Create a virtual machine -pkpy.VM vm = pkpy.VM(); - -// Run a script -String code = 'print("Hello World!")'; -vm.exec(code); - -// Read the output -var _o = vm.read_output(); -print(_o.stdout) // "Hello world!\n" -print(_o.stderr) // "" - -// Create a binding -vm.bind("builtins", "add", (int x, int y) => x + y); -vm.eval("add(1, 2)"); // '3' -``` - - - -## REPL Widget Example - -```dart -import 'dart:io'; - -import 'package:flutter/material.dart'; -import 'package:pocketpy/pocketpy.dart' as pkpy; - -void main() { - runApp(const MaterialApp(home: MyApp())); -} - -class MyApp extends StatefulWidget { - const MyApp({super.key}); - - @override - State createState() => _MyAppState(); -} - -class _MyAppState extends State { - late final pkpy.VM vm; - late final pkpy.REPL repl; - bool needMoreLines = false; - - final TextEditingController _controller = TextEditingController(); - final StringBuffer buffer = StringBuffer(); - - @override - void initState() { - super.initState(); - - // create a pocketpy virtual machine - vm = pkpy.VM(); - - // create a REPL - repl = pkpy.REPL(vm); - - WidgetsBinding.instance.addPostFrameCallback((timeStamp) { - refresh(); - }); - } - - void addMessage(String text) { - setState(() { - buffer.write(text); - }); - } - - void submitCode() { - var text = _controller.text; - _controller.clear(); - setState(() { - buffer.write(needMoreLines ? '... $text' : '>>> $text\n'); - }); - - needMoreLines = repl.input(text); - refresh(); - } - - void refresh() { - // ignore: no_leading_underscores_for_local_identifiers - var _o = vm.read_output(); - if (_o.stdout.isNotEmpty) buffer.write(_o.stdout); - if (_o.stderr.isNotEmpty) buffer.write(_o.stderr); - setState(() {}); - } - - @override - Widget build(BuildContext context) { - var style = const TextStyle(fontSize: 16); - return Scaffold( - appBar: AppBar( - title: const Text('Demo'), - ), - body: Padding( - padding: const EdgeInsets.all(8.0), - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Expanded( - child: SingleChildScrollView( - reverse: true, - child: Text( - buffer.toString(), - style: style, - textAlign: TextAlign.left, - ), - ), - ), - const SizedBox( - height: 16, - ), - SizedBox( - height: 50, - child: TextFormField( - controller: _controller, - style: style, - maxLines: 1, - decoration: const InputDecoration( - border: OutlineInputBorder(), - hintText: 'Enter Python code', - ), - ), - ), - Container( - height: 60, - alignment: Alignment.centerRight, - child: MaterialButton( - onPressed: submitCode, - color: Colors.blue, - textColor: Colors.white, - child: const Text('Run')), - ), - ]), - ), - ); - } -} -``` - diff --git a/docs/plugins/unity.md b/docs/plugins/unity.md deleted file mode 100644 index 592c8d50..00000000 --- a/docs/plugins/unity.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -icon: code -label: Unity Engine -order: 4 ---- - -## Introduction - -PocketPy for Unity can be installed via Unity Asset Store. - -https://assetstore.unity.com/packages/slug/241120 - - - -## Example 01 - -```csharp -using UnityEngine; - -public class Test01 : MonoBehaviour -{ - // Start is called before the first frame update - void Start() - { - // Create a virtual machine - pkpy.VM vm = new pkpy.VM(); - - // Create a list - vm.exec("a = [1, 2, 3]"); - - // Eval the sum of the list - string result = vm.eval("sum(a)"); - Debug.Log(result); // 6 - - // Print to the standard output - vm.exec("print(a)"); - pkpy.PyOutput o = vm.read_output(); - Debug.Log(o.stdout); // [1, 2, 3] - - // Create a binding - vm.bind("builtins", "test", (double x) => x+1); - Debug.Log(vm.eval("test(3.14)")); // '4.14' - } -} -``` - - - -## Example 02 - -```csharp -using UnityEngine; -using UnityEngine.UI; - -public class Test02 : MonoBehaviour -{ - Text text; - pkpy.VM vm; - - // Start is called before the first frame update - void Start() - { - text = GetComponent(); - Application.targetFrameRate = 60; - vm = new pkpy.VM(); - vm.exec("a = 0"); - } - - // Update is called once per frame - void Update() - { - if(vm == null) return; - vm.exec("a += 1"); - text.text = vm.eval("a"); - } -} -``` - diff --git a/docs/quick-start/attr.md b/docs/quick-start/attr.md index cd2c1da6..0c7e865d 100644 --- a/docs/quick-start/attr.md +++ b/docs/quick-start/attr.md @@ -1,5 +1,5 @@ --- -icon: code +icon: dot label: 'Access attributes' order: 80 --- diff --git a/docs/quick-start/bind.md b/docs/quick-start/bind.md index 78705391..3f2c4518 100644 --- a/docs/quick-start/bind.md +++ b/docs/quick-start/bind.md @@ -1,5 +1,5 @@ --- -icon: code +icon: dot label: 'Bind native function' order: 60 --- diff --git a/docs/quick-start/call.md b/docs/quick-start/call.md index c9097dcb..1d31bc02 100644 --- a/docs/quick-start/call.md +++ b/docs/quick-start/call.md @@ -1,5 +1,5 @@ --- -icon: code +icon: dot label: 'Call Python function' order: 70 --- diff --git a/docs/quick-start/exec.md b/docs/quick-start/exec.md index e5b4e95d..6eca372c 100644 --- a/docs/quick-start/exec.md +++ b/docs/quick-start/exec.md @@ -1,5 +1,5 @@ --- -icon: code +icon: dot label: 'Execute Python code' order: 93 --- @@ -17,7 +17,7 @@ Once you have a `VM` instance, you can execute python code by calling `exec` met If the execution is not successful, e.g. a syntax error or a runtime exception, the return value will be `nullptr`. -#### Compile mode +### Compile mode The `mode` parameter controls how the source code is compiled. There are 4 possible values: + `EXEC_MODE`, this is the default mode. Just do normal execution. diff --git a/docs/quick-start/installation.md b/docs/quick-start/installation.md index 8c2bce67..ec5fcc46 100644 --- a/docs/quick-start/installation.md +++ b/docs/quick-start/installation.md @@ -1,22 +1,15 @@ --- -icon: code +icon: dot label: 'Installation' order: 100 --- -You need to download `pocketpy.h` on our GitHub release page. +Download the `pocketpy.h` on our GitHub release page. And `#include` it in your project. https://github.com/blueloveTH/pocketpy/releases/latest -Alternatively, you can install it via vcpkg.io. -(Will be available soon) - -```bash -vcpkg install pocketpy -``` - -## Compile flags +### Compile flags To compile it with your project, these flags must be set: @@ -28,7 +21,7 @@ To compile it with your project, these flags must be set: For maximum performance, we recommend to use `clang++` with `-O2` flag. !!! -## Example +### Example ```cpp #include "pocketpy.h" @@ -37,7 +30,7 @@ using namespace pkpy; int main(){ // Create a virtual machine - VM* vm = new VM(true); + VM* vm = new VM(); // Hello world! vm->exec("print('Hello world!')", "main.py", EXEC_MODE); @@ -50,4 +43,31 @@ int main(){ std::cout << CAST(int, result); // 6 return 0; } +``` + +### Overview + +pkpy's C++ interfaces are organized in an object-oriented way. +All classes are located in `pkpy` namespace. + +The most important class is the `VM` class. A `VM` instance is a python virtual machine which holds all necessary runtime states, including callstacks, modules, variables, etc. + +You need to use the C++ `new` operator to create a `VM` instance. + +```cpp +VM* vm = new VM(); +``` + +The constructor can take 2 extra parameters. + +#### `VM(bool use_stdio=true, bool enable_os=true)` + ++ `use_stdio`, if `true`, the `print()` function outputs string to `stdout`. Error messages will be send to `stderr`; If `false`, they will be sent to an internal buffer. In the latter case, you need to read them via `read_output` manually. ++ `enable_os`, whether to enable OS-related features or not. This setting controls the availability of some priviledged modules such os `io` and `os` as well as builtin function `open`. + + +When you are done with the `VM` instance, you need to use the C++ `delete` operator to free the memory. + +```cpp +delete vm; ``` \ No newline at end of file diff --git a/docs/quick-start/interop.md b/docs/quick-start/interop.md index 54c402e7..b98b9819 100644 --- a/docs/quick-start/interop.md +++ b/docs/quick-start/interop.md @@ -1,5 +1,5 @@ --- -icon: code +icon: dot label: 'Interop with PyObject' order: 90 --- @@ -22,7 +22,7 @@ PyObject* i = VAR("abc"); std::cout << CAST(Str, i); // abc ``` -#### Types +### Types | python type | C type | note | | ------------ | ---------------- | ---------------------- | diff --git a/docs/quick-start/overview.md b/docs/quick-start/overview.md deleted file mode 100644 index a4ac8f43..00000000 --- a/docs/quick-start/overview.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -icon: code -label: 'Overview' -order: 95 ---- - -pkpy's C++ interfaces are organized in an object-oriented way. -All classes are located in `pkpy` namespace. - -The most important class is the `VM` class. A `VM` instance is a python virtual machine which holds all necessary runtime states, including callstacks, modules, variables, etc. - -You need to use the C++ `new` operator to create a `VM` instance. - -```cpp -VM* vm = new VM(); -``` - -The constructor can take 2 extra parameters. - -#### `VM(bool use_stdio=true, bool enable_os=true)` - -+ `use_stdio`, if `true`, the `print()` function outputs string to `stdout`. Error messages will be send to `stderr`; If `false`, they will be sent to an internal buffer. In the latter case, you need to read them via `read_output` manually. -+ `enable_os`, whether to enable OS-related features or not. This setting controls the availability of some priviledged modules such os `io` and `os` as well as builtin function `open`. - - -When you are done with the `VM` instance, you need to use the C++ `delete` operator to free the memory. - -```cpp -delete vm; -``` \ No newline at end of file diff --git a/docs/quick-start/wrap.md b/docs/quick-start/wrap.md index 21ebf2a8..7747b79c 100644 --- a/docs/quick-start/wrap.md +++ b/docs/quick-start/wrap.md @@ -1,5 +1,5 @@ --- -icon: code +icon: dot label: 'Wrap native struct' order: 50 --- @@ -77,7 +77,7 @@ struct Vector2 { }; int main(){ - VM* vm = new VM(true); + VM* vm = new VM(); // create a new module `test` PyObject* mod = vm->new_module("test"); // register `Vector2` to `test` module diff --git a/docs/retype.yml b/docs/retype.yml index 52b05c50..7f09f133 100644 --- a/docs/retype.yml +++ b/docs/retype.yml @@ -2,12 +2,12 @@ input: . output: .retype url: https://pocketpy.dev branding: - title: PocketPy + title: pocketpy label: v1.0 - logo: "./static/logo.png" -favicon: "./static/logo.png" + # logo: "./static/logo.png" +# favicon: "./static/logo.png" meta: - title: " | A lightweight Python interpreter for game engines" + title: " | Open Source Python interpreter in 1 file" links: - text: "Home" icon: home diff --git a/docs/sample.png b/docs/sample.png deleted file mode 100644 index f7292638d4ee7251eec9afc0d37e6fe949c519cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46313 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

<%4Jch7RX_hjcBTA%(!% zKN~CxSlb9&wPSCVsFDAQP7ZRLWc;9{x#FuZ@$4)_FFc@JaDA!5T-!b-L#79RHiYE| z-$=W)%@rdm^WcsNOWs-5k%%^H>DD4oJ!2H3YkMO;la8t{p}S*fvkdyXvw=P+sO+m(2|Wm+{8>coeX*?V11eg0!xi?UW6 zZAR7a>jN|S5M1(Lr}IZPPM5AS-0op86ESX7@BGiXhVg4dH+Dz3-y?$tmDw6Fx83w^ zei2DkKS%gf@mH5S@`mBC0Wp0o(9=JNwqVLm`{Pgnu;z-E_&1onzAByg2bqU2qhZ@ghewG1QcmthT{1 z#eH40Bc@vVZ?h|@X97BYPuS}YP&*|g(~gLJ^*WDS>D92I8WV7W4loi^>Xa%auK^h9 zNq(N*Z!;~sVFGYFW1G!Is=s}i!IlE4g|zDi3x1l5udkX81pr>wOOraR{cw5jpm^m_ zS;)ByL#j(i+#Ib_O4K?iU&5+63F-oIbQxJP+|3*dyk1HWI&Qyca=J%@86cH=-NFo# z)zC>NPb`E?WnscaCkhtPUP-DINUnr@BH@aHKt;Oqtql_wqk%}voS#+NI1)QUpu|f} zigeQ;>~CIE;O3E1Bx+zha;#N~=0UM3JLNKYZL_F}bTaWj{k3*0(nfnp+PxHV!^=5b zle#TD2N6UO{Ts&4IO~~YgZ$}E{Cst#h&(}8*Z<8Tma zmxOoL-D59#S2yqC3y+ZwDa2_rPaJg11>_5yJodXE31i%y?w7FlAH#Ck`Vjmt^XS#t zy$%|ow3lB?P~7gQ-8#I7rrtnu(q0Y;I0h`C;*b6^#cLJxWcrwcL^QVt3|Yid0~?)j z28Y?g!K;s*ijpvwzV|g%!1#EilpKp@zBH|5$29e;l_~z7>366wwTV`;w!JX0T zkdI5FXT{!eg4#xSBwW>Wi1Rh?Xfkv2*#oZ2Yz`#yM97ln)kHKyy~( zO5uVU(}d;Xn_u}5EG1@g6m$2Qe{=?^6{s3zU%Y@4arisxodIM^KTG2 z_1&yP@1>;$qfnqs_EbXC#M`QU-+VGLOl-{^NnPLj5{B%9W#+sct!Fs|SEBmW4!g{o z_TQAAiQyasP*jISZrV@k+=o~<8v1Q6H<4=yd+GVmpsYuDNZ^xR;_rH%x8Zm~3L#Lp z&d9VI^Hc^_OCB~L2Hsu_qak+27?KG1rv?#If}4%)9jC8NLTaSb>^Q75klW$&lNX^uI$}`xcco7=L;n=xa62CIt!uTzFfNx5%6;o z(l*AtQMZyv>t~{iBHNN@pR!NUlHLrf6#4>H%0FWyU2uYtPbVo`4>w~@;&pAt(6>yZ z<;I6h6iTMsWhlAQq75J)DAE6zG!<9|37z=(ZPCjd=y33n!?Tzm{ci>QX2Y-1fbl^^ zS#N?XUFK)8UZPGycIcHF=de7({7HDzD~Id{R#fLhEUj!h5|qqI(GSE}cudwq6(t7Q zv{Y5PP7jokAiE+m0R)<@I~BSK4r5i6S|<9H9WiO%Usl%zj$8hm`>dOX{cG?*Rtwzu zpJoMnYig$|L;WKx1%8Pw7kqipqIGIm6D~}!bXpn#$?is;J@}r0d+@Pb?!85q-nrzM z-U{=#!#|5*b6e6W6}T!!HZpqmI)mBQdp@5Mrqoequc-6^4ecinMi+EACJj{|z*mfX;;UP)=&(!8ro4@PVr zt!LJe&4JOXeg4|~$@isG#|ZCU7ik#DTu5NB<3{b)L3PH*d_4SQ1g;kkCi#@Bo+k@N zXM`hl`p-Ojsqe><7$(J3 z-kiHv!mV$$w-;E+M|ICE(KwE&;!yU_air40aqP0qm)E3pLw5zGb&$rh@Yz!`{gr=(ZxIh)Yo@e0XFcFG_LhiJCQ{luiL5T#Wq67dzX;NC!!x1r}8e- z0X)9#^J0kjLB{b6k|YU&{zbP>zzsnmV%Zw|hr4I?(P`y007b!hUSA+v7POduYtSkT z>U5pyT5pbOU8h>?rP^s4U5& znuuhQe`-C1vY>JoDNZVk+`}nr^klcXk)%_L74Sxi9~&%5m_&cLBuA&j;?6*O;7I#1 zcLHmXotsSQ zT0}%(Pd(A6OguokMZy&WHYxgnzP)=<+ozK$k;ALsU7szPQHst3NE8h(M3x#X1?}^a z?dy&n+bXcfTB~47Wc=Lj7`Arry|_5S$SuOsim{qf<-05^Ll6`(R*X|Bj6{`o1PkroGQ66eIlf*fgHz9{vMe-_6P0d ztI%pv3Z7L&;^xC=SkK6ah*6ezSZQ(es#>$(Fx9`zUJnH6>l-aw>8mjh7tTZx{D+Da zwl&9VE3DmCF7;IwqVD{}IV7N%X#Sv>f?WIAU%z!XUK8aqaaclEW<2Bi&>^g*8x1YU z;jU^lrZ;Szc|V)Z`5h=Lq$PFhSRYVo=k0gDPvcV zORcSi6mP@za&uL`8i(pXP#nTh@`VpZWUVOvN=jL{QCWh%R^b`gx-_^%(I{KJy?0Io zw|XE&uJQL$Wn$;}M_Gt3O9{bBv4CQ;M#@wx0t=+M8^ZhCSi8LqqKNF2gjA3t3u+e5 zS2@KXHt|ohz}#ly`hNoH2t>Ksr7lbwIrUhwjUc|kqa$&j#ecv?=&9Rlo${qQhN&lkcFH9 zFKmAo==chQG*S|{?Q2e@PAs|BSeU((t9pnM2I20dRDvsUQ_SNFW~5_t$luaSquHSD zDI_=x7wuu|X((*L`P>OxT5?_qu1mimWBLo>y4>E+|O8l9IdLw#*``oLOm(e>OL zG!2bzp78OvWE95#m!l;cr=M#X(W4jLG_UM`VOEpi-3_Lm@h^wyDzwoT{dKkaP8x&S zyqmTx{u|$Qf;FZ_$a0X4O|Ye86L4@O3M1MwUb7X1t}H%2aN<~7yp|75H~njxlc#dv zERz6u|L&eY(})i{OkaM7Mwn@mj`KSAiH+CVDsG`jy__Dbi>Pac|V~-KA9w9n40}FdUD@N$b^7I4cwyrUfj4ACJ+=alG*}ps!{X>lCX` zJ-mF7#{i@j%0oT7R&OUY>|Pv-?YLnZM-7ShI0)%0uR)faLP$t=5=;sT4q&M{ z2~IsAncQwJ)Vs+E$=fc@94Yv@B@l$SpX}b9QLw5FMqWcp&+nF?^{(m#hwewnhcZh( zufJ16t|!GwKHYTGEGxFpq?e~sTh02p|6G6T_DPeVY;lpJ*TN|R!U$>^6}m>c+W2Ho@A^vb>%#iB#vw7gwz{)33uDZXocy>|2I@wXC6 zg?-|VZ{B|jqD;P%zBut}O8*V1IR4`Cp=JmF3DzoQrs=k0sjG3KcgT2foITXSsPjmh z#4Q?rIMI_37m*i5-GgAX4Taj^fC2MZ{EBjNXs7&v4E2jorT>BF1c&dNT=3g@t+Ow2 z($Y{pV#0k=H1(10@jbCmuG~JMirvjul(~Z#4Cm4B2bT`WknBB#d%h0CY^ST?CBCJM z@bqkJ?Vp$ZDlKz!Y&30P{Q*Nq$=vEoF@cJ@0#OPmQ^4sh*VYy1NU7ZW6eB!N<7)~; zew6iP6YVlpG=$i->-n&g{c1C6rZFzsaLZNqu+nMjj12iFb$0$qNzh{_H{Am^_N}}Y zuTcqEb$f5T+PiTvlBdb-Qy!w!m9dZ24`SVloNH9+r={*N)@VkiL(I_K8w4 zOMdE8Nc#y@$>Qg2? z;lk1EQN-YMVhLgulW;)#R)sthMjocKtuiUU)`^tT5GK{n&p@=-NmAz2hsgS;48_mF zDPP-JeLfiVpQjmU<>Q>HIwG*J+_*1QWMC&0s$~;OU#|6V64vLK%J&w!-p;2vIYWr; z(Gfk_F5X(9Y5Ym2517VI_WY=kLwzr~qdS;nREEB;qGG1h>eKh4n?w8#miD|ss05IR zF2W92EKd?u>Xdm{>SzgaGpNbFTrT-zzSMCHT1*x0CaUiT5=AsphAoUdB93Nx;&Q7>>XQ9V?W8^^vtGR!p z2`1@h5L`J}ZgOR?bsPrF_%>&LGV=6oyaly9@q}&08$}B8St)bRYkG?8u+~KoEN&^i z_(tS8#@Q0yI5+-aT%?p}&P&meso@Lkn=#67Qxw2RqP9^eQ4a62vs8QDI_6KdOFy1C zo2L9OE-4$KBkr$)u`TUHaC}rd9*VXl3kx={0b|L#=|%}1 z%9ZP65K(tU9j2xRY2%F^n|jh2Zqu{maluk2%J|tMz|(9FK$tJ|zs4&puY|DK0U6_Z zAbm6aY7=zh&4SSM2R;UMN%+kM-@fDThDGKFEsaGc%OB6IZd{)=^Hf(cVPz#^w`+8S zs2f=H(bM#HBH1gH6GUwR7Wz`?K-%$V*1R`IaN#?Nq{TBR;&QfNyi~1=kkpdo!1_Zi zE{ENxBDPhurW{tyRiKI)oLw=e_912{n#|G>V%*87=N>Dwmap1AliA}*3At{744f{y z>h(Y_9ELEdm>S@BHKnKlM8;btyv9mex*)~6 zZ}Pg@gg$U|L4&P-M$6W^;Oxzh7qs4CP?2~}RQO4mH=N~PE0$6=v?;W_T`TGLl^tmn z2c+Z}**mps{tAaCgso^t#*tap7IGz?SC{9*Vd2~IM?!chd26jiHyfW#6c@x@AcFAo zN3eR*W%VR>O>EZtpZucf({OYe4@Myj%^{;4Es zO;IqeCSQd&t>PhNJ8Tzi(}F&i=rZ;GEuRLZP$}j)HF)&QhWnY<=&$6 zYRyUmu_gn@oB2vMa^i=d%h*B2@xYv?BuesR^YKVv?WOHZcno5&(y5|UO3g!y5Q)@c z9JWIKSJ3|F2O~W!HW6Fko_ID6y1Tr;tlR=BAr$yCnJ4EicX%K^PF z=aVJOfzMuu?$7|Qm9puNkrs@THi<@%gYK zthofbHFzq6z{_0QcC#wkts8T^uP%k!yB!51)t1TrLZ(0Tn@(ZL!$C=koHS3IB-k5K z!wvaRcT(I+uSn;w9V|Hi!yLQ=m( zO7Zf>w6lT{^XSkGSOt`d=|@Mdl(xos0l}5(G5k3(h4mS0mURahETV}@i)*1jq4L>3 zSmQjr&((xbelWTaaI2~3Z~Txf1UwuFC`p5sZG5Z-Y;4efwaXx$*Plv7_$u4k#RN)&D{r`bYRk%g>P=etY^gK!}_QR{o0w8A6* za1`&d%VzJp4C6(a2^RfdSSXh-koWHZyFdd}E+gmXI>@E|7D;qnvquu?C?rn}!+-hX z)7H2T?uMsv|L56G5Gm6+MO0i(RgW9=q=IZ5xI#vIM4dHWk4EF{Zb3e{i6w} zuQjA4US;h}9wY0??BxzBxOP~JHV~|rS)3;=`*Yf_Sswtj=*Dp-tX$>NEPj~aiebnV zIsN=+@v^)xriWkEaOCE_@fX|>%8}1y+H~gNqfN@BuR|H?PLI&9C(PInKjGLqfOhA) z=zJ8}8Wfh%EWwYCd5N=;tp|#h;mWsG_yGgyt?+*k5&At~PV%*%UqErmc$$ix=lODp z0eVz{A32x_PiowUMq2+4*gM(Z+~<;1B^`&O@Yaj*Uu-D5rT4GpJFO5hNhc=|XF4mE z@?0Wexv?`(Tkux?7A{xgb1#CAVQzqI&M|v0mH}3s&1CwQ#NG`Vi`(CPQ5b68qB)*8K1-9Bzl_=$ zG84DhCpUn#9J zU)6Y*GG{!UA&iuNJHuqDVOxbLq+b~o(Owp70Z=b!ujVWrr(8Cl%?HBoHm4OzKFDZP z;=+ba>`hK4jUP;oItDdRY4z`cVHLr6{=68T&QwJxbW$FNP+`yCq1yhQuRme6ycPQl zzlnac7T+XR=AZvb0{ac89r?$J$PPAp5Nfta!cAM_sKE9a7yDn244wgt)Nv!Jn`uP~ z%t(>LxJ%!L(eCMr1@dxEiv(8>esN|9D*xf^cUL?2g{PlxEYQvfwC0;JfeURt4O+HvG5AUQ6UT}1Hl>n^VR+P+x~5JD zTqaq<4-)BBUJ-(0`$g zNB;*Bcr_Z3gmsNXv=>q?hiKunybhLf(sBv~7e2hq>LtZKjtR?1bGUHMN$Ad##eDo} z1Tf2EN6;VkAKpn~S+29B7bCP)qZ0`MVC1n!HJd}Mstr;cN@3LyCnkULQRw+FQMR2l z5f;DxL|s$a3~j3-#BXseEoYTIVg9uCJ`=TxEj?!?uuR?+ho3nvsag^#9C0fcmpdxC zIE0dZabNUi%=1h4TdL~LMRD}?#?fK5v_vcI00;{lfwT%A7$bv~;%M8g${wNUsVj@* zyW0U;0f4oTI)xxR$w7^K!Ic`c;Hw&b{U2%7R zI@BE9I8m@^Q@eW;>CuAF;S7@=&1Hy?VXv0s6~-#crmO`u(m(M|e2Ju@K{AUWXA3y< z;Z>h`Uqp?S3pIsn!W3Di6P~@x&e;Iw<2Y{N3giJ-C8x<+wqE%tnBj1Ti@JB0KB#Q4kNsGI|$R~T+xT&FyA7!@v3&ihYLer763Rl`nb?%8#}E9Cyv}Ig z*7-0?r;Aa?p>rgQ)0fGbDcYqYZ+~<)U;weNV{@E9*Fx@j*gMlv`gVM*p*9Qc z{D=LJMPsK|v^rb#m(jBcZ$AtJ+O2FXZFZ@^kwqnMu!k!e*0p&WcQshG0&>4 zz;x#>%SeEpmu=mI?vFE*+|i37W)dk;>}p%mEC<7h?|m~Q)%ndLfK90$U6wOHLIdN$ zntia}rYFcpu2m!t`30R2O+sbE7FvxJ*pVgBu=juR{fC_a92dgHUt=dSoenV;zrEDG zz6+g+n4Md4_?*&T%XAM(=ABzfd?xE!b~);L)+*4TIw(4AbYc7GY$O^QS0t7iAZhA% zsD^+sxDe6*Fw-8qQ2xqv0esWY>jB6=R436)l=+HMeoeMFkaOnDh)=R_zb9H|BRJ7b zaC7;7AsS^7SDz0w9Bb~wI2$3Gdwy|md2_!eoFmKWxz@Q{jeVKn)`*1c8ZzSEEw7+c zTodM>o;=4T~+#x2_+E#R}_^Qi2HVH7- zwRn-6Cs&KX2>6<#`dioV9b=2D-|I({?bQhQ?6JE(iu0&&hstJL3k>gCnBLJb0h5x$P66dc@ zmyc(2ms6bnS6haHq-=DU8jR69^izo332XDJ`kQ=Wd4B*jYa$|f|6%;wZxGZ&{$V>q zNGX_j`6MeSz1gJ{8#rFxuvDJCP}9Ya{ORHvSDC!fY=jDaeCOYSolW2LJM_Zd;DK0H zf3qQBg+|)+(t73=TMv>SpEVpeTw83pR|Cm4{^Au-t76}Tq|~O6+@KG6M=G*?rCUmR zI7PXVzIH&Oz}uvr&U&ukEylKx)RyXr@hH9 zg6~QN3(29C)QX_ZLal)OrZXE?XS7_D(9>?a#xinQ;L*yTYE6{*(fYSkD^BJ0&Mf}5foHHK~zArrGBJ2Eq}QxSDHO0MnSE*rylsjgWJj9swDQUO@d$hrT+fc z8b6ZMZDB7TJobp5lzr@tgWcU}os4-H1ioy^M@XT(?tjbj zkbjSs-0+VL+bw`5S$IJ=oLkPniBlcg$cy{w*+O2ot;~OdNWeQJcB1hOJQ3DF7aj1= z-9=b*83mY9t$!K_4zCV3$$Mxcmfn1Es&_gI$Zll3@^ZgbZs4a)B~XtSHr*ZvMpR zB9z1S)Z9F#NheW{=f8bRgep#MEa9@0wlDSUF zQX|prDpC2qpC@v&eYmu}xRI9pCbuPneYT#zT$!hf2P!ao5qf$#Jwr)mmK?nx405{jsbD z&D&*P7x|3S-qUoVTA`&`;VN_)Tj;Mo?P<4`XoXwtH6a&O2qRmY3^$&ADxWnu%wRuk zUkt2=VtYx{neb!0@SpSSBPU`sKq=&Mg>|ED&#|`pR_ol6E@%`el1ZGw@I#>i=O3O6 zvPgzbSn2AVFkTDXuTiGS-JCnpWvX;zI7NV4GGIR`mh-;PN*%xnygP0?n zJqI?6wOnF9H#RY1lxWyX6{)){+RY#e)KIF2EjYT)d`uxO5vxT%nrA0iipHdI6e#@{ zo4bt#i4K==rQ|Q=NaqkMWkwciGfewaF4ggsPF8Q%T7f(7M@Z8X7P+fHp$ie5GSJ(} zXV5Oo+*p+$Oen2l2*JmG`qq^#?SZ4C7{LKAPBjXG#e?#W&XcS*e-YXeg%_4q*PMG1&?gJ1M?i?a*zQ`hPR6gK^w-a257B%+$ zE$XW%{CjkPjuYZkAy^qR=vCWpXTiOHv)n=aG@Xp~AN|rZ8PA#8+7^Y`=ZCmY-z}-s z-)b^sP^np@*F}rr`YdqtH!=6Z*ke-~*ue3aq_Pw3FfW3S`tu%GL?2q3E34RmF9tG^^RrK~P@whFJF2@ntWM@p$y0T+$rKq>6Q>;{YSPiF75^BLht zP~x#GT9yNIl11bdawUDtL)l5E)xwZ#BiWjz*tdZ8LXWL~DDiErBF>mr$bZnF<9=dJ z+5@RDARVT^N;m+j_TS8Hf!EJf<=i0-YuL%p5ymlZzX8m;Qp4LTg@e^n=!s%V(BOgS zzlkyErU*e2-(-b{k6()}BcC~%aAZ+c?&eL52*ZJ)vf&8)a$)Xor7RD$l3?%%0d(Zo zItbWApT_C}WHNO@w9~m}Twpi1&N37oI>T_NFQ;kIUbJ6|dA?s*}d`Fn8X;PYxtrjL07T{7NRf6aTkW|rB#shMGwZ&wuJbPNJ5uW{Iy{@X z=c+T|-}UNq)xvh8`71we-+4p}(L1F0bCZZk{J6;8kR?1aDh7p);QY0pO}+r@4fHf? zs1S9-HP~kykRv9q7DH=5)#%29{vD|HZ~cI5p__V+m%3%<@|r)SpSz%!;#E1^m_=A; zOG|zO*x8fNm`9FG!3$=vu%iE#9e@rTCI)=c1n;rOBdRv+F)cg;HIs>j&+e$~i7y(8 zz+JI&r$q|2_$U>0KCQ8}q$u)WcwZrZm@j_&<5h%QL`sh8vkuEqWVGdjebdsnbss?pDMLMEsT(KY-a zY!~MQi51Ix@UX*z{~euEgZ|W@N02C74^-Vks}`TLw||j-)puc~q_x)4?ClIMBdRs@ zi4dSl?s0u1l-=8Eg7j~&9+q*E|0|?MaZ=jY>YwyLa_()dUY4wRZpGg>~r?sr?Crp-^}#v zUf5%D#FAgU;AaS0h7!S&T!d&Zr}BXs2R=+RPw|=AvQ`Ur4YJ@%n3K=s8l$9g^FgE< z;FEV>e6*eKgxGR0$iKdIMHY>XOkv8t0EdoqAt%&VF9xz zP$)#EiUOoFZVkJjew1H?xI-AQOH~q!KFV9l9DDbc9GDoU+Cyf4LUUNL*6OoxbhUJQ zB}9NS=D36`vVlSXAIWU6VVeg;ebNB|p7${`CDbeqc`t(Z&!+GnmpqxK5WQ#Q@V!Tx zRsn1Nd~lMf@)m||^;6I#%inDH_#8dj0M|LR&D6E0zl9(5nkF)zKo1V9qcPwkvGK<) zBI(DS0Z1__G=u*^td@fV)aHOZ{_)T>!X^3Zj0&;O(f_25Ee*$pdIHIEp}>h66M+ss|Iy3^`Wc`2tb?4Tc!O@_ z;__K82d}J$_4T=q*q9=g%g@116IOcgfKvWP58Xig>=RT3hzd-V9FSyh@RfEiZBkY3$2YN z*L_}TUr7ron(vv>bVi(~R1#yPknvrW5D&y8k8V8Oz|+-F35k6s!xyo{`qhdxkM#}X zz!o)o710l0!cIS-m#g_!Lf9?0y@^4e^uHW$i#SD~=YPkFZvKsr)FXx<1jz4A2Bq}^ zNBCbI-8-qWx&gHo;E?N=@+*X+9hD?qU&GCpZPxEF7k~FzMgH`)*d9}99b@C~wRdTf zH(=cqjw)>0NFASbILTLjZql{bh33Z&rDvBlLaMrsSd3Ldx1Z+`t(3{*E1s4L2yQq& zush@u{!OmW8i~)bG7HBqAK;z6)Rj34=?CQ>(*FwbLN5+q#gX)eYk&|wq(m;1H|y3nQv}-K(Cupe>C|ymzsx|I4reD?w}7Cd~WQO z65bVEr=4!c(E|r7UpM_A|8yqZSJH52{+bWJYE=3s{b65Dn!dLFk+Q1*MCbT&UOU8F z9SNeL`-2H|{QW3g=S(UTNHxO@n5kPKM8OvUf+tvbi1bd`fFCq`6q5H~+!YnjZXdXQP0aA4{1 z%Y6Fi7mvIbQe@h2%0?V!_MQ0f(Mv(kz2nlR6L}_e4qtu$@ErHr8|gE;gyHuv%-emf zMLPjU+49g&)|nsGrJM*dFnTGFp2!@nLyq*WPQP?aZ7uzFc0&J? z{IkE2Dy3eTLg&a2!(TyA(B>Y-m1$eb7$JXy;w}2aP%!M$ng?NNRN$8L^aCZCjBKv; z7BLRiRa2Qp?I=)JDDvJ{UZQ|qILw78TvZ}6DQiNjaL4c#$q88E*AsQJqr@HrMfR*b z@8$w@-ZIJGxT1xJ!bCt84fC&hbZRhLd_JCD>mu+o13rmup1g}LZ%)iFf zF419Vv0$S54-v!UGv2T`WDbAIpo{x%EtdQ1*-5t{lV_-vrT+f56Zt^i0)2gu^qIe_W?cS0+B&<;{OTWp`sXIPMG+7;E698P{=uHyYM}?%i6& z??K2r4;jjb*P)1E;^@u`JHOEp!`iydkk*x@ZhTt`k%bXYbED5DjUHOQ5C*mh!Wa`tF%#}}(Hfeg{2He*qn~!qWzYf{>i-kjv z69I*DnceHD8>nj;{s($1WBmiY?}ngGy;wG&DPnFC8(vJf zmht^t@!)6#k)q+oTj6`4e-xFV1lz;J+XEs&d*to;UphHA*;o(sZbzze9eATpx~M4L zxBzj6G)L7o_tkfRa-&1fLgqOo#O+xs)!IrR)IRi_p{Z_Q5Nih|thX9Bx8sB*W^zQB z=P{0p*CsvOn>K^A^D?EoGH9s_iB)MIgplryrf^-I`?n~=Z%kX$2_c;gpChu{XdKy8 z4^~A1RpVzdLYRtFTkkDl`CxOJn5H@7g}2PVPi}jYLH9Wn-E9#k9J{>6DM#=ASR2&K zLV6gYi+F@ID?oo_4R*eM-|# z41AuWH}yzr2_F!@mzdPkiaQp?C9C@-1xLJH++EE^K2)INw%)^vTdO?NbjV>rO!?#e zpkZoG&XVwa(VQMjOt^g&RifI+QTA+zeGhxsId@4{v5}aq7Sd;3-l%Z{O19tH-2L$5o_o;YiWh)*Dp__u`XA%BQskslp!%#^T`nXJ(_S z{B;VraI!tu1m92L6O4thHg0cLBI!pu9#?^Q^M_nThI9?&5TFPQ zNCKsdELeWYp^$-G;o+IDiD%v(oFE+QiV=Slv3Q?G{sm1BbM<;E?S#H@751x~@W^s* z!^o9bIFMwr&h61x1tZlhn)1}sRl9z(JWhl_O;-Bp$sd$NF5m1o{rQHmJ_U-1nexDk5$tu35WsNtCMuNu3^;5yN8q5-_^=?Ce@&|VX3zo!+ z&!Bl}PK=0T;5+%OdBaq_B+GHLHf+DE8uk{-tbD%jVS3bVAKd-vj;+MLbD1sK-g2umYBDGfV zcq1=yM3e8Gn@(OgN7GWg+=i+6BYUZH9k_XG|n0$q_~8&4 zz23RQtot@Hx|K^KJK-g9mc-Bq4I!;nmd0fXkZ;mXQe{d0(BT~LC>+pHrZbetrFc*q zTHoz_;PE?N-UsiK%6u5o%nXRqWUtQx_3oUTs%C|IPQG+-6Gdl>#0Sz1(eHV$5V_xr zm8I3M(vT^gb;3d;UXL|i8e*U$Wp#$-I)i{;F;p{Ywhv~P>}8O-jFK& z*){X0)v){Ij|eCo1JSGDWN$YumIDIO%hPzg4o|b)H)zs%u=bFATjj z3r=rCpq0}xI=eYH!N4t7BQ1U##rLgY=8XLK6dlv&V{i2x+RU9i3#L|&Y?__^!3YVH z`ry8Ox~9!!#*s6={tQtdgE{}C%seUBnm_7qB_>LE2zlY<^7Ck6cWGhEuSP&iA}lkw zQVeA<+IfRSb%IQAT=9n^3L^_)vd}znQQycY-O|U7B*lTR0UR&PqSyu>HJe#(nO3y1(VGx zz4d}4_eGF62!{m_B611&#V%ZwHjN0WZRlg@&8O_uvI4FD-S6dqftCh!jsHaySXBM| z=J6kskwO0jyu)xw@;EJYb=EyT%P$fEfthCi5?#4IgX0d<=q}EBiX)&D+ReN|}#^t`e1>r1T=g^Jq{wf(=EL zui*4*@#Yguaz^0DI+vs)auy1C?u2WuP6IfQLgOgr8&LXBIF_6>g@t{*Ivyt#hhE%Q zhij}AkS1-Hd7iiMDn4=kiprAWALJfns%daedoH9!?=VLI4IyNQLQl*+x;XWo0ag!_ z>@IJ!61GX`suXK~GgSmP1>@WyHn~ea%)8OzP7>J%8CsY+fmYl{dKp**XhL5iW4j(M+8cJggy5)CQe>O$*Vq>$$Yw3Am z^bTFsuyPhT?|AEM8m|;9@uINc=bcZKB2{LsQ=UaSx`G80@@r3&5d%uk>N2)rAMXy2 z>Udk~H0@r%;EtkQd=43VfAVyJ;IZyd36&zDTr$5e1Nfv)agtKNNkC&r9)_D2+_7wx z=}efyhlf-G)=u0ZC0nU5*LMV;(U?s$C8#}KCctcSMT*TzG)yN!y9-+lot-q>d}ZG^ za99p~z}1uF0O`m6vn#n-Q*EUngELMp+-zd)tugA+SQN^sb^cJz zM{oX5?8?l&0y1BbcduM-zmxS&0}if3((rd6;)Et!BUVJ!aP#a1+ApCwGQNRic0)hR zwdf68uWzfgXVQHa;R0*DdrjMDBdz-5HpI2XTKjCMWN4Eq7L z6v9po8L%O_M=FS=D3aaL3<0a5N5j0NG+dN9z}j$tevL3L-&qFEghQ~ zir4P6yozMNg7%fMQijul!V~nC{M6SJ-E#(qfH;2Eugy9f8DelvqOO10>7>yqU}8!n zI-|~-ue2_{^));6ak-;IQV{3@1=2gh7^|kB#FjU4^H$iKOk%@WfIn%JY>Vo*+lo~9 zpNRAM@;d{{MjI7fN*xJ-10O24IX3p~uZ;+P^7n!2l?VmVf(SZfMP$tpJP!L!Or5g% zqx<#F^aUg%^+w_484^oWz!k3{n6gC9+7XlRf4z5S{dkQ9Vp;6fYj+yv>cOHx@Zf@$ zsvQ@wuDrG{K>;pAsiWr#tU~YT$$NHB91qxxACNSH*%v#U$Mz_6b*wb4T>djTZta_7 z^~HD+zYo6joayi+2siyKytI7Kcrm@_P$aomtyNvTF!be&5{~T-L@=LeVn%A(_F$o) zLejAoEu(_w=VWyIBo*19ov@3ne##4U-jELOSX#9SJl9eb-2X#dm>Y@ zBP(rHlVd;|ITIT;+7Y^)LzVz>7l>+f5#FCN`reC(0mf{z5P^@W$7v^^t}c0ywT#WP z+|u+(8EUZ8)o8MwII%_C?s%}j%_tJwXHlUmfzh&)icPFC&Q({{HRsw-p5Rg0UsaFV z5?XM0L3%qjK(V75^kP-r1m4g=%ZvgM@We8NcepEEQJfG6fq{*qYcX7)Ct%uF5%@_C zJz>ogFv;T~iYbr~oxhu(x+pk3FAUvvnZE-yA`216bmKT+B^1IU;mKU6cdN@#yu!)Hw zU;J+xbky0yiA?!-IPifX2UX*`$1dh0!mg}D6zuez0u76cw< zngBE^qLIPx5Z(O^Ro@z91-+*Qo-tgl1 z#FP4T7Ct_~)&1$qkDrzmblc}CvQ=*7MrVrZG;Y->N2q-ru(iB5MLE zYCROAuN={~HD~^2e=}T+d~-ox{J$H>ql^U)PiEK@8jyW}6wBX4vvlaibeHswse41y z+OMU0@+$8gPh5S|g47Mbu=IyqM|r*%A<8$6PXP4J&4wDYf8l0deMwjd1(!cDg2$SXhLY4AP((J|q zIJYC*~?GK2%VXDOuhD1arjpJoO%0Ndi1e5S1hJL&Wets`na ztVW2XsrpvAz&0Vn$+qI%^{^VUP%7NdRhjs>~=87n$w^z?Gt zviCgz%h*4sXsqN*gs=bZ(&(W?cJ5G+m|2vgVKgRsp0QdFiBed8z?Gc(Ok5fr-|JbY?eD|$|=l+My?N>96FSX`6^qrfr)TsCC$h8`UWEaYQ zB1^t|tYdFt$(M<`(r9#$+h)ya?gAnDGJjThKkyK4KEEF84kHnh<^b6JE|j^Ppz1+;sJbEz?TIZ_$Sx@t{YZRfwX3kP4d>hf z67+QqInX z%}@dz&-PZ^xawz_`YD%2CWIBVphK5c4(f!u4F}AM+d~8Y(S&1^F)q1h3|=@l~g& zI3`t7#wPG?2Dt8G9*m4FzaHAD`90}U0Bi#x zP5iK2KFW{vne6as$6KxcI&?Bj(zLI_m=>TeHDLy6gwFv+#k%3`i{U#oYaooFQWTv*i+ zaELl|`cJ*)Da?m34ylyS@Cz?0vqhO!R(&!H{dO$?YCR7;)=DyvA|{Rg^?jM5709=y z_g!r};oo*Nok3%d5wZ6On}AGn`YXogW6dR6P!iYV9&**&Sf&qa;^Yj!#9&+11F~d3 zjHy22RuJR^Qk_DIl?eoRnFdV(cAIiQO6u>F0dqsuV3{>oQ!~Y*lfu16=I&FYeE5@APT^s1sKhR z5Kr|PsZg+w6q2SHU&mC$VkU$aU#3N(` z2^#tZsi&cv2tK$?_-A%}6B)XA>1G8KtAca0TI@F7r#X|$luAj-ypUXy_1C=r$ei<4 z%Qxl~*!BYeoASY^|GS>b`;{lRf3WYSTUxMwjrxwx|rY$?Ef-507`Kno4bI81FF^W z>1*E^AfRi$YY9L_BnaVBwi7S*5O{{tyAVjuCiu|>%0+-#(mZ!H>|RjnOyh=TGoxq z!t7(5WzcO8Ch=4+{}c<5D1kF7K|TRK1>}6bKvYy=J$EO+~oq&MQ@mT)dz!)rp_C1c)u1 zcaD6*^oLN#T2@Ku@S#ZDmEjO5LbqOsZYsR4y6FIaNuJ8RjeeU0ZS!G4i`QBJTn1ra zN=83px`hETp<#rcgHdscb-gqcHZE1)Vklq;Fjm)%p0MnRkC+0tGAJ@x{PW9*cte=D zHN1-r&IEPgC8a{_5TJM(|4vw#giLne#4hhpbQS0tkGBvyPQ01>X6SRPX57ign_o7a zVQHfGvvoS8MDEi!IpaRHl&Frw>FMsU23kE~qR|-XyM|At9d!giv;cQTvM*(Jw4`CN zV-Y>3u&>FD?99CsENLD{DhU0q#zBtZ<$g;E8Xg@4rU>1^Z7TMHa9nIN6}dcjh(tqQ z7mGzV1cCT>XRwN)P~c+Fw-A9yo$SXaub&t(Zfwi01Pf2N{MEKN#eh&6Vgg`@*+7K9 ziOYmj%xG!%f)vb?!Ap+I2I{^>2kh8h7=4`!MX=45lwDvd#O-Dy5dSH3nL_V_EW(;* z)&H=a+my-LBm)^}|%-eMN(_T8!*guFN;GEhV=54AJIhDzQnn%+ZG2e~~z( zvhzqi-Z!6z6Q=_0H}@upyXRmYY{)YWqTcwq&7TfDF!2r&SK%x{Ke0OFxJcTqa4){S z_>7G)vR&45`}kq;+Hs)vrXUHY^PN_lme7s|b0#@K&^4A^jtSrSw+}LPJur7+(1AXH zhR}VV>#Jkb{Uu^;j8zgLMQVo~55^}OjP>l&`WMeo`nFTMpNP6sFMxUd4 zy`W-i=wW)Dsr8@vp*zW+{O}h%v`jq=$q@mJO*mMl%{PH=B|=|3++Ne@tfJ8XMbyoq zoF4yV_qg?wbr zDGo#Jm4Kc|E~xchG6DB^)G)PVnEt`3)La%IEt0BClgm>6J9*Qfl0NzVqPMTl0NAn( zf6KrH8zJ5qzMsm#zCGg(RBBC&AVcY#y(*>OPD| zNDBMTna?ERzqFjpW0qI{Bz-`z*ust;HHD zgQR!n7o`e#R`zjFzYG^Uz&UI8nhNT>zzT~mTHUSdYj#BSXzk%#+dUQJC?MTgN!b3B zMnwUq=4_T14lBBXZN2~`f!@$6bicg`Rsv8DM;ZLhxyq5JC*uI~R|2-1d|M*Gr74m`Kd2{uP z{?Y&tHnBb}elAWRW4Touhq?hagmC4PRO}zFX3$hy_$lOe%6|R1z&_i83xBhM`sOjN z0Tp%9lj)0BFQ8wDl1hHl1ERwmRuaqGLS?x@)wr({U%o&+t!Ie;Qca&q89i`20vaw= z-8@g}G`zlF&{TT>^33At8$jf;{XX}B$b|UzW2Hk2)>h;!tgB+COhyABi5b$y1w=JI z9YpD#-B#@883yU^xfxaIV1s+T-7i-?nk@0S@w<*D&!i4LWxqQ&Y!(^R4m++z=PMrL znT_Bi1OaT+g3In&un+F(WTm+xT4@Vw(|h`=&^=W_`J5;L52kHC5PfeoYIVOwiwpi< zt`3j8NR)7XNO39A55YU!m(E(mBi3(YhOpd!S9&Yz`d)kss=EA$+cq0~fzOCvB)4%hpcqO{xUX|10Cv9PY{mL)*kCqgu_UlA=Ks63mgHR~Et z5)q0Aom9a$4+`aCyK5$4FJl{x(y8Jl$V(ym*q@5l$?EN7b7p>OsWP zK_G@NO6_RG!H)s@!on-$IHR$m*&8iVGsyb`e3MP;y1a2hxpN-xR=}alX(^=Uz$-7f z9d~^<54vi=EG^pIGlf}0$S{z19ELMv&Y9>qwrd0r|XEY!XkC05Aip0?YUM zp0@RF-lCg7_1!z?>1|j#Sc$BcrTkd_zfVk1mIefaakqcP)vso19Fb7y%!Nqqq;N`; z{gATO0S!e;uHKki+xs%~t4CDx{dNJf$jG(Gv`yVwY zTylR5r_^HoJA1L<&z`n6d0-FaD-7DY^LRfq9+A`Cvts;Eag^?Hg;)AzLu@nKt6c*J zjG3VE06!0;LX7W2P;&pyP@D#yRq{`~`5NcY>95o5XyYHu`Lj&bX+P0V&J4AU8L}uu z=xvdqr4JOoe8X`nvrdgd$*Y5K>4gqEeAXvIPfeZ%GRsTr&i;uqnsOz+ZEar7((I&r zHw3yyd+6}&n6J;>33PWl<7!mrLbe@HPa_C-A|y>kYHOU{9WYCpMnQ-n!Jw6u`E?p& zU{GBa{6jFpXPmQqQ(e&UBEAKM+{hs(8K|!)rF-MiSv7iQS!Tw1;jS5sbdjA6{ny3QjGl+vUL+*J4xGzXqt&l9qPL9s#+7w#bZCIfY?it^D zw7uASj163p_;vns6R(+m=$;0@+Ee zaTr`ns6QqrzMqq-sdoL4W;=V9$MTbejR~TUeq_~4t7HHCP^QXuH*`0@LA)U}7ajtF z{Buc%ZLFB!T9G?eY}HxCW6MJvXd+r$=?!Ap5-efBv2GK&kea9;($>EJeBs{CXp#X? z)P0pubTIAK7i)OZY0wJ?x&}**636L3DTcYHCf71!6~DSWGalDAcY7eGXtA83d~<6l zK~RG;oRR{#DQ(=LWyTiiO(8Sr)eKJ&6@Zo?qy5jF@RZr#HkeQLH8}QUYr`CB*EVWk z>_6ASr4mz0CwnafUg9$}{#J^r;vw*uw}?9*Fi1kCkH1#zi<+<1WHrw8BV)kFf1F+i z%&!~$JMmHIWUQETr>;?bU|LWE1|%82sqcYomMhOvVW;ldDqPQp@nA;AV2T4IC`lnc zV3^tGlO!OJYPfcDO}b>R&XjjA;l;;||Hkzrr@_yFfPPvNQ{{j18pF@*BagMQ>?ZsZ zA6ytUKiqgagsP5s3dvg_w>4+q6H~WGkPJY{s~&b$Vs0;lEC9wk2{XW({&GS@=9LPM zC6fGVlrPvW`GcBEUyh_c{CIb=zXdQk!|IQ17Mfj+^DKo^!~%$C`&Epd<{n+g1Ibe2 z)zoW zwV@DwKapSg)!v=WhWXas1DRA(fzDj9gaPu~4z!*@88rWV6iF8S{?OhwoXj}T4x%Jx z&$Bk$?29q2Xr#LE66Kp}2>ig>+a8AvN_iI5wbww|#S3uL_e@jx;Vd1vvGWhyIhY@N|?C=igj zs=e<#mZl8A%BLNF@>jT3rbpZ^jJWEnG_2a#=Al-LDM(85g6D-SF*@L~@uArMdUQ+( z*8{4O25gVLaChro>H#78t-sz>xia@PFR`XR4}RcB;bzmo$D-9x8~nk}&{A-cc?He@ ztNv@L8En=)4x@HDjCLU`I!R;XGwje+=?Yw(+NS!vl1srv^uB@etoj*urK1idKH2}C&s!hoJq+y4uehG+U8mIhAlQG%8aCJIpZdh!)0gz!(C z?`dkqBfhPKPOkGl<*RyIFAj{RQR)f}1?pWK<)$vP_aK^Q|MDHa$DT z$Q-8SJ=*LKy?BRv)gT#419O|f7L-SWSq0kNfIG0jn?uipt+k`G?M7wB;vuE6)eC{~ zBO0kt^geieR{iScfud2P_OxibZ4ME$?wt*Xk?mNZQU1_YXEXn#B`-A9Ij1y9D^!3B z_!w6L^C)T98oje0lEMX{LBODa8X(P2OlJuIdT65+!|G}8CoMTh5MW(Y?DHTw$Mq|N ztT1AUUQXGa?V&Q9)%lYG=x_`X*C^BdM5Fa-$^-{9dB# z6U4EtQ|E~f>srt4n};%m+m9cNxbd=*8Pt7dh$5{0&Ws#IS0n)&=CMncP9f_pM2xma z0+Djp2Ggg~T?K?MNo7j+cE18db^UH7KXNpHm!o;4?<*9=SXSw7Tt_=|4dR8`vuTZ- z7PWfJ@HV%jwgtsiaViw3fN1%BHXKV&E5O{Eb6u$`dzqk<>o&F**J88&i0$ZYUIai zS6B)$U@#m5;aL=6v2=>9N)-Lo{{Y{~hat6LrNmaR^XO%ZW2F=@S?lUlTA(p5B`X;M#^MLBN{iK^Zl>ZeL;5Z@ z!&r&4WhEMf;2NEv!8dF~-bDXO{}{3U8aqb)!|`G47}s>rU*vJQ{XcWZjO3oQIhvuk zB=1}Ua_1bNgn2VUWX<%ABkH&yVaCrZBRb+PYm9@ueW03}iImqmfi2{=H);iPw^S1) zSt}TwUy{y_r~cXDH-9wltZQ1Hgu@>-b9V1i1Lp7s`w@%h?Ov4Gp9RspUB@I9X;e!O zNL!dPpC{OPOya5{z(t<`0CWQhUS4ruY?@KZ1RNtn@%!kf0hjC$8{E0iLJ$WeFHi6J$L0FQMX?hC(7zs_2ejCI|w*~9XM ziT+7@FM?NcSr0g~a+f_g3nmAzow{vO<|#40;zq&)vB_T!$Ayg10< zV>E_IHckBOB+5-2GG_SGn#w;9Xqd5b`(HX;G&+f*`SxexTzhl!xc};PnSu-IyC8b} z4H0+hVj)OZ;bi(5%B6134Q4!}O6gBfYnyZXU~-_y+so0KzfGsmO#s8#{$(zemeNPo z;9tiDg;!^4#Se}G?+=&qVT9VT4%eY@e03TODi`y|wc!a>Vg0kP+OGcB#@Dp09f=Ie z2g`iD4J~6nA0|!znH!}mS$K=Py~-&-T~j3tz-%x;VXUAR`a@x)mL;U8e{j^vg;yc5 zi~QhpO90b5-k#=AP;%1q5&VLyu+T|Un4O=eg-e6+6 z7T|8tQaVo|Y9siSM)6RZ$&a=m`dhA-A06H>^FPv2`TxU7PGRF{@+@~l?>^jIY2q_f zXqEz_b<3QFS(Y6cf1fjwJCPa&m8OI1Bpufx!U|J_}e zMkl|2cX0A2O%l(3XrMhEb7ug(0Ps;QM_M;arZX=PrRlRN@dQ066R2FUT^3|fQ z0OiXQGZYQY{crN)pZ^Um?$)w;3VdPzH(8)#NMwRJ*r!TzbVB^nX+QVL8~Av`jBAX0O_9JO>lk1>CFbw;(apn(!Z$W zp&W-e$VdTaf&=vTxSj8TB#R}5QiRepJ#sJU7H?rh#5L4lykxZPc2zR1(EM6@MY!|0-Z!W z^>H25_HoPlXhpw5OhU{e4dFNIo{Bz{yghG>J@oFVK}zw+i_87I$QOLe@?ue5Kf@mK zrcal39!?Dw+lUUOPC!wtn{-UopB(MvdYeRLiPNa>!{&}$%n<_L-&Q@u>x(!37DGDxaF$mf+XUEs&3DdS+&Kz-kP4SZ(pm$VCVJb!>W&`86 z>QQom=H%eSxQ<88bY>o0g6_J>E~jbhYqOOCaSz`R4sp}V@Nv8g4WpHYGT2*h{K>i9 zoX#e%cqbdi?Dd5`Z4@x>;lltLY~@DeEKrC9aWpVPB8;{^Tojlyx7`GiVfbPBt)azy zETHdVD-4}%F3PKxL`DkCFPX+j1*G>9v$w`u-wWbptdc+Kt`^H2MJnz&GlR$K47rFIIE3 zLfQq26qgH;l}FSvSZ_POXgri*ous#+H2!V%m^y{H_{24A90%#QYYtVFDyPw{34*Z3P4mu!9n?ow-SiTl&FzeTgB!@#f476Pro= z(hr!kU{TgQI8zXQxy+Wsfs$iT3D@s?Hs@8_!u&Fx?nXqG`8hJ9t_LtOFZPTjEFqmv z!89rqn6P-4|E1tj9sKb!;=7Um+H;@Xv1s$BhDus+rutYEK|0_K3 zsz<7GZ0Cm6!`nw@;bW?-opA#^Yf<1#ye7)&;&q)g5FQcKoEI4l5_ecl)m8Y-)7ZV-3BSqo~l zCoZTMbP{PN1xCRPS}#T#Y<_NQp=OhlNK-{m;ks*Ugr=9LtfUk`565G4T}(+|p!SB+ zN0IAmpSQm}*PxmVmsw5!zT+~_E#*02Z}pBTLEV$!Sw>`6jqY+)kON;s;g^x?bpfh= z?Ip*3QjVqf9)j*}wLc%|+1|T1CJqEz%}SdlzDhkHW#?*0NTQLR?bEex?HY;iidh(0 zaPeZ};2Cy-^Nf+xbYbBa(%YXuZ|%ZG^juFgEjP8rY@gP)wkrQ(!Z>Xd486XCqLM-S zCi$^-_rO#e{hX(lg{-$^ zme~K0mheihBX!=^m^j)%UURfO&~O34(uX*NNEYiuf1w10yEZIJIO+C8Wc1CY=f4~E z3>sp&P&ttc-}=1gqfW;b4G>$G!^n1V@tpZbnWK027n5;y6z%3Iy{VgCj{0~}^Cku= zj{M$fq8NA8j_>@z9(~c3wtd~&9OwLY)5V%kX@3)+NgQEaVfw~Vw;;uhpSg0YNxEKj zx$Hs0*up-8=V|IA47l#NubCyNv*XvY&Rl;r$Gyk*=N5{iJGEXj9D6N>RDyQxgvqAa zi>k))`%&cH?r_QFs9SEYqf;%rH zm2|{L>UwY;)zNM}6l`2W?5=grV`awo_q9Nmd0w>bw#LG?=eYuq9ayjN59e!hG+b*PQZf?>ERRO0pM%KjtnEO5W;-#bkj9qQ-3&+G%A{xFz zZ`YIaOzN7_viN@l+V8&^I@+z5IkhgTwjx#xKP+DW@|uS!>>_vh?BlRy>T)}R?$q);p6NX0v181foLKB-}W z5~50}z9KIQA_wK4%$w z8xY!`gaW7cGQ25hqs7#!oS5X)3>)t!C!1JwVpjq3_LT_CKw-0>zQ0H|7d)Dym(vDiiOA(;azB@<(uhiM=4R9f%|VUuC>ZaW=)l=K8)U%cn`x{ z-YV*Pp*D@X-%&2|qEvNYk4VT}X8p?Etv>~tq|_I=QsR-^9lBOOYx7xH;Y9#3!*5|( zoWPM=63y;kFKN&iRa_KpP$5rTdPPyV9ipQVm&?74pdlB;=G_;uH9>V9`Ile$vOa;2P6p z4?Um?yO;ftZXy!cL5OOI3r~H88q55q%xq}AGATg&4`x- zYS4#It#R)cusCj)vQ64!a?K+gwB3yzeC=@G+4LoRcY;cu9ly@)JV10{Eb;T@+myv_ z9lhfhcPK%r8~21&=y=iUfgBCxb3pLAC|@h*g*IQ{jyGQHNX67GJco4hWrx>phBYm1 z;i=>*eW?Kjxik!$T1?G0< zY}HCTOBS-Zuq_;t^fUWJCsy38Ar!;A602IhLn%**JpuHx<~r$X?dTjGw$24Aour$^ z_qNr8qZ3olcq)@uq$?WqCOzWL)rkqw%C63}^(f#eU7}Q1?5v&xb|bCj?7~n|C#iYw zPG9ccHFaDf7`c($;Wh1%$}C~;=8Fg<@g}Z%|76U|vEziH?O+A^9;r9NfsklnaPmB@ z6&-)NjherhC%>hv*3+Y>76RyYe5`VK_!NHz1X2U{~cfMzQLP>6otux-vq3Da{q1r z)dP9l4ZU9MzGBfI=698)7wJYyz)L8wU)k47`(~>(rOSCop5ofh6_elE$VfRY0cG>q z0voq-^yDnBn#Xa8FMYC^gu-%x`JCtlgQRvJAhXQ84=l&)6e_;?mlBV@QB$Y zNw#5RX6dEUsXuYo;OhjQ^UxJvOW4FaXxsSP0agc%nk3Ws`f>fOs;+Cf(o39IQ^t<+~2?=Kz1qGzT7>oNon?OQiO<&r2G zzWAVm!Ns-EsWhkVL*y_0M++hd|BNqiu7KSuwWjLW`z9*A<=p&iD{b05pG3+ijSMM!Iouk`~J z=Uy8lcArTbMiEO3wyogS^MePj3o0NlP~JnGQvI1#PZ@Th+N5dYFo@RVX~4^qz@!$D zn#abA(ynSg6;K8?UxfFKUxEyAl4kT62DY7qF95kh*2ouL0}5)kve-ALI@nWxNQQ?=}F#F>KNPL=EeCUDpBGKE=RCgkCAyHd}8c><5&7$ z>=gzVYQEa+hMKcAky^{ATX@+Eh$rjui&Q*)GP>Eiy+ON9#vt zM*{Mdh+rsbAmcv%1v~Uhwe(&!kQ|t?MbTkGR6(}!ag{3SzM3ebWXO%3w^vLTLJuhJ zT=)4Ohx(ldNSE*Rp=Qj{rDVx$#JYR1Ri|?ZpamK=jr*Mb>4@uMkTVfF#-Unc${KT> z7kmIFEV}BAykSY60skMJeRo(>&Gs&efT)O#UR5k~L3&3-Aap_kgx*O)$4CvJs7O~J zfYQZ;PNW2+7wJ`6=%64i^b(N%3w-Chr`+@0``kN!?PpJ0vu4k%cfD)x*&iQCFP%(H z9@RbdUfW|o5gB7CcQf9fzp#+P%R0d+Yu6%AW05GV?s5nO;+AKl>XgIK>M%8Jtqh@91<+?rSw&gK>@r zTzL_z`?`}*z_v9$?9H*|Q+U<$D%93HGbvyBoac(dwK+>85s$Z`KOFea*NIRta0(ea zmh8g*^dA9^taC4!Y3KnyNM4J@Ap!VUt1`ibiTJkzda*h81Q~oOscAH__Ahv|~zpKSl9&_HyOUO@*RYa6=3>FNPF4WOvY;IZF2X;x2w=i;TDP#a^ zPi{lpc+c-4rp92l*Zm?6wd-F z5>L!QhS(b8YFK*&Xze9Us8R9?lee@^`W&rh6`uYeA$_)nZHahT{Jp}z+u(Aj>p%uA z+fnl`^GpJ?Z1vqxA+P82gYa5`n?X613$eb18`hS%uut zf$S*}BkDl3YmjEIb7uDeE1&NR#7PH;hOd-+!u*z}(MMr3FW2oG9cViQOVeVG<}v1J zY6^Y)?qli__-M0KaAf?j$fgaA_BBZe{U(5>mF~?0B@0skOX zHbc=xQ|PC`w?%;wY}~P7wb>BnM!?K#M)MMegSFO?!=GK9c0FmPz3?J^f=67s7b;Jj zM}C(Qfo=jcoEOd_Kk4tykt0%9SCDa+ww6a?W<2V?cY^>PY^X&BXAbhfpXGZAy^S&-)G*rcY4! zjjisG5HAYIKc*gfZ`mbQYNU&g%`Zj^6dOhae9f-tNXJAMA`NlSvQGl$I>dHG(HHwn9Suo0s;84`v?nra z;K{I@PEZA%quN&&aChS5IfpTTRIXevEk>Rf*263Ys+%GEBL0zwh-x2bf`gDR)c}-?<^(H zS|K@YIPtbPT;DZITg~M~PKLW9Wh_Vaiu+q54Ac2i;c1uogwrybk^4d~h|9ws^?Nd)re5QCDt);$YboQ}Kk)94Ul&n@{g) zjpls_5b8#&48WYgveQKlcC)a9%R(u>MBa$Y>xSnNJfdVbo-aq?H_5}>PcU9b$1y2T zgZ-P!OWR@C%2$jTHlKC2dR|Arh(r@Z>Ozz?V5>xz~G{V8LZa`b+y;Ad9Nn*<6 zClN2;mq_D-*wu_CqL&iG?nAe+??CGL$?^P+N|j?(>z;)cR1 zMlnfVnat+nY1JNx)DNCdj#P%Y@ercR;qFdCV8<&X9$F>tFd3P7Sl;Mkh^StX(IW4S z2a^VV(pfAFEZbmRk843ERNsAFO84J-N2UU`_T;LoJ&uOGMFu_fLJChn&=mU1$23ca ztEl!Au6?nIp7nIUnYDv(;T``y@fSytwY14L0qnX)A{kTJ=wxOA?YOZP8Xr zgE7sX9D%K~4;0S#{~@D3VivM~b?H6XMV1sm`>k`)Mj!0P$IG}~7ESd3JRaNuRg0&+ z*a|PbPt})fn^MT*cK5MP_LFZ+9Gt%{d(Cy(8i^DKgppB`^>1VLD9FfY+q}gf`!7_* z^N8jB8K!HV&;_@|(pm!>bXT;27;jtuXe+BP*Oj2Vc4$HXhTCT#8)$n$CGewYu&r*d zvn|)B{Bw!(1$2yo6j5Z<>#a|Dt9=~l-;J#l``tZf5$Ao-Kub*4%|HofYAydbh#wC% zEB9{B)Zh@j4KMdRL?zBY=VYad9F4|qqchx-^Q;scEW|o>jr8~A^=`?IqjxMuj<=!2W{rwIl>7LlAS1ECUtacNpUQ&(IVA}=hvSa zeh#A{s}n!ZCHIG20lul&Pe%5^vaen%z!mEOT`x27njK1Ib2XB zJ536WcNNZ)kp+75XJxxRcnt5aBPXN3ah~felXF^#)aq$^=k@R9Nw@BhLfB_{*ETM` zKf4HgM>=6@c_3%4Qo6!7SMwhD(%J2cH2-_Sd2xlJ_7uzoxHkmVwM#NTxzQpwb6c;p>pil@>sPZCk|Nez8I2)|W5bEO)v5w!lIsQg(c3Y>=* zR6n7P{Bka7(QxAkuij#D*;2fdqx1>Qy>I!7J*&BFX*EvQBQ*?grO&fVvkXt#?eezO)GJu4Dms)3~ zE8yMqkDZ$nKyQfdev5tU>%*nL{DVgiDV*D-Mg2|?&DC+Yut}Tui9}kj{$Q%#GC1GO zIAIl5>pc!1Hjd``a=qNw(Kp>E#o{7rJr3HbK`z3nx3JN8v$cc0W^@hkprkiu&yw2c zV8E?Q)QzKar~=RQb7Q?`iaK>l-0t`?K?3pxa|$0dYKSIhLzx2y29-z+8rlp+GlUIp zw%Al3Wb1x(naWJ!Y^ExoG|Y=dXY)9)>A`H*`SqT3apYACwk)>UPwW43^~KK+SS!|7 z?PNv0w1T(9yh>&FG;-W0*ZP4>YuRh=N54~B>iI)AWIUH~C44}Y3W0^7hFN!9EF4}` zc+><&o&Y|MLOiN_m|Uav1X=o(oz$|o1&m` zKp~34a1+Y9M&XCDJ-*(~VV4M%zqLm4lb+5%1L$XwQfF%LST1~!5_!}MxjO#IPn3;! zOCM&M83kMWMTwXyDWzz{G`#fz*)a+J2zVCU4%44!B;C9-aQKoJ>Y2U&=3xXMb1#aV zr3B|(R9mdoQg8?v8>az`7-pQ~B`T&2K^EiSB4%z%U86DP1yRjNXBK!T_%_Wb1aFJh z=su9r0$q5dvqZx6vGEJw-5R%pnxohIEO_pnF?LWDtm-X}Hf6~4*T7_>qo_~J7X#Sf zF4jnIObZ?RXBey5?D5HiI8eKyYvr7alIZ5ubWa({TVny*3MMXZbqs6>E}@P&W+Bld zj_7lzV}0a#-cfNgQ1BCI-96gg@BK>#60mf~O2OQN7*!D_VX;^zpMw&m?wz3a%ior? zvi5>XygrP_=lESv(J&n)`bUkomG5V=fujX`H$puI9n|+5f4*DvGunx*{{StAE>HbI z%1eG(iwH1D4X04?-~3k63K2ooB%{Azd!Se>scejF`!PeN)zJJ>t4+RxRmLr}ZbStV z>2JT?Y~FO8^-M|`;r`3-4Ldg!i-zuVANAlrx@^J+x9hBzm?N1ukCXRKFdhvVn$5C$RJ)5rLYLJ3azf+0Q750ZeVqRg@npw#h2+Fi_l zv_dsii}4Jvo;E47v`A(+P5;b`kqa#$xGiQUw4Hw{n`2m}NRj!)Npx+|%NHx&BTmk| zx`vw3cbyqIdo~~SV@M8n3upOqbn$Hi>RQ>He8Ef@+z5Ux|4ygSQ`U+j@9Ite)q!-r zN=K$y*j~e^3|eRF?jz@jLr$8c5=s!w&kqT{&Fu%A@MmAp)Yd%#-33Y2&E8w{M*C?? zuOhwd@MkKwSpBb#z3wCOl4jn_3eD~@hV4~#B^WngFgiXgh|xlH;IRJ|8y1H(?2wz~ z{lx@zNNa(ZU#t*Wr{cC${;&oOR}#)z-N_gwj?%MzyN+$3l?K6_{_0DBf{~MH$ZE#k zfY_Z&U1X~-E7F=JpL=O(&@Lmfy5GH&qiOnzH;RKDM)H(8bLs6*38kb+Z+6swefHWB?}p} znn?`d7h?`uXt#<4_PIGJM7G;ZK>6dGvP~%>wBSnvPrBsqu9nl;itl6$*xi$HNRB+> z(bSEktVT2dAeV!=)QQVk%*9rV2{8sgSb+nv4Q>a0k zPvYk_8Ui2;b>Vad>sU8$a*pI*EpBQqH6*Skn*FB}l|&5_Ly>@W0!Nb6c9fQ^`6%~% z3yx>vxxCH|>~=K7^l)>ioe>IBeD*zKq}FH1uF&oVH_?>b})F*;N5yJq=Q^_m@WOo|- z3*{jlw2ydB5~qm=+CCW5MeVQHe!-g6OIG30AtaUD1dN*Im@WPX-XEBmT)8{7vm~B5 z*>4;}=@L5N22btF$Op;46klp6u$i(K7$O;dlY1Y-PT_v;V|v-O!PSY8;N2ES&F4BU_FTNT?Zyvk=kf20RWh|$ z2VdTd!7U3_4sY|!Eb)N+EP>s;ZIEgiaBmocw|Eruo{QOF_UNYMvM>p>kre;b|2)^D z2-^1vif0o+_H|vu<&*ho7Fi(0YZAUYP5**YtgqbQh%~9mXfTKH-VEnhzI9fB@529r zF&Y1_$mXwppOQX$Icth@`a0)1cBVvdej$D4y~$P%7yjUE(Pn!K{%05p*DFf&1jK2% z&hRvHu6rv26GyAv--6ZI?%|)wgX!=c8))_K-@!GO@%xno5Tk&2Gu$0C;;wj9M%g@h zATB^m9?eX$#e2*ZS{vjccZlBxF=SU~?h4J;Oa=HMo=AdI_W0_}zF4nZonWs?3z&r7 zqntS|_o_5VJ`gt!`E};76TVr+-h0NhP78)9#G$i)J0$M!KQIfn1jQv_+^&>gZ8nO_ zChVBqT^lA@saXoql`CAs&vlS9o8IgOuzV+y@b7H;;fm9%x=oMWeEPOj`|wh{6TuOP ztEO2adEZWapZON+MaX22R_un?_`E2N^jrQ>sENNhkM^1skq{XNUY#97x_-^ zQrdD5qV+-twxNlD22R!K7y3pmj?pcBj+$7`e75x50_ zUt~C092jY4uKr+|~?1#U_Lsd?gik09LVIXD$gaGS$W2BUqdEAj_K3?8X@znikt= zMRT}&1p73k=z03+8vKJoa98LQ5F6x8&bgS?q*xXCd^g8+gULx#09=NWs{b3MOxs|; z_BCkucwnXQv`g#J{8AR^E^)i9!*FR3B)ZoE&BvMI(TZ96`0UMMG)io3@N~CWe43<( zp=0CIYsp7KkaxqQpvg*}o~ryk!?+H>B{lENx9Zl<ArF^BOcB|`Mp=NP}8YKVsqIb?SctwG)Z<&y)O65(Fnl)5KHUa$g`4wnWM!b_ zSFM)gW=z&E|KzAv1*6v{RJ~!hY>$`9az9wQeb&32Z+j}ELa{t$+pSGVaS7mvAh#&^ zPMD*KS9UE;symMRsOJDdus~7f@o(V+)V4dBdjsI(%QR)qt-bF#YJm9yWBIrcXC%=j zAAJ5!gybK1|E$j}KO*-aXtVW-{=SDJ>o&tQozo$MeetOc4J4E8 zBMXt_RVHE_%C%O93S9RFci(-#B(R-B`ms8GQaZC5JAzxfN%{pUG3b_)F&2~|3mZ@7 zPm~N&axb0qs#VcVyh>=8g*cU@Fl*hou(-Soo3i+D7S%@{x>U zyoQXy@g0Mc?esNs+xgsvct_^FU3Ruo{Po+A7Y}>CU3Frjkow^cBJYLn2e(5&Dhtc^ zK0Id|sP@*MIQf`WMH&2Q(qtZbH0PxJThF-H9SQQ)AL`u2|umP0Rf&76=pLj@3&Y(hN})RK9okLKW#`&B=Fa68boZv89-0_ofNtcgHie_ zi72puJ3-u1N>;?~N0(i7;cgOTiY74KsOD+3YSmTe6x}AV$~YN@d1&vhjmE3EyovPC zemjO-5~5Z2q+IkQbr$%u6B=k^4VrJb6glqsC#irGN?E+OU)6(-X1Ga*=*WHsXS=?t z7vbXqpyn0Mf8AP#SP$Hs1^oC*>DP1N3Q1ZGSoe97v|qBhjPAzM8@k%OY$cH{6(rM- zlRKe<&a^v}`$V}5)C*^w>^>kJo$AV_5sR@7h{?;c%Suk(h)WoGk^EN zSt>K(4uYL6Xl2e`?qPhU8uA*+H9zbZV*Jsx=>=E%qT0U!w{BTq#bMUjq~{eouEGZO zpg%qB^Ddarxf$KyD+r?Qi((%rZM>MW%0!as_QzQ=wJLXJR;il1q+R|1Cnx?o?yhnh z0OH6G*O`aI=YBKv6AI4Jm^k(6>UfY4mx&EEy)}?MUP&r{Emi^%n=WMAl>BVm*Q7~Mg z3l7NVjlvFn&^9GVBXrP-j*~QSeD=0OW>Wkv_mQ@2&M;U;S^4qQ)>7#ZE4W=w5O0jo zQg)Jh*uoziX)p)Rpj+P1ittv{9J8L4+Q1ZPd-Wr|^;>>gLfZ|mXQWRh1Iti15;V{c zCIYB_-DFMBr4YMk6!uGBNUrik7P;;886fw(b(XabUHb`SmFkttcUL5Ag zpAC#HsnoCT%ML|9Q*H!oHEo$39I?2aj7ReDx2=mV1&;8iX<~g>L#Pm9;vkn!DEdAr z{85S9jp%|@ia>Oue1R(C-`yo4#N%UTq=+)Qv;RxA$jDaiO6y<-U__#&79!Z8KYM&< zmI?KJctLrxgyY$4&0t2H(ky4DU0-yP|#xtoZo1e4ikXJOkUf=@!}}Sa=~Ei`!3Y-y-MH6pO0W6_Rrt z+Lyfi{&&twF2w1|&%2Bj-&8`zAS43;UU>*y>^4DT-}N5#8)i6{`}8b+Kk^;;^9D87 ze^(~Tet|JEq;5$;xp`yEiB*2dw~6ojTPnngRc>U}RN88G`!6-tN_Ul0P8Pmv$W2n? zJN;s2&X1A@zZnJka$3+Idf>OVMs;~*{eG8B>h#|)wtAEmB@6^zvx)hmB6t|}GDmR1 z`NPP02mNZQna^_c*}a-QM%l(!Zi`We?_=#s-C)5s5!*B$MYn zN85q1zo9sxtVpF_hUpt(Z^R?~CYj&XUsoFDAkP-IE%*F2C&~7%5%7yQ5%pV=rpuY` z10$;tU*ML6{`CMhlBi^I8iEQpk}-r-I|bM5j7C7}yvNbwTqjN4*S< z{p5h)5Bc#^;R)W|r7ZMf0b}rqH!Dv8xy#U(gDG>*SOx{`15#U0-;!`Vf=SJ1^W!(S zC@!bu*%~po0B3#ZvjYT=Nx+6?2p-rhzpCD4Y0Q23z&edl*0$=+hX8rD!upp34j$u_ zWfh5ca8^~N6hLgRfg8Y+({cpa?SyR_Zto7N&zqm?UESyHR+Q3&h8Gd+QY)vO5 zB~oYWR4kI+snZVRGDmTgwvDXm0Mokwm$fXR)lzbv+1T6Wxp^fP|Kw3g{#jSMzZ{4n z^KC2yq4<4hR6m){#p$w!^(tT_6oQyXAGwdOf>aQ8I;Zp_?OFTR-f=f`G7YHEjTFh2 zDX#g^=T^Nno2W6tHi+Wq$gU(6^x+4oi#WdJd>i+XbfFl!b8q1AtRfkZ+Vwp+lR0b| zvT0QaIZnv)lxKTij7)WZ#mMp7$GT824wI9HP|Zfwm#I?!gChABVKm#T6XQZX<5%_-M?e|7o&_^xvCB{Qwfa9ZK@24{o` zX$YFm*T}OY;U6|}nl7m?T1WhKyw7<~{M}1kLQ9I5)Q$?=dsK`avEXI)IrB~1)B_UB zgkt}yi6g+fLD3^meg~j)(k1}3`dNDq+;%Ia@qODedm2f&zh-W(auLT_$Yrwv9HWaL zEfwrTHOr1(b95zzl5?~rpI6>f*RAdvB|_fUNBliij3jEwCa;q0dKG@J-{cH2*gp$?veOuH z*8~2I4dJ--4_E%_Rrzz#t~lUU8Mh~K2-jaoa~?6M1$H1N4Kj4pMv^A)~VQP%34ngo>;v4AE>KC A^Z)<= diff --git a/docs/static/logo.png b/docs/static/logo.png deleted file mode 100644 index 381e5f236db760f14dbb27678d9f495328b1fa96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12876 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 z 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 I={P<94}8j}2><{9 diff --git a/src/vm.h b/src/vm.h index 7f89d41a..a387ef23 100644 --- a/src/vm.h +++ b/src/vm.h @@ -890,9 +890,7 @@ inline PyObject* VM::_py_call(PyObject** p0, PyObject* callable, ArgsView args, // if this function is simple, a.k.a, no kwargs and no *args and not a generator // we can use a fast path to avoid using buffer copy if(fn.is_simple){ -#if DEBUG_EXTRA_CHECK - for(PyObject** p=p0; p fn.decl->args.size()) TypeError("too many positional arguments"); int spaces = co->varnames.size() - fn.decl->args.size(); for(int j=0; j