From fd5c54fbfa98aecbadbf99c824635f9b3623a998 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 10:24:20 +0800 Subject: [PATCH 01/48] vault backup: 2022-06-06 10:24:20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: .obsidian/daily-notes.json .obsidian/workspace 01. Daily/2022-06-06(週一).md 02. PARA/03. Resources(資源)/99. templates/日記.md 02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md --- .obsidian/daily-notes.json | 6 ++- .obsidian/workspace | 14 +++--- 01. Daily/2022-06-06(週一).md | 48 +++++++++++++++++++ .../99. templates/日記.md | 4 +- .../004. Group firmware update check.md | 0 5 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 01. Daily/2022-06-06(週一).md rename 02. PARA/{ => 04. Archives(歸檔)}/01. Project(專案)/004. Group firmware update check.md (100%) diff --git a/.obsidian/daily-notes.json b/.obsidian/daily-notes.json index a92370e..cc8934b 100644 --- a/.obsidian/daily-notes.json +++ b/.obsidian/daily-notes.json @@ -1 +1,5 @@ -{"folder":"Daily","format":"YYYY-MM-DD(ddd)","template":"PARA/003 - Resources(資源)/99. templates/日記"} \ No newline at end of file +{ + "folder": "01. Daily", + "format": "YYYY-MM-DD(ddd)", + "template": "02. PARA/03. Resources(資源)/99. templates/日記" +} \ No newline at end of file diff --git a/.obsidian/workspace b/.obsidian/workspace index ef72f55..02eec63 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/01. 架站/04. Gitea.md", + "file": "01. Daily/2022-06-06(週一).md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/01. 架站/04. Gitea.md" + "file": "01. Daily/2022-06-06(週一).md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/01. 架站/04. Gitea.md", + "file": "01. Daily/2022-06-06(週一).md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,15 +125,15 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "01. Daily/2022-06-06(週一).md", + "02. PARA/03. Resources(資源)/99. templates/日記.md", + "02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md", "02. PARA/03. Resources(資源)/01. 架站/04. Gitea.md", "02. PARA/03. Resources(資源)/Tool Setup/Obisidian.md", "00. TOP/01. TODO.md", "00. TOP/00. Inbox.md", "README.md", "test.md", - "02. PARA/03. Resources(資源)/Proxmox VE.md", - "02. PARA/03. Resources(資源)/01. 架站/01. Nginx Layer4 Reverse Proxy.md", - "02. PARA/03. Resources(資源)/git.md", - "02. PARA/03. Resources(資源)/Obsidian.md" + "02. PARA/03. Resources(資源)/Proxmox VE.md" ] } \ No newline at end of file diff --git a/01. Daily/2022-06-06(週一).md b/01. Daily/2022-06-06(週一).md new file mode 100644 index 0000000..53d28f8 --- /dev/null +++ b/01. Daily/2022-06-06(週一).md @@ -0,0 +1,48 @@ +時間:10:21:22 + +### TAG + + +### All TODOs +```tasks +not done +path does not include 2021 +path does not include 2022/01 +path does not include 2022/02 +path does not include 2022/03 +path does not include 2022/04 +path does not include 02. PARA/04. Archives(歸檔) +path does not include 001. Kong +group by folder +group by filename +group by heading +``` + +--- + +### Doing TODOs +```tasks +not done +has start date +happens before tomorrow +path does not include 2021 +path does not include 2022/01 +path does not include 2022/02 +path does not include 2022/03 +path does not include 2022/04 +path does not include 02. PARA/04. Archives(歸檔) +path does not include 001. Kong +group by folder +group by filename +group by heading +``` + +--- + +### 新增TODO +#### 私事 + +#### 公事 + +### 今日回顧 +趁著早上還算是不太厭世,趕快來清一下TODO,先把簡單的shared_ptr寫一寫。 \ No newline at end of file diff --git a/02. PARA/03. Resources(資源)/99. templates/日記.md b/02. PARA/03. Resources(資源)/99. templates/日記.md index 8665d23..8a6d978 100644 --- a/02. PARA/03. Resources(資源)/99. templates/日記.md +++ b/02. PARA/03. Resources(資源)/99. templates/日記.md @@ -11,7 +11,7 @@ path does not include 2022/01 path does not include 2022/02 path does not include 2022/03 path does not include 2022/04 -path does not include 004 - Archives(歸檔) +path does not include 02. PARA/04. Archives(歸檔) path does not include 001. Kong group by folder group by filename @@ -30,7 +30,7 @@ path does not include 2022/01 path does not include 2022/02 path does not include 2022/03 path does not include 2022/04 -path does not include 004 - Archives(歸檔) +path does not include 02. PARA/04. Archives(歸檔) path does not include 001. Kong group by folder group by filename diff --git a/02. PARA/01. Project(專案)/004. Group firmware update check.md b/02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md similarity index 100% rename from 02. PARA/01. Project(專案)/004. Group firmware update check.md rename to 02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md From fc6b4647aa7f571d08c064a1b9ee692fe36e09bc Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 10:34:20 +0800 Subject: [PATCH 02/48] vault backup: 2022-06-06 10:34:20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: .obsidian/workspace 02. PARA/03. Resources(資源)/C++17/智慧指標.md --- .obsidian/workspace | 12 ++++++------ 02. PARA/03. Resources(資源)/C++17/智慧指標.md | 6 ++++++ 2 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 02. PARA/03. Resources(資源)/C++17/智慧指標.md diff --git a/.obsidian/workspace b/.obsidian/workspace index 02eec63..71fa1a2 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "01. Daily/2022-06-06(週一).md", + "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "01. Daily/2022-06-06(週一).md" + "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md" } } } @@ -52,7 +52,7 @@ "state": { "type": "search", "state": { - "query": "gitea", + "query": "shared_ptr", "matchingCase": false, "explainSearch": false, "collapseAll": false, @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "01. Daily/2022-06-06(週一).md", + "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,6 +125,7 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "01. Daily/2022-06-06(週一).md", "02. PARA/03. Resources(資源)/99. templates/日記.md", "02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md", @@ -133,7 +134,6 @@ "00. TOP/01. TODO.md", "00. TOP/00. Inbox.md", "README.md", - "test.md", - "02. PARA/03. Resources(資源)/Proxmox VE.md" + "test.md" ] } \ No newline at end of file diff --git a/02. PARA/03. Resources(資源)/C++17/智慧指標.md b/02. PARA/03. Resources(資源)/C++17/智慧指標.md new file mode 100644 index 0000000..e476b28 --- /dev/null +++ b/02. PARA/03. Resources(資源)/C++17/智慧指標.md @@ -0,0 +1,6 @@ +unique_ptr與shared_ptr都是智慧指標,箱對於原本的raw pointer,智慧指標使用起來更方便,也不用擔心delete的問題。 + +## unique_ptr +unique_ptr的特點是,它保證在一個時間內,只會有一個指標的擁有者,也就是這個指標不能被複製跟移動,當unique_ptr離開它的scope時候,它所擁有的pointer也隨之被delete。這讓你不用擔心memoo + +## shared_ptr \ No newline at end of file From ac3233175b40966bf1ba76ff4d51dc5a70bab878 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 10:44:20 +0800 Subject: [PATCH 03/48] vault backup: 2022-06-06 10:44:20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/智慧指標.md --- .../03. Resources(資源)/C++17/智慧指標.md | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/02. PARA/03. Resources(資源)/C++17/智慧指標.md b/02. PARA/03. Resources(資源)/C++17/智慧指標.md index e476b28..679c32b 100644 --- a/02. PARA/03. Resources(資源)/C++17/智慧指標.md +++ b/02. PARA/03. Resources(資源)/C++17/智慧指標.md @@ -1,6 +1,30 @@ unique_ptr與shared_ptr都是智慧指標,箱對於原本的raw pointer,智慧指標使用起來更方便,也不用擔心delete的問題。 ## unique_ptr -unique_ptr的特點是,它保證在一個時間內,只會有一個指標的擁有者,也就是這個指標不能被複製跟移動,當unique_ptr離開它的scope時候,它所擁有的pointer也隨之被delete。這讓你不用擔心memoo +unique_ptr的特點是,它保證在一個時間內,只會有一個指標的擁有者,也就是這個指標不能被複製跟移動,當unique_ptr離開它的scope時候,它所擁有的pointer也隨之被delete。這讓你不用擔心memory leak的問題。 +原本分配記憶體的方法,假設我們有一個class叫BigBuffer: +```cpp +BigBuffer* bigBuf = new BigBuffer(bufferSize); + +// Use buffer here + +delete bigBuf; +``` + +用unique_ptr: +```cpp +auto bigBuf = std::make_unique(bufferSize); +// Use buffer here +// bigBuf will be released when exiting scope +``` + +我們統一用`std::make_unique<>`這個template function來建立unique_ptr,角括號<>裡面要帶入你要建立的型別,後面的括號()就是型別的constructor,使用起來跟new是一樣的。 +因為`std::make_unique<>`裡面已經有表明型別了,所以變數就用auto就可以了,不用再寫一次型別。 + +一旦unique_ptr建立之後,使用起來就跟一般指標沒有兩樣,都是用`->`來操作:`bigBuf->setXXX()` or `bigBuf->getXXX()`。 +但是別忘記unique_ptr本身還是一個local variable,所以我們可以用`.`來操作unique_ptr,例如我們可以用`.reset()`重新配一個指標: +```cpp +bigBuf.reset(std::make_unique(bufferSizeLarger)); +``` ## shared_ptr \ No newline at end of file From a779779c223b1eae2bd59c7b6c8196bc4c7f7e8a Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 10:54:20 +0800 Subject: [PATCH 04/48] vault backup: 2022-06-06 10:54:20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/智慧指標.md --- .../03. Resources(資源)/C++17/智慧指標.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/02. PARA/03. Resources(資源)/C++17/智慧指標.md b/02. PARA/03. Resources(資源)/C++17/智慧指標.md index 679c32b..705cb71 100644 --- a/02. PARA/03. Resources(資源)/C++17/智慧指標.md +++ b/02. PARA/03. Resources(資源)/C++17/智慧指標.md @@ -26,5 +26,28 @@ auto bigBuf = std::make_unique(bufferSize); ```cpp bigBuf.reset(std::make_unique(bufferSizeLarger)); ``` +這時候舊指標會自動delete,然後指向新的指標(如果記憶體分配有成功的話),或者指向nullptr(記憶體分配失敗)。 +如果單純想要釋放指標,那就單純的reset就好。 +```cpp +bigBuf.reset(); // Now I'm nullptr +``` + +如果要分配陣列的話: +```cpp +auto intArray = std::make_unique(1024); +``` + +使用方式也是一樣的: +```cpp +intArray[5] = 555; +``` + +不過對於陣列的操作現在更建議使用std::array。 + +如果有什麼特殊原因讓你決定不再讓unique_ptr蘭幫你管理指標,可以用`release`來讓出指標: +```cpp +auto intArray = std::make_unique(1024); +int* intArrayRaw = +``` ## shared_ptr \ No newline at end of file From 85fe2a26e40838e5c03d45c92ea0cd27860a73c2 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 11:04:20 +0800 Subject: [PATCH 05/48] vault backup: 2022-06-06 11:04:20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/智慧指標.md --- .../03. Resources(資源)/C++17/智慧指標.md | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/02. PARA/03. Resources(資源)/C++17/智慧指標.md b/02. PARA/03. Resources(資源)/C++17/智慧指標.md index 705cb71..32b9925 100644 --- a/02. PARA/03. Resources(資源)/C++17/智慧指標.md +++ b/02. PARA/03. Resources(資源)/C++17/智慧指標.md @@ -1,8 +1,8 @@ unique_ptr與shared_ptr都是智慧指標,箱對於原本的raw pointer,智慧指標使用起來更方便,也不用擔心delete的問題。 ## unique_ptr -unique_ptr的特點是,它保證在一個時間內,只會有一個指標的擁有者,也就是這個指標不能被複製跟移動,當unique_ptr離開它的scope時候,它所擁有的pointer也隨之被delete。這讓你不用擔心memory leak的問題。 -原本分配記憶體的方法,假設我們有一個class叫BigBuffer: +`unique_ptr`的特點是,它保證在一個時間內,只會有一個指標的擁有者,也就是這個指標不能被複製跟移動,當`unique_ptr`離開它的scope時候,它所擁有的pointer也隨之被delete。這讓你不用擔心memory leak的問題。 +原本分配記憶體的方法,假設我們有一個class叫`BigBuffer`: ```cpp BigBuffer* bigBuf = new BigBuffer(bufferSize); @@ -11,23 +11,23 @@ BigBuffer* bigBuf = new BigBuffer(bufferSize); delete bigBuf; ``` -用unique_ptr: +用`unique_ptr`: ```cpp auto bigBuf = std::make_unique(bufferSize); // Use buffer here // bigBuf will be released when exiting scope ``` -我們統一用`std::make_unique<>`這個template function來建立unique_ptr,角括號<>裡面要帶入你要建立的型別,後面的括號()就是型別的constructor,使用起來跟new是一樣的。 -因為`std::make_unique<>`裡面已經有表明型別了,所以變數就用auto就可以了,不用再寫一次型別。 +我們統一用`std::make_unique<>`這個template function來建立`unique_ptr`,角括號`<>`裡面要帶入你要建立的型別,後面的括號`()`就是型別的constructor,使用起來跟new是一樣的。 +因為`std::make_unique<>`裡面已經有表明型別了,所以變數就用`auto`就可以了,不用再寫一次型別。 -一旦unique_ptr建立之後,使用起來就跟一般指標沒有兩樣,都是用`->`來操作:`bigBuf->setXXX()` or `bigBuf->getXXX()`。 -但是別忘記unique_ptr本身還是一個local variable,所以我們可以用`.`來操作unique_ptr,例如我們可以用`.reset()`重新配一個指標: +一旦`unique_ptr`建立之後,使用起來就跟一般指標沒有兩樣,都是用`->`來操作:`bigBuf->setXXX()` or `bigBuf->getXXX()`。 +但是別忘記`unique_ptr`本身還是一個local variable,所以我們可以用`.`來操作`unique_ptr`,例如我們可以用`.reset()`重新配一個指標: ```cpp bigBuf.reset(std::make_unique(bufferSizeLarger)); ``` -這時候舊指標會自動delete,然後指向新的指標(如果記憶體分配有成功的話),或者指向nullptr(記憶體分配失敗)。 -如果單純想要釋放指標,那就單純的reset就好。 +這時候舊指標會自動delete,然後指向新的指標(如果記憶體分配有成功的話),或者指向`nullptr`(記憶體分配失敗)。 +如果單純想要釋放指標,那就單純的呼叫`reset()`就好。 ```cpp bigBuf.reset(); // Now I'm nullptr ``` @@ -42,12 +42,20 @@ auto intArray = std::make_unique(1024); intArray[5] = 555; ``` -不過對於陣列的操作現在更建議使用std::array。 +不過對於陣列的操作現在更建議使用`std::array`。 -如果有什麼特殊原因讓你決定不再讓unique_ptr蘭幫你管理指標,可以用`release`來讓出指標: +如果有什麼特殊原因讓你決定不再讓`unique_ptr`來幫你管理指標,可以用`release()`來讓出指標: ```cpp auto intArray = std::make_unique(1024); -int* intArrayRaw = +int* intArrayRaw = intArray.release(); // Now I don't care anymore +``` +但是這時候呼叫`delete[]`(或`delete`)的責任又回到你身上了。所以千萬不要把`release()`跟`reset()`搞混了。 + +`unique_ptr`不能被複製跟移動,所以下列的寫法都編不過: +```cpp +std::unique_ptr ptr2(ptr1); // Error +std::unique_ptr ptr2 = ptr1; // Error ``` + ## shared_ptr \ No newline at end of file From 5dc96156934cebf2107815dd27addb97ee3cc1f9 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 11:14:20 +0800 Subject: [PATCH 06/48] vault backup: 2022-06-06 11:14:20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/智慧指標.md --- .../03. Resources(資源)/C++17/智慧指標.md | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/02. PARA/03. Resources(資源)/C++17/智慧指標.md b/02. PARA/03. Resources(資源)/C++17/智慧指標.md index 32b9925..ef2fdab 100644 --- a/02. PARA/03. Resources(資源)/C++17/智慧指標.md +++ b/02. PARA/03. Resources(資源)/C++17/智慧指標.md @@ -5,9 +5,7 @@ unique_ptr與shared_ptr都是智慧指標,箱對於原本的raw pointer,智 原本分配記憶體的方法,假設我們有一個class叫`BigBuffer`: ```cpp BigBuffer* bigBuf = new BigBuffer(bufferSize); - // Use buffer here - delete bigBuf; ``` @@ -18,7 +16,7 @@ auto bigBuf = std::make_unique(bufferSize); // bigBuf will be released when exiting scope ``` -我們統一用`std::make_unique<>`這個template function來建立`unique_ptr`,角括號`<>`裡面要帶入你要建立的型別,後面的括號`()`就是型別的constructor,使用起來跟new是一樣的。 +我們統一用`std::make_unique<>`這個template function來建立`unique_ptr`,角括號`<>`裡面要帶入你要建立的型別,後面的括號`()`就是型別的constructor,使用起來跟`new`是一樣的。 因為`std::make_unique<>`裡面已經有表明型別了,所以變數就用`auto`就可以了,不用再寫一次型別。 一旦`unique_ptr`建立之後,使用起來就跟一般指標沒有兩樣,都是用`->`來操作:`bigBuf->setXXX()` or `bigBuf->getXXX()`。 @@ -53,9 +51,31 @@ int* intArrayRaw = intArray.release(); // Now I don't care anymore `unique_ptr`不能被複製跟移動,所以下列的寫法都編不過: ```cpp +auto ptr1 = std::make_unique(5); std::unique_ptr ptr2(ptr1); // Error std::unique_ptr ptr2 = ptr1; // Error ``` +在Visual Studio 2017上,錯誤訊息是這樣:`error C2280: 'std::unique_ptr>::unique_ptr(const std::unique_ptr> &)': attempting to reference a deleted function`。 +其實就是`unique_ptr`的copy constructor跟assignment operator都被標記為delete了。 -## shared_ptr \ No newline at end of file +## shared_ptr +建立一個`shared_ptr`是使用`std::make_shared()`: +```cpp +auto myBuf = std::make_shared(bufferSize); +``` + +但是`shared_ptr`可以被複製與移動,這是跟`unique_ptr`的差別: +```cpp +auto myBuf = std::make_shared(bufferSize); + +std::shared_ptr bufCopy = myBuf; +``` + +現在bufCopy跟myBuf都指向同一個指標,他們都可以操作這個指標: +```cpp +myBuf->setZero(startAddr, endAddr); +bufCopy->setOne(startAddr, endAddr); +``` + +`shared_ptr`內部有一個參考記數(reference cou) \ No newline at end of file From 6613a9bf087a7b4ac5ac3b3d2d6e19f6e9fc573d Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 11:24:20 +0800 Subject: [PATCH 07/48] vault backup: 2022-06-06 11:24:20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/智慧指標.md --- .../03. Resources(資源)/C++17/智慧指標.md | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/02. PARA/03. Resources(資源)/C++17/智慧指標.md b/02. PARA/03. Resources(資源)/C++17/智慧指標.md index ef2fdab..b16cde3 100644 --- a/02. PARA/03. Resources(資源)/C++17/智慧指標.md +++ b/02. PARA/03. Resources(資源)/C++17/智慧指標.md @@ -78,4 +78,22 @@ myBuf->setZero(startAddr, endAddr); bufCopy->setOne(startAddr, endAddr); ``` -`shared_ptr`內部有一個參考記數(reference cou) \ No newline at end of file +`shared_ptr`內部有一個參考記數(reference count)來紀錄它所擁有的指標已經分享給幾個變數了,只要有變數離開了他的scope,參考記數就會減少,反之,要是像上面那樣有人複製的指標,參考記數就會增加,參考記數歸0的時候,指標就會被釋放。 + +有了`shared_ptr`我們就不必擔心delete的責任問題: +```cpp +std::shared_ptr getBuffer(int32_t bufferSize) { + return std::make_shared(bufferSize); +} + +int main() { + auto myBuf = getBuffer(1024); // new(malloc) memory + // use myBuf + + return 0; +} // myBuf delete memory here +``` + +`shared_ptr`有一個問題是可以會「循環參考」(cyclic references),也就是share_ptr A指向另一個share_ptr B,然後share_ptr B又指向share_ptr A,這造成參考記數(reference count)不會減少而永遠無法釋出指標。這個是需要注意的。 + +但是`shared_ptr`還是讓記憶體的ㄈ From 877b5a5b46efc13cc3e5ca20413bd2cd2210b257 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 11:34:20 +0800 Subject: [PATCH 08/48] vault backup: 2022-06-06 11:34:20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/智慧指標.md --- 02. PARA/03. Resources(資源)/C++17/智慧指標.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/02. PARA/03. Resources(資源)/C++17/智慧指標.md b/02. PARA/03. Resources(資源)/C++17/智慧指標.md index b16cde3..1f9707b 100644 --- a/02. PARA/03. Resources(資源)/C++17/智慧指標.md +++ b/02. PARA/03. Resources(資源)/C++17/智慧指標.md @@ -1,8 +1,8 @@ unique_ptr與shared_ptr都是智慧指標,箱對於原本的raw pointer,智慧指標使用起來更方便,也不用擔心delete的問題。 ## unique_ptr -`unique_ptr`的特點是,它保證在一個時間內,只會有一個指標的擁有者,也就是這個指標不能被複製跟移動,當`unique_ptr`離開它的scope時候,它所擁有的pointer也隨之被delete。這讓你不用擔心memory leak的問題。 -原本分配記憶體的方法,假設我們有一個class叫`BigBuffer`: +[`unique_ptr`](https://en.cppreference.com/w/cpp/memory/unique_ptr)的特點是,它保證在一個時間內,只會有一個指標的擁有者,也就是這個指標不能被複製跟移動,當`unique_ptr`離開它的scope時候,它所擁有的指標也隨之被delete。這讓你不用擔心memory leak的問題。 +假設我們有一個class叫`BigBuffer`,原本分配記憶體的方法: ```cpp BigBuffer* bigBuf = new BigBuffer(bufferSize); // Use buffer here @@ -16,7 +16,7 @@ auto bigBuf = std::make_unique(bufferSize); // bigBuf will be released when exiting scope ``` -我們統一用`std::make_unique<>`這個template function來建立`unique_ptr`,角括號`<>`裡面要帶入你要建立的型別,後面的括號`()`就是型別的constructor,使用起來跟`new`是一樣的。 +我們統一用[`std::make_unique<>`](https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)這個template function來建立`unique_ptr`,角括號`<>`裡面要帶入你要建立的型別,後面的括號`()`就是型別的constructor,使用起來跟`new`是一樣的。 因為`std::make_unique<>`裡面已經有表明型別了,所以變數就用`auto`就可以了,不用再寫一次型別。 一旦`unique_ptr`建立之後,使用起來就跟一般指標沒有兩樣,都是用`->`來操作:`bigBuf->setXXX()` or `bigBuf->getXXX()`。 @@ -40,7 +40,7 @@ auto intArray = std::make_unique(1024); intArray[5] = 555; ``` -不過對於陣列的操作現在更建議使用`std::array`。 +不過對於陣列的操作更建議使用`std::array`。 如果有什麼特殊原因讓你決定不再讓`unique_ptr`來幫你管理指標,可以用`release()`來讓出指標: ```cpp @@ -60,7 +60,7 @@ std::unique_ptr ptr2 = ptr1; // Error ## shared_ptr -建立一個`shared_ptr`是使用`std::make_shared()`: +建立一個[`shared_ptr`](https://en.cppreference.com/w/cpp/memory/shared_ptr)是使用[`std::make_shared()`](https://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared): ```cpp auto myBuf = std::make_shared(bufferSize); ``` @@ -78,7 +78,7 @@ myBuf->setZero(startAddr, endAddr); bufCopy->setOne(startAddr, endAddr); ``` -`shared_ptr`內部有一個參考記數(reference count)來紀錄它所擁有的指標已經分享給幾個變數了,只要有變數離開了他的scope,參考記數就會減少,反之,要是像上面那樣有人複製的指標,參考記數就會增加,參考記數歸0的時候,指標就會被釋放。 +`shared_ptr`內部有一個參考記數(reference count)來紀錄它所擁有的指標已經分享給幾個變數了,只要有變數離開了他的scope,參考記數就會減少,反之,要是像上面那樣有人複製指標,參考記數就會增加,參考記數歸0的時候,指標就會被釋放。 有了`shared_ptr`我們就不必擔心delete的責任問題: ```cpp @@ -96,4 +96,4 @@ int main() { `shared_ptr`有一個問題是可以會「循環參考」(cyclic references),也就是share_ptr A指向另一個share_ptr B,然後share_ptr B又指向share_ptr A,這造成參考記數(reference count)不會減少而永遠無法釋出指標。這個是需要注意的。 -但是`shared_ptr`還是讓記憶體的ㄈ +但是`shared_ptr`還是讓記憶體的管理問題減少很多,應該用`shared_ptr`來代替`new` & `delete`。 From c5616acd7091c651347a440f5ffb8b83533740b5 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 11:44:20 +0800 Subject: [PATCH 09/48] vault backup: 2022-06-06 11:44:20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/智慧指標.md --- .../03. Resources(資源)/C++17/智慧指標.md | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/02. PARA/03. Resources(資源)/C++17/智慧指標.md b/02. PARA/03. Resources(資源)/C++17/智慧指標.md index 1f9707b..0e8171c 100644 --- a/02. PARA/03. Resources(資源)/C++17/智慧指標.md +++ b/02. PARA/03. Resources(資源)/C++17/智慧指標.md @@ -1,31 +1,31 @@ -unique_ptr與shared_ptr都是智慧指標,箱對於原本的raw pointer,智慧指標使用起來更方便,也不用擔心delete的問題。 +[`unique_ptr`](https://en.cppreference.com/w/cpp/memory/unique_ptr)與[`shared_ptr`](https://en.cppreference.com/w/cpp/memory/shared_ptr)都是智慧指標,箱對於原本的raw pointer,智慧指標使用起來更方便,也不用擔心delete的問題。 ## unique_ptr -[`unique_ptr`](https://en.cppreference.com/w/cpp/memory/unique_ptr)的特點是,它保證在一個時間內,只會有一個指標的擁有者,也就是這個指標不能被複製跟移動,當`unique_ptr`離開它的scope時候,它所擁有的指標也隨之被delete。這讓你不用擔心memory leak的問題。 -假設我們有一個class叫`BigBuffer`,原本分配記憶體的方法: +`unique_ptr` 的特點是,它保證在一個時間內,只會有一個指標的擁有者,也就是這個指標不能被複製跟移動,當 `unique_ptr` 離開它的scope時候,它所擁有的指標也隨之被delete。這讓你不用擔心memory leak的問題。 +假設我們有一個class叫 `BigBuffer` ,原本分配記憶體的方法: ```cpp BigBuffer* bigBuf = new BigBuffer(bufferSize); // Use buffer here delete bigBuf; ``` -用`unique_ptr`: +用 `unique_ptr`: ```cpp auto bigBuf = std::make_unique(bufferSize); // Use buffer here // bigBuf will be released when exiting scope ``` -我們統一用[`std::make_unique<>`](https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)這個template function來建立`unique_ptr`,角括號`<>`裡面要帶入你要建立的型別,後面的括號`()`就是型別的constructor,使用起來跟`new`是一樣的。 -因為`std::make_unique<>`裡面已經有表明型別了,所以變數就用`auto`就可以了,不用再寫一次型別。 +我們統一用[`std::make_unique<>`](https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)這個template function來建立 `unique_ptr` ,角括號 `<>` 裡面要帶入你要建立的型別,後面的括號 `()` 就是型別的constructor,使用起來跟 `new` 是一樣的。 +因為 `std::make_unique<>` 裡面已經有表明型別了,所以變數就用 `auto` 就可以了,不用再寫一次型別。 -一旦`unique_ptr`建立之後,使用起來就跟一般指標沒有兩樣,都是用`->`來操作:`bigBuf->setXXX()` or `bigBuf->getXXX()`。 -但是別忘記`unique_ptr`本身還是一個local variable,所以我們可以用`.`來操作`unique_ptr`,例如我們可以用`.reset()`重新配一個指標: +一旦 `unique_ptr` 建立之後,使用起來就跟一般指標沒有兩樣,都是用 `->` 來操作:`bigBuf->setXXX()` or `bigBuf->getXXX()`。 +但是別忘記 `unique_ptr` 本身還是一個local variable,所以我們可以用 `.` 來操作 `unique_ptr` ,例如我們可以用 `.reset()` 重新配一個指標: ```cpp bigBuf.reset(std::make_unique(bufferSizeLarger)); ``` -這時候舊指標會自動delete,然後指向新的指標(如果記憶體分配有成功的話),或者指向`nullptr`(記憶體分配失敗)。 -如果單純想要釋放指標,那就單純的呼叫`reset()`就好。 +這時候舊指標會自動delete,然後指向新的指標(如果記憶體分配有成功的話),或者指向 `nullptr` (記憶體分配失敗)。 +如果單純想要釋放指標,那就單純的呼叫 `reset()` 就好。 ```cpp bigBuf.reset(); // Now I'm nullptr ``` @@ -40,16 +40,16 @@ auto intArray = std::make_unique(1024); intArray[5] = 555; ``` -不過對於陣列的操作更建議使用`std::array`。 +不過對於陣列的操作更建議使用 `std::array` 。 -如果有什麼特殊原因讓你決定不再讓`unique_ptr`來幫你管理指標,可以用`release()`來讓出指標: +如果有什麼特殊原因讓你決定不再讓 `unique_ptr` 來幫你管理指標,可以用 `release()` 來讓出指標: ```cpp auto intArray = std::make_unique(1024); int* intArrayRaw = intArray.release(); // Now I don't care anymore ``` -但是這時候呼叫`delete[]`(或`delete`)的責任又回到你身上了。所以千萬不要把`release()`跟`reset()`搞混了。 +但是這時候呼叫 `delete[]` (或 `delete` )的責任又回到你身上了。所以千萬不要把 `release()` 跟 `reset()` 搞混了。 -`unique_ptr`不能被複製跟移動,所以下列的寫法都編不過: +`unique_ptr` 不能被複製跟移動,所以下列的寫法都編不過: ```cpp auto ptr1 = std::make_unique(5); std::unique_ptr ptr2(ptr1); // Error @@ -60,27 +60,27 @@ std::unique_ptr ptr2 = ptr1; // Error ## shared_ptr -建立一個[`shared_ptr`](https://en.cppreference.com/w/cpp/memory/shared_ptr)是使用[`std::make_shared()`](https://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared): +建立一個 `shared_ptr` 是使用[`std::make_shared()`](https://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared): ```cpp auto myBuf = std::make_shared(bufferSize); ``` -但是`shared_ptr`可以被複製與移動,這是跟`unique_ptr`的差別: +但是 `shared_ptr` 可以被複製與移動,這是跟 `unique_ptr` 的差別: ```cpp auto myBuf = std::make_shared(bufferSize); std::shared_ptr bufCopy = myBuf; ``` -現在bufCopy跟myBuf都指向同一個指標,他們都可以操作這個指標: +現在 bufCopy 跟 myBuf 都指向同一個指標,他們都可以操作這個指標: ```cpp myBuf->setZero(startAddr, endAddr); bufCopy->setOne(startAddr, endAddr); ``` -`shared_ptr`內部有一個參考記數(reference count)來紀錄它所擁有的指標已經分享給幾個變數了,只要有變數離開了他的scope,參考記數就會減少,反之,要是像上面那樣有人複製指標,參考記數就會增加,參考記數歸0的時候,指標就會被釋放。 +`shared_ptr` 內部有一個參考記數(reference count)來紀錄它所擁有的指標已經分享給幾個變數了,只要有變數離開了他的scope,參考記數就會減少,反之,要是像上面那樣有人複製指標,參考記數就會增加,參考記數歸0的時候,指標就會被釋放。 -有了`shared_ptr`我們就不必擔心delete的責任問題: +有了 `shared_ptr` 我們就不必擔心 delete 的責任問題: ```cpp std::shared_ptr getBuffer(int32_t bufferSize) { return std::make_shared(bufferSize); @@ -94,6 +94,6 @@ int main() { } // myBuf delete memory here ``` -`shared_ptr`有一個問題是可以會「循環參考」(cyclic references),也就是share_ptr A指向另一個share_ptr B,然後share_ptr B又指向share_ptr A,這造成參考記數(reference count)不會減少而永遠無法釋出指標。這個是需要注意的。 +`shared_ptr` 有一個問題是可以會「循環參考」(cyclic references),也就是 share_ptr A 指向另一個 share_ptr B ,然後 share_ptr B 又指向 share_ptr A,這造成參考記數(reference count)不會減少而永遠無法釋出指標。這個是需要注意的。 -但是`shared_ptr`還是讓記憶體的管理問題減少很多,應該用`shared_ptr`來代替`new` & `delete`。 +但是 `shared_ptr` 還是讓記憶體的管理問題大大減少,應該用 `shared_ptr` 來代替 `new` & `delete` 。 From a1ca986cb13a5e660f76d65d12f89bcbf3950ff9 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 11:54:21 +0800 Subject: [PATCH 10/48] vault backup: 2022-06-06 11:54:21 Affected files: .obsidian/workspace 00. TOP/01. TODO.md --- .obsidian/workspace | 8 ++++---- 00. TOP/01. TODO.md | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index 71fa1a2..04492b1 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md", + "file": "01. Daily/2022-06-06(週一).md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md" + "file": "01. Daily/2022-06-06(週一).md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md", + "file": "01. Daily/2022-06-06(週一).md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,8 +125,8 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ - "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "01. Daily/2022-06-06(週一).md", + "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/99. templates/日記.md", "02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md", "02. PARA/03. Resources(資源)/01. 架站/04. Gitea.md", diff --git a/00. TOP/01. TODO.md b/00. TOP/01. TODO.md index b7cb98c..f61d20d 100644 --- a/00. TOP/01. TODO.md +++ b/00. TOP/01. TODO.md @@ -1,5 +1,5 @@ # ME -- [ ] 作筆記:C++17 - share_ptr +- [x] 作筆記:C++17 - share_ptr ✅ 2022-06-06 - [ ] 作筆記:C++17 - R value reference與std::move - [ ] 作筆記:C++17 - Lambda - [ ] 補充英格蘭與蘇格蘭的歷史 From 17b6e02bde07148de00dc26b4cae0ae1c2c37cf7 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 14:10:18 +0800 Subject: [PATCH 11/48] vault backup: 2022-06-06 14:10:18 Affected files: .obsidian/workspace --- .obsidian/workspace | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index 04492b1..5cb5f12 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "01. Daily/2022-06-06(週一).md", + "file": "02. PARA/03. Resources(資源)/Qt.md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "01. Daily/2022-06-06(週一).md" + "file": "02. PARA/03. Resources(資源)/Qt.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "01. Daily/2022-06-06(週一).md", + "file": "02. PARA/03. Resources(資源)/Qt.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,6 +125,8 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "02. PARA/03. Resources(資源)/Qt.md", + "02. PARA/01. Project(專案)/008. Sentinel.md", "01. Daily/2022-06-06(週一).md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/99. templates/日記.md", @@ -132,8 +134,6 @@ "02. PARA/03. Resources(資源)/01. 架站/04. Gitea.md", "02. PARA/03. Resources(資源)/Tool Setup/Obisidian.md", "00. TOP/01. TODO.md", - "00. TOP/00. Inbox.md", - "README.md", - "test.md" + "00. TOP/00. Inbox.md" ] } \ No newline at end of file From b95b643f7c015af751052b85bdf6bf0ed87db4b1 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 14:30:18 +0800 Subject: [PATCH 12/48] vault backup: 2022-06-06 14:30:18 Affected files: .obsidian/workspace --- .obsidian/workspace | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index 5cb5f12..7ad2011 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,8 +10,8 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/Qt.md", - "mode": "source", + "file": "01. Daily/2022-06-06(週一).md", + "mode": "preview", "source": true } } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/Qt.md" + "file": "01. Daily/2022-06-06(週一).md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/Qt.md", + "file": "01. Daily/2022-06-06(週一).md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,15 +125,15 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "01. Daily/2022-06-06(週一).md", + "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/Qt.md", "02. PARA/01. Project(專案)/008. Sentinel.md", - "01. Daily/2022-06-06(週一).md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/99. templates/日記.md", "02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md", "02. PARA/03. Resources(資源)/01. 架站/04. Gitea.md", "02. PARA/03. Resources(資源)/Tool Setup/Obisidian.md", - "00. TOP/01. TODO.md", "00. TOP/00. Inbox.md" ] } \ No newline at end of file From ee4a4fe4e782753d698ee39dcf871007c6f6b56c Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 20:13:18 +0800 Subject: [PATCH 13/48] vault backup: 2022-06-06 20:13:18 Affected files: .obsidian/workspace --- .obsidian/workspace | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index 7ad2011..ed759bb 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,8 +10,8 @@ "state": { "type": "markdown", "state": { - "file": "01. Daily/2022-06-06(週一).md", - "mode": "preview", + "file": "00. TOP/01. TODO.md", + "mode": "source", "source": true } } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "01. Daily/2022-06-06(週一).md" + "file": "00. TOP/01. TODO.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "01. Daily/2022-06-06(週一).md", + "file": "00. TOP/01. TODO.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,8 +125,8 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ - "01. Daily/2022-06-06(週一).md", "00. TOP/01. TODO.md", + "01. Daily/2022-06-06(週一).md", "02. PARA/03. Resources(資源)/Qt.md", "02. PARA/01. Project(專案)/008. Sentinel.md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", From 72cc115a4eb7578240443bcf0fbc652128623513 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Mon, 6 Jun 2022 20:23:18 +0800 Subject: [PATCH 14/48] vault backup: 2022-06-06 20:23:18 Affected files: 00. TOP/01. TODO.md --- 00. TOP/01. TODO.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/00. TOP/01. TODO.md b/00. TOP/01. TODO.md index f61d20d..a67068f 100644 --- a/00. TOP/01. TODO.md +++ b/00. TOP/01. TODO.md @@ -8,4 +8,15 @@ # WORK ## Logitech ### RobotRunQA -- [ ] 檢查Amily的test task 🛫 2022-05-30 📅 2022-06-03 \ No newline at end of file +- [x] 檢查Amily的test task 🛫 2022-05-30 📅 2022-06-03 ✅ 2022-06-06 +- 改進RobotRunQA report + - TT + - [ ] 在測試項目的主欄位上顯示resolution, format, fps 🛫 2022-06-06 📅 2022-06-10 + - [ ] 在測試項目的主欄位上顯示test time 🛫 2022-06-06 📅 2022-06-10 + - [ ] test config 🛫 2022-06-06 📅 2022-06-10 + - TestAllFormatsVTF + - [ ] 在測試細項表格上顯示詳細說明 🛫 2022-06-06 📅 2022-06-10 + - [ ] Show "VideoFormats: "MaxFpsMaxResolutionOnly" to outside, let user understand the test purpose. 🛫 2022-06-06 📅 2022-06-10 + - [ ] List max fps of all resolution of all format on side bar of section 🛫 2022-06-06 📅 2022-06-10 + - TestGpsDiff + - [ ] List all format 🛫 2022-06-06 📅 2022-06-10 \ No newline at end of file From ce6f05afaecbcb77277687a80437cc0bbd6d697e Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 7 Jun 2022 09:29:01 +0800 Subject: [PATCH 15/48] vault backup: 2022-06-07 09:29:01 Affected files: .obsidian/workspace --- .obsidian/workspace | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index ed759bb..e1175d1 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "00. TOP/01. TODO.md", + "file": "02. PARA/03. Resources(資源)/FFMpeg.md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "00. TOP/01. TODO.md" + "file": "02. PARA/03. Resources(資源)/FFMpeg.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "00. TOP/01. TODO.md", + "file": "02. PARA/03. Resources(資源)/FFMpeg.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,15 +125,15 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "02. PARA/03. Resources(資源)/FFMpeg.md", + "02. PARA/01. Project(專案)/008. Sentinel.md", "00. TOP/01. TODO.md", "01. Daily/2022-06-06(週一).md", "02. PARA/03. Resources(資源)/Qt.md", - "02. PARA/01. Project(專案)/008. Sentinel.md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/99. templates/日記.md", "02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md", "02. PARA/03. Resources(資源)/01. 架站/04. Gitea.md", - "02. PARA/03. Resources(資源)/Tool Setup/Obisidian.md", - "00. TOP/00. Inbox.md" + "02. PARA/03. Resources(資源)/Tool Setup/Obisidian.md" ] } \ No newline at end of file From e2a4d4e4fdc5baf60be963644c0dce96826a0e96 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 7 Jun 2022 09:38:59 +0800 Subject: [PATCH 16/48] vault backup: 2022-06-07 09:38:59 Affected files: .obsidian/workspace 00. TOP/01. TODO.md --- .obsidian/workspace | 12 ++++++------ 00. TOP/01. TODO.md | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index e1175d1..a29a632 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,8 +10,8 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/FFMpeg.md", - "mode": "source", + "file": "00. TOP/01. TODO.md", + "mode": "preview", "source": true } } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/FFMpeg.md" + "file": "00. TOP/01. TODO.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/FFMpeg.md", + "file": "00. TOP/01. TODO.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,13 +125,13 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "00. TOP/01. TODO.md", + "02. PARA/03. Resources(資源)/99. templates/日記.md", "02. PARA/03. Resources(資源)/FFMpeg.md", "02. PARA/01. Project(專案)/008. Sentinel.md", - "00. TOP/01. TODO.md", "01. Daily/2022-06-06(週一).md", "02. PARA/03. Resources(資源)/Qt.md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", - "02. PARA/03. Resources(資源)/99. templates/日記.md", "02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md", "02. PARA/03. Resources(資源)/01. 架站/04. Gitea.md", "02. PARA/03. Resources(資源)/Tool Setup/Obisidian.md" diff --git a/00. TOP/01. TODO.md b/00. TOP/01. TODO.md index a67068f..2af4d41 100644 --- a/00. TOP/01. TODO.md +++ b/00. TOP/01. TODO.md @@ -19,4 +19,19 @@ - [ ] Show "VideoFormats: "MaxFpsMaxResolutionOnly" to outside, let user understand the test purpose. 🛫 2022-06-06 📅 2022-06-10 - [ ] List max fps of all resolution of all format on side bar of section 🛫 2022-06-06 📅 2022-06-10 - TestGpsDiff - - [ ] List all format 🛫 2022-06-06 📅 2022-06-10 \ No newline at end of file + - [ ] List all format 🛫 2022-06-06 📅 2022-06-10 + +# All TODOs +```tasks +not done +path does not include 2021 +path does not include 2022/01 +path does not include 2022/02 +path does not include 2022/03 +path does not include 2022/04 +path does not include 02. PARA/04. Archives(歸檔) +path does not include 001. Kong +group by folder +group by filename +group by heading +``` \ No newline at end of file From 34530ea612e43ca87c247ac10b4dfa20c8aa147b Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 7 Jun 2022 10:28:59 +0800 Subject: [PATCH 17/48] vault backup: 2022-06-07 10:28:59 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: .obsidian/workspace 02. PARA/03. Resources(資源)/FFMPEG/Introduction.md --- .obsidian/workspace | 14 +++++++------- .../03. Resources(資源)/FFMPEG/Introduction.md | 7 +++++++ 2 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 02. PARA/03. Resources(資源)/FFMPEG/Introduction.md diff --git a/.obsidian/workspace b/.obsidian/workspace index a29a632..bf227f0 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,8 +10,8 @@ "state": { "type": "markdown", "state": { - "file": "00. TOP/01. TODO.md", - "mode": "preview", + "file": "02. PARA/03. Resources(資源)/FFMPEG/Introduction.md", + "mode": "source", "source": true } } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "00. TOP/01. TODO.md" + "file": "02. PARA/03. Resources(資源)/FFMPEG/Introduction.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "00. TOP/01. TODO.md", + "file": "02. PARA/03. Resources(資源)/FFMPEG/Introduction.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,15 +125,15 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "02. PARA/03. Resources(資源)/FFMPEG/Introduction.md", + "02. PARA/03. Resources(資源)/FFMpeg.md", "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/99. templates/日記.md", - "02. PARA/03. Resources(資源)/FFMpeg.md", "02. PARA/01. Project(專案)/008. Sentinel.md", "01. Daily/2022-06-06(週一).md", "02. PARA/03. Resources(資源)/Qt.md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md", - "02. PARA/03. Resources(資源)/01. 架站/04. Gitea.md", - "02. PARA/03. Resources(資源)/Tool Setup/Obisidian.md" + "02. PARA/03. Resources(資源)/01. 架站/04. Gitea.md" ] } \ No newline at end of file diff --git a/02. PARA/03. Resources(資源)/FFMPEG/Introduction.md b/02. PARA/03. Resources(資源)/FFMPEG/Introduction.md new file mode 100644 index 0000000..c6451e8 --- /dev/null +++ b/02. PARA/03. Resources(資源)/FFMPEG/Introduction.md @@ -0,0 +1,7 @@ +- [FFmpeg](https://www.ffmpeg.org/) +- Open source +- For handling multimedia files and streams +- GPL/LGPS license +- Inspired by MPEG(Moving Picture Experts Group), FF means "Fast Foward" +- Libray + - \ No newline at end of file From a60c6dfa140c93c42d5b5dd890ef948cbb058ffc Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 7 Jun 2022 10:38:59 +0800 Subject: [PATCH 18/48] vault backup: 2022-06-07 10:38:59 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: .obsidian/workspace 02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md 02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md 02. PARA/03. Resources(資源)/FFMPEG/Introduction.md --- .obsidian/workspace | 12 ++++++------ .../FFMPEG/00. Introduction.md | 17 +++++++++++++++++ .../03. Resources(資源)/FFMPEG/01. Setup.md | 1 + .../FFMPEG/Introduction.md | 7 ------- 4 files changed, 24 insertions(+), 13 deletions(-) create mode 100644 02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md create mode 100644 02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md delete mode 100644 02. PARA/03. Resources(資源)/FFMPEG/Introduction.md diff --git a/.obsidian/workspace b/.obsidian/workspace index bf227f0..2dd8613 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/FFMPEG/Introduction.md", + "file": "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/FFMPEG/Introduction.md" + "file": "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/FFMPEG/Introduction.md", + "file": "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,7 +125,8 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ - "02. PARA/03. Resources(資源)/FFMPEG/Introduction.md", + "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", + "02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md", "02. PARA/03. Resources(資源)/FFMpeg.md", "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/99. templates/日記.md", @@ -133,7 +134,6 @@ "01. Daily/2022-06-06(週一).md", "02. PARA/03. Resources(資源)/Qt.md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", - "02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md", - "02. PARA/03. Resources(資源)/01. 架站/04. Gitea.md" + "02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md" ] } \ No newline at end of file diff --git a/02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md b/02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md new file mode 100644 index 0000000..3512cc4 --- /dev/null +++ b/02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md @@ -0,0 +1,17 @@ +- [FFmpeg](https://www.ffmpeg.org/) +- Open source +- For handling multimedia files and streams +- GPL/LGPS license +- Inspired by MPEG(Moving Picture Experts Group), FF means "Fast Foward" +- Libraries + - libavcodec: Contain all the encoders and decoders + - libavformat: Muxers and demuxers + - libavfilter: Filters that you can use on your video and audio according to your requirements + - libavdevice: Input and output devices + - libavutil + - libswscale + - libswresample +- Tools + - ffmpeg: Main transcoding engine + - ffplay: Minimum tool to play a video or audio + - ffprobe: For inspecting medias and extract valuable information \ No newline at end of file diff --git a/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md b/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md new file mode 100644 index 0000000..5587029 --- /dev/null +++ b/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md @@ -0,0 +1 @@ +- FFmpeg doesn't support any official builds for any operation systems. diff --git a/02. PARA/03. Resources(資源)/FFMPEG/Introduction.md b/02. PARA/03. Resources(資源)/FFMPEG/Introduction.md deleted file mode 100644 index c6451e8..0000000 --- a/02. PARA/03. Resources(資源)/FFMPEG/Introduction.md +++ /dev/null @@ -1,7 +0,0 @@ -- [FFmpeg](https://www.ffmpeg.org/) -- Open source -- For handling multimedia files and streams -- GPL/LGPS license -- Inspired by MPEG(Moving Picture Experts Group), FF means "Fast Foward" -- Libray - - \ No newline at end of file From 877dea8a07d479a23d0ebf15b98eda135af033be Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 7 Jun 2022 10:48:59 +0800 Subject: [PATCH 19/48] vault backup: 2022-06-07 10:48:59 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md --- 02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md b/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md index 5587029..2fb0814 100644 --- a/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md +++ b/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md @@ -1 +1,6 @@ -- FFmpeg doesn't support any official builds for any operation systems. +FFmpeg doesn't support any official builds for any operation systems. You can build the codes from source, or + +## Build from source +From snapshot: https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 +or +From git: `git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg` \ No newline at end of file From 00c353e4cf6ce570d97988e28b21ed3a3d1fd58d Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 7 Jun 2022 10:58:59 +0800 Subject: [PATCH 20/48] vault backup: 2022-06-07 10:58:59 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md attachments/Pasted image 20220607105807.png --- .../03. Resources(資源)/FFMPEG/01. Setup.md | 27 ++++++++++++++---- attachments/Pasted image 20220607105807.png | Bin 0 -> 71118 bytes 2 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 attachments/Pasted image 20220607105807.png diff --git a/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md b/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md index 2fb0814..c45f319 100644 --- a/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md +++ b/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md @@ -1,6 +1,23 @@ -FFmpeg doesn't support any official builds for any operation systems. You can build the codes from source, or +FFmpeg doesn't support any official builds for any operation systems. You can build the codes from source, or use the prebuilt packages. -## Build from source -From snapshot: https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 -or -From git: `git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg` \ No newline at end of file +## From source +Get source code from [snapshot](https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2) or git(`git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg`). + +## From prebuilt packages +### MacOS +Use homebrew to install FFMPEG package +``` +brew install ffmpeg +``` + +### Ubuntu +``` +sudo apt update ;\ +sudo apt install ffmpeg +``` + +### Windows +Goto https://www.ffmpeg.org/download.html, and +![[Pasted image 20220607105807.png]] + +And then browser jumps to https://www.gyan.dev/ffmpeg/builds/ diff --git a/attachments/Pasted image 20220607105807.png b/attachments/Pasted image 20220607105807.png new file mode 100644 index 0000000000000000000000000000000000000000..1a05b69041df3d3a9e9c4baa99877a8b32710732 GIT binary patch literal 71118 zcmd?Q^;?`l(=|9a!QCB#y9al75AN>nuEBysaCZpq?(Xgy++BBgzV~_e+W%np+Wv87 z`tEzWyQ)r|Qx%~gCk_vT0|Nj6;3XwQlmGw-1^@uG9vTw($*$b6H~>HdkQ5PAanCs0 z@NidFeSx~N18pKc7E^9zaL%RM2*99B5{0Ry;fAIRY_{8Do;>2b#dR6{iI?dxXoDw; zED8=H_~5hUW)55E8lYq@jj6dBd?$4CnolcxA-hxn|MboiJ4I^YcsbJXFUxBx-Dxxb zXt6T=o5=qT1hJJ(2qKdIj`+Uq@5uihKgb{%BEtV?3==cCOa9-}B6_6%JBP$k0!|m@ zzmwvG4X@(=J1HCwB`D>8C++{nYA5^OSz-PEpIYiVJO`hyP=G_&-|*RfLvv zOs3IJDO8NQR>;|yr(l7cIS*Tdth1wbdAguIK5$&&T=41rZAr7)MzAnoy625eabB>! z4iWq7VGYEK7^DRNIKS5Y{oI$PziU0kUP$RS4t~wAI`3G5{8;q{|0kVi2dv=_F^fnS?-s-;-;(>23xsR71$T`rO|{}UAZdcb*|5NbGaLa~9n6i4%job_=~4?v%G zs3#;_e={b~6oM&flgeG~Vjb@V#_!pXa1QYG28s!c?iR|R?RlO#^060JE^eWN6PTT= zxWZUfdO=kc&?c>#;e)L+aK+5AJMOxouNZ0J7aA~07~iNK^Tf3|f}dOSji3Na)jN&` z^l}87G3Q~oxg3pdR1w3-RJ^E6dl5g52=gp^({*+(7K0zZRzzL_2})t#M)@7}DuyU* zsm-{q0&{A2_aJ&z>37$&4MhMR<*7|i)!P#2#Ob4t+L%pgaXn8<@)Dv@hU{^v!o$f0 z0YX2^UL4uP(0VU3Py)sL*K-H7Vv5!(Ob8{e52YT9^SY-9g8p=de4<-A7BP6SVr7QZ z=eq65{uUw~Bkt>3ACW^cXbB!8N6Y}XOCp|so^CT7C(}oGW`zSS_m2|Z$g=;h(?;6w z$Q!DOns**ol03|m1v8M^2l$cSrrM#Wo(cEbz(j47ct{+*t9F7IDK~{5?8tS{NAJiv zy_$t5*igPqZWx5oeMN|#*us5(#zEq0hn1SdlEzXb+8cT<9jUop^lGrXR9R8sj{l6u z?cc#ZDT$UcDG3w7hg@=gW4XQkPH}1z-Qyx0Qi?z4o!m*p#l~AsHG92_;D5{+0DLyd zYVftY<)Xc_i>>~zCwR6blW9E`L4}r{je$~lsU=6bthn&Vo50o}K=ca^v)iSZ0esyt z>JJ!I0cJ6Tm^l1n9c8tsT^cdx>)WJ)YK7+h?ag^CJT5mZI6Wn+Yh8yh)b;Ium*gHR z8t$NLi2u?Ht4ir*h8BCBtvjymrV7}ph`-J=4jYmoT@pPpG>s+nC!+Q*lc(ol!L!v4 zSg1PspZnEl+xQz`HOLz?yv%q8J+nl@Ys#d@xl7mm0Kz(T*`%~)M{fogE6%XYVJ7IS zn2QJ`^)Yr~k&x%rIUJxcu_8Qo>v(sFtc2(n=-3eg|MG{cc3}ACQQFnl>CiG; zyNCLI-gwHYGEu|B34PgU+@8TzEjHR8fv8kgn3>Fj1OZiJo1R{XF^Bf$)p=^<@5Kmt z`|~}x`B>mjL-)d;iMrvDaG~~@nUEy4MWk;*trB87f1IC}J1A}!%XW)?$(->yBTxk( zo5HszL{jju!5A;qt9nEX6MxIxCX>*^xaZRDSiEwQ7?@hS?rZlhIraN!4VN}+ro{T% zo)yHP6j^ejoX2-8qyy^LrJDqrs~L5x^dByA{ULYw8X28nkst!!{DbnsC6WPxzau%d zL(Gv*y8tu#{?P1KB4mX}lsO4WA?`BKJiS;nQ+vamw~Y*FUyoJ6aN=n}QE) z6o%!qW&Mlz zRw+50{opOad%KbP{OI)P8Nwze*mA|$Vl8w<6I2^W@kk*6bqY=|NaE=Ou1R!le_e3P z@|)jTzCAmRh+H1QB=oC)6#2xv_ij#%%GGc&v1@|eFrm!fBi29N@ zR%ry^r`;&Gyv=3}*%c3t(7%BIU>>o?eP2<>8{IcFYH>f`)|x8E(*L3P*D$<6=96%Z z*uGj9n-@f5{|bYf4t9dS8@0D6&$e9SSdn2*l0u~wcY+%ic@|jx(|rJ zn&AfFyI4Fqaj@2?0S(Dzx$Xr!RL(S@?J0`g>_fy(g1;1>&inVb2FppF0o-$xAxc#% zIo2mV#c*YjrKw1RL#kBlh!;`6ce*n?v6SO}s&qsl#Oe6-dZ2xRva~_`N-(y!S9+SX z`%U}XX1M&>ulr&-0Ym{@4z!?MUb5`Y#Ds`jo7Br$jPt}^UJOLuN3s_v=`~&99X{{t z5$_C2oA&d2NgurGNtwo{>k%IH5?Zf?a$J?o8mxzI%DYH}P%|Ug)(9?b>XE+5f!n_y z&I^?(ya}e;OJ8B;tnE0i^GV0M`8n|32dZc%B&9efUG(EHPv^65tFxu!Z$jlIy3Opx zJVQ3<6*OVEA}Lh9TLx9{qaHtA|B8ByuWctUHYL}Ja+63O1o;|~8yZ`JdTY}* ztqq;&H6#rTuh#%>)l8Uve<8nlxm8y8w3M6SkDS{uWibT~iFsPK{!1 zfO_A6%$X!Z&73dYx2t1b0(rjFP{2rEzAlSM2#qXJheH1AdMGW5(J*mi((21F5?DfcTatUQ=tB2&7PA|4+`tQGsqM(R*>g&b{ zMKXA6F+FUU|40g$uhO=2dP$HX-rScWGZ~YcZV+y5A7O~++Q$yvi4U>iHCKH4CUHPc zx??E6JZbvGN}WRKRTn{_*&(;bF}qUF_HN*Kk%B6l?Ql%V+Ny2Os-e-xHTxa1-X%rB zU??^}LV35G6p-l`PMag|pKb;U(NMLdhu+Pt47>piLb{b?uX|9lurr(5*4o~{G zYQvf3=PQ;EQuM-;C%!kbLW(?H8gMFc)ib>!&;G-HMJ;Loo71^S=%#hH4%4*#&d=TF zK>%Drj6!v1`Omk=)Lc3e6%pewso-nX*mIOsOnv5S#Ea19iBn zfKa|Wq)<@_@!-Vb>Ynw>$9nw&C8PD*1wXsF(D&R3L(2a^G&IYLem9A3qX1M0e2-`otVRlGdIzK*HaHYg z9&OH^dajzzWU$MBcbMV(YPP|eNx|FSM2W1XN@B&WE_m+;Py>R*?}mET8=3+M7XC3i zZ0A68eBZ`H3z8VKSQw<GUUNv3TOnHi)x zDy}5@3nZEU9hk0+P3nJ6o-eoVF~V5MD3sKP%N@n!Y}<>3hLUnFW6}}4<~j>!M>sK7 z702$&hX(3sH0$%iq^Gt`sOUr`P{fdsK7!Jl5(=xufgsgO5Ihr+BS`;_(p2&YBVnFK zPb)SK70 z0F@dDo8>B=E#MyxbpwP7MGaR)Wbo3AXBJE1INixmVm~m$=$y!@8^YznYln{^0iOGp zI$?!l9NXj3FWWe?U=eXUM+C?*+f{=0owi$6!nkZm`JrNc4c~ek6LP^{lYK%&*BsZ3 zTbp@TOJCMFo4xr0!Lo;Zb})K8ffrZ)PxyMIUiv|o3ed6j?|h3t-d$MHs&N)>ePgOI z>j?D!+oR0XTHKJ+Okfs!(Nl%L_Lrg#dI6hGrnu0#A__x6p3 zolv}`M0@&WK5Tr=ch>}zfFl?(%rXi}oL?VOGgmk-; z(EHHyZsq%@7FN`F2Dj*Qi%cKEusb7on9rl#=b0nEt!6!3d0MOY?7`Cc>cIkFizo2J zkJ~&HWSmR7U9Q=8I-{|T6@S1L%v05JD7tf{2857eV_SyMQw z|Nmq@6KXje*rRbC_K3`g7dXd`?NBIWcVXSwA=xghwsxzpi1O> zY%2TNy#e^RHLiAzte4puF~a;l5J6WYSvVMmorHpsIRG~S^6+g8HfS&-<3N^Bp^EfZ zCSM+3FTs#_WvH5+c|mJ!-0*+|GearMC2|gls<^L&UF*j4I_~?^QTcfjS0%adkC@7L zJkcZ)-+KlAx;P%GDd@Wx*zO&hf8!i^7ohxv7JtHTP-(8V>>B?>n|8$e!L{AQ8Z3pj z`oU6zR_1KpcysdE&vg^hp%EgwJ?cFsJ)rm`X$P+>YD$r+^59o2Mw>ngTU~sR? z7ke)qtC+D*;}+RV=y(_VdxK{WitT_VaPkDm80;l-S2+UJe_kaXWpW&3Nj1 z;w>dmNkC;)1TNB{!99#1E#0sGg+&dct;VVY1!RCkvuH){P zNl=5?fH%`=$U^c;;Q&8k8ENdr8?)Ald$(X_xZ=teo(-~Q#w(V0)%A-Hwrq8kf16te zm})`Mg9ywBcD5Na9}%s3Y!_N7(Dt^|-P-(W24=q}LV}^Q+WRSsn(fp%(!aBH)P-!> zgo)Xw-Z}X6vQ1q6l-HbbHWJ2-ZT*AnBC@a_DxeW}C_Je7O)6B(AtA0t$t`3b56Ped zN`ibsg*wBYY_v5ftA+_`fe*48%;fIu_=^=YRU{;9NWr4Y)e^^T>fqN8556eraWC;O)#M$H^cd$h-uubCElow#xXO@O+~HnKyhAgiqk20e(X3y+EsfB;@Bwa^SH{6q zi_jjTAbI!Vz!a=yhE>8_!+GDwd3f#{&yAGj%tD^5YO}b0ue2TMLBFoGhE~c_@>jUW zixdWD2p9xQJ;!cl{dv61T?%f_MG0W7-YdO14-+?yO|BU9{$T}n=-ZS}Z@>e{A#De3 z9nK(QBY~6`5UG2Bfu?3-4FqlO;~ovYQA*Tf6Fjx{eao2t(|WliaW(s$2%*EPpP05A z^F;an2f5hQSyZ#*(BVu@~6$zI8u-=jh>Wg_J zzZcR@nnuAm5P`5hNPYB2K zdx3%Vhr`)sJ7hY-@-r0mfBYYF*f(9!Mc|?F?kde6=W>8pj&-U~aFl2k}*KoH`C zn{2R>45t#&2xC|Vv&2B_4s zF$EQiG?rUivoY5p_No)R0{MF2Cpv#ngT;N*!c!2Cd$r>nIx$mHF3LX<8W11l!vA+imHE2RN;Ib zT&)&@nsR=(<_!gcqxImMm`TJbBwy1|bxO>Q)fnU-6F*=Gu<3Q@d6~8s8IJb0j6eWo zRol&GYb`pksfXvKmL9b~(7ffYquw%>N#lio7uHOen*iRXsw!RKNN~lM86`N6p~HeF*{=nK4g{pl zEwWOpo9`wE*kEeAiP$W}V8PTpj7?2DOeSFAn|-}4^_Ir^=l*H<);;Or$KO7B z(z7pOsl>wiPt8n$Om{}w1gtiwK=EJ2r*|472bPUgAi2?g`zT-Ie2?S(-lM09-V6>1 z8H5rxofPth^&$=}Q%W4Eyehj9OSL9oS*v*r6mTO6QTk12Ky{MCfxAmVWZzBO{vxs$ zFt$1>rJ}}RVvvp7R_mynQ9*lQOlT<*lN#~!airSQHX2AcX1y$Ah=D-^6*;MNrp#qy z8~4K5#-aWbU+W2t5K{j3urBW>(ilwkkG?Rgetn*Yac45;xQHB%ggj-;CwGY;i`FsG zl6dg8JI=ZTinFm4NFpFL81;t{4tY{apft3&iIvEc>L1)M++m0nwDSeImI1h)aMNq> z#{bp=5NyJCiqo4@4rSesl8r(QRlILIa@4A~8NvRFi5E-(0A_NA8j=@n@|SO>K7<-n zxeaFz_KIV-24DHlL=9YwY_f5P-;4KJ#6#IRd(*#S!r54nB1C>KrfqzNx9lDY6HJ#M z#MAAo3n^nY2EkBh?_Sf^bZ_@TWh{4FPg4*mg^3!YP1Laz$gfdL(z$&0-*cdkH)ItY;;n8UYr_HQgK0%Xh^WuQuo7T)YIo$Cv&?70DoS}ZAB+68g-5|c?5(AevzeznY|YS z^`)5C*Op+0V055)gO2+dd~2=kw&(M5Ux3bHmT}~PvGcyH zu@xoHJn(>#PjpCbn)R>5#zwF2d5jG-b@UmcAy;NN2Ank%AQetMC!zGEXw=$TqYH6h zBI85H=~||a-$~r!)V054C{6bE>S3}$LJl|N74l9fy!bwmnXg04sCVk;li}?TIbw=0 zG!2Eo7P0)@5Y6}V56-8DAM)g)pM)DsPY?rtY)|ev>%zD~;9Uj@90Fn-9%Jk<+8x|x z7@fyMDi^(wo2Y5qXbfW#@L%d+p8u5}D!#cAHcOl7U`rWO@SypZgTqw%C~*S-CAo2< z?Kg{joY%rCZK=q>guc2%3@)FOJhIssL6iP#G(r%}&!~t4P_Ue_J3*bsrHhY=)@nlP}oF%C!#rIc9$q$%e*+y<8? zwY#YvpZ>MB;>^OqHkgt727SbhE$^Wnm?FBtq&?o>Gj~8oZnXAVhLkdyCR$aZh4O=8c7SLkwZI~m( z1k83Sq(xi2&>L<9D-Rlpv0pZdV?1ZE*SL+sjMeq}*mZSy%CJ|MqSrfC-4%iO@$UHw zK@S2TfnkwLuUz#?5JC;~3M237qgVdCqa5cAqlw>WCFWrtm3wt|2IYEv?G?S*5KY8D z+a8VH4(=sI;mz+L%dVQ-41bo^LTv`G$j0m*;0KMZU^yGJM>Jdg}nz#QLs{)!k}F#WIL`LwD7G7QW{3PBh#JH_E!+scp_uN*x?R zVved?BOvd#kdDyAjB==@ZdP#vMwV!|^_6>(VF)3&Bil^`jX*bS>hlHTqwxr7)Wr8l z0mySs%RRdN2b!h!K`?*-q}bks@}_yqxbuYGjMXh{tkiE1wlzAv3Fx!;Yf|0if9r6O z9(WYT=~11pTNpu+u&qxZc(n^6<+xfNl&wDynIjX@%&l;!ZLhaTH*x)uo6NFLfGb2k zy?I?BI`$oS#>+_g<_r`Gruo@sZF|CLewJUY1kyDV-QuIs6JxPhVay6uo^=G_WL?ZU zY5EZ3wwP4v85cFuVtRa^ZO@gOa$o1@e#zsg+6djQF*79@skX@MT?MMo-xGqAj??{# zJHXaxDeb>o@pk_7)hMdlK%UIZ)KZUGm0D@{gGoUuxU44S`C3!|Ze;UL0l zJhnX2Wdf|nTt^$Ua0mzzD8Geb1G$$Szt14T2lO%TQJ|Y1@BR&aY64^rm=pJ+WQbsq zkfx0QDDM>z1zKgK89M6~i9ZFld6k(wemj#3MzXqA{{A{l*8>Yr;4S7Xx4}{|`>xR{I1K0GnJED{a6-rJw{zDMm zzy7+46x^KuI6Qe0z$lK2W9c2t1#BSctqc87~{lbgQ;54WfwW$>%1A|A(BDO>EWt- zsn`nMwyQdsP1z7}&_OvYe}D3M4gvo`5_cu7{602Ge6*Zv`xJ|*d1%@65VK-(!L`6R zYq}Qo<+crr@H%;L5+7U`xN>BNsgCgEk%6BX4$x_Zm18c7Ne#F|umvuPKw1-3oTBd> z!56d+%BzW#UNAyJ_GI-bHd2gNYOJi_vG$atf3flWOQ@MAal6Q`I|hBAlMdS~7@GP1 zYTq+Ie9Eri>P)9bn2fssCU7NkX~D1^U3?*4L0629U2gCF%Dy63ExqjHesYW*9kc52 zO{)LuSbleaLTuRicXe*9CWViLx+iI;-V}T0pQ`C#{r-gNy(JdN5y%*o&UZ$SS^YG0 z{`+A*N5H>Rd{X5~1giSF;i=aT1ozEo06uQL3CZR=AU+ zK!gC(ef5LEaPhaqvtpkVn~-O0cLnBWc-QCF+|io;Kh2o%TQ7|5TazK<;wqYs1V*1l zqu?d$MvMm|6pZ9E zj#4$E4(r0dnO}%`KFfbf)HM5MaD^Fc7nof==xz0~D2EX#Ssi$)wG!vr$y@la>I(j} zFro3|L{^OVMdBaBmj)^;Q=S;g@jjIw8cM+JXU|TAty*fixz)9nw{y?UGp+IBh7c$f zJqa#7BDD74E3>y=0IlFxe%uQwWd`G?-z4&~DGPkr>-qLx(P;Hhp&r^RyzHR;kztNX zzVlpML^LCXv^BzlVv&&DP55!+_U7r`zS5wnrTnc!hVA+!D{$YF-;mQ|aQB14H%L!b z*7oU7U75)v%xe?(VkxN7)zhh+hD~IL*JdnKm~(=zxFK;2!HEE!%w{&M&QOR|F{GwjQJF$u19F`j>agh_0wyVweU9=dJjUH%BY;RsMJ+KkN_Eh{(KY#ulrYi>#LH2}JfCa|wP~r+Ll{z&=Hng*T`SiW3 zJFuGg$w={j0MD%{Gku1XxSA^hOxa1%IhR)`F=sbok516GlhJ5ajR>MF)L7v!QEh6@ zu(DI+_&83!4)UFYe_((A9sN|n=I#a7MP*iJ^smZdm(*(gVFr>tazkq!p`;ufm_J&6 zP?oXxRI@@scwjs)>6?{npK}H0d@^!6SbwQT?~`mdF0SUT=~W33wq6 zj-B3O!H`jY;j22t{SaxL^V6jnKgsLiQR}MXzHW1r zR}dW-qwNvXj>lV#8OF_+?DW$M$?{Zrk25?$9F@d{CzjUD9a5sdyA$TX>tAnK9wAdQ z>7sj3066?QFWbax8M%e{V!>EbYir{y3*;mJEjuKdF%b<7REuZ|u`U!irk*qWb%>q< zXJEUX%qa$J9F0yXn1Ig3Xn#GGgbZ%%SV)V@ea$w?9ZAl#J4x;%5m~5&I0&wEU7W5R zn!PmkF9d^$n9U=0xguW+P{#f1Ez;Ic;CfR?CujGmpZSDYnaQ*^OD}SR z!lH#w&a%m5NM=i(CKbIss?x}~FNtSD!UQuG?uQe;&8Z1NdDQqK`2ay6SHv&xeBGWI z+U+PwFZ}GWpERFWKENw^j2wjB^^7W}vIHu{#^qJdoFpg>tSFkkVBI&>%3$2*addS0 zo$iI8y2MRPR)y$EF&x`V!&6V7C8x^Xc}-5q_k_Ag5p19Y)KB#0p^rK6{Uq>WGL(M~ zk4^}tO@cckZ66Rqb^-WKZ^>em+5`VOvS*(8Z1`NTz z7}ySIoAJ8Zj3w%vFDIkXXFec04cvNO3qvp9WOP(n=TqeZ4w;ya4MLs(7FB((n~?+hZW9WvA;s`Hjg$)l+Mv zIW$6wG(!*|yRPg6tmCpIz$nQcs9-%VQA`OpaCc57AoOX$2w@}d)(BCCnp2z|(=xp) z1H?{qx(Bn{Ou?i;%lMpw$%KU8nS6E^pH6MUfM;%XKu5l{4JVi8UOLuv1Ng^6Y@?QP z>Som|r1U~AmmqeoYieo(W+w$}j&RW;J7wvE*g(0UL~_*y&^*~*HmUKpYT(mSY>+oF zfi{Mm48&&NE<#?Tup=<9B*;4jLnLTcNu5=HgIk(`|fS@H$JO@?Z`SJc2KBon~J zLFNy=^>SOkEsO}$>WZ4S$9N`TBAGOtGK*Vh`=T*hsL zNBxG@A3I*)9utCF0>>i?<~%cWROlP=N;dU<+?hVvZsY6inmO$8~_r|S!eOB(U`-m2Lc)MmR^%Eg1otRqi^MnO_+(@ z=bkBY=61h{3i)? z#+^=qpyMhm_IluCPgZkbqkyJ=6Ie?>G9x`3XKzR+Qoe>1*YM!v-R^EjqaNFYjvV5Z zVszcev!;`8$kgcf%KtjgP>3;-KrnPh%s#$g73M1S<$&kJNLQKF3v-c9Q)maiS$TYm z2ELOwU*q9$JxCbE8T_v1)^^6RxT1)py|Glr&UVz1-VPk zS6JOk8MC_ApS2XM>*UgGQk@5udHe|ERw>=T0UAuOHD0otu09aCd&wo*tmjrj_ z%3}Yjd2K_y>T%-+mg&A35a-E3&5SZpa<{|jRdTLZ2@)xr@Wq%&gK0Qg0!vm7QV4fW zH!v$Zw+hCFMyn5v%xw4Y#f(Jx*r)smFMZ$eU4O!Zmh3G4Bu#)iCx!qwt1{k4qaUS(}cHwCX??~R(_p7C}2_B8NOktao0n|s6!dE_wK`V|JNaZ zy_W^6wpD#?FHA9p^}7Z}-0ub4?&DdxVm%>ZSL)cUf@-9%bK&-Ch~p#JV+|%JvFa~) zxVrJ}!A6nzX0pfA&=CK&g6}OD7rZn2UlK2h&L^N{cucBApaE-3OtxPU zw+5EdnYHG{j$Ayoohrm>UTgbqV>EOkXeO+MWs{yY9v6n#@p9$9?2RrL*g3SuaO|+m zmuM+c05_1s_bnWzEi=DNFb|>7WT08W9-$>|=Bt)el-tgn)8A&jg<^87xi9uZh#9@ zpBRc2m%@EPVXsifNVE(lgCFR4BqM6n`u%oYN-I1Q0=mCnw71^_Hr#C9kwwMIcf{dI z5=tg{DlRKYAa}79%%+8quVEHA%Yq%t!;Y}AetLfU!j`f1iGNr*YI)~ryVB9icOEm# z4Z+ZU6aIXp-S^Y`^P}tUeIO2RXiRT+fx8IA&qI#Id@^oWVA$_n?O2iJGy@HUl0=r>Z&W5>MIJ_+Ov0<6SJn?5T5os(kByl6K^h%aj~TSrKskP@T27?XYHrI>>6f> zIEm>vLF^IzJwvz^C0{LgHp7pV?H0FaoS+qD+?T@r`UiszDvrDX}VIx7cwzoPD-rK%}kSo||l?l#>aY5Ct8WL401 zp`aYvNvrElbZWZRA(xOEM%16Ocp&oxDp|SVXG+n^Kci#4U9RCnQm#R7q^uu(60=6! zcbA-|m8~`-+Z}Jb+Ha2+G5%pIn}Z?~o`#frG?w;pRM+&5C%AZsti{dpBJt+62~{ff z@edOY#)G0AyOhuli+Fw{xzcF~TW`uWfN3q2zi12ZBAq)x6vt-Um~4uIY$__+(@%)$ zre&^WVQkW@=5HvPdm}BVhQR*(ch-ER?X*DGh@Mv};Q6vr1kvfYW4#tLkN>H#1cM7y zlYqk*5l&ZW%}VYn-WOy(9Ou1x{G^s-Hsu{QyJ~93nfHsb1MaO}3AcNL1Bs(ZrcmhK z%Fhl5ItH*dH|yTq_E0ep7-)P}^g6LY4RCr8EP5iEHP1=z|1*!I_4TXCk^SK80E&N$ zsQCqgnA`=tC?!)|?&AjlAMAr#H$7n{vjQZp;6#L!EEAdx%QyoTXdW9lm;T#mxq(k+MT>&m zpe^q15~s)8RQgqC)3EJz)~fGg;_^Rl_F}RPY#Xe_FT}C6jXz70Rf}tYfW@R8x;7lr zNz42{%Z9Ha1f|SB$ardZszfPO)~$>+h^FMW*;*D0#mQog)!h5pka z26g1v>PNZBiZan378z|V$}XqrY`U6!|DP4Zih&LvH(yl5*bOEcaTm3ci?&xN&BFQxs@CdY)d>OozyC=OHT1)MbBP`Te@z zqRP*8$Vj5z&nd9b7eSV87q`>8D$NsoHZ7JwFZ12PxGOhT#x~sX+@raYA3Qg$Vqeob z-cYjBJn)r;&oJ8CSL|7ftUrsNHd2NFfGSeG9*RN(DLuRJleXk%HsAO8rE?v)ytdU!svm*4pu3(%XYcvH zv9>`e8?YEZe66`ZcQa9-RV!^8mkXbvs=aIUl&VGG3v>YpcQ zzr$-#2Z_I*44M(;0ihK;#}zif{wwUwK@!atvw(jGD2BoQ>BF4ojrb;4IYQ-=VydXfEwr?8aN(&^W}!tgivtVr)hs#;aho3Qvth5e>BZWpHszq+I1P{U4ClRa@r&-Z?&1-4WJsb`wpPKXB|iZvk&;0-LQ(S51Tr!+rr; zmo!6-ZlB>HKN@7E!Yg5p!j2K6#gxL;buyWLH7ELEm1EF~~!D@ zSUoW`zIXz;Rm%uIQv~Xz;n)ciov*TVTFCMO`_tH|smZ|t@)UK0rMaz}@h{#^ATX(u zh9j_keS?~}0~#kwK`)WNetuMrxES9^6bw2C6}LS<#&31u)btVbgFQX~)!Mn}OXbiE zu+!`NU3|(?o1Mg3(-dI=fmtk>cK!obZt$GOS}gvAn-Y-!)&gWNM}@#Ai`oFy#435c zD%07x{biyE^ z;&O)D{&Gwonb~4+gX`Bfy^X-xbxrqX5s~CtN)SShL?wJFY^mf1?%6D?eA(KT+JU*{ zL#4A_va%G7A5-o&b?t6n;o$>`BWX96!M?fbrb8-qk#abN4@wd?**kCW4cfWuTIVZy zTbKV!EdG(+c)&J09mpHsRZ2R3*_4M6LczY>b-Tz`eXeBAbg{s1XzWhWZI2=S`9jaG z-R}B&$=>>@L625ye;K0Z_p*iiX-O6m=VZ*%S&l0SPFctifU|<5$|t+ul3$wnB?Dr|et7;NjNbbMo~ng#xyQ9S+_W z)>}{T>e97@t45axq-@H{@s1N)R!$ap{qvyv1ilHJPox3%f8!mN!ycD zL{P=<*;w0-G4))SiVu~L3zvp_xR;<>>;UgS%Z;pTDkJo1f7$v%bYlN-<><|2$4xB* zZ`Vd?$Z9GtFPvD-!j-pkJG%|0P^E%Uch_;LkDx) zdyi#9{SEB0nkw;Z%x|COX`)%8WP-0Kz;E5Y{pKI#zG}VqN#0o_2&IbcRpd$7ir-Oy zmzuA?U-f7TPygmFT11*1U#QpHcx-;19VmhK{rBzjE+eaB7prVY0M@PAj)b5e9Q*}f zY1p{mZJFV9`@~lsF_@D|zl&TdpZ8r_0?y`{iKp&TA7Al;OEC1C=3vjE07Sl zQz832`bBj4wscj^P_9Kp1t2EQ60EK+x24nIivnK+y>-Pfb zz&-=Xx2dZ_Pdkem_KH@*4GUm`LU|m4H{L&t$4B4^ps6Ce2yLVupP!~>k>TM#rC;qw za^xa5wLL~_u1#FuWb9ZTyBy)O!;B99u9twiN|(?JzF!9TPj2$~jwu_tFO4&!qP`58 z%Pq)YEn<~o=!Nm|>Y+>RB!Qn&uOr-;a;rQGcZofUgg+84{+r0r1d8W3r%uTf(tOz> z2z>MtNWo|<9%qg{ew$LSDbLZ>9Cdqo?)P?#-#yFf?|84osXF=H;Z})@ZG0&Ipq;(e@w`8f^ zQX2Yj&h#S_vC>1blJz2iVjN8zr$- zJyP#lU;WeUx&PxGaofRH;_?>(_Zwmo)sz#6NB0pEi#W-5UvdQzsV)=8cs^k$Kp0+a zTxqF~JCz@2>+#g;V&KgFMp?$uVZ_B2LRWw&jHM9M@Pm+;PO`ApC6CEC^ns^EtT+> zd&=o?W4k4cOrsprNS+yT82>m0JcfC6=GGgZC<>$u-{R8{v0>s9Oj^wIc8=3tq zvGW=vHfPHx7m(om3GUl;N<0#!FElgWmn2?X$>CBzA?P=Ej7Nr4sCv1Qnx{}&mv?Fz zGsU*X3hN)*%qW=^!nY1ye0a)u{k`+%`Ek$faS4d~(m8p3daB~r@}s(P3;8OqCNDX% z*^DOBv682ZL64C41{1ktL{C|Jr!st>BaV>-Kp!RQxYJ?{Rl`H*eZdSD5Qql ziBEK_FchEYN#ldS>O})xD<4P=hRY^de>|ecu@ba3ctR-UOob4+;gPU?-t1vv=6D`n zR<_sO;JnS1grP(Dll+d3$OnP;+QU}A!!p@VVCe&audwx7#>#Knungb7QAIY8AbpOO z@DN3sjWB3$7U)M~|6BL+ZvfLHOTx<_BZ0_ZlXoRT3@MnL^(&Q4dL7nit(*6>BQ>fZbK8nOwYT2bn;7mZ<|S?( z1T9@&o5!x@`h~5$(X~aAQpw2T6FT&<9H`lLTf1IOAzSU2oci%J~UIuip3zX01zO@C8vzOxX(1k@&mQ**6NE z3>BRDqf>(tOEzyS13BkqC8xzrUhWxdkCsAn@|iO;b^I9W1$G1~;N!m)kc%UCPkHU* zx*JqGuexs3OKp%1wTa6$s(^{x%}zZ1h{0McXlaa_)=x9RF+`X?oyw_a88UpGNvgfPyv z?MRnApRr1PXG?y0kYFp#hy9UjpNvtLr#WgsNGQC2G^(L*@}~0Pr@*FwEJ^Z`=F4|0 zohUKF19yYDn*Lm@HdP;lo{xQ}7qz-`o|jb2+er{od`dg~K27<(U1+emGKaw|BP0&| zWgOjdttfvQm53hJ89nZfNK6v$I#>;0kDE5RyI~kGc-$a%j(IE|I&|id96!T!ra6K# zT3U&CgHl~kyn9cwa(G@N1$S;A(K~AtM2$?(~IYcF!FnRRBz9*9 z@J9|+0(%-Jltt&fb(LOId|6D$4cfIRF(kGzGT}*ge3}EV_QdlU9^Ci&qA!G>g;;bt z(&e|_RfxU`5sY8rcf5A}s2a>QKU3N^BHE48hC8lbZsmOZo}QhJRR+39-nd-k%ITq| zbf43h$-Bs*((H(#WF-+o`Vg7-ahJFI3v{!Dsgg{OOdmF;&ZM3;>{Up)0$_q^ZZH0uY_3V znx$!y>OZVK*R>cSdWFhtH@$nG!fYSjwAQvhjQ+@o(NsZERe+>fx)nJ0B>ds`fVUb! ztN+-YmGs;?uvuPe87x$yQJMY6yL_Ye`3G)mUf&$tYW3Mq9M`=vawZRn@XQ#gLoe{h z=F^p%euj9EGBbyV%h)|xzNkh3L7Ue#rk<-=&IdLn-(^yp9@B$Rtxu>B(Bh+_CIY8UVhV)U<^MOiT?TO2OiOLZh;f>j4duWV3ua(u* zxL7E5T7+eYc^Kq=>v_ePR{kAi9?K2p48gTpetT}ea?_DPNZdDhP`6={;z8E6`LKYa zcvdFTUy?}J>KQC=l_-gaRVE_k0z+m>X>A;Y)i!^2F{7XmiHN-#KkEF#nZog6{O zoaAkMbO#eL_q6h^WFgUJxfLN0?9~~Tq_&m>dB@u$*Zjt~=Dbv``U&sAmLqdC`S$a} zRIZF*h5?4so}|^{XMHG(DL+kFqdzgD#eYI37X>;e^3!`bX{`kcij{4;sVq+tmrtHx z4x)E*V9&2=PcCLFK8lb`%(-mkii2t2iK2mG!sHFQzTsgdfgUNk$T-0fT+LrRQ$wY1 zbVtj+91)~^oh)hOOuPGXvavVYW|gNH4vV0JCFgxpM*}|7^+;9&fkI?bBB;inS2sL} z1XXunAHTRgf%DEG4_|gZG@m8Iwrm6qx^80 z@xTMJH;W0JVY#aIn1i-5@}jA+o)6 z*8b{sS;}Jq;sGjYp+iOuOM5&e>;6q7oA)koAQRG6n;Y%@E>fnR3tR7iqqel9a(B?Q zSl{WLI$X)(7$vXV^u~>LlP#~k4wEqFF4UGg8RJnn2Ue2Lg{eo?DnYi$ePf>M{S}LK zEsr0iUrf~%G4Jz2{+xFiv=2fGA?MWeMaS}nRquAGdoHz~Ty*<+j>Z)jyuYtq_=q`U zT}oVLBB;}rxZrV>ZN?wc)GG?fO73|?==vgf@zHEq_l0X9Wz~ZFnN82*n8~B|$mdZI z8AL;g>TzcJ)DUIvQMN2=$?cyo$`@6~zsOVh(ME4{Sslf9H-1%ukY{ zaKf`g#}fkyadHdLcO1OIBRbjxWTAmhd5Nu+l^?f4`16M(6UJI$OUwdoCp=AYf%{Xb ztW28x*Dw$2>v;=chy%|ihk5qfi=;lS-8agsWd%cXer+XIkIUX(6?oK``y~CIe}Xtk z`-)FI13mM99~=iy3}u`?%bRVX!IOtb*?ks6Wb%8TRQY-D!pSsK#ishW>uz&fhIqqD zTRrA?#pW#z$OnI6wzomqXd}RP43hP^aq>8c|7fAs;@17^H|WF{zczsjon^Ly#%hGr zXlyNSIXYn+v(t6y(OH3q@5CMXJfqs2=zb)BY7fkW@!U@8hmqKx1s zgk~*%>~#LIL#85ygwRK$JBkzB**0K)knZ4= zFY|mW>a$1>2xKZ@H=d&O_A4T+cAYivwee;{PD$>P?3~@Fvd8W*s)*34<*|n9ZKg*{ z@OE#TB!lmt4mkKM3pi(@1V$UNM|2r9OPx1S$%&BuAeHnL|6%8Ac#EORiy4)X5tr1f zTM$8pzVwWchg1EXS-`&WZFTKo0*&r_enSv4Xvstk4wRqQoyG2E|K}5$;k<&A!JL@DRg}e z!*k)$=4`LHV!GL-cIlEz2rn#mot-r&x^=$oqx(s9cY;ISF1V_m0s=jI+)VT-Gh+>d z4}%#5L(6F-5!BowzWozRq<1+h?*Z2C#U2JU?tuL9?z{%ed-#OS#lXBcR9<~VOgYI* zBWPRpSE>2jG2O>|(~GRexTB^iypz~(ZgaOgJi|MvoJlDLmcR_Yg}eP7M8CXtAg4C| z{qgaApMBYjnl0DUB;2qOEXZ-kIjsV95-H-q`e9q+>Wjzq40oz&BcoIA-idc2)?E=* zL|g4y_|`q%9N6AKxlFgM@+32T#xUA#?%|4@@aiYRd{UToMn3FO*kGUYd-oJ&r~P+Z zxPc`0p2Vpezc$~k&(?U?&G%Z2Zf;v>b3Qe_KR}}7gN?GBK%n``-FrC$qHFIsL0iC) zcdsiYh#QbM*mfKa_L-S_V*8sKtLDdSs`8HVbqjClT6G*Jc08*t*4`YfN@UK){EGkZ zu{Qy{wZ*aUOeZbjl~RXj)VB|-zAzNE?s@n&JUMK=1xh<|e&yOgIc~1}*>#J!J1E1N zG@8A^l%q|5QO~Bd_2DkQ^gJ9yH*OholoU@K*%uti!-?FPBIzwl$71ElrQ}xV$v00# zu5qrQ#0umovwF7Cjj8Hz0iUq+Hk^z>NCFW9UvOj@eW5HrYjN7LbGb zH0)((zo8b9EMrpJSmqjE<5RtETNgzy<@^4H;*0YyaNwJ<9QS%1b3`Hf+pg7@`3+i_ zQj#o0hzc5&NNs`6M8k6;rdWEU3Mx}nM0Ql;!JrRwHl9fPe*>6*fmJxYi{>l3jpyTs zC6(k*C~Z!o;ppJhs}lRwtHU3-<*{q5(Dd6NrUr1#Os7sG3U!e7Dl^i!#%WTUu~2x% z6d7G7TK&YeqBA`zJsQ}%QWq9UiJMt3mi0Y8dY5tRAuZV=6?toFje3Sk$c4n>KHnmh z8ttI0OOftwm%#fs{=IUYLx1Q)4rfR?AJ0@HmM)m}G-_7AS@U?mMv@rAT<~S{8~A9I zY>8F!b`Ceibc{cIAQiGr4Q^D65##kS2nA7EGBNVCOic%iepe<{J8zj39vtKQo{r37 zeX>pxre)4_t}>s;-skwy>+F*!WAuXXj-l1I0Lwu~dy^X%jV8nBnj|4U^}*Yq1q&CI zB)kP(z57nS3CzM<%qTFozH&HQ)!FXh_>7(o;pzUs6B7xZ%d9|@!+jmY75+On{<1fV zaFyiGV};8v!ozR;z6Tl|@R8jHlL=%07(LNe^lQf5(Q?ik5q$pq=wQQ)Lw;EmQjOr2<9%CFE#zNlGUP(TIvWSB)%hD5ep#5B;MhcO6)HA%GEcnPe z^n;&RvjIclRjWP-Nf#?S>VEyWo zkADoAzfVTZpp;do5O+PyX&QZU5v?!eoBN&{CRVqwX}@0YuN*s7mz1|5&9&0W$D(3N zkw4}~0*kTVfBfmUVw=nRp9SE&8w4rpN0@e&cktF|Q5JHtOI?H@BOzNt6cecdG#p>s_a>7EP*`+7^%P%CY~v zC80fM0s-5d+UP73LYpD#Ii1{x>Ad4{9{wcE3H>31eQAURZ|y)mqpy!=q}?0>L@kUN zy#5PlZByyvo`O#g-(Weux7dHw^LU{>I8_tG!Hgc~T!~iKb0evXjd8uVP)!0ib(VBN-||ZMEhY4K6%X?kIHONR-SH9zAxQ&r6aCSueTP-!T+7Z zC2{>Kx5uA6_k5VL?~DKrTJpD&qAZh3=Q~_#T8_dbKc@513A5MoP3tP1!5Hp7%rHFO)*)nx^V&54p zjw2;w6QYq9u+ZdM#I&yZXm+`SK<811U)_|xrdp+Ox=(N6=3tsTLYg`$Y3Pzi!aAjs znHp|(SVbh0AjwXc%b-1Atm0lemaWwomQ3`QGLw@%R}z3yNl~cYczUiVfPU@l!;D zHCyg)@Ilaz`{S#(#Wo7C{TG|nPq54f7Hl!*pj<1D%3FCknUa%quJiE0@#|@n?tqz5 z5fyiHOC9)zg+C6HIYsQ1_nR&Fmvf@{&VpXp`XkvU9#oJ}8?4pQ z1bdBHyL&8v^20bRsuV1l505Bu+r=oB81?1zNu$aSihz@AMtkAmBk^K2nhgUJqP#fQ z96L0~Scq&l$htcIp@Hs3>pDCzGyd9UZZ5`mum9rCYoe)DS5#OG?o{?TC$UGulJjiF ze)#+c>20rED;C-tM=gD}WvHv@{7?I5uBTaVLdN0y<=ye5S1iYhr)cA_q^6?e5+d&U z9Zu670TlXVTQ}LCH$LO9*$NI!VS6|@mrt@(SeFVJl^2y1&!n@rH#o_!ZC}BR*p?7e zFJGeL{t|~&1y}AQs9T|-T!GA@la!r8kgS)r65zag=Tn0X1v7op>1WC8Hu2DDWJNOs zAqqyiJC4Mg>ZVt$8TH3lPhvB`L)_3;X{Ccpc5kZt3Ad{mtv|c$h1}Tp%672|p4@v{ zMgLebQjv-QYgz}g9|=i+X&_d{TcG*$k&YQ=toMB)pjRslEKf;3-MT}$>otDDSR}Qt z(e)~|T@5Ib+0p>-!^`2D+z69TH{2CesHuEwITABTQ%$hP$(ylu2`8M|0LL}XGVdt( zT;%i32e#;4_x|KkW`c-OPeU%yWs(^XU$`k#jbW;ES~)bOZw}Ep=53fc z;sBreCqyJw-Dqz!{A{8Qyw%Vz47>4T{CUJ0jb`iR9%@DRn(O&?gWE)X(9!Uh9EtJ` zg1r8yFVy}jDtC_I8!~YkgWO+7+1E1Hss~A3<7U+dmPp)$61_MFSG1yJHU&p6n}Ab} z*JsF;)tSkc?|bXZ`h3tsGR^yxG)EFs(?2&V2&~4K?*>6D9uw~*y5~axSly3r+wf@c zD8D3{gYtyycWl$;su{gUpuEl>lpF}zQn_?+=)VnE_gsf-PisITtz)&#yIAtpv8Eqh zik`L=h!)^I=R9~clDZ`DlwJM+j(WF(<#7c-vJhXttpoBx+a^o_vq18 z^aD%;sjnUZM9gnsEL)$Kzhqevx91a8Prs9Y9vK{%h)8J%7$^s2Z-cIXejki$-!jDC z#S8yJe~x73j<*j%aKnmG?HgieV8{b1kZIGIO%L1WD-pRojtMZ4!KbKuLX5Jpsq3a* zdpvXag=$|~%82z=qGAuP0afLze2-Ho><~UvpV6Zet@HF;#+}VcZ30WkL8^J_NkqNF zN{wN|$c!n9gmS~f$NB$4GUn!t+zr)4{lwT^1CfPdROG1RN69@HsV_Ph1Fu{|0<-2f zu3v7HL>+pAN6|pb+A^xt;@Dla~l2ccNA(ZF25a-P&N z72a>Q(P*e6mH77EwxSLn$B3(`OIUwVeVjWpx!p-Zf z%K%x-F=$S%hj`w(+9qLqoO4(-M0&K7CT-Pef_uFhli}wI7iqk+t^>?LsUR@~tQ6(uwQ`gm@X(ia_hj>d=j+M+{v)Sp!x&r=JHdm>9pz3x8cE0o6+Dx_U) z=`Y1j({fC4;75o$lu8#82+nB%sXS@ZHYTGZYjSgR-09q>UsH286}v(8msyn@H`B() zCYMToSWM*(7mrUxni!qLOEc<-M17&*Av{^{dg*rw$swonD>s`Gclv6MTz@&qIjiz2 z(QxRSqZGM5e%31*Hl|mz>EX9*l8NUn*=`Ix{5D7b*wE(_Z%L)j>vHdSK2~WTZ~pqeztg5$P1N41?7*|I zd?YmP0ot1}n@@}i_S!wFcgj5qjJrPK`J&sy51F%rT4^82z-DB4bYbe zKEbSota18QPtSurh&rep%_lRwXNo7Iy)(-Jt#DwHhj3Wgb^l^|2DTm(0Z{hTHzVC^ z1qKI!d19_7>&Y(Q99Orqw8j(oM9N#6j7JV3Wa7}57F&i5e^t_Gc4=XL#^i>Tn z9ugfhHV5Ckh4^rL;ih{ZL+G%-@4eRsy^NVew64qXHXIttC{N?z`M*3M@Ydau=m<2D zBF}_I0MDsBZKa2=qY12%pBI>t2IdlZFP4m!+`7!Ef;I6D$KJ3$a-tdNlr*n0YSI#T zbk!U*P@Gu!LwaLhNX|3nj`G zXE%NG(|ehows9D@#lq!gOS2!=q@#`X{5Ojc!$b$VQ_sebMrS?yul^bO)>Ym7u6NK7Rq-mNqXDfLjkOlo(tE-Fh)uR{0`R+5`<_68e zM4;zVvH>ga%y70Fx@n;((@QCx(UGlPR@jyf%uUKR!#M``&pN9fH;D6%=&)?^byFY+Gw8 zm3wQoC;U@!Fs*^u?0oy6@#TZ@cHp;nQCuGSKcBrgnWtKz(=J$#lfT24eu$ddyIBh~ zjW(81pth(?e45m9|$sgFl*)fb134O^la8+Sb4YVE7n&fa7M zYKsSSq4`MV7c;U<&Ul?-bxnZPxLVac0vy*Ikj z-OJ^MBij`N<7)J&>qD??eYF#HRQGbErchLyDuciyzn(r}&`WA6vb7*@S<5DZj=RLg z>W|iAloBaNFPx8N{o!*Fogu6TW7KtTr#5fhs*=7pA=p0hAdfC_Lclsf2Q9k_1TD`! zIyQVcS+8MXURV-8t3BfSSlm`4M26R#nuZ@1`>-r!b$o;UnHo-TnF*(kKRryF@X>v5 z59OA_8{6iMsimJa)^+(e9M~5LHt$S`eH(wfNl$+}Hd%oRHxjirS$3Gj2bRLqM`n~YZ;4J4QGFK3Syd{6rS3utOoSxG8L$VC5`=<77 z-7~@x2X*g#DoJO}aP879&vCR!D~%EI`3Icj_it`^`QOOS`h6c@uiT0B-Zb!6<$$3l zez`NJ-8fDK`3r|{Y2K_)YofH8(6`sRcnNQ0H*iFkR&D=kq8fF>VbtosQ~7Mw9#&3R z_Ivm5q&uKeC#seE^|&&RnLPFGeZ{v^mv}BXkaua(G#x)DoRPN9hyL-*?ToaU^nXxk7$+9E$zD1l5NlRUl#%`~Hk3SH`NA`V&y~ z>rGO^mbZ=)Z%zu+ptIrG(<{vePXDF@QV>@&8;ZL4 zh-iJL=+^Gy>Hh8_2>)ljS1RMf7nF&zz2M4Nim7Gsjg=&cnWt2h^gt$UMpicmmRovb z)|ZAhL!||Q(=GSlB@%T-IaEj^*v(%Lu$*lfMI*+;sV6)ibBFG@a}t4ma91l5K3i4o zjUr6c;nKP*-Cb&hLl>w)H#4ezH!#}pva^@X<7wDbrp2jx*zIuZfge74^&?CyH&a|$ z12LMuu`%bD;{(L)fseSkZ#}NM>?4{@L64a|K7=o5w(sfk9nfrqZKA*6W7Bl99+EsV zIdQkTo|;+}I*$(Gnnfj5IfYmPUAl8f#YrqntcDSm)A4lc;%kZoFy*L`;ESb=1n_Hn zeRB7u_;lxU-#3vu(E?zngO#t%%n#c+XlIV2tHz@BAwIc#uI8GX#_3I9U80cY!F8~S z`oI^nhK0}0c=Rqj|5(n@z4~#8r&o;8n@6_MS(!y%$(BxDG+y`SZxYM+QGQBQ z9JfVsVsV(*>O}SF-|~1pejx0HWs_DF*Ws^$W7PK`8k{w&eMpn3L7CNx8giU^2Oddn z8Hn}>pe50bD!)$u^0kaA9zmU%q?gm%4O@Ce+HxJGZE4b3|J#uj9&`eA_E4C5@$IBH0@A*A9QL7!yFW4%WFe01kSQo?<{$Tyv{dsoivRX7lG0oU4lo}aYdM0E50G;xU-cw5cv>`cCo z@F$^i0!EVjQJY+i9i{+~+oJ06k{5r+1K?dZ)wm)5SzL9s|& zp#q?^Gh$NXKgKM^7d<=bE_bofr%M^?hPJ&4;B_3=0JRJmVigrHWm72Z`nf!XQ%WQtS``c4Fx77R#sN!A31zN9L&)B z>{!O7KIkfcR_fl(4ou8xJnzt$s7v{9!?Kg!i|E?^9gqf*ZF@utd}t_>Ri&n5cJver zT)5v^%$cXF(-T*+=Gm&m0~YlH^Z$wm6bOlkTj1GI(w&j|^NGaGv)S1X3yCVGqSxiA zrwdptO&t2!NI*|vkS9tb7_#vilE;11fp>DtrBfy9P@mKAZgTL{Q|KU2?=E(k z%GBP|lRia;Za}gx{liQ9ASsbE1BbQ_Umx}2YH#=nrxo~zLZYJ#bB0<;$H27q!Om$Z z^MFJYA)XKvk$|4uEO}Y2Q)yV8b)TeV4|tdNLbk?iu}C+0WYeEEqX!tsC2K2t`clLr z5Q$r94`sIhF6$ou`RUP7)~KW{NKa#XN!YpU`(&A2&F~?!?j3*Y<@TWKQ)ca~TvAvnX|&nO9CDQwNf3*w>iaN+iWM|@re1CRW3kU&?(j4! zVEs;C+n2B&`Lg!diEHmS8}!2EdM(_NBr{Ks_sda9q(uIL9elQ{%N-QIHnL`qJ3!tL zcka)=wCWAlGkr+~!7sRjUOYrvd%Ue0%|mH zR&G2xi2Cbc=*#XV%jjm3efB0QlBHZIAT#my=c7yIXqZD^mtFk8#478`#K#zUJ0~gH znpM2i*Vu6pLqM5-z?|{WGdO+=JL0xy{5I^5tJS>8cjBceT^=;bC%@*35C%Gk!b$Mv zP9eg%$w;6?rDsM`5RR+x?$?ODqq4wn|5j}6M8D-*;?`>@utow?!PlC=SSgzWw@U zrE{j3C;^exZO`#7-i&cik(3N!eAw14>uza$^#GCt_F8wV)2-2w*Oscw8cz*^Bp=Bp z94zR6%K5!zDM2A+=jn?^ah?wR|LczjjraNMEjSdPBi;lEY1n>FXHjfR?@cAYjC{U#gPcP;dahpBPazwVjxV-19KxqUEhRYR&Fs~+U9Q&Zch ziNnrme}L_ z?;>uB*8)Mv%7v$2%;_*6ADfA#C=C%|R@m@aMT)PS>Hfj_XrwNE47jD)AXzHV1sT>h zc$}h!%;1XxI>DX?aY(rz@W(R$WLb5o1*!MMI=PKc`Ii(?SDnLMs@Xuh7=5H z5nyjseq_!|Vb9X6E;t?))2_qUf2f+(VD^?p6-GJ7QQ^&aVOtgPt9 zQx?%y+G7?Nb7b}iAaTy??}w!-8y{O%tQP?{0-tl$e@4pzPYUGzDN)O0UNhEw{X?R5 zc?@Xy3%T@w?2@6)hri2*WAjvu#OzpScCQLBp>2bKb(dRMa~A-h8`Bn@xC{7B6?Qpo zh^kLo;M#=zms+j0rLeFTO$C6K=Qom}X|~%&Bx(INy_f|6_73?Ph^%a8YQ3y>NY2Yf zmCIw4N^fuY=Vyh>J*YMWtR?iH#@(4@QvpGpECOxIH?pFl>FiCp&@6$$?mWnV;Ti3J zqtS`J4GrE-x_t2WN(;twpFkry#q9UXU0?LSEz6w%AKtS_{#xAM?*)S)>U6AP#ZH5@ zVZ)#2_OarCPr-PD=nB{ z{f&|-Q<)j_rP|W=Dl?3)8_*y@YIyt-6^gM@v}Z*{I+emD;NFNyi!5d)u>`7`1FwJC zfcG_o_c61v5ijkHl`2!E0&Rfv%d8|b=_tesyVLhAY=ebgp|YixT?Yl2YJoPn%w@8K zC%eDZ_PWnwNF&W_<)wEI|Fn!eKfGeU!16Ud8Uvu)M);Ja>N7|o#ncY|MQg(;J-~tWd27Aiv0=5W@14eMVDBTU;herdZme+m?tRNR*lY_;a?vmYSZ(Ij&FDW zWnZUH{|r|TDq}k_&3bhe@CXO?e->gvLnO)2*aojFs>XGv|H}YVd$0EBcHZRWt)O<~ z)FvegV{4Ya9;~Ve?#w3w>VWC2uIk1E9erP!-T8_%fTS9TU(Ka{G~(Ell8vnEI!(6z z$@@|I)iT|GV4%LeyEBxgCFV|7(~Dvd5U>sYN0nR7uVyBl>AE%4iJXRH3=ERP`_*;* zJ1^IP=O2u@Oe)u0P4nuy>=<+ABb?Gs{v{P|`Y1L^AgH=VN6~EYu-8b($4Qo>@Ag$o zw14N0uflABjg#T7uXd)3SsAcB2>&_vXPiV_Qk6)x2Kst5SL6g%DnL@GTON4``dbO> zi^8kB#PvD9VEY&u$K`X*=J=}v1L3vm%7CXaVEd>Y%sg#LQtppwwXazLBx~2vnOrrJHe}i79)dh!2j?fx}SyswI}!uD7Uz!>}-7nOao@ z=&%uaGcuy3Y2xcd?86i>Pkqp#OwG|=qp$YXWrTd1hyfsa*&2!E_PZy5Yor;J3+?pP zaEqw^EM{>XLOA08#_Dr>r7i$>(Z+v;KqHkRw!LCux4)+53NRErngUtL>BTE5n^`CF zFQuGw{cCU~I_x>qN&`*3^g5Bs!Qjut{2>G|0-m}5z0LyfA8dXp6`p#zeO#$`=vmCF z-WRDt9fd{-V#rSVzZY`;yD)#;ydt|A`#>&DFtTUk$nJ;R2zH2>AFRlvamfF@R{ig_ z7!YF?HJ^q@`|yI%x-?X`kL*DG#bK*j#C~Ym;%xT+iO_$lNv#E9NkJ{>s_oIQWW%Vu z*FpTeEA7XpTxz);1^d^4-T(cns4U1Z+mAkcxV_s|Tyj677*SKNJ9xgJ!iY}2Os1eB zYr0Wk9{IPdUzgxjV#u0jy;)B_G{!k^KEwfieA0KS!(|xR~kBegb<^ zpa*oGQWa3fLnyA-9=*mlhLg!_HaE)^FD@X zVTB`{U^QiW?z1ALwy{qJIbu--bU^|E+7sk!b+e=XX+a)fukuK7DBwpjuA;J$Kpz@e zQ1;C9GOh@nSpx*h>Dh5KA*rTQgn{UZ^Vy8UMD(Qk-l3?lOSxX|pwA-r?^z>3uW}9! z!4FiUg(BT)2WsCQz%-dvfdHX?*ZFeo7T5;iSKyPWK%qc5RaW`$eC+?!qv4aDhJ>Du z1P1!fvcZ4U4@McsKWXxpnEro?*8d0kcnf?43gLz#=O9tCq6nzh^U;rAEILKZEkSB; zQ1+?p=YjZF{aE>ly|1kJ$gC+c{lmjo&RnAW!GITOC7+bZ<(hGggfXEbXQEg>#V`yQ zHh3URWW8ToW2RyMmwX#D*VYU~#lvhn`+#8G?CWlAVz!s5x=NjzEUAN7MB0%sa?UeMe2*3 z=rAA;wm^nEwq$ZY5QM-d=e1OUq}Y7!A{Z~MLwkK>r4P{c$?HLM|E%d(FHm9V?(3s` z59mhO{5O_@*bQ$HVwnJ(&I>6NlRwRRDj*Z@Y1m4;(_t%I5<_=WXMf%#Fj%ZRUgm!d z2@E$eE33Cg#>QDH3@yZniormVR3wD1A*i=xd%Q=5h3;_VnSc?r?-EW%F>L>F!&gW8 ziad(*g7$VnDjFK$^4Z0wpZoh3XyT$%_JH+MiFYnS<7P2tSV?MrN(epmUn*1*MHWsQ z`fem%)1Bxs4h~LWeLYvOyY>$m8Z0g$2=S;4eIL^`BUsr^gu z@aJR~+raH@3B#2usN7$+b6=kohO|JJB)iX^|H3(Tv8Sge%l+n9fvZx^Z{AAW&8-10 zn_~Z#%POq^W@7G*ph}4u2XmN@6iQ(cqQ(>R&^%sN{qZmH;$)-_Sa{_!|F8Q6W=237 z&Q|*}g_ui4FviIMS{A7enJPXz`H5HY^0l>21d!CESU`P~lkxM_kvUUjSP3F+qQVLs z4bI~VV1xl^@K#f#si=Sk$Dz>8mZ7s&6#&JHUfoCo0gvu}?d!Jm)d2iCx*N~}Q`2I> z50vy1q)^6}A*d6XO+w+HS`f7oNZ)%!k_rwM4UJjOd(cp1_d-HJVGt4?s6-EH0j@46 zD6lhD5&a3LtuM*}UwMXZ{LR(sVIqNu?$@aAT(NC25(I(;O1Ggg`OzZt&BWghL-19^ zc#eD>2svb&lKWF6d4 zr9jR4Vd;x_)<}0NkHY^v9X*$zW5G%9yBgfwkc0y|vLJ^r5j%_|i-L#RTCi~^vM%|s<6D7m=i@~l=^X=GEx; zXo0UCa3@1qa7F~$B>9wnAXzCUfk0)AFERiZk}L%}K6?V44VoR0X zS5rcoH=qc(6Z-omVxfSsVOCs7UmOu47#@UOMw*?p5EF=|IF{1sSx z=9x9#HY^$1*|NErrNSx=I7>HLtyoM@&_{X^0D8UaS@vI7E&X+PFja@c4)oiMR-`Rc zsC$DDq~icCSLm?;B3dOen77((fz@Xhy)PBpj2g8bFoThGB5XDU(0RX)@V{HY`}#6J zqXU8Vt){Cfp7Ifc^p}`uX5;+nF}wP}59+_8E{(qdVg}eSzfE6DE3C?Fw9|^CiH#w9 zBphI8?YEI;N#7#^E3C9AX_+C~HK6x$+PbpQg668CkF2Mr+MA7$#@^e{kNvnY9N*2v z|ClvRMF$Fzq8jmN{p4eE$qj$+r8VUarN~Y?a&?a~Ru>e5zRGM7A z|5`VpVAXsC5+1XilRX98U*d%=Y(z|~q9yw(AHeFy5nxjp!)z+7^@0!p#X}}rk1H&5 zv$HzLrP@|62jnSsJi+lQPEdQC6GY-wv2R3tdk=E*=&!Emzk#o8fN|0LtlV`IROe@P*Q}&)(PB56hk-K zBu};^6LXP>%)p%RUh%X00B0W8j6L)r2C=OFrCd!U*}I9iS?70qoIQabIr4@dkD=z( zFJ9~?BiLMWO0s%ZTOb^rtgeUthM?$5o?0=np6QawyY;08$G>@70iZNOKnPmL0R5q_ z;Sdzr5TKo^e4pQ#A%C6>_W011?8(U_naT*5^P+{S@8I%E4FrzbyNKNDXCUHX@fC_@ing-=y_DMl*DV@w2zOIA0~GJuDGj~=ZgW`sB; zvtDxuKs9OtmaO=hvjSnjE8_U=eNB~3y9Rq`~p<&i?3#BT9 zYED8gwWQx46Jb+R>aegdyX^s-?@39V59z{L0FOZj_&d^w&<}tC8ykCVf4Z27hCNc;c-d@lV8Duo!Lm?=0Z3Y12CQ>@ zOU=}NWP+t?K<0-8I=Mjl6|}KoX4Y-oy5tDuM*JHk6d~yG_g%lwQKq&`MC^}rG@?j@ z$imwDC1awFZ7=QjlxT8WMaX|e1yRfpi5I zEAfSw?*{*)-P7jgG(^S3gmT8KpA3QCg+kI8G6I5-kr4$0BctJa0{g3dRlxWu&)QO) zE+=kc3QEd@Z@#tDO%wC3z*kI6%&}5!PMv1gSjH6P{9YhGFyT7p;B@!w9>?G=A&^rc zCk|@HaCp$5t(H|kCCbj73(9{f_m{7vT!|O7C zKXX-&jEX95U_j>Q?|%?f;!a^Wk6Ee~o|{VrAf1ez9gCWp`l!}6`??db6lGWq9ZxKz z<-XH_4rOAN6eQjU#)~Z~@KY1Jd#M@q=wR89Y2-OPkk|-FhdCPOHcKA~{9_ z4nRK66{2=p@j~im$UKt{ohaL!})sFdiPo`vRuhsX6Bx`=9<}io67sJ)2R`GnpM^BP)#ge zLI9Ypkbn<*$jkzgpDfprBNTt}a^j*C*eh_IL`}4s$;jLxje9_H^G0-Zw2YF{AwYWD z{rXV~|kH{K!v5-qd=0l%Rh6xqJW z2lHcJPcQzq@#{M3zZq?IenaGQ5eyQ#YAapCqou>)D^Y__kN%0~(aA3$PrE*0kH<&5 zo&$nbSAX1vLPf{Lt!z4cPrkN8HYqJy4Xum;FEN#XF}F9}qtkewF4_wj-UNPa@%#Pi z#R2(E6`GrQxuE4VH;_1l;8`ezJ--yo9tR$hY|lz-c7x`f(#Ch+hmVrsJ(a2AWdr2+hJ!}uLyVt z#u-L!-B5BeHSRem`uYM@CAw5b5OB4I07ots2J6^l$p8Mh-Enw)T-G6kK797hTLICO z!PfU3J@EEdN8#1-THCO-E!A|S2Anji)S&Dhp;?wihn#%e6m_Sgscs_A?pSdqzfrt* z!zharRupXDTMmoQY#xe~=^;|>x4XkKz=H5ZboVvBTItZ^8l7StJ+wB<%2uZS`0=#{ zTBb5M<09pHL4Hyys;a-1mX@^RN^Nf9-KeanSUp%9DrLW={qT>xv5^0T>L=ONO*lP$ zPM2;B^HE}1-jQI0f^TH^ZVMNOINQ*m`)(sb{5AIQ4AaFD#VQZHrhJJPk5qLh-4O*x znAbBD)#@yVLk9iD)tm2jK!$?pQ1BEud(JZRAAsQpfl%+1lp@N?%h#O9X}`XG8y+5R zWo;em!qoijks;pv(vtjmEmZD?Hn z6zkcRawj`etc{+zvwH7*wP~u4%zE;<d0G;)UNuV%aDoQpsW`M zDYY5b;01&C7_~z1fR!|pXny?oBC?$n%LNa7`yxFk=yr;r6T?Ur=#hl`-GKeC)~03# z_c>A|39>fyYx#y1f_}L9s*)<7dvd8K2aQ)46eWqXYDvY0q1YCWSawFN2Zx%F4|NR% zuA<#cV>P=7FHKUQ%tzAV98M@|rdM8F2CjCE-Ie?(kzGWfxY4yRzDGASh?tq0cKf_A zmvRWfeBU9t1CQZ2%TFQu_MYVpEzv>OhL?UX*;V1jFX+9WpXb&ov#Jf@>yfDYhw@my z&iqTi4P26`*|H3r-Xu)HDFcuAN?pi!3q9lRP_yGEI4Tyxr7yfkjnrJz2gId@nPl zT9)|2y*Kg(Fq5BqbV^F$@NjJt!8`Z1XD%)-d8MU}hyGvb+ag?Uyw%Ukg=6!vnet*d zZc&55kRygBcat={?Tt7pixD+JdL`Drnud+6~kg%lncg% zE2*mQg7bPu4;ilw%Z2;~K0bav0uky0un-Ro@#0Ecr#Wk<&!_-3IqX#C%`diytEL}* zH~l6ZkhUlQj-Y|=D__ZbUetOR%!=Ur6sAj0(8+M7QAHXk2G{HJ=6dYbyK$(jg9B%V zFpmD?;~HH(y(f2Wel{R{_#_~%*`r?UrPre78dN+vJ44ZPJDe$)91w}ctjgT+d=zNt zKF<2uj8A%f;}WqPi2EyO$Y94#1GPyp0zQ5*fU2YZH^n$lnb=Uu5khn1`1Zx*l>C(QmyS){Mo8aa? ztV)h?Gt!#NPXXK3g0~_a>oGGPp$v7sGWHvKW4LRL7(dF)%Id^`|JH@k+d4bLZis3h z-r*=+&@n7_K0~Tig~~%Mi-5rl70U&^!7L~H${iwCt$!z9s>cYPMs%MlmXX9PU#2fT z9_OEC%DEI6YQG+}6mwadV02e@ut2+dqleF?bSc`;K;_!t#&tV!@K4D#9OSgy1KpY{)=^BX=Mg3 z{`&kg?2CzYcg8Jkp)=mJAEad0*I;?VVizCN*R7s7Z7*RphEVPXnlTfE03 zBGR2NUvMWNPP=yRp4s-qEBYLz+HpdKjyzG4j9=_rIapI~lYQTGvrdglow}>gXb!^b z-@kkzD5z7VNat9~z`!s(%6~QO*{s@XPgo!WA7#O27)2R0@GXgP^D!U_1#fHI$`hsI z9`p5xth621GUUMaMoLvNTn__u*=5q58nFA#ZjS;fb^!|X^wvDRX113Y<;2P!)yhVc zf}Y9!AB2NLOheO;E*qmibvl}R*I;%#To#`X^72dn6u2Iy#+y2lafF`L(!|8XhP?fU zgnLM=#Sx^;ZR*+J%HFq-yLmZIj@F4mmX=VwulkofYw`D=x36ij_wu$HjF&3HL)2~O|T^3-x=YZZO>dNe0kRMcDdT2R}w z@W@C&+r|SA4L@UQP8n*M`2#nd$X{}^oZ`Bp1uKktS^7E&6#}L#VqvI?6!_2}&!Ql! z{V)B|*_W6lX~aLhH@|eCk|rhnxlQ~P^8;8`5Tqwu75sy)^F9vcVd2}s*|r_GzmYL0 zDQ>v2XMQ-9LC6#Q;87U~$x_{dt{}&D3e^HPzL!g>GluB@c1uS~`&D-Fo^e<-HwvU> zEJ)kX+T}1^SSHuS?rk|SnYq!B*Z%C)%92V#4z>2ug1LpanBbWaY&Se`%A%MV8XJ?- zTu(s9eL?eP5sYdCGa`VO(E(=#hQhpTxcSBcu*^pVij$`F42nLST&y|su!4qfOzrXW zHv~C0!zEmtOrE=|tP7BO22ZkK@r6wvG_Vd0@h%E(OnK{!&QN6$UXKPCZ0HUN%19%; zU@#QlJ$YmZyg9~%oq7tEg*q-#`AClp_;bE?unX(Uc{^QNf?(MMeoblh*xjp%M{S$5 zTJNx}u&iO`wdOzL|Na#4bwHY-9e0D3!mZ#Q=vUD)^SI?2Sz`qYLh=D8a+<5Sbvqxm zUl7xt34npDOeN%^{%dmgxnQoz;%MHXksb73uF+ZcO)u8Ezjz?_XK8PQgvDqhkq2V@ z)a1kgQ&q6EzIVyb)B4~0QJaAL#!PgDHA()+v)T)ulp(C>tb_Qq+M?CG)UAq)8tT|% z1kbaRx4g^jxlK_selPu(^;Hi37MwzogMd$O2aRpOq7E(N{GJG*L<7*j3#*hH*Z zTf2owutCL#2~XP!xtoAg{VZ?c-AH(|ZTW^DZpOsP$@xEXMyB)z@IApR!r@ps_&!_r5DHW3d0@Sbagj&Ab}*^)E>{9!+z&dL{iJ z`r1;O!_Ix0sDf{Nxi{}x9}9;+#d7&c{cfga)dM71CX%{F{3Zg=rJXL#e)q?ZhumX~ zOy~Kk_30m#E*!_(5*$B9$HvoX*uV_E_~bP3K)v;zkO;f+c#g>*F7*4OoU21eM~cs_ zs;||1%s?f&w?&>}MIPqD1S-iSA|hgXc&8PJI6Y;o0O)D`-xfUb^P>p~EyT=C-;Z>f z=t7g8czR_cQF47zw+T$!+RZ#H>=ta|G&?#w<2;348PI~}NYH_nryX!S4}E!#O<}YP zA6hGuHaeyr9UrCOO!Q@U!FrkI?K)%xlCS_r?$zVqPp^5>Qh~-uiM7kTLkdH z9(L7wf`Wpj?D*e>0DBb%qJh@mwtITniuQ5IZECdb2_xBm+1WmKD_nfiXD6TJJ?p2I z)%^UcB3tBJ>_7Q$w6(Q8n;^ZBkdSaQ{$JGHh)3AL2sMq4CoBtMdW-*vv;*PkfW0pZ zSA~L;kYv{KG*{V-TQmPMdVIYU{XZ-Fj|@NfwJ)kjNJs!7d zJ_)HsolH}44s92zT3+{=!|rqQys-G3XuG%)-rH!apO`FU_ayE^I`j2t@k!Cqk4_Cg z$e5dF6W+5(I03PK0$h@2_f}+ABi(oI%e$TY%=FzNHRgGxZ6D|@;L1!EJjU%W``BLl#Acx&r>4R!U7Yk2bb#R3rgy*FxPHI)oI zdH@w|RP189!XlLp>+er6i*N3-SHn`DVDhiWFwUQ!{{-yipFMf{+_dAt#>z3B+}-2e+|6VOP+` zxVD5TUF7=&_=kjq66%#LFt8KA@k(Y#UiN+N)QUTABy!|w`%4ym7#zS5j1Klfo#mSZ%*Yhn%ySY^ZtmTp`sq*_oGo7yP?%{03q~V#FqUB}tTbliE z^jK-mU7PnT#=*7|`OTMPOTLGWwRWdb-60tO>@8r?i%$|`J$im5+nJ|k@8)Hi4-0FpV>Rx*R!sa>0>Pd(5QMf*1CrBxqtCx4g5+F0iehgeo~sItMiXNl1%=IHU*)i?bkUqemVJX4+P6zyct zhGn*_Z{gGW- z%IV_L)8O>zJO8<6^PZ-!{#V~qYr)E3dhS|}2>=6P)r?~EW}YrCEYmi9EV92;t`*;v zF5|b0uCI9cGKW_ZADrsty>@hU9Xd-gUEJJIeJ=)b!Bo;07Z-rbjOPbjCWK~;Hnu43 z^76M&!nUvc*TuM-@j8NF-#wPWDlA!EM_}pJX+VL76rsp|F5VSR8RNUtK6t{m8`t9a zSm3xW`RWWiNO|^B>-Dv4^n-r>q{ST_q2kGf4^3_Wp{=gI-o)Vc8+*Wq?G+?$s=CgE zwLb%LvERP2L*UZtjM!+lQ5qlFy0w-8c1MYVLQh4zOy7iKbzCGdU zZnz4NAs(Q%yN|n5fc!pM(!*`42p*1nf&iOVF4>?j>7NgJFh&xZa__GeW zUu)EX5(K#-UJcD~;SQHQZ#_WrHlgEQSv+xH=FBVKTmY6>W)IZ$c-tR7yWYmHOawxn zl$5lT-DI4cn%ev$F`N}pi@^~@>5!2=^E>MQj4Q4fn91MY zADBt!?oGUcx>o21_mHd{Z~ua(b6-s3+Jo^b`u$$)ek$BH6~e=FP|i9oMGuCYaAaBA zhZz4>d2G(&eaB?Uxr$|Hj@V3e-(mHlimjH^v}ch2UnG1gX<-4t=~rLe-L-9PZOduy zv@%`8)ocwFwn76&YnM{G&aR%g*cc9$SJqq(_ipm+jv&Z_$GW90l9F?1pcf&nA6o2Oab%tYr&%383r`Gw7>eEzzYm$;7Gd+SUjt2nZjEot>9$;;!e*^a!dHU zh~|JU=O{5C(672>y#UCQL5$G~@*+{YTxlz58#blp`xt<4wRQ~#q-zOfJ~(8&5{7Tu z0IZ?O5>;(=>JLCwpFQ8l@mo~f2F;Fiiyd9P@bMCjkzF^kk8IaUX4RLL4jvpD!tA<# zHt2$m%+3}c9v)uf`8)IU3)fho4r9k8sQ8uN2<{>NTIQaD3{mC$nYdvu?ojM?&S&Jt zk2er@1NPc#Bg9*!#)D?!%;nSX`upH#*OAXqUGszPv_Fbm?Y=^}0?_;eFC0Tf$F#CS__WLVOv9x3h>X_IjIZfSo z*+n?L*0@jt$CaMq`6)r!j4$IlZ{YCQ>??o+L!`f9p3kzhgsoX!YjQNZkZ^+|((>a! z6N3&tc`)Z&1e>M)o$BP+h974R_@sI%m6>X7G*pFa4~>} zJD=6<_l>78RfZ7V>`F^;mL=MJt=#v6-*xu;VmUD>iC08~3V=N@fP*|dbp02O z9=~{bhvSi(f_z57hJL~(KkE!HMC?|ohl2T+Wy3^G*P?=jL8*KzsOS_&cqHo3J#*tc zSHI=h8=QI^t6&sqItfPG#9gdhMXJ{dGLPZ|Gx^otxrry_v>e7@KE@QBcY1b)9vQg? z|KDjF-cNCEvO!Vw)-&liHao+5yX0k6H$UC-Ik@Vy z6rm@7g~(JdD!wGpNxP_nQD@Wq^Tw>-A|f8(4h~8n-VXqjJ3KW7?91=_%ZB&ofd0sz z!>y-pTVg9iJuR)b{lU5vImlUOH<@t8Uq&(-;Tu=SY&u3Kh|XeyvtPc7viaidE528Z ziswi6uXnnfp!VuT2-mJlL=(ISY368kts1`(nTqUAuHT##j@CoaR#{~9mv2bbNGH;sdRu$Acx6Ph&j zx#$C5PL4hvJAxGiyszCpfjRf|gc@C&n%@(9XJ>UqMa8`{Ae7OwlbZ}rPxrVwvdRO~ zDf?eQ%{rN1>z`XURU3VEn}t!W{82Q|HTs%E9W^sXhC?My)5JoGinB4hU2;m{r@T3Z ze^+7vXG17*Kq?D`OiqW+?2}&ai7qcEM|yK}6U^>W93%_WfXwOy;B41k?T_#%s&z4> z2Yn>Uo>QUfY7S?hzKSiVHiYh;{PLZ*wu5`Eut9}arMY=uosOnE6WI`HE?&=k(ZaZw2&J0l!fDwFL*C&qoMOE5)Jq3 z8@;Q?~0-QmS=`**#l2ZqEw1*(tzvDV1wN0pvGJl+gg>y!uCa z1*m9g<$V4670ATN@V@#frHK{(AC(C>pNMM={YsuIBDpPw6Vc*{vrMQO0x(3ZE5vlK zjio5=;%^hIs74G-Cf5hUjTfU_W-YQ{d3voqJEq%;EKIWS#enUQBk~i{uz!A^k z>obvxM4*y@TU1QV0qOu1^70@4Qfg`8^z?nq_>bOB>P;3T#j5({ex4Lqh(KB<0mM=A zZ=bcDukq+l-eL)EhbWB-%_0LDRpVTvL(w!?N;I2w3&GOk$6e=JUr|kOeSQ|`iM<>h zL1bB;>I&KRr~-G|MZLE8{LcK#+t51BU*Pf$;jK7?H%nrIMl-hq|N7Zs+w{A z&#J4uf`LUgDRfXHeqO_;PV2I+yG#}jnfC``5upe&iu)Df0~BO#K5bGBt=`=+)?-Q`LMSM>}VAebUx0ps8- zyuK?X&;7vhKET3<_1QG+V~|z)u6AEdm79*ok1tfMV+xYJb?hR;>=i~j#%08iYsE;* zdf>4r@cN2(O3eeUpwp;pRW&Hm}XyWPO*))QRpyP zLNlA!ZVN_U>I3Bv&r#r+573Fa-uyyrfuYDCIoRmeXckLXd8MOEzFZkpJu#^u8Ftf* z&I7huwSrr@1@gmWHZ>WwM?4=o#bK{ml1i*V#H+Nv9H6Ls?7y_xLX^mA_a?u09 zK2dh$p^a%V0jP%6q|wh%cqD5y!X*%S)zw8+*eN^GrjfVuO)(OzO0wiK2`+v998}T` z7}x5~d`o^ofx4ZYU2AsK*@X`dhXY6vYeRg;!NEaTQWBz|fE7@ibU`YR1E5Do5ji=G zFIVv4gn#5)p9qUW_Iy8(S$G}jYuom4nV7_U!mNMJ%aTxcB`57e)=1}H!Z)m7M7 zaQZSrLR|YM%NYR3)7yp{RLW|8bKB#)263o{gNp7@WvMM)kYBDB)--ZPi2O2KK}w~L zuRt!Vj{#(?13)JspYs}^zfT>gQf6jmqJ$zB1t_Sf)b;cx&4L2}Vk; ztE*=M4Shi9H`I(;6NmtizsveC(=EKOsQkOyT|oTQ>YhtC4J#;<)A16c72S^t>m!>? z3_3MygOsVNn&o76K8AN$3NY0-Sb>Gzc#hjLvpt!FrR79M>;KYx-InysF7Oh2P_ zy`X@Ke3E`~S7uR6hbu;uEu&e06nwr|CO4{h*agcR4hu{0y!z9;t)Nalz zUuk;oX9cEEf=cLmvii)y?_grN_@EbZfa9j1q(qO6FK2mi?yn3QO`1f zkO9CbM5wYfQ1HD&f9ZI^oiCo;=u}~=ZQ&ujZH)`sU=4L-YFByiUC656x z+<46vM>6pQ@%;V_6|ZAQ8CxXtv`3sb=(i>p-K{FzITsOgwju%9+E z4p;aL-QdM=6|G(zYv+-dZJ)=p&UOT%Q#4hf1q-SP@V1k*?U}yL84pB3K z=b_*rf~>kl@Qja%gc^#iSZk!}c^L^~+zw@&o~snv)Io4QZfKMRs2e*QP1#xWR>)k$ ziC^^SYP?2#UR;9j283SdumYrc)pM?5G0|$VbPT1b?>VaMUMOSEcLKabcZ;S1BM1=u zfg_rTayICxlDXnhdgzAFUic17hTB&AfU#0P|ATaY&u!6{d!k1 z*$(CbnQiFhrCFZxWoC-I==6P6@4gv$2I!p7djnNQeSFzHI#VfKG!1lEi1H&LrrM-U zUNWBZovTI9Zh?%Su2ci<*7O(ubAhMlk7Jh^n8bS!fJ^t7uF_YKCIEr79RYf0382^V zvQ$1mGn_sxk64@8PcQ?e9#}jb;+GZp?^1i?3zrIJhdqdneWL*6ssq3xkV%8GA0tXd zy3SOBF724}t!lC=J!#RKHbrs!=RjHfssNVE<&gx`p>afDAQwtKu2lCu|1%HJ!cOS$ zGPkY9nh90t8dha)K23hRfnxK=4Ul$8wbCJQNA|qi8}-Lo!JFj?$#c*oV*vdb>%44e zEprm^BFp*24bb(uMfLoCo^Ay>u5LMx$ZC~*vol!K7$C2b1X%>O%k`SEL*LM@-qTQ!QW|>VQ&7TUjSIh(`dVkmrU4p~xY3UjB!P z3WE`#=>gxPdnbK(ha0)=(E&69R<_xvG0z#!7*9DXUn}9e!Iy907OSoKg zSfcKAyr2#S=HlhXjRQ&W+k*k*zk&hqQUAZR7&tBuHq740X{m0?2!EX zzyJ5E|3658X<^=MC|-Op=O&01AGNpLGG3&u1=J0sQ3u*N2A4FTL<2dsVp-Km!I+2ESS1QmQK0H~n3WThnWP@t^4ucLV_`4@IO>_i|x zC!aN3TODvn4w8YUE5P)>QwGF=K*{?VVfQZvv1WhofnJ!W?z&<@<&>1*D9jI_x(I5$b^8zma)_{bNl1%&vT z0d(l8GqO|udik8om$=IHYTqmV2|aNN#Gijc*XA4J18~sw^@3f>4wF?aLvyj;G-&%I zM9q#55`4fhdz$*dmB8GmA*Im3=;Y|M#dchcM%-If{A~6rU2CGvoT)iuZ`ugWzctH) zktKTWrGAB_@y$_svc4sL#xkuVSSgmXuW_+ybfv)9CsdwH6W@g9_cfS3_wSL@T@6WA z5 z)3JLO?**->qjMW+pIoEYZDM|Xe&Cj0R1`WBsm&+!Kr9;)?AbD-Rf2P!E`^|zdl%Vi zCETW~q%228S8v%vliHNvJZHl6sc&MW|+8gMib-kZvAA9cW4QpB}n@D#N6LKAlRZ zByc%xT??HwY8S?x#)zxA^^Y9vetlXQpzPuIdKYnaTz|VmtH&WYV)V!W z9BP!({vg+BOZoP9J@ZVdvs6zBJ^7>DH#O7W7>)R+91%03CrNpvWqr0}#rN%;*ACXh z+i8Y=I>h*CKK7CR&lK!mQW?r2iQ3TuC6c@n7YE=`IFs1oDj)q8t;O?#>}D~dAs%vU69wy){(WBAwZ!+cC)wF6 zw|w6#H}p8~YRh#n4=slW$|)OUp>=M!RJvHEp9RbaRyBV$LG8F)mv}(hIsmFj{CXQ* zouZ+*JRH@UWRzcKQ>;7r&8wT<()J`VDzE*w>YgSO|A3~E1F^iYqV?!4W$q(vcOL2b zvnDzbh1Y}AzK2?M?2F6gr~w+8qxZ6XPC?wjmkJ0yK` zw#5wiZNHe9*$k33?(%NFuAzJ3)@!icKa4fAZ;*0>95WbbB+#6GZd!(3xqU#Rk5j2H ze=9pXOw8mvwvnTSy=aCgDKE8!Ly;10p6VyRMeF82#vG0iF_${mZ7!VQI!yM**&D-p zj@(+md8j+1rJb)fh1E5npDU)XW&wEdYSGCK&DuKFZg^()T!FZ0+OZSq-Cg3k1^;HKC36a*Z!;V}cc;(=1~*Gb<{S)DtLqbQw;VlxghZ!#&>3G@b%3*_gdjuqpK8fcfiEa~H{j;8AmE+ZdU zogs&8$b9#hszTfSV)gSQz31iYAoB4Jj$Mv|`Hd$|r+rD)Ye32Jr=gfA%GxQgVe4OH zU@WZgwi$ZDu>QQxep7^beVS2sm~o7$VU(6HL@7VZ3!;N6pnhElqXqc`Ox3W%X> zFH43z@cwNxg21X2#)$l%v$YNi=;vu^UVi1RxQ3$|pDWj6vl>f{`h!{yh)(^x+h;P* z&(iuy?JK40MQ)Y?%OP$&bb+|Tfd$Q+vz?B`iDhgeNG$}c%#i=vz2xIR@|HD~hK2Y) z^;j9t43&t=2Y;|sFuSbVLWppL2KV8a4GVwL`7yHj+D4B^OmWr2*zS+chre~nvvkGd zN^m537-47Zp~eu+98-T`+G&NWM!=*GwJf#9G+-X<%Y!Ilei6aC!x@g%85RyDH~v@8 z^X>0&k9%rlb%9%aiyKZf^7WrwiV0V%CXHkVBm3moR9yb9=kW_6^C3-#f9g2x2V(0? zv~XQ_9g-!UyRS1n-y%9nR31!pK}a@|DXmC|p0-i~e%~e)Z+fp2b*6JvG*MK)UH3s} z2&gDJ0ACZy?VW3?J}{_6Zj5Dit%|DeD$4HWh6 z_BXox9i7UWPAYFn_E1+ONF9n%7Rxy5y$RE*)R^QO%{5197N#*AC&^9(iJrC)2NLsp zr%2=el=rO#j?QQm&vx{_Mn@RbyR?UE<-QQ?=E2r)tJy9R_u@J!(Rn8AXfKli*o$#F zw*H_!R^*^7!;1FPrFTLucs5s5n9;|6ei80 z@waio$zJr0|CtubNc|6L?bNUrj;g!Q`>t;sDy!sMY!^9zcsCRg)yLUCa|EMGv?!x zJyB`v+x7`9KQA>!537AM7_k-zRPi!D_0UWrc-n}R{Z3Qv;#<0^P-&o{yC8LnsCwPW zs8;S$M>8g|^ueYta4LxERe3!Nx~--UezScFW`JB>ooffP2XtmwiR{!gj{0aCT}-rB zaPC9Xn3Nl>s_X(CY0CTw{NsKKDDa3^nhGVUh&Y^BsW~DAZJCW zzzrBhP0#qbHx?}#`G(Kyet?gc_C3GMhU~Q1og;;InyYbzG)+Y_f)8FO>3hW%O+TAZ z9=hLDEbX&D3iiz8_AhE`AZHtFaYgLUNi_yJp|R(60C@`JeAX(299ch?b$Jg18(;OZvTI2UE}5x? zc1Z?p9#r$LcK7R4j-+YI+;;L2-mSedBFm05avQpfi|FATs8?tl;XhcU5lNSvZtNGv z&!7;%5+kQ$ax+`=5bw=$tf%4mQK>0|=@H1o<-pC|A#!pm6=S8J{?dW58q9>GsjdxY zK{JVF-yHj*$ts#Sc^+0dv1qt7@@H{ps^#QllfotQ5*l08oBJV1`kgh~#82fZUt5_m9%`5L}53t^azx5j&gH7 z{mcBT!}zH*Os=x7p3dXbbY}dr7Drs|8D05{LC!SI`kV$&RX@?MJKiHVKn9ljZw;LuYo(!>Pbm6i4!o)U{& zS4!VwMGF)4b^QXNkX zm}qm<`KOLFHqRX*BakOhpQE!CmzPt76R#=l3ela1{juQRZPL2KW8$Ny&KhkDkjiZ$n9Xs|4E0jt(wG;Qn>0j_?-dLV>*WHnGlv+dr@Ni(Q6kAd`mhsHJ^m*|M#qG6@-FKT) zIzpJ);d)Qx2pL^|sgF97RFa0qGoIwUVkv0~Psuc`Suf9>`4x@xze$ooXUP^GPU?^r zWPao2(-iN`BhQ`a6|{ijY+uLz|K+|?&anC!=&3=a%%xV0cy5Z)r6<)!eJ964j{bSG6T4R@@&?t%2x&1HOioDc2)iRNy{;1#L zLcdBw?i_9&WHSj)c|)6XKR}!sdfy-aq^7n%rT^KTOA+~;n0(8r)Yl9u$8Y;_2G;NK z(M1~ToXx2aIlPZ>#;6Rm^)oF(h_)3eHIEwhOD^YEI1si~mpQI=%x*sVv*(dUqnqg8 z#d-9tdYO7#jf$~9O|UI8s<^2gMR4q$j1amp!A?Sk~2 z8ye*oFXlZnQx zoT_@9SJ4s{$vm~?fLc@;q-sH|RUuEMrFj>c;ww^VhMlGC4q=O2p`+G{9*z0mvH=*H zHXO3mTu~g`P^QSt(KmXEme6Y>NOWFW+K>$Q-rQar^}R|xgc~5H-L?iRlSY{>6Prim z*av%#X0k}b#YfNNzp&VTUL&frcUyIJG{Ul+c8XtJZA^POPp&{#&iD_*K@t!3rR09S z-z?J}N9TcmgVENpwo!>^>vn4(}l!H_Z}3ueecR$B_MWT)_TE@jImWiDoiluw3i zx`!MY!0E?znN%M0JKmD@dr?YK;|t1^!JGQ6c-hd~Dfo1!W%~%^?nmW)3`yNyEbzDj zUILA5Om07Mo#{#$O)RMK(OV6djY$J9?<4r7+}2hsc?yvz0_(gWbH{<6C9y z(my%IE>t{QrD0MyF%#l^PX`AvXd)<*vtUp4Xx}(FtLiVe+jbHO1xrf&T9h17r&*!U z{l0-yyfb8jN%EMyyn{L1UHRVcy&wSD<%ybG80W5#t}eHm;%tKo9U5qKQk-SdFNU`Z za(h5dc}|lI7cQ?ZNW|F;`@*Yd{|Xn+ey~jKMOE?E*Vt{7CVN+zjI0=HR`E_bkJdZI zg)-K8Z1G1rlvT&I8HsmC)J2x{2n!L{xxa2N&3+?&At9_ z{L&PbgT2OMP@R3!gX6!4u-TJ`*4a>H&m3{B)bujwGFFEx5e*JLjsL5<^N>xEjipSb z-FYGU#cz?nzp9{w%%OzGBduowX%;79RU{*tE3UMC7-L1-C$*DI46AFaW?&VIzLR}t zTVT{VKVaZ^pD@#bKKhwHrVhjNM|#H&%*{$l=7WT5UCx#q#3jyHn&t;Gkf7EHqvfyd%9so9XYxmm zqt8d@bPnvlRadFcdQ8+giEmWp_iW^*oJ4ZpYrHh$-In_A@fL-q1Fu34j9C~HJuKuG^-Pf5)qO zySH5b{E5#YR#N{|@9npH9GBm6l!&3qe;X$~`V4(%&NAPAo~E+j=)RB)vnA4^8RK8H zDEY`9{Qu~aE!4=K*UW+MGJfiUT{=)$Z#D4~O;v+N5<;RPv~5}B({nM`X?H(d(fOIm zgmp1yM*Qr4wH;dmE~`%Y`TW$|E$gL8N7C(v&vkQM@1|Y&%Mr|O`S10V!MRMZvnXvE zqMonhA7JSj^EV9^S$NbQ^`?mQ&D{^IyXdiZ$aeejescBGS>;?^!@H{&`+7I zza$|dlmSINfa!X>U1AnE#1HN;G9pLU=J|Y%niqLi^ipk@RubKip__KGM(n9K6^k38 zZXWJ`QzvWo6GeQf;zO&u{+|P!OfSoFJ8_@&6*X{nWvwkP^GnoAVyoWTxh&A%O;k?l zRI99|crO4s5SaF8Gpv|@dbyK&RA#B4zGT=GJSldd(|B;AT+(E<9QCP&hD~2M}O)OB-~+s*fM(>$~DllHdH%3PcTWb zc3=6(@WU4|&K{^EB66A^@}1*c{3?b6vJ5o29eLc)&K^3 zQF~OyrpAZ9(Y#=CMzoEIyhN=W&&9@E&h5bCkN)>4Ma_y1A}_9Aq6x_Rqv$2#sn1_s zb^X=UmD)}PW~uzbt@mcd{|;i%FP#r>846$V%^-RCZC=m15cpnJ>fOElZSHl}m|%VH z+=-OH<$*~U)!NMOCBl+SCyPZ>=0Al8;`pyDE_at}MVUpt;b&L# zzWblo<+d8kw0fyCOMA7B(f-ApE|0(gi^?J$PLpEozi~0*p-hF(i68wFP;MXCCofVp+eo{7{y(4RXf|4FZq*W|8wf#u_pNL;NRnyJWM=McG+;;a;l$xpcN=jNyD&yjQ=Vi_RXk@97 zP~L^#@fVvfdO820^-5=Ont9*p(MQ`pG9}&D>}=gW0lP(UC%YVcsvdnrFy-~jh=GmSX5sWFRY>l#cfH3#tBwybvtPYQ+{l{&TQZb&@$FV5rmD>`L|5auZy}rhKwlS);l@ zB8HqYQT5*79bcIuYSFHN>P_TZOgLjTj{h&$$zo&0Tb9+dmY7oso%fLK|_MNNBW-wA*k%<2Szv0XWn(pQ1y{O7)ACc@02MJFQB`r3I z4)DnDHDsP!3d8u@LC}Sz>JEmO?;k8hojrys9zRa@2}Jr_E!EY;v08GY#v5Oru7a0zgr5-a`tmhjnTXti4^&StdI}p#iMcG}CRJ!k9Y%%JA2H-w}Dwo9kbNolcf1Ahg z6A}Gh#_RTEok}P2jb%I()FkBbW2dY#f4omMJePIE7Tca+M(uNYOadDI{rC(>;fMA6Kk>>`zXH#PwF22aK!=cilXjMU#({P*B1mr`^>M!zc_vK zg|d2h6=3pp3Sp2?cH@%_9GyC}Tv9l>B(R5(0R%~25O)yem{W&NLrQY@x{M%STn!m)HhoY1t`p{&*bI4~iV0 zCMLrG?O-n_my;#le$TDLr<%b;TiN&Om&vM8KrYCmRxVcJWae3)V1MsR;n%J^Ef$c& zhOpDgY9IVUJd^BXPuB2LA)Vr zvr{!M|LR9ZdD1N(M3+uTN<)KwBf18=jupk`ELvi95jQosxXO=W6TqD;s6_AJu7C|L z^<#2T#kUdZfDAy;^ux`J4vV}ehyuZI{_(Qi!An`_iFafGnmQB4whM1U|EU5O-CuAv z0e1H*CCRipk{|~oiOt#DSclc(37e#ZX}2mwp1f?Ts(*3eNsw7Hyq2A_B`y4Mm=w(u z&bx}@|0)itLF6xrVf~=(pvvTpMYqIjK7v$gf$f2++qI=6kiL%KdAQ^)vwu{kW=5m z&SuFOm?JCd$uANHHGZ!CSLu*IKk$e2J6)^t{pDfhjlR_t%ASWPMIlZ-XIAZ*Pd@&O z{v=F8)yLW7QGJUpDAPU*9ju&bjf?0vT(AoYy6?t~r?onC3xL-J$lh0$kRVF$FA+gsRF2Jzf@?Stru`35a^3`D? z72n}dScLUwy+7qtArhy?>{Y*jch9q=?8ZPt16<{UoR-gr^&7^W2mq2Vna9ICU%`)8 z#r@ruCmPXzd353&`>ct(QyKiYchFj2&;2SAOYn}ohMDqvEDa5(g@JwT+2n&9Rt3<> z(#81%(DwQSgm`_?#|0RK)-qAT3G6#H8Y1wG-{|NBcpj!5P@*;26q6+HAPoKp+zrBB zoTuo#0qe<22?^69O*_uL=q2O6gS;AUe)6iTWidzF>j_++xLG@WLh+IyF+1y~pG$4~2^7m^F%HD5^`m1F}Tom-9dh8$} zA&X_To5y@ZA`E&x;97Nj;l4o;nuyFpN2^47CZ29+0C$3BJvQq)IW|VHW-3)~`$!aa zW5ST~qc`|`E0`p38t?7$>PnH*m*u>$vanie$g4l2+>5-3W-t~hRufUscd!fc>)@?z z(|pg`MH!FzcFce-?ucEW`uqTa8Aw>bPX-!1fa z?xT1CHa`7$(yq~P?d7MEjafNs37x&Bm~l`h@};S!^Q0!I#VR|IZv! z|23A;V``i`RS%L6CKzoi$?T&5B&Cetq{dmGl8w8H+&Qg3^F}tRn0_CE-i$sI9}#_BV&Nz@ z-`^RR(<>yF%higv_pMz=$Sr34_|Ydj%Y2fd`_yk(S=iw8{lGRjOjxJZ{8{_5L zXHk(%MNPD;@s8fbyzRl+Kd177#d&2#zIi2-_QNhq3uWT#M`CHW6NdTQzw!Sxgs0!DsS~se zn(rmk6}?VE6fJi>M;VZ0b%jE2$DOrBt=Ld7(a_{dF(>IqY{nh$w4WUn!s`+9h1k+!On$T=KmyaBgbnPcJlCFGyY0S2 z1WCm*S3O)aC}Fw14|ub2r_(h)r25EhoF3I9m@@Oije-qfZU@IF{#giZ`n zndWwoA};KJsIMDbY_ia=dGugNHBcNrz%q68&xRz_@pH!lN7mbx_Y6@8)LS({$GIrz z{9za@XdaPOP=M2!PE}WVbaK$WV_P9X6U6iI`E!O}8V~OO&SvPU&ZD~KuV7$gO|Cl8 z-(h8Jv1TXut6h5J`Kkpf0*X0|za7?GNp8}N%F5XBarFytF%&$loa3w{CL6fh-`4k$v=az{2!i(2-CXTP_;i*o57EEc2*r)%$mnR<+62QITe+LCB29Rl zWA&*jBOz+R&3i(;)VCnfbnkkY^P{+p3HN?4@)euCI=QXGFUou6L} zhy=?~kP^PkuGV;I@{Q_P>d! zzk~`sH#cZ1o{*J$HPj}E#@bZ--?@9Pk2enOz?hqK9i>Z8jR{9wGsTAKkybJyEc4O| zFQR{vwAOEenyxxXzqx*?=Bf5eR7W7uRQ~TTIFmZeOIiMBP($>u-q%S0uXmLEen>+D zD)=e$CV#T$y2y@#6R-BaHDsF7^cx>Q)VJcecj=Zm=;D;uCBoi_YIgp6tD7)%h4R)v z{pj<(aefRxQd4Pgbn-om@;|pbQB%ohoVErLqqaZu7w#4X!hh?>Ba_mpHHTVv1CUUm z6iu&S%t63IDr-AX1>{S65~H{!uAF{;0NN-7T@R)yNwU zhs(5liIt_@key)b;-7VJwLiZ6C&5wR-%2FcV#vPWBy^+?&8lVw8Xj%P&j-%1>lIAqzj zXun|3PtVHwCQ6?3r>uhtd)IeE`>iU(!~~jQ@f6CVl7vVxmWSQVJRLvp`zRwSA^V(H z%8G3KBsp~xJ>C>|8)diZ_hU1q&wa|jpSJ5OUj1^d_Ah;@eHu`n2{zlLs zxPN`%oggUGEqZ#s4g5f)ST3 z1aLYdB}|E5JWi=NOWXxgJwp^`cm&}~JM2{wuX&3=;q+W&*QRK;8u8->dN1ucQ>f1D zUSMI-Yv8E_fX|ik+Ktq*%x*jTTxB^SpK0!I%MP=qG$X?YRYHd)P-q%XemX zSl6g^hqI-NJtZFX{MHBH}^Jvk`n!Ur`;K`R%>kk8$1KJqqFF6wPv$(bF#~^Pg zO-q&;`HWsF?n*RVvfsuWH^EMJ{<+yQ#EXsA%}Y{~DN*x_oRB&xLr%}bcr-fXuD+J< zBdh|!-ft@_1GB7oBqT2a@wR0{W<~W{q1`7Tll`i5YQ8>R&)-Demx_4G{m|0AD0#Fk zddq})GjViI-?w%&CL5bV2CwGNhfTE0Qjb-rO`Yo2!Q!EIX?X_2658_zbmwax=9V+z z=Dc3sXsos24HMc{?f}bSh*SdM3mM7Q#0&q5#Cq{rzL?TIL8<`gJ-P;1Wc83~`ckN) zEMIN0HXVA)cT3OZ>E)F38cy9g`FsE)Wd=fmikJ#(r7klK;qUvH?m81P!(?FHgD>nI zo{1sujz}1+QZVDqLC|+{_)KF}HyrfNdd{GCeA(7s9jNH5Jq$#L-m@f%NGc{3tLJH}2Ooo}yU z59ukw@OK^$U1?GcK?x!i8am#}kzVJUMIm;L%gyzZo5$}dh~b#df1rKM7pq)8k&yI( zAyw}k>qV-+rO(cpMJwo6RFBB(Nj*qm)nEH4D6NQ-NMxUTVG>eq%1P%1`Y(7pR+$(@ zKS&Xn5yX<5(=HpuH4iZ7kLobwTdJ=inIAVMw%1}yqAxA82Lky72Ka>7YX+; zekl*bPkKnUT6yS04aAdb)RFD%hz$LJ`S)yV?8-?hal5t&-7dDZN43b(mZ{GRiI#wK49*%n~=xvDfLuh-A5o8Xz_xmHaztShCRbC z`W&FqJ-=zc)v-@A+6HYkwG)P9^NUla9kuxnbi%{A+-rW-79Nx?N{Qinyie$JoRlbi~DY0)qN!B&j;CWKeD0jQb~@C{gO)-0uo zb3}YZNa5Z?3jxP=>?UvQx@EqAKZu(9q_Ax}*k)l-zC5oJVv!H_^I4}6kfg7R0vu8D z`V_@u7JeO){^ZP{gE$ISdjyYk#bKsSgT1>%6hcb4s*!?X&V1*FXerX6SRiaDM4 zaIViz4bLFwH0E4nqNOfNx;&%~g-j-}tl-3R{VzNxd0AyGg5IW+OtO;~m|S#?L!zB0 zQ(f_4g&BD+OGJ3)SxGsYHVpb?ZT#zmC_=bbp5hF)S>a0|I}ELIC;GTVFI_nL?CJ5P zW9GCK`Ug@IO;AlkLskIQoh{vVt{g|q?8-;s+Kd~z__pP4LBB!QHHj!{4I)muERV~l zQ-jdTf%bKu9TJcdI;nV+`e~6`mA!{Yr+(~SUo@*Qp*d=Ryo}rw2k++p-~GpIVc5?b zXTz|upn@<>H}~vRPDSA;!zzo18u`z4s?oSEr+y6w*LL8fKju-uZ;@{|&Dyc$GdC_1 znNmQc7(FGTwGpkO^eHE__{k6LQ zXxVnLPv_Comb$LJ9m)7IvgWc-z;5<_VS-aFV28|eYQgba0Ws_F-o-NldUX{iiB;x#sQzkoqzv{I&k6F25UdC(HdGZ03cQs|fwnCeTf)dExo0#`Gn;!uRg#G&m2 zd$*wZ6x{w+FdRZ$ao$JH6OojL>&hON|Df!%OYzREjlH0PD&=qLAs^qSZizV?)minR zezeO@AxjW*n{>yGY_wmH7E?mbxmZm*U8&O#IX3{Gh z@MiKKMjg-pTA4CV8BeuEODS){T=CIc<;4mt@L(%CJRQ;Za;Lt1l5vJW4gE2^j@aB& zXXb6-93Pw7b|${e`;dAkDol>ih?f)!Cid~!mtESPgz9|_G{VmHD(F97BN>a`0Z+@( zEkVL>)49HTfjAO&3R=E>53~_}%H3apM@A$_*X(0~Qsl947>iNsHepcKZ;S&gCYG|0E;L3LT1Rf35?^JYK;S0_e=1=5VQ5H{&O9i;pmb!vftxVNJJVTG=IfXDh_)akfEVLu-si^m_hsc=L7qI zG2^eR7}K2ZaGM@Kt*1;~On|T1LK&a&89AG;8eS({Vm)DncYYhggKsrfn0AOnKzz~= zCTG4fK&P4g70uRXA=l%wub}AisS+JlN9(0(ZJjU7cWLC9r$5w={tvN6U75hYT)pi%g2V1N9k)G#U{fhNEA&|p<5-P z0qKZzqM_XC(e5bW3IxMEkdNQ@c?~Y^z#{66>t8X|rCfZ?&@#2quf5t9Q$MB!#T5P8 z56K8D9)C>xmQ-jbAM)0rY=eD{OCCUZKhc*yL~N^TDuInqX2tFlP@X8Fv7vGN+hECD~i(?Sr@nUUFU+lktF>j#1pBQ`54;!kY1`5d!nXYt3*`D zT-b)|fN2Q7rcABbjh0~vtfG+fFxcNo(*4<_WAZ! zJhNwD$$2ra>qL$7JrclrLJ2W&h5|L7LuL(B4#{y=^>Qd| zeuVcObj!QoJm2UE9;r{Er(rRh8_tg^e+TXFDC(= zsDCESc)5Dtl*oyn-~l3^j{+2MH0+$E{Z#;uj!4$%Ag(B8noG{dw>gH|bESPUN7tlx z^+W79ZaFrG6X*MjdaJF>EgLt^aMy1BrrkyF2O0#+g%wM)>H)4g0^-DACs8tz+*f)} z19sQ;P4O#~@wwS1I%41C74#wbXGD@aBp3uKH(M^7t>s>vz!g)|LEU(Rs#= zrXg?7%4j1eqD7cphLDbtzz8%1Jqxn$8l$YN@vYrZDG(}Y@p)$%@r6IjKFkN52@WQ6Pj@TQrDZ5;F@cF~J zOeUuqv|s~|*SiXuf1+;8rnQxA)>afeR9n8I+!Wi`=3-t9q*lEA1^H<3#*%Y-TUEc_ zkLk(@EqX%e3HNX{7pTAV+*tastuw}utgm;>WepG1UFEUpZkpQa4}SVV<;(MH!q|Ap zXk8t_6=+C1MsM|!(q{Iwe%nVCDvJhCOqvfcK2ofwQP_)v#Ys_nRt520p#GH?HY8^& z_1rjbijALV<2H&6e_sV)Wcv^+3G3xXjxZ{p)IZt z`GWmSF^xrfCv1iFez7n{64NGLyWp?Nk`ZEDoNffNzhFVF;@_Q^lGp~)0!H6=a{qjV zzo;;%%**;Cd4dz(LK?tws361nhoHT@KOn#6aTZ zXqc=QbpqF%+po+12)x)1dsqGl?YZLB;HtpqwCA4QUrzOL)gvQI$hJ_CeG=~>;jOYD z`MsI@crRx-Y7iMg5gYO=+P}?=+XwA+%nLiX)q4u}4e$BE{9*ty%cs^nHbXO|%a%TG zOcU!6GY{V|@hYw6hhU^GA79CFPR3-jJF5v5jR_RPLfUHmUg!mjcyh`=C^{wQXH0UB z4Th8W{^>eicyGC#qLG7M3f^^hM$zqaHuM z;5(uovK2h!?IYBAT^!z=0yvsy9W3#DyPO{j)%i3wiVY;6G8aT&ddkCgow}fD>6BfC zDK{s=Z!vzY{1R40HzES_0u$GE|FjxCIB&~Xdo5H4vE8F+Hp68#S_E=VN1oYAo20o7 z&WP4#H$MjJO^G=3)!et?Jyc7hyj71@TrXoCxh-jr%V~v*s(HuT#AaXsW~am;P8bWD z>p6hE!qmg6ErAnh`@n7Ez#0AsUVtZ?bHKLv6#6(+q%#n_Q`dQl*fr_pWnH(6(_|sC zC8be#lgM13`WXKi05fbhd8cNjZC*>F@4G0^uZHc1;aYXYo zWcRu#+2JVsej0=>)vAV;DU(u=-Pe3xn@bM>CAVq%gF3ZOCY7i5`oduSy^?p_{ z9+2GR>7Fw4)Elx@Yat#go!-@xQ)!$PT(EH##(Hhs3%k8g+406g)2%(Jtbl!?T+LE0 zm87_}^{kWKHaPFa`OD&PZmX>*#NprUoH_!idk)v4Wy9;`3`CCUa%a!pR*^}UUsQ)N z77tZkj|+1szG!ln`wSq?>-E+}r1NQ^LueALrn$RAY1FhL(&kU3M{O4xpFs?8xG3dy+{ z8@#yc2FE6r4<;J$7%NO`nmavcd&mE#BOyC|n`Vw5uLF48Ty=BWN>S1K9)3B09=hST z&@AM>%dx(7@d)@^iNX(05EBE;0uA5r0UU=fK}0;gg5&pfC$+Ei5hJ8fFjbUH%C7!vG# zu8UoydU}diW?`I?FfSHOu}JqiSDi<5p9uv%yvF#-Ju{I&$KS=hQf$E_gzxn{H8O{> zRY5$xlAog~O0EN&h-=4LvTEXNU$nEqMC6+goLDE_kLDG#i?yw`T)%?A$?(~sB>J1} zPoyF*XbwX;>qPO}g>t4!)6R!!Q^gZ6jo3D?N3`W1=?YSM7l+M-NJfoK7oXPw&Z1mf zE?e_O4lyY5rXY<^2e%xQi{~ZVuV#?SL)6+-IIDBT62|cNx^C05vmxHWio~0U>3gmU zqSoIAET$hPCK^cVxiM%X>{^fgZ5%XN@~Z1Yc`6NR_$b007Z)jW#6EIu3qNkeqwx@D zI0j7YW*-B#+;hkb^jL_3Pmc?lD^G^K!b9(gchg*y^KPkmyLe^CVTslJKoNv?{7ey<#6L4u7Gx>6W@w|Jk?WM8@Wd~`)5&LP7D?9KZVSah+>L+Q4PVL% zM%Rl))8IWGIt)7C67#ou%6kMnPY7}1!9hWZ?ajcwC;27u69|YKVA4uJH-Io|>-tJX zFY#QREc~kd_qFVh_xvN)x!h8;b3Qux(l?D@Vv@E(xP zlcNdZV`Egr6&=E&lAd|$8SH02H1mLG$Vbbt2sG5m^BXH4nkk zUok!1iWQ`t?_fgB-`$(^Jviqqb z-&S}oo9yV;V19HB-|Y6sV&_hL%^z*8fr+S4a?MPO_i}?uVhjxYo^MZ~a;-O|1P_%# z3h(V`D%E=yv;@-*9U>hCbmM`A;v;!!vG@z^r8J zmVs9m=j%S1KKfxwE;tTLc8bJqs<)D9I1Q{P@6I2feqoBZ$++AVt?-*{#(#Yc{Feo~ zjdM{aC2mf2+?5iVo2>X<2`7}f%ii7Gm?wRc)VeFClK&DvcX$1tn(FHnx%Y+kLm2DH zv;XR&jt^+X^z_=MJrPA^Ha$4NM%DheX%d=VfR=Jwa*b}UgBI#kjwG~XDhBlUR&YsQ z%XQ-TF zpLr>Y%tNE2qwh`-AZEoC#axLx$!93f*tcT;A1@AyoXn&ei2rwn0Hvz`ORfHYIDr4VH`QG?gZA@+ z*Jp>QqJSgPQmmbJzOHDdRSS=4Uw};3y;GyG#fJUQ@da1i)t}u&%7)eDiBg|h|Iv?F zjmS-W2_mbwd!hBtGrPX|lL7Wi7Hq?(9-hw&EBc5|8}0_LYon;ARgMhV;6}?sNgFVZ zFT9^0Q}-bsnTEDCxAriCTjZGBPL!}87zOq+@W$Ygq)oi+2PS$@SEM&bGSfaX3Q9el ztrf5rcZPzL+x%J%d7%LTKerTn(%w#y=iyd)`#o}xxsN$Z99Z52#qQUuqtmHLLV7Nv zJlM?2pgDNK52Y0Zm4*hM=%PzIVLUd+YMw@be2*n58}sh1-y8H^uj~~G?A16Q=5$Hx ze7{FX2oR|X;f#F&9vdux^}1gOQJDC{T*vMEk(CQ2nrm)*Q<8<>cxombS2}ClcKqvu zJSgrw3Zzy|-yJg?-|K0{h@t(*;%*4A(ZnA&c2QX-vs)!G>-~tdT0Pa5IhRKyG(oQk zW&d2iCu8&3Hmfm#G~!M6c;PcrVH07g=MqM8*fAWX(oYqGLy&oLE+YTQPg0}O4|O`h zBk3CbL=@`|++ow-Y<<{9JLSdNZ+iiv^CLj74O32jK5Qg7-&aYM`GY`NP*B zmiGDayo;HtQLnf2&d;gGt2F}1@eZ9Oe={+(DC^4>FSbmU*cC10cC|gPx6r1atA7#O z>}!|g{C)&`qMWb_8(mr4>kujzdY5Bs7k1eYtMkX+tkVoZmu_FP0W6GNTPBxK2LLq) zh3w|vO9r5!y=9d0IdIoUIvg-VE1zF)I|HUFagt#%?!pYlV6?Ji{?={`^bVE~SKyI> zzS8&pw}_!wx4kQ0893=@b<e!j;Sh9kA(^vK}9~xXj2@H#1TGzgx z0eNh#R!LQMM%1Jz7;eqM<4wLLpbp2q?9*p@S%Z$uN+|x{6R;B%o97wfgGhsY2L*Q& z>di6)>9Ie@m+YX!cRJ|^=N*r!<{JB&{R%9?Qg^mc{eo(kxTK;oMG6XmEezn<2xk^U zQ^@9YA_OkP$sXkeja^;*9bZZHYjqoP4K2W`Z?-ktM!FPP>AX-33h1*)3F}7~G~ByK z$a8}W0Ax!{-Gl5#rTuW_{zEd|J>cvTyi>k)`4I#iygRV?gE>~sz#a1$V7*sWNh^?n zs`7BekS((fmHxW7t#pDHYJry@5g0%ipFwsR_eI)bzOID^d8IwK2j?p(FL;HIcc0|* zDX(60NODd;k_I_fp8%$s5?`^jhj_`$%<|fv*-a>~B%SATOeSqzBKUx_zWq_5k7Dmh z0c@$r3aVpZ*GQL{_Oz3y!y^#PTv_W&f#nxA>JLduK>muR=_L(MzwC4j0PNRI5y=z_ zf!omn%_}W0eqT+N*Igcejxqlo^V(QE66Np0Wx@U z$2({M7HUAaMJd)B8C?yoh*b(#L~2Q!+V1ONDGi1R6n1hV_cCL)@%4uSiwU8ik`Hez z1;((yG=Gxa9;>K>b4_|hX~14mq^ww8f9-@%HpVa(V*YSglh2a?+j=TW*6qY9+ksb!Hw&8j#KvyYmmXZIGZzvn;eTi zIHbgb&H~pWhmlQ9)sJND$9r0!DZ$OkJy*3h4tS}1 zQ!0tx)?doTdRDJDJ$MU?jS96ot4F!Nht!LAYGlUu^#0zpc)w6V%%v7Er&IY6<&!z4 z4Mcl}J|JH}Qd^t~`WlY5aw_m_KQBz;=O6O4ah&Om`q+!^Q7m=1rb>}h>8DFR&Icy zzOtazj^pPOm*M^Mi%zS22j$}mkAf;kY<2O79okO*qZUg-%Wo5n=k!^};|{GD6~=sh z1z#(j5Vl(t4_W*}9X0|ejZ?S_F4eZGO^7paxK=L)&x}Gp#=MeH$aR3 zjA$iVg+`HXEdE9FdW6M#|LHM7f0*!~%Di=YAvM&?Ry^@+T#nmf9zMLidBCl&tv!aA z3LP{?eNLg$=n>+Vg)Va+6__`v5W6kf4BFQ?2WsnsDQamC9(pJyvFX}let9H*N*;E- zEoTD6Q$7?M>sqwXDOKxP0eHk>eQ_!a+X;dQtZC|e7t6{SYnlGMa?dHrIsx?C!oFx3 zjSmQ)ZwP{2AKX7SC`TW$|ALR(*wibA$-Llht{Leid@?xba7aAc_8#KS?^Fez@b(Cl zKIW=AJ1?;s}iJBS;m077p|po_tyz ztlJXr&v&Z$%gZA3J@x7L1OHev4OJr^(*oEo?4o(FJsE2DG6}s;b=)GRFEh>S;W;P# zaN_(;aMq~BE1sFwDcadrBg+QjU6rQfFGo3=9veET0mrh&4G#!dW#n}MtE0d(7k&9Z zLs6LK*fGXEF4|9A`m2E-)uS=(Kb%in3MZ0@W~Mp#p=bR#AEy2~)vuLXIMY3Sc@}Fk zC@0ubou%_*6*34`DjN~2k*L`i7Orwj7eP+#esWE)X)#IEnE0dy_$I*@5~f&AyE+r6 z`#KM15aiR^g8IJ0Z3{2}$9?IN10L}0+YWW48fk1{i1&5@0M6XT)P#QP>#S}6_kLqq zz#6%WhdyxfQ(k=fqx_0<1tvw?humozf3$BA5c^ao1@n11AB8tFn|9l;eRTQjNA2nD z>^TXMynM%7tf6Rn%>w%U(%}=lF0;M`7qp5WFfc8Ib~L@(r~bT=RFYfus9?O-99vo& zK9{zj@+Gbzk8`B{$p+;7a@)c3-M4!NmbaY`2mrHY?>!EnX#Tya?cP0~5yj zyl8z5j!fOsMlM1ZgjW^6`q7d8NN+Y|F&jkMErk}=CCxT!=>K`iuMup?%*7Wh=_0i} zzo-$v)}@YA2jm)gGV9j6VymM))wfKrXrfwdQ}XEq8+d;EaDDbDl+ub;(D>JHW3-7` z(9e3;D&pg)%&3>ViCzURLR_CC1#3KoN4#cw=WxgMD3R88Yeb%Ltb&_>XH^)xRnz-3 zblibU(LnZ}q?9BR?}R1TqcAPEMETTflY6Z3(`lWO^fWEDrb^V^JKjefCgQV^@xlOK z^GOz)x4J`O=l(7vP)rr|b;ehkz3-4OO&z)v#aP>>G&zudf|ELZ_V4iYw@cCr@D=6fbE(^h)z{cXU|rMjfGzb5w> z2s0ozJOR~n341I)HSeur`|>c~f|Fu01S&gjPG$h6Att{+V-a(Y z%xXBmqX08Bz280p5!K6tHUkpJVrQG|l+484*`sZZ3uD59ZWY0t+xw=Dypg%)cWPY3 zQAQm0GsHF(N(b$4HO!}SyLH~T!%DHe{6JMzU*5a|a?Yn?eIY5H1TfA62&zl%J_i=( zG)-nxJ`iVUl4>`{UC1oyxE~;@4INPBKCUo(kdvB&$E?EqqVbi?W?1O%sexEW?;!Ux zlD=>jC%k?TYWY^;tI7o%N4iY9I_j9DM z!Yr3OXwu$Hrg=aF+MNgi)3&zu6}Nfi8qt{E54OGVL!VS&o1)?Kkrn1OJ(Lhc#---VHn-Qdm{14ScL`oL3n+iX;B<%_ zT7O|9cz9juYFDf^cS6zB$YyBrv_gRY&8ocpW8dKK=G1apC7D`T>Io(J%5M~`%jh*! zSTkj26$&eIvsEUn;xnzMb7u2Y*fJHS%gm=_W6)$?vdCECiQ_$9d}a>-JQZDDX4N-Q zWV5o@_y2HsP+fvz@ur&hJiEMV%#Ge4EitWO^E})->wS>3c<2-(-t#)Ycep4`K%qP% z*!jrR4!3GA1hJp2y+Lt^>rO3Kfwrn}Q?>YVP&iPuE1>^)c$!pRl zW*JW4dbAO-e!0)R(G&UA%f}Zzh?z6sgm4|TiWe9D&Zc^P-~JOigDPjW>7BabjqdIS z-$V#boLo6isSdEX>?L-k8cv5!qtgeX*a&&-mB}lcMkJ(JgokD7!au=L$IBVxNY~cL z#>6_)0JhfkJrLPfczHJeC$*y{@Va5i6(J2&I72Lq)+X^e*;yo84GsyXOw zxtHC*Ze4t>$!O_q)~Io`y-@z;yy6jShOcKaGU20jy{2j)c&v`2xY~h2z|<{xmNZeu zfh$(eA(xpI#x`BU?J9O@gZieV+}!%NqbC31^bom-Uc-DQ%gJhxQhtJfxA#FRz-{Sj zrnbCJe@SA{U!V%v<5B7h&&pDWjWHh?HzT|W!YwNDY-N|+94RWq= zAz^&oO0RN(gH2h;gl6P;=T0}R(riLzc(c+J?}b&!%3qAa~y5CCsOhM}e&8xl6XKevFu-2JieQsIhlStxpVLGmq9u zhMxQ1bp@^Ba!;iLQeyK~{1Z4-K`!DIEtOYXB;jvdJn4dp=!#^d>6Dr1JLBm9?zc9|m%iz0yW>Y0DpR8l^ zQQ=ZSqcQSNH`u+=M`34HJ3GHFYTD1tYN}Y6%tg1>*}6=~P6TKjpx!ieK$rjs-hkBIZQ16bC|~53}|<|4mq81{Wgwt zePAyQtW{$rBO9b$a?t&uSIK$f;}sGSst3FkUmWx*Xd-h*PyGFNQ9NODZQOHvbyek3Aw)BXg{?O*R8uImXL-# zUY)X|lD|IdN!e;o5k?&j7y|Wc`+-41BVuZz#~v)p6xYRK$P>x|$Xv6$yrO}HqcFIh z;%v$%CfTUsJdCPa&gba;++`78nnn`xh^irq&wJEh@pp0EK_%NteWVxH373FqVnOTn z)aC5ux}X4Yt5?Ut)ro#jLw)CnnCJQhe(R+`g`M3M0@Mkd%~d@5d*lO4ru82*wLBcw zk4yufoh}IdyH}W_7X;lHgw4BCgP-y@b`Ki}?!}-gZq5TEu zEBskHCUr}1^T_4uKl4c^`ffa+tFu0ygfJf;yScgx)P2IO;)IOpS$;sk37PwqKgPZT z>XexU1(hPg-+zA@ap81~;OL&Zt{D}*0Vnsol0|X&sIdqMJN}iX^jJ%=hT@&-^8ED` zn~#phk~>>lAwK8`D-g@OL6<*mFGsPrm6ezGuk+Ye_sA`jTAhYCTj^`ccGNg-RZr#D z+|>Gr-6FTZc~D}G+z@y%dPC7>pY|=bDfk>?x}?F~+Zp``_0v61sTMiIjvR_y6`lCj zcmEI#`3#%;8}9$&552fN5O6HDyFsxxjPJQwzV7|{c?)I#mKyUP?ZlV&c(*9`-(USB zYP|PE<`w{-AmWyRf*ytMaC75F>05G&{|5x*km`qqhGwcVsvSh#h<(W3Z}Zm#*qqDY6< zx3*Nh{(<*b{%UAwaB^`$vDP{a6sjHVmQ+;mqWA!+TNvXxVHOa~tX!iY-YjHn2BnHGO|SHHhW! wjl_F=IU6>&s#gX7zozQ{{|EbjzaE_XC|x$#yela!yBP) Date: Tue, 7 Jun 2022 11:08:59 +0800 Subject: [PATCH 21/48] vault backup: 2022-06-07 11:08:59 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md attachments/Pasted image 20220607110211.png --- .../03. Resources(資源)/FFMPEG/01. Setup.md | 8 +++++++- attachments/Pasted image 20220607110211.png | Bin 0 -> 75113 bytes 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 attachments/Pasted image 20220607110211.png diff --git a/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md b/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md index c45f319..06f4c99 100644 --- a/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md +++ b/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md @@ -20,4 +20,10 @@ sudo apt install ffmpeg Goto https://www.ffmpeg.org/download.html, and ![[Pasted image 20220607105807.png]] -And then browser jumps to https://www.gyan.dev/ffmpeg/builds/ +And then browser jumps to https://www.gyan.dev/ffmpeg/builds/, click [release build](https://www.gyan.dev/ffmpeg/builds/#release-builds), download **release-full**. +![[Pasted image 20220607110211.png]] + +Unzip the file, then put the folder to anywhere you like, e.g. `C:\libs`, so the full path of ffmpeg packages should looks like: `C:\libs\ffmpeg-5.0.1-full_build` + +#### Add to system variable +Add the path of ffmpeg packages to `PATH` system variable. \ No newline at end of file diff --git a/attachments/Pasted image 20220607110211.png b/attachments/Pasted image 20220607110211.png new file mode 100644 index 0000000000000000000000000000000000000000..9c2a2d64f13e5ef07e81f5ecde2d87a4a328da02 GIT binary patch literal 75113 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 z zIj)Z0i8Uk?n~d$B1)jf8Jf711@-d256zA;-ogc~(eZ@>h%~#$jRK9l8>(H+t(FnN`u6*rq8?z}++t+j=UMpEEBFg@n46v9AXm)6sUVqpC|8PAGyy`(dI^H{5MIJNdpaA{S`bZRPOlj%Qb>X)2P?IbDY;5 zcnu_4l|~d$k$6R$hgo0jt`C^ERHR!MHf97|C>Zoa7hrRwKM)-odE5NZeCVLS>!5*8}+4H4y21l)|LenyO$ETy1lwB?HqZ8=II6aZa{3c(GtP9 zHIjm^6`UPEKSg{tW!%fs-)ggoW?x7s3)tVYzJshQ0JpvhMj^8^uY@bFs_JS#Fx+<@ zU1%+4SE+-)FZQSx^oz|T7~_xFJkqsR8>9tobzi;jV==P=D18$UbWD8Y8BUA|Fu9E1t8F|qcNr!g^-)(#pWN59zoZOz{UD~GWe z-Ey(Bcd#uCQ+m+Bnj@5l3$?YG8Or88srQ=(g~U{_B=PMD?WPJ0&vsZO*B|Br5!Lm6qB-o{$xPt^bT4ImhI zk~ip1*b-+TF60;Mr&rY09NsX~2KZ2cMwLw$?o;u7!6rJ2(nixAAE6}Pnmg{x996Ka zeU;u8dp&LeP!D}3hi3&(&&}LI+WI71Z(m+ITj@jK`#|N2V?@P^+^XOc%->3pd&^(7 zs-;5dL+i7qC*$8PIzwK+?##_85GsDe`$m!LymN_@e6F(a+h~h7O09KK3cPY&nq^egJ83Or%_I4ybdmwyT`dYrHlhVJS$3 zDE|B$cQBY(2-I9&B5R@)_PF7boJ0uWG@d??ZNiQ8R57<*jI)ap;vXyK#d_OuCaY=^ zzglhvQsITF^)~Z=q+xZOYkut*b9^DPzb%#Mns`2?n<{sGJD1oZyw0AV-n$Iq6bTm` zdRS(5aQBTWznEb>?PDVsW|pngo^w-kW=trfG0s6Wdom+D1dqI2edV@&^9=r>EZ+&d zb>ebYXir!6#y6pKsqz#_MYry^Z�Y=C1~LOFApAosT#@T~xm6OoCShrQ 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�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 literal 0 HcmV?d00001 From dbacac3f0247600d5e61d58d023bd4ca79dcfa2a Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 7 Jun 2022 11:19:00 +0800 Subject: [PATCH 22/48] vault backup: 2022-06-07 11:19:00 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md attachments/Pasted image 20220607110949.png --- .../03. Resources(資源)/FFMPEG/01. Setup.md | 3 ++- attachments/Pasted image 20220607110949.png | Bin 0 -> 71973 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 attachments/Pasted image 20220607110949.png diff --git a/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md b/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md index 06f4c99..2c636e4 100644 --- a/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md +++ b/02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md @@ -26,4 +26,5 @@ And then browser jumps to https://www.gyan.dev/ffmpeg/builds/, click [release bu Unzip the file, then put the folder to anywhere you like, e.g. `C:\libs`, so the full path of ffmpeg packages should looks like: `C:\libs\ffmpeg-5.0.1-full_build` #### Add to system variable -Add the path of ffmpeg packages to `PATH` system variable. \ No newline at end of file +Add the path of bin of ffmpeg packages to `PATH` system variable. +![[Pasted image 20220607110949.png]] \ No newline at end of file diff --git a/attachments/Pasted image 20220607110949.png b/attachments/Pasted image 20220607110949.png new file mode 100644 index 0000000000000000000000000000000000000000..9265c04f59d391e72c4d3e6f605f5d1fee6c1333 GIT binary patch literal 71973 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 v)pWse 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 BohASP literal 0 HcmV?d00001 From 70d30f033b6b76d3785e3fa268697043e2182dab Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 7 Jun 2022 13:45:42 +0800 Subject: [PATCH 23/48] vault backup: 2022-06-07 13:45:42 Affected files: .obsidian/workspace --- .obsidian/workspace | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index 2dd8613..236af67 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,8 +10,8 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", - "mode": "source", + "file": "00. TOP/01. TODO.md", + "mode": "preview", "source": true } } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md" + "file": "00. TOP/01. TODO.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", + "file": "00. TOP/01. TODO.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,10 +125,10 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", "02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md", "02. PARA/03. Resources(資源)/FFMpeg.md", - "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/99. templates/日記.md", "02. PARA/01. Project(專案)/008. Sentinel.md", "01. Daily/2022-06-06(週一).md", From 595e975baf211db55d375675cdc5c58c2a054a70 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 7 Jun 2022 14:25:43 +0800 Subject: [PATCH 24/48] vault backup: 2022-06-07 14:25:43 Affected files: 00. TOP/01. TODO.md --- 00. TOP/01. TODO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/00. TOP/01. TODO.md b/00. TOP/01. TODO.md index 2af4d41..953c61c 100644 --- a/00. TOP/01. TODO.md +++ b/00. TOP/01. TODO.md @@ -15,7 +15,7 @@ - [ ] 在測試項目的主欄位上顯示test time 🛫 2022-06-06 📅 2022-06-10 - [ ] test config 🛫 2022-06-06 📅 2022-06-10 - TestAllFormatsVTF - - [ ] 在測試細項表格上顯示詳細說明 🛫 2022-06-06 📅 2022-06-10 + - [x] 在測試細項表格上顯示詳細說明 🛫 2022-06-06 📅 2022-06-10 ✅ 2022-06-07 - [ ] Show "VideoFormats: "MaxFpsMaxResolutionOnly" to outside, let user understand the test purpose. 🛫 2022-06-06 📅 2022-06-10 - [ ] List max fps of all resolution of all format on side bar of section 🛫 2022-06-06 📅 2022-06-10 - TestGpsDiff From 27a6c587e2e264bd76402c0d55e207eb3ae5bf04 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 7 Jun 2022 15:05:44 +0800 Subject: [PATCH 25/48] vault backup: 2022-06-07 15:05:44 Affected files: .obsidian/workspace --- .obsidian/workspace | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index 236af67..fa34dd8 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "00. TOP/01. TODO.md", + "file": "02. PARA/01. Project(專案)/008. Sentinel.md", "mode": "preview", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "00. TOP/01. TODO.md" + "file": "02. PARA/01. Project(專案)/008. Sentinel.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "00. TOP/01. TODO.md", + "file": "02. PARA/01. Project(專案)/008. Sentinel.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,12 +125,12 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "02. PARA/01. Project(專案)/008. Sentinel.md", "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", "02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md", "02. PARA/03. Resources(資源)/FFMpeg.md", "02. PARA/03. Resources(資源)/99. templates/日記.md", - "02. PARA/01. Project(專案)/008. Sentinel.md", "01. Daily/2022-06-06(週一).md", "02. PARA/03. Resources(資源)/Qt.md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", From cf49f5ccf9c0f03b637a962107cbe2b48633e2b2 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 7 Jun 2022 20:42:41 +0800 Subject: [PATCH 26/48] vault backup: 2022-06-07 20:42:41 Affected files: .obsidian/workspace --- .obsidian/workspace | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index fa34dd8..5ba4e88 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,8 +10,8 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/01. Project(專案)/008. Sentinel.md", - "mode": "preview", + "file": "00. TOP/01. TODO.md", + "mode": "source", "source": true } } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/01. Project(專案)/008. Sentinel.md" + "file": "00. TOP/01. TODO.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/01. Project(專案)/008. Sentinel.md", + "file": "00. TOP/01. TODO.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,8 +125,8 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ - "02. PARA/01. Project(專案)/008. Sentinel.md", "00. TOP/01. TODO.md", + "02. PARA/01. Project(專案)/008. Sentinel.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", "02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md", "02. PARA/03. Resources(資源)/FFMpeg.md", From 1bbd66d5ceedf6f2d30f0faad91aa6d303748b86 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Wed, 8 Jun 2022 10:55:41 +0800 Subject: [PATCH 27/48] vault backup: 2022-06-08 10:55:41 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: .obsidian/workspace 02. PARA/03. Resources(資源)/C++17/rvalue.md --- .obsidian/workspace | 10 +++++----- 02. PARA/03. Resources(資源)/C++17/rvalue.md | 13 +++++++++++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index 5ba4e88..6d6aad3 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "00. TOP/01. TODO.md", + "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "00. TOP/01. TODO.md" + "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "00. TOP/01. TODO.md", + "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,6 +125,7 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "02. PARA/03. Resources(資源)/C++17/rvalue.md", "00. TOP/01. TODO.md", "02. PARA/01. Project(專案)/008. Sentinel.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", @@ -133,7 +134,6 @@ "02. PARA/03. Resources(資源)/99. templates/日記.md", "01. Daily/2022-06-06(週一).md", "02. PARA/03. Resources(資源)/Qt.md", - "02. PARA/03. Resources(資源)/C++17/智慧指標.md", - "02. PARA/04. Archives(歸檔)/01. Project(專案)/004. Group firmware update check.md" + "02. PARA/03. Resources(資源)/C++17/智慧指標.md" ] } \ No newline at end of file diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index f45517a..303820d 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -1,9 +1,18 @@ - 等號右邊的值 - 臨時的值,例如運算的結果 +- 無法被取址(address-of)的物件 # rvalue參考 -可以用兩個`&`來參考rvalue。例如: +可以用`&&`來參考rvalue。例如: ``` int c{5}; int&& rtepm {c + 3}; -``` \ No newline at end of file +``` + +關於lvalue、rvalue的分別可以參考[Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category),或是[rvalue 參考](https://openhome.cc/Gossip/CppGossip/RvalueReference.html)等文章。這邊講用法跟好處。 +rvalue reference可以減少無間的複製成本。例如: +```cpp +std::string longStr = "qwertyuiopasdfghjklzxcbnm"; +std::string anotherLong = longStr; +``` +這時longStr會被複製一份anotherLong,把longStr換成很大的buffer, \ No newline at end of file From d89c1072d4cfd62ca57703e554b7db9cc4c26e47 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Wed, 8 Jun 2022 11:05:41 +0800 Subject: [PATCH 28/48] vault backup: 2022-06-08 11:05:41 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/rvalue.md --- 02. PARA/03. Resources(資源)/C++17/rvalue.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index 303820d..f98875c 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -15,4 +15,14 @@ rvalue reference可以減少無間的複製成本。例如: std::string longStr = "qwertyuiopasdfghjklzxcbnm"; std::string anotherLong = longStr; ``` -這時longStr會被複製一份anotherLong,把longStr換成很大的buffer, \ No newline at end of file +這時longStr會被複製一份anotherLong,把longStr換成很大的buffer,其複製成本就更大了。用rvalue reference可以消除這個複製成本。如下: +```cpp +std::string longStr = "qwertyuiopasdfghjklzxcbnm"; +std::string&& anotherLong = longStr; + +std::cout << anotherLong; // "qwertyuiopasdfghjklzxcbnm" +//std::cout << longStr; // Undefined bahavior, don't do this +``` +上面的例子,longStr的內容被「轉移」給anotherLong,所以不可以再longStr,這時候longStr的內容取決於move operator的作法。 + +不過 \ No newline at end of file From 58178415c40942991d8c970a4b6d0aecc6326cd2 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Wed, 8 Jun 2022 13:52:41 +0800 Subject: [PATCH 29/48] vault backup: 2022-06-08 13:52:41 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/rvalue.md --- .../03. Resources(資源)/C++17/rvalue.md | 20 +++---------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index f98875c..38b6c14 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -9,20 +9,6 @@ int c{5}; int&& rtepm {c + 3}; ``` -關於lvalue、rvalue的分別可以參考[Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category),或是[rvalue 參考](https://openhome.cc/Gossip/CppGossip/RvalueReference.html)等文章。這邊講用法跟好處。 -rvalue reference可以減少無間的複製成本。例如: -```cpp -std::string longStr = "qwertyuiopasdfghjklzxcbnm"; -std::string anotherLong = longStr; -``` -這時longStr會被複製一份anotherLong,把longStr換成很大的buffer,其複製成本就更大了。用rvalue reference可以消除這個複製成本。如下: -```cpp -std::string longStr = "qwertyuiopasdfghjklzxcbnm"; -std::string&& anotherLong = longStr; - -std::cout << anotherLong; // "qwertyuiopasdfghjklzxcbnm" -//std::cout << longStr; // Undefined bahavior, don't do this -``` -上面的例子,longStr的內容被「轉移」給anotherLong,所以不可以再longStr,這時候longStr的內容取決於move operator的作法。 - -不過 \ No newline at end of file +## 參考 +- [Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category) +- [rvalue 參考](https://openhome.cc/Gossip/CppGossip/RvalueReference.html) \ No newline at end of file From 4fba5827bd3bbf565efaf942d21ef50b1f3d3871 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Wed, 8 Jun 2022 14:32:41 +0800 Subject: [PATCH 30/48] vault backup: 2022-06-08 14:32:41 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: .obsidian/workspace 02. PARA/03. Resources(資源)/C++17/lvalue.md 02. PARA/03. Resources(資源)/C++17/rvalue.md 02. PARA/03. Resources(資源)/git/submodule.md --- .obsidian/workspace | 14 +++++++------- 02. PARA/03. Resources(資源)/C++17/lvalue.md | 3 ++- 02. PARA/03. Resources(資源)/C++17/rvalue.md | 6 +++--- 02. PARA/03. Resources(資源)/git/submodule.md | 0 4 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 02. PARA/03. Resources(資源)/git/submodule.md diff --git a/.obsidian/workspace b/.obsidian/workspace index 6d6aad3..649845a 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", + "file": "02. PARA/03. Resources(資源)/git/submodule.md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md" + "file": "02. PARA/03. Resources(資源)/git/submodule.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", + "file": "02. PARA/03. Resources(資源)/git/submodule.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,15 +125,15 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "02. PARA/03. Resources(資源)/git/submodule.md", + "02. PARA/03. Resources(資源)/git.md", "02. PARA/03. Resources(資源)/C++17/rvalue.md", + "02. PARA/03. Resources(資源)/C++17/lvalue.md", "00. TOP/01. TODO.md", "02. PARA/01. Project(專案)/008. Sentinel.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", "02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md", "02. PARA/03. Resources(資源)/FFMpeg.md", - "02. PARA/03. Resources(資源)/99. templates/日記.md", - "01. Daily/2022-06-06(週一).md", - "02. PARA/03. Resources(資源)/Qt.md", - "02. PARA/03. Resources(資源)/C++17/智慧指標.md" + "02. PARA/03. Resources(資源)/99. templates/日記.md" ] } \ No newline at end of file diff --git a/02. PARA/03. Resources(資源)/C++17/lvalue.md b/02. PARA/03. Resources(資源)/C++17/lvalue.md index da4b4b1..6c571ec 100644 --- a/02. PARA/03. Resources(資源)/C++17/lvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/lvalue.md @@ -1,2 +1,3 @@ +lvalue 是指: - 等號左邊的值 -- 「有固定address」的變數 \ No newline at end of file +- 可以被「取址」的變數 \ No newline at end of file diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index 38b6c14..aa8ec8b 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -1,12 +1,12 @@ +rvalue 是指: - 等號右邊的值 - 臨時的值,例如運算的結果 - 無法被取址(address-of)的物件 -# rvalue參考 可以用`&&`來參考rvalue。例如: -``` +```cpp int c{5}; -int&& rtepm {c + 3}; +int&& rtepm {c + 3}; // rtepm等於c + 3的結果 ``` ## 參考 diff --git a/02. PARA/03. Resources(資源)/git/submodule.md b/02. PARA/03. Resources(資源)/git/submodule.md new file mode 100644 index 0000000..e69de29 From 97d82d52e8d81d4bfa4778a2247960b91ae4d81c Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Wed, 8 Jun 2022 14:52:43 +0800 Subject: [PATCH 31/48] vault backup: 2022-06-08 14:52:43 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: .obsidian/workspace 02. PARA/03. Resources(資源)/C++17/智慧指標.md --- .obsidian/workspace | 10 +++++----- 02. PARA/03. Resources(資源)/C++17/智慧指標.md | 6 ++++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index 649845a..833bee7 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/git/submodule.md", + "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/git/submodule.md" + "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/git/submodule.md", + "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,6 +125,7 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/git/submodule.md", "02. PARA/03. Resources(資源)/git.md", "02. PARA/03. Resources(資源)/C++17/rvalue.md", @@ -133,7 +134,6 @@ "02. PARA/01. Project(專案)/008. Sentinel.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", "02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md", - "02. PARA/03. Resources(資源)/FFMpeg.md", - "02. PARA/03. Resources(資源)/99. templates/日記.md" + "02. PARA/03. Resources(資源)/FFMpeg.md" ] } \ No newline at end of file diff --git a/02. PARA/03. Resources(資源)/C++17/智慧指標.md b/02. PARA/03. Resources(資源)/C++17/智慧指標.md index 0e8171c..2e2b28b 100644 --- a/02. PARA/03. Resources(資源)/C++17/智慧指標.md +++ b/02. PARA/03. Resources(資源)/C++17/智慧指標.md @@ -22,9 +22,11 @@ auto bigBuf = std::make_unique(bufferSize); 一旦 `unique_ptr` 建立之後,使用起來就跟一般指標沒有兩樣,都是用 `->` 來操作:`bigBuf->setXXX()` or `bigBuf->getXXX()`。 但是別忘記 `unique_ptr` 本身還是一個local variable,所以我們可以用 `.` 來操作 `unique_ptr` ,例如我們可以用 `.reset()` 重新配一個指標: ```cpp -bigBuf.reset(std::make_unique(bufferSizeLarger)); +BigBuffer* pBuffer = new BigBuffer(); +bigBuf.reset(pBuffer); ``` -這時候舊指標會自動delete,然後指向新的指標(如果記憶體分配有成功的話),或者指向 `nullptr` (記憶體分配失敗)。 +這時候舊指標會自動delete,如果記憶體分配有成功的話,bigBuf會接管剛剛new出來的指標,或者變成 `nullptr` (記憶體分配失敗)。 + 如果單純想要釋放指標,那就單純的呼叫 `reset()` 就好。 ```cpp bigBuf.reset(); // Now I'm nullptr From a963b9e1d29a04282da1b9788dc9e9a59cf510de Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Wed, 8 Jun 2022 15:35:31 +0800 Subject: [PATCH 32/48] vault backup: 2022-06-08 15:35:30 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: .obsidian/workspace 02. PARA/03. Resources(資源)/git/submodule.md attachments/Pasted image 20220608152709.png --- .obsidian/workspace | 8 +++--- .../03. Resources(資源)/git/submodule.md | 27 ++++++++++++++++++ attachments/Pasted image 20220608152709.png | Bin 0 -> 23338 bytes 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 attachments/Pasted image 20220608152709.png diff --git a/.obsidian/workspace b/.obsidian/workspace index 833bee7..d270669 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md", + "file": "02. PARA/03. Resources(資源)/git/submodule.md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md" + "file": "02. PARA/03. Resources(資源)/git/submodule.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md", + "file": "02. PARA/03. Resources(資源)/git/submodule.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,8 +125,8 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ - "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/git/submodule.md", + "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/git.md", "02. PARA/03. Resources(資源)/C++17/rvalue.md", "02. PARA/03. Resources(資源)/C++17/lvalue.md", diff --git a/02. PARA/03. Resources(資源)/git/submodule.md b/02. PARA/03. Resources(資源)/git/submodule.md index e69de29..6877d71 100644 --- a/02. PARA/03. Resources(資源)/git/submodule.md +++ b/02. PARA/03. Resources(資源)/git/submodule.md @@ -0,0 +1,27 @@ +## 建立 Git Submodule +``` +git submodule add [] +``` +新增之後,用 git status 會發現多了兩個東西需要 commit: +![[Pasted image 20220608152709.png]] + +第一個檔案 .gitmodules,裡面紀錄 submodule 的對應關係,內容大概像這樣: +``` +[submodule "RobotRunQA"] + path = RobotRunQA + url = git@github.com-logi:JuiwenHsu/RobotRunQA.git +``` + +接下來剩3個步驟: +1. 提交 `.gitmodule`:`git add .gitmodule ; git push origin master` +2. 跟git說我們有新增一個submodule:`git submodule init` +3. 把submodule pull下來:`git submodule update` + +## Clone repository and submodule +當clone一個有submodule的repo的時候,我們還需要 `git submodule init` 跟 `git submodule update` ,例如: +``` +git clone https://xxx/xxx.git +cd xxx +git submodule init +git submodule update +``` \ No newline at end of file diff --git a/attachments/Pasted image 20220608152709.png b/attachments/Pasted image 20220608152709.png new file mode 100644 index 0000000000000000000000000000000000000000..3b407b4659fe8771914b38150bcf48e3c7cc0cc5 GIT binary patch literal 23338 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 Date: Wed, 8 Jun 2022 15:45:31 +0800 Subject: [PATCH 33/48] vault backup: 2022-06-08 15:45:30 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/git/submodule.md --- 02. PARA/03. Resources(資源)/git/submodule.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02. PARA/03. Resources(資源)/git/submodule.md b/02. PARA/03. Resources(資源)/git/submodule.md index 6877d71..b519b86 100644 --- a/02. PARA/03. Resources(資源)/git/submodule.md +++ b/02. PARA/03. Resources(資源)/git/submodule.md @@ -1,6 +1,6 @@ ## 建立 Git Submodule ``` -git submodule add [] +git submodule add [] ``` 新增之後,用 git status 會發現多了兩個東西需要 commit: ![[Pasted image 20220608152709.png]] From 60a977bfab7dadbbf31909cfc650f8cde2b18a7e Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Wed, 8 Jun 2022 16:05:32 +0800 Subject: [PATCH 34/48] vault backup: 2022-06-08 16:05:32 Affected files: .obsidian/workspace 00. TOP/01. TODO.md --- .obsidian/workspace | 10 +++++----- 00. TOP/01. TODO.md | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index d270669..c59fb08 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,8 +10,8 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/git/submodule.md", - "mode": "source", + "file": "00. TOP/01. TODO.md", + "mode": "preview", "source": true } } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/git/submodule.md" + "file": "00. TOP/01. TODO.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/git/submodule.md", + "file": "00. TOP/01. TODO.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,12 +125,12 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/git/submodule.md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/git.md", "02. PARA/03. Resources(資源)/C++17/rvalue.md", "02. PARA/03. Resources(資源)/C++17/lvalue.md", - "00. TOP/01. TODO.md", "02. PARA/01. Project(專案)/008. Sentinel.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", "02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md", diff --git a/00. TOP/01. TODO.md b/00. TOP/01. TODO.md index 953c61c..79ec0dc 100644 --- a/00. TOP/01. TODO.md +++ b/00. TOP/01. TODO.md @@ -16,8 +16,8 @@ - [ ] test config 🛫 2022-06-06 📅 2022-06-10 - TestAllFormatsVTF - [x] 在測試細項表格上顯示詳細說明 🛫 2022-06-06 📅 2022-06-10 ✅ 2022-06-07 - - [ ] Show "VideoFormats: "MaxFpsMaxResolutionOnly" to outside, let user understand the test purpose. 🛫 2022-06-06 📅 2022-06-10 - - [ ] List max fps of all resolution of all format on side bar of section 🛫 2022-06-06 📅 2022-06-10 + - [x] Show "VideoFormats: "MaxFpsMaxResolutionOnly" to outside, let user understand the test purpose. 🛫 2022-06-06 📅 2022-06-10 ✅ 2022-06-08 + - [x] List max fps of all resolution of all format on side bar of section 🛫 2022-06-06 📅 2022-06-10 ✅ 2022-06-08 - TestGpsDiff - [ ] List all format 🛫 2022-06-06 📅 2022-06-10 From c4459681d79f5e73ef3c4f767041f6e7f29fb5c6 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Wed, 8 Jun 2022 16:25:41 +0800 Subject: [PATCH 35/48] vault backup: 2022-06-08 16:25:41 Affected files: .obsidian/workspace --- .obsidian/workspace | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index c59fb08..813a0b4 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -126,12 +126,12 @@ "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ "00. TOP/01. TODO.md", + "02. PARA/01. Project(專案)/008. Sentinel.md", "02. PARA/03. Resources(資源)/git/submodule.md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/git.md", "02. PARA/03. Resources(資源)/C++17/rvalue.md", "02. PARA/03. Resources(資源)/C++17/lvalue.md", - "02. PARA/01. Project(專案)/008. Sentinel.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", "02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md", "02. PARA/03. Resources(資源)/FFMpeg.md" From 126054175ba584a1cf6132441bf3d2e0712555d6 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Wed, 8 Jun 2022 17:59:42 +0800 Subject: [PATCH 36/48] vault backup: 2022-06-08 17:59:42 Affected files: .obsidian/workspace --- .obsidian/workspace | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index 813a0b4..a6ee313 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "00. TOP/01. TODO.md", + "file": "02. PARA/01. Project(專案)/008. Sentinel.md", "mode": "preview", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "00. TOP/01. TODO.md" + "file": "02. PARA/01. Project(專案)/008. Sentinel.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "00. TOP/01. TODO.md", + "file": "02. PARA/01. Project(專案)/008. Sentinel.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,8 +125,8 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ - "00. TOP/01. TODO.md", "02. PARA/01. Project(專案)/008. Sentinel.md", + "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/git/submodule.md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/git.md", From 00e9b18a3761c3caca798bd5bab8e230a216c744 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 9 Jun 2022 11:45:59 +0800 Subject: [PATCH 37/48] vault backup: 2022-06-09 11:45:59 Affected files: .obsidian/workspace --- .obsidian/workspace | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index a6ee313..d91ed9d 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/01. Project(專案)/008. Sentinel.md", + "file": "00. TOP/01. TODO.md", "mode": "preview", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/01. Project(專案)/008. Sentinel.md" + "file": "00. TOP/01. TODO.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/01. Project(專案)/008. Sentinel.md", + "file": "00. TOP/01. TODO.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,11 +125,11 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ - "02. PARA/01. Project(專案)/008. Sentinel.md", "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/git/submodule.md", - "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/git.md", + "02. PARA/01. Project(專案)/008. Sentinel.md", + "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/C++17/rvalue.md", "02. PARA/03. Resources(資源)/C++17/lvalue.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", From 48bb4e08d684065b001365f852621b4d407fdf0a Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 9 Jun 2022 13:40:26 +0800 Subject: [PATCH 38/48] vault backup: 2022-06-09 13:40:26 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: .obsidian/workspace 02. PARA/03. Resources(資源)/C++17/rvalue.md --- .obsidian/workspace | 10 +++++----- 02. PARA/03. Resources(資源)/C++17/rvalue.md | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index d91ed9d..7e4c6a6 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,8 +10,8 @@ "state": { "type": "markdown", "state": { - "file": "00. TOP/01. TODO.md", - "mode": "preview", + "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", + "mode": "source", "source": true } } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "00. TOP/01. TODO.md" + "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "00. TOP/01. TODO.md", + "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,12 +125,12 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "02. PARA/03. Resources(資源)/C++17/rvalue.md", "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/git/submodule.md", "02. PARA/03. Resources(資源)/git.md", "02. PARA/01. Project(專案)/008. Sentinel.md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", - "02. PARA/03. Resources(資源)/C++17/rvalue.md", "02. PARA/03. Resources(資源)/C++17/lvalue.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", "02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md", diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index aa8ec8b..c7603f3 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -9,6 +9,8 @@ int c{5}; int&& rtepm {c + 3}; // rtepm等於c + 3的結果 ``` + + ## 參考 - [Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category) - [rvalue 參考](https://openhome.cc/Gossip/CppGossip/RvalueReference.html) \ No newline at end of file From 5f5e32ea884d52141205bcdbca985f2e795c3846 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 9 Jun 2022 13:50:26 +0800 Subject: [PATCH 39/48] vault backup: 2022-06-09 13:50:26 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/rvalue.md --- .../03. Resources(資源)/C++17/rvalue.md | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index c7603f3..0ffb5d0 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -3,12 +3,41 @@ rvalue 是指: - 臨時的值,例如運算的結果 - 無法被取址(address-of)的物件 -可以用`&&`來參考rvalue。例如: +## rvalue reference +一般的參考只能參考[[lvalue]],如下的程式是ok的: ```cpp -int c{5}; -int&& rtepm {c + 3}; // rtepm等於c + 3的結果 +int a = 10; +int& b = a; ``` +但是像這樣就不行了: +```cpp +int a = 10; +int b = 5; +int& c = a + b; +``` + +因為`a+b`是一個rvalue(臨時的值,沒辦法取址),所以無法參考。 +但是可以用`&&`來參考rvalue。例如: +```cpp +int a = 10; +int b = 5; +int&& c = a + b; // c = 15 +``` + +而不用這樣: +```cpp +int a = 10; +int b = 5; +int r = a + b; +int& c = r; +``` + +了解rvalue reference之後,就可以實作類別的 move constructor 跟move assignment operator。 + +## Move constructor +Mov + ## 參考 From f8e28d70faf13c93413308c75478852fc34750d2 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 9 Jun 2022 14:00:26 +0800 Subject: [PATCH 40/48] vault backup: 2022-06-09 14:00:26 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/rvalue.md --- .../03. Resources(資源)/C++17/rvalue.md | 49 ++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index 0ffb5d0..7088a41 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -35,8 +35,53 @@ int& c = r; 了解rvalue reference之後,就可以實作類別的 move constructor 跟move assignment operator。 -## Move constructor -Mov +## Move assignment operator +假設我們有一個class叫BigBuffer,定義如下: +```cpp +class BigBuffer { +public: + BigBuffer(int size=100*1024*1024) : + bufferSize(size) + { + std::cout << "BigBuffer constructor\n"; + this->buffer = std::make_unique(bufferSize); + } + + ~BigBuffer() { + std::cout << "BigBuffer destructor\n"; + } + + BigBuffer(const BigBuffer& src) { + std::cout << "BigBuffer copy constructor\n"; + bufferSize = src.bufferSize; + buffer = std::make_unique(bufferSize); + std::memcpy(buffer.get(), src.buffer.get(), bufferSize); + } + + BigBuffer& operator= (BigBuffer& src) { + std::cout << "BigBuffer copy operator\n"; + bufferSize = src.bufferSize; + buffer = std::make_unique(bufferSize); + std::memcpy(buffer.get(), src.buffer.get(), bufferSize); + return *this; + } + +private: + int bufferSize = 0; + std::unique_ptr buffer = nullptr; +}; +``` + +這個class的特色就是每一次使用都會佔用100MB的記憶體空間,想像下面的程式的動作: +```cpp +BigBuffer buf1; +// Do something with buf1 +// Assign to buf2 +BigBuffer buf2 = buf1; +``` + +這會先產生buf1,然後把buf1 copy給buf2。如果我們想要省下copy的成本,這時候 Move assignment operator(就是 `=`)就可以派上用場了。 +幫 From fa039f46411e6fb7d7ab3e69b31480cd91dae41e Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 9 Jun 2022 14:10:26 +0800 Subject: [PATCH 41/48] vault backup: 2022-06-09 14:10:26 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/rvalue.md --- .../03. Resources(資源)/C++17/rvalue.md | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index 7088a41..341acb3 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -80,10 +80,47 @@ BigBuffer buf1; BigBuffer buf2 = buf1; ``` +執行訊息: +``` +BigBuffer constructor +BigBuffer copy constructor, copy 104857600Bytes +BigBuffer destructor +BigBuffer destructor +``` + 這會先產生buf1,然後把buf1 copy給buf2。如果我們想要省下copy的成本,這時候 Move assignment operator(就是 `=`)就可以派上用場了。 -幫 +幫 BigBuffer 加一個 Move assignment operator: +```cpp +class BigBuffer { +public: + ... + + BigBuffer& operator=(BigBuffer&& src) noexcept { + std::cout << "BigBuffer move operator\n"; + bufferSize = src.bufferSize; + buffer = std::move(src.buffer); + + src.buffer.reset(); + src.bufferSize = 0; + return *this; + } + ... +``` +這個 Move assignment operator 的參數就是一個 rvalue reference,我們把來源的 bufferSize 跟 buffer指標「移到」我們這邊,而不是完整的複製一份。在轉移之後呢,當然也要把來源清空,讓轉移更加明確。 +有了 Move assignment operator 之後,在執行一次原本的程式,你會發現訊息......沒有變,還是一樣呼叫 copy assignment operator 來複製了100MB的buffer,這時我們需要明確的告訴 compiler 我們要「移動」物件,而不是複製它,把原本的程式改為: +```cpp +BigBuffer buf1; +// Do something with buf1 +// Assign to buf2 +BigBuffer buf2 = std::move(buf1); +``` + +我們用 `std::move()` 來「移動」物件,這時輸出變成 +``` + +``` ## 參考 - [Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category) From bf8ebd3a93271ccf88e11c9f4242a0c462de5387 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 9 Jun 2022 14:20:26 +0800 Subject: [PATCH 42/48] vault backup: 2022-06-09 14:20:26 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/rvalue.md --- .../03. Resources(資源)/C++17/rvalue.md | 53 ++++++++++++++----- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index 341acb3..1be6fa8 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -35,7 +35,7 @@ int& c = r; 了解rvalue reference之後,就可以實作類別的 move constructor 跟move assignment operator。 -## Move assignment operator +## Move constructor 假設我們有一個class叫BigBuffer,定義如下: ```cpp class BigBuffer { @@ -82,34 +82,32 @@ BigBuffer buf2 = buf1; 執行訊息: ``` -BigBuffer constructor -BigBuffer copy constructor, copy 104857600Bytes -BigBuffer destructor -BigBuffer destructor +BigBuffer constructor // create buf1 +BigBuffer copy constructor, copy 104857600Bytes // copy buf1 to buf2 +... ``` -這會先產生buf1,然後把buf1 copy給buf2。如果我們想要省下copy的成本,這時候 Move assignment operator(就是 `=`)就可以派上用場了。 -幫 BigBuffer 加一個 Move assignment operator: +這會先產生buf1,然後把buf1 copy給buf2。如果我們想要省下copy的成本,這時候 Move constructor 就可以派上用場了。 +幫 BigBuffer 加一個 Move constructor: ```cpp class BigBuffer { public: ... - BigBuffer& operator=(BigBuffer&& src) noexcept { - std::cout << "BigBuffer move operator\n"; + BigBuffer(BigBuffer&& src) noexcept { + std::cout << "BigBuffer move constructor\n"; bufferSize = src.bufferSize; buffer = std::move(src.buffer); - + src.buffer.reset(); src.bufferSize = 0; - return *this; } ... ``` -這個 Move assignment operator 的參數就是一個 rvalue reference,我們把來源的 bufferSize 跟 buffer指標「移到」我們這邊,而不是完整的複製一份。在轉移之後呢,當然也要把來源清空,讓轉移更加明確。 +這個 move constructor 的參數就是一個 rvalue reference,我們把來源的 bufferSize 跟 buffer指標「移到」我們這邊,而不是完整的複製一份。在轉移之後呢,當然也要把來源清空,讓轉移更加明確。 -有了 Move assignment operator 之後,在執行一次原本的程式,你會發現訊息......沒有變,還是一樣呼叫 copy assignment operator 來複製了100MB的buffer,這時我們需要明確的告訴 compiler 我們要「移動」物件,而不是複製它,把原本的程式改為: +有了 Move assignment operator 之後,在執行一次原本的程式,你會發現訊息......沒有變,還是一樣呼叫 copy constructor 來複製了100MB的buffer,這時我們需要明確的告訴 compiler 我們要「移動」物件,而不是複製它,把原本的程式改為: ```cpp BigBuffer buf1; // Do something with buf1 @@ -119,6 +117,35 @@ BigBuffer buf2 = std::move(buf1); 我們用 `std::move()` 來「移動」物件,這時輸出變成 ``` +BigBuffer constructor // create buf1 +BigBuffer move constructor // move buf1 to buf2, buf1 has nullptr now +... +``` + +另外一個情形也可以受益於此,假如我們有個function會產生 BigBuffer,如下: +```cpp +BigBuffer BigBufferCreator() { + std::cout << "BigBufferCreator: Create a BigBuffer!\n"; + BigBuffer tempb; + // do something + std::cout << "BigBufferCreator: return\n"; + return tempb; +} + +BigBuffer b = BigBufferCreator(); // copy tempb to b +``` + +在沒有Move constructor的情況下,上面的程式會先產生一個 tempb,然後複製給 b,訊息: +``` +BigBufferCreator: Create a BigBuffer! +BigBuffer constructor +BigBufferCreator: return +BigBuffer copy constructor, copy 104857600Bytes +... +``` + +在有Move constructor的情況下,訊息就變成: +``` ``` From 886122f8da4ef749757393740d804bdb15da4632 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 9 Jun 2022 14:30:26 +0800 Subject: [PATCH 43/48] vault backup: 2022-06-09 14:30:26 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/rvalue.md --- .../03. Resources(資源)/C++17/rvalue.md | 49 +++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index 1be6fa8..a8c2cd9 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -33,7 +33,7 @@ int r = a + b; int& c = r; ``` -了解rvalue reference之後,就可以實作類別的 move constructor 跟move assignment operator。 +了解rvalue reference之後,就可以實作類別的 move constructor 跟move assignment operator。這可以減少複製的成本。 ## Move constructor 假設我們有一個class叫BigBuffer,定義如下: @@ -103,6 +103,7 @@ public: src.bufferSize = 0; } ... +}; ``` 這個 move constructor 的參數就是一個 rvalue reference,我們把來源的 bufferSize 跟 buffer指標「移到」我們這邊,而不是完整的複製一份。在轉移之後呢,當然也要把來源清空,讓轉移更加明確。 @@ -140,15 +141,57 @@ BigBuffer b = BigBufferCreator(); // copy tempb to b BigBufferCreator: Create a BigBuffer! BigBuffer constructor BigBufferCreator: return -BigBuffer copy constructor, copy 104857600Bytes +BigBuffer copy constructor, copy 104857600Bytes // Copy 100MB! ... ``` 在有Move constructor的情況下,訊息就變成: ``` - +BigBufferCreator: Create a BigBuffer! +BigBuffer constructor +BigBufferCreator: return +BigBuffer move constructor // Use MOVE! +BigBuffer destructor +BigBuffer destructor ``` +因為 `BigBufferCreator()` 產生的就是一個 BigBuffer rvalue,所以 compiler會使用 move constructor(`BigBuffer(BigBuffer&& src)`) 而不是 copy constructor。 + +## Move assignment operator(`=`) +Move assignment operator 的行為跟 move constructor 是一樣的,幫 BigBuffer 加入 move assignment operator: +```cpp +class BigBuffer { +public: + ... + + BigBuffer& operator=(BigBuffer&& src) noexcept { + std::cout << "BigBuffer move operator\n"; + bufferSize = src.bufferSize; + buffer = std::move(src.buffer); + + src.buffer.reset(); + src.bufferSize = 0; + return *this; + } + ... +}; +``` + +測試程式: +```cpp +BigBuffer b1, b2; +b2 = b1; +``` + +訊息: +``` +BigBuffer constructor +BigBuffer constructor +BigBuffer copy operator, copy 104857600Bytes +``` + +還是使用 copy operator + ## 參考 - [Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category) - [rvalue 參考](https://openhome.cc/Gossip/CppGossip/RvalueReference.html) \ No newline at end of file From a7a1b5b6506613e97402ffdf2e6b6dba3571ebb8 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 9 Jun 2022 14:40:26 +0800 Subject: [PATCH 44/48] vault backup: 2022-06-09 14:40:26 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: .obsidian/workspace 02. PARA/03. Resources(資源)/C++17/rvalue.md 02. PARA/03. Resources(資源)/C++17/智慧指標.md --- .obsidian/workspace | 8 ++++---- 02. PARA/03. Resources(資源)/C++17/rvalue.md | 8 +++++++- 02. PARA/03. Resources(資源)/C++17/智慧指標.md | 9 +++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index 7e4c6a6..fb2e6ea 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", + "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md" + "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", + "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,12 +125,12 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/C++17/rvalue.md", "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/git/submodule.md", "02. PARA/03. Resources(資源)/git.md", "02. PARA/01. Project(專案)/008. Sentinel.md", - "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/C++17/lvalue.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", "02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md", diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index a8c2cd9..0143ee7 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -190,7 +190,13 @@ BigBuffer constructor BigBuffer copy operator, copy 104857600Bytes ``` -還是使用 copy operator +還是使用 copy assignment operator 來複製,理由是一樣的,需要一個明確的 `std::move()` 來表示「轉移」的行動,把程式改成: +```cpp +BigBuffer b1, b2; +b2 = std::move(b1); +``` + +這樣就可以了。 ## 參考 - [Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category) diff --git a/02. PARA/03. Resources(資源)/C++17/智慧指標.md b/02. PARA/03. Resources(資源)/C++17/智慧指標.md index 2e2b28b..b1b59b6 100644 --- a/02. PARA/03. Resources(資源)/C++17/智慧指標.md +++ b/02. PARA/03. Resources(資源)/C++17/智慧指標.md @@ -60,6 +60,15 @@ std::unique_ptr ptr2 = ptr1; // Error 在Visual Studio 2017上,錯誤訊息是這樣:`error C2280: 'std::unique_ptr>::unique_ptr(const std::unique_ptr> &)': attempting to reference a deleted function`。 其實就是`unique_ptr`的copy constructor跟assignment operator都被標記為delete了。 +### Move a unique_ptr +如果一定要把 unique_ptr 指定給別人可以嗎?可以的,用 `std::move()` 來轉移: +```cpp +auto ptr1 = std::make_unique(5); +// do something +auto anotherPtr = std::move(ptr1); +``` + +ptr1原本所管理的指標會轉移給 anotherPtr, ## shared_ptr 建立一個 `shared_ptr` 是使用[`std::make_shared()`](https://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared): From 5d6888028afd4f59f9afcb5bed995d4d16395dee Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 9 Jun 2022 14:50:27 +0800 Subject: [PATCH 45/48] vault backup: 2022-06-09 14:50:27 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: .obsidian/workspace 02. PARA/03. Resources(資源)/C++17/rvalue.md 02. PARA/03. Resources(資源)/C++17/智慧指標.md --- .obsidian/workspace | 12 +++--- .../03. Resources(資源)/C++17/rvalue.md | 37 +++++++++++-------- .../03. Resources(資源)/C++17/智慧指標.md | 2 +- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index fb2e6ea..f52c700 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md", + "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md" + "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md", + "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,15 +125,15 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ - "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "02. PARA/03. Resources(資源)/C++17/rvalue.md", + "02. PARA/03. Resources(資源)/C++17/move operator.md", + "02. PARA/03. Resources(資源)/C++17/智慧指標.md", "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/git/submodule.md", "02. PARA/03. Resources(資源)/git.md", "02. PARA/01. Project(專案)/008. Sentinel.md", "02. PARA/03. Resources(資源)/C++17/lvalue.md", "02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md", - "02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md", - "02. PARA/03. Resources(資源)/FFMpeg.md" + "02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md" ] } \ No newline at end of file diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index 0143ee7..5dc02c6 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -17,8 +17,8 @@ int b = 5; int& c = a + b; ``` -因為`a+b`是一個rvalue(臨時的值,沒辦法取址),所以無法參考。 -但是可以用`&&`來參考rvalue。例如: +因為`a+b`是一個 rvalue(臨時的值,沒辦法取址),所以無法參考。 +但是可以用`&&`來參考 rvalue。例如: ```cpp int a = 10; int b = 5; @@ -33,10 +33,10 @@ int r = a + b; int& c = r; ``` -了解rvalue reference之後,就可以實作類別的 move constructor 跟move assignment operator。這可以減少複製的成本。 +了解 rvalue reference 之後,就可以實作類別的 move constructor 跟 move assignment operator。這可以減少複製的成本。 ## Move constructor -假設我們有一個class叫BigBuffer,定義如下: +假設我們有一個 class 叫 BigBuffer,定義如下: ```cpp class BigBuffer { public: @@ -72,7 +72,7 @@ private: }; ``` -這個class的特色就是每一次使用都會佔用100MB的記憶體空間,想像下面的程式的動作: +這個 class 的特色就是每一次使用都會佔用100MB的記憶體空間,想像下面的程式的動作: ```cpp BigBuffer buf1; // Do something with buf1 @@ -87,7 +87,7 @@ BigBuffer copy constructor, copy 104857600Bytes // copy buf1 to buf2 ... ``` -這會先產生buf1,然後把buf1 copy給buf2。如果我們想要省下copy的成本,這時候 Move constructor 就可以派上用場了。 +這會先產生 buf1,然後把 buf1 copy 給 buf2。如果我們想要省下 copy 的成本,這時候 Move constructor 就可以派上用場了。 幫 BigBuffer 加一個 Move constructor: ```cpp class BigBuffer { @@ -106,9 +106,9 @@ public: }; ``` -這個 move constructor 的參數就是一個 rvalue reference,我們把來源的 bufferSize 跟 buffer指標「移到」我們這邊,而不是完整的複製一份。在轉移之後呢,當然也要把來源清空,讓轉移更加明確。 +這個 move constructor 的參數就是一個 rvalue reference,我們把來源的 bufferSize 跟 buffer 指標「移到」我們這邊,而不是完整的複製一份。在轉移之後呢,當然也要把來源清空,讓轉移更加明確。 -有了 Move assignment operator 之後,在執行一次原本的程式,你會發現訊息......沒有變,還是一樣呼叫 copy constructor 來複製了100MB的buffer,這時我們需要明確的告訴 compiler 我們要「移動」物件,而不是複製它,把原本的程式改為: +有了 Move assignment operator 之後,在執行一次原本的程式,你會發現訊息......沒有變,還是一樣呼叫 copy constructor 來複製了100MB 的 buffer,這時我們需要明確的告訴 compiler 我們要「移動」物件,而不是複製它,把原本的程式改為: ```cpp BigBuffer buf1; // Do something with buf1 @@ -123,7 +123,7 @@ BigBuffer move constructor // move buf1 to buf2, buf1 has nullptr now ... ``` -另外一個情形也可以受益於此,假如我們有個function會產生 BigBuffer,如下: +另外一個情形也可以受益於此,假如我們有個 function 會產生 `BigBuffer`,如下: ```cpp BigBuffer BigBufferCreator() { std::cout << "BigBufferCreator: Create a BigBuffer!\n"; @@ -136,7 +136,7 @@ BigBuffer BigBufferCreator() { BigBuffer b = BigBufferCreator(); // copy tempb to b ``` -在沒有Move constructor的情況下,上面的程式會先產生一個 tempb,然後複製給 b,訊息: +在沒有 Move constructor 的情況下,上面的程式會先產生一個 `tempb`,然後複製給 `b`,訊息: ``` BigBufferCreator: Create a BigBuffer! BigBuffer constructor @@ -145,7 +145,7 @@ BigBuffer copy constructor, copy 104857600Bytes // Copy 100MB! ... ``` -在有Move constructor的情況下,訊息就變成: +在有 Move constructor 的情況下,訊息就變成: ``` BigBufferCreator: Create a BigBuffer! BigBuffer constructor @@ -155,10 +155,10 @@ BigBuffer destructor BigBuffer destructor ``` -因為 `BigBufferCreator()` 產生的就是一個 BigBuffer rvalue,所以 compiler會使用 move constructor(`BigBuffer(BigBuffer&& src)`) 而不是 copy constructor。 +因為 `BigBufferCreator()` 產生的就是一個 `BigBuffer` rvalue,所以 compiler 會使用 move constructor(`BigBuffer(BigBuffer&& src)`) 而不是 copy constructor。 ## Move assignment operator(`=`) -Move assignment operator 的行為跟 move constructor 是一樣的,幫 BigBuffer 加入 move assignment operator: +Move assignment operator 的行為跟 move constructor 是一樣的,幫 `BigBuffer` 加入 move assignment operator: ```cpp class BigBuffer { public: @@ -196,8 +196,15 @@ BigBuffer b1, b2; b2 = std::move(b1); ``` -這樣就可以了。 +這樣就可以了。訊息: +``` +BigBuffer constructor +BigBuffer constructor +BigBuffer move operator // Use MOVE! +``` ## 參考 - [Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category) -- [rvalue 參考](https://openhome.cc/Gossip/CppGossip/RvalueReference.html) \ No newline at end of file +- [rvalue 參考](https://openhome.cc/Gossip/CppGossip/RvalueReference.html) +- [Move constructors - cppreference.com](https://en.cppreference.com/w/cpp/language/move_constructor) +- [Move assignment operator - cppreference.com](https://en.cppreference.com/w/cpp/language/move_assignment) \ No newline at end of file diff --git a/02. PARA/03. Resources(資源)/C++17/智慧指標.md b/02. PARA/03. Resources(資源)/C++17/智慧指標.md index b1b59b6..d74fd00 100644 --- a/02. PARA/03. Resources(資源)/C++17/智慧指標.md +++ b/02. PARA/03. Resources(資源)/C++17/智慧指標.md @@ -68,7 +68,7 @@ auto ptr1 = std::make_unique(5); auto anotherPtr = std::move(ptr1); ``` -ptr1原本所管理的指標會轉移給 anotherPtr, +ptr1原本所管理的指標會轉移給 anotherPtr,ptr1 會變成 nullptr。 ## shared_ptr 建立一個 `shared_ptr` 是使用[`std::make_shared()`](https://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared): From 56dd394067be1477146aa10aa341e2a2e8e642d6 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 9 Jun 2022 15:20:28 +0800 Subject: [PATCH 46/48] vault backup: 2022-06-09 15:20:28 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/C++17/rvalue.md --- 02. PARA/03. Resources(資源)/C++17/rvalue.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02. PARA/03. Resources(資源)/C++17/rvalue.md b/02. PARA/03. Resources(資源)/C++17/rvalue.md index 5dc02c6..986fdb3 100644 --- a/02. PARA/03. Resources(資源)/C++17/rvalue.md +++ b/02. PARA/03. Resources(資源)/C++17/rvalue.md @@ -207,4 +207,4 @@ BigBuffer move operator // Use MOVE! - [Value categories - cppreference.com](https://en.cppreference.com/w/cpp/language/value_category) - [rvalue 參考](https://openhome.cc/Gossip/CppGossip/RvalueReference.html) - [Move constructors - cppreference.com](https://en.cppreference.com/w/cpp/language/move_constructor) -- [Move assignment operator - cppreference.com](https://en.cppreference.com/w/cpp/language/move_assignment) \ No newline at end of file +- [Move assignment operator - cppreference.com](https://en.cppreference.com/w/cpp/language/move_assignment) From 7022261fce2176f072674d1878a2301075eb7cbf Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 9 Jun 2022 16:12:26 +0800 Subject: [PATCH 47/48] vault backup: 2022-06-09 16:12:26 Affected files: .obsidian/workspace --- .obsidian/workspace | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index f52c700..584a9a5 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -10,7 +10,7 @@ "state": { "type": "markdown", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", + "file": "00. TOP/01. TODO.md", "mode": "source", "source": true } @@ -23,7 +23,7 @@ "state": { "type": "outline", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md" + "file": "00. TOP/01. TODO.md" } } } @@ -81,7 +81,7 @@ "state": { "type": "backlink", "state": { - "file": "02. PARA/03. Resources(資源)/C++17/rvalue.md", + "file": "00. TOP/01. TODO.md", "collapseAll": true, "extraContext": true, "sortOrder": "alphabetical", @@ -125,10 +125,10 @@ }, "active": "94f0e8a81af6c9e2", "lastOpenFiles": [ + "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/C++17/rvalue.md", "02. PARA/03. Resources(資源)/C++17/move operator.md", "02. PARA/03. Resources(資源)/C++17/智慧指標.md", - "00. TOP/01. TODO.md", "02. PARA/03. Resources(資源)/git/submodule.md", "02. PARA/03. Resources(資源)/git.md", "02. PARA/01. Project(專案)/008. Sentinel.md", From 63746a2f835f9521273ae82a594393cc8ad9baff Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 9 Jun 2022 16:22:27 +0800 Subject: [PATCH 48/48] vault backup: 2022-06-09 16:22:27 Affected files: .obsidian/workspace 00. TOP/01. TODO.md --- .obsidian/workspace | 2 +- 00. TOP/01. TODO.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.obsidian/workspace b/.obsidian/workspace index 584a9a5..d55b1da 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -11,7 +11,7 @@ "type": "markdown", "state": { "file": "00. TOP/01. TODO.md", - "mode": "source", + "mode": "preview", "source": true } } diff --git a/00. TOP/01. TODO.md b/00. TOP/01. TODO.md index 79ec0dc..cafbe3e 100644 --- a/00. TOP/01. TODO.md +++ b/00. TOP/01. TODO.md @@ -11,9 +11,9 @@ - [x] 檢查Amily的test task 🛫 2022-05-30 📅 2022-06-03 ✅ 2022-06-06 - 改進RobotRunQA report - TT - - [ ] 在測試項目的主欄位上顯示resolution, format, fps 🛫 2022-06-06 📅 2022-06-10 + - [x] 在測試項目的主欄位上顯示resolution, format, fps 🛫 2022-06-06 📅 2022-06-10 ✅ 2022-06-09 - [ ] 在測試項目的主欄位上顯示test time 🛫 2022-06-06 📅 2022-06-10 - - [ ] test config 🛫 2022-06-06 📅 2022-06-10 + - [x] test config 🛫 2022-06-06 📅 2022-06-10 ✅ 2022-06-09 - TestAllFormatsVTF - [x] 在測試細項表格上顯示詳細說明 🛫 2022-06-06 📅 2022-06-10 ✅ 2022-06-07 - [x] Show "VideoFormats: "MaxFpsMaxResolutionOnly" to outside, let user understand the test purpose. 🛫 2022-06-06 📅 2022-06-10 ✅ 2022-06-08

}#?`)P+2Kv%#7Jwb zX-3Y?3FB+w=HZb zLMb>98>jSZ-~q&Po=ElX2~Y4xu@Ar9WgmmFnW&>;iw=zBb<|m6nGa^1ilTD8Q)UMq z-6x3t=z#P%lO+3FCL176YA347DqIYoFcHP0dZs_K+rf^b#>XWgqLbA__~0OqsA~kx z8mrC4F%9ueObcE7WGPtsc)m3`w2xDwI~>oXrtVw(ckS(xGF#KympLwi!sI{lRvhwryUwje@d-O%Ko}i3YuX$vqmovf93&qTR4cB77 zVc6N4OU3=enx=&`#qQ*a7`2RVF4eB`2kbdpz+;#+ZvJGQ9>ncFIT+@S@}b%Gqd3!{=iB8X6c_pR za~jk7`Ktj+hQ_r09`h|DInOr;^&F6_(}W#-r7Wk|Ek~&V>e>=q#04sHH$bvjF3oUk+Deb@Wvww_(3aHHsdupsdG>X?!WhBJ z8?Sq_&emxEmt97fOJrUf50|8zvYfbw`(6u#w#C1ZJW`BVkw`Fq)g&*BCLB!|v(p#q zSY17Em{W&|+Phcm*pE^djNpC27FS4WiKMUDJ32PpiY7g%3-*Fj94{q`ma=UPQv zPREam&YX)p9dN-tV$FxEJuzu%a?Z}YhMxD1A>|1UU`)tE>6pgGt-H7$ZPz)@FR6Qu z`;nv;{^-ojnTU&rXk{-l7v!mEOXj^dMT9mIa_{n#L|8$1R3Q;|VzhsZ^-BsE$#5O*jRBME0 z4$w(qI#iFn#Y6N)sf&m(a=Sv7Ny8|CFg1w#Az>pHX@AD>ppScWzWst3Qpi|`dmX%g z!+0cs_wudq;wPgFz>Ms=c$FP?M3HE53{Fk!_8eVp3)VX^@nz@5q{gj#$jX_Ue*vE; z8Z=)4NkX-IWJ~Ejl|-Y2SQUBOV(qblmV1#ezP$CfD}>qo*0mMl*7G94Aj<1vQ~q*7 zt+~B($7-f|!371Mj=hb8u>B+Ot$0Jt!4z8q8?#nSW|T!+t2GtF*DW4r8u1`C$Kzz4 zPLFjaAT|VijaRshUkiYI!(WF{S`B^AT^@LJ@-2kK{fs|i|1dvl)LQ=Qmlm_A;#@x* zq4UM<8n(7>95uDQX0miw|B`6DnrqviwwGfOI$$1hZG2!_-u#=EA0%9XHN>uhfIjnJ z_Ff4$S1UOP$hal&=Ku6duHhmX1xEk+18>s)fzICI^bIOKl zvj|jpT(~_29CJWy%>W5{At9l!E-vE>3v&Mgqc1=xGN1;`&2*4~&kWmNo=(@1A91@ftzFmNTx%7`X!f>FQUd!#=Dp`Jz7$m_F>XnFv@Sdq z?At|aC50M5Rz?^mI6l(4>5p2L(P0G>0j%Sr+C_P2Tlcvsa@qPHLQNgFAepmkliD4Z zDxrc5-m7;lEf?x~gm&u#B)1z5d;CjWwIZH?|6&jdhS#JvgS98VBDFh$)9 zLJANaCbMc3DWAzTxxkZz-cWEUAbdTCSb%5S6bJu1zk^Ex0uJy1V+O7$eewSt>v^~h zunm15;~j0cFW|0jVMt0z>4S|eYu$nWe}CasJ^RO~7X9#}hc`L~@850eEKxB!rmZ7< zNy)_iJ)TeIwze)X&{Sk(WP}pYe~)x1`?6@y$!bh}flv(TtGT0TG-LMx?2jAGa~VK= z-CxLrim!pUz$6K}(s%~V;s_T7KHb!rLm0q)2RHD|{} zSF5`(>`CZ7+;|BM4$h-GE4HZ;6qjh*`Cl7sDWMTlr!nk@!k>mpoEzm8d*Y?Gh31-l z_M0_2y0gER{`zblj@wUGZ7r2eZeV` zICP4S*y+PsO(MAs1;Sx#{#st)T4r=1vEByA*6;i#FqhcmQVq~HysyZGuU3H_&&huU z1@K`!j&ad@)+4#i+OC~TS6rpYSrpYHdNJgYkDJB#uvA7b0uzm%XuyoF8>JyPKSOOztV!!}F?Dvb_!+IU=sYrd zgrli@IHIW|6GbB|a|<3_M6+m&ZXYMQd|Q4;n`-)AFM)=dy5loYe(}N0rpDvN<-~gY z(ob$3n&k40%yA)p`GuPXY<@_P@$x$q?-e*1p!Vi`;utK76Bv;XHHFGw2<)j`DhtY^ z!Y&gUuFP}d;tgBZf>6Hv<3tAb9^eBffLH5|1rt7`ki&-Xlyi?CiA1x@OZ{^La02dq97dOt|EdZ zW{PXJc-KAOt;WBh2;>GHzOzfd+vU^HxgbPQqx&bYcsfxDMRvXSv@x1U6b5tKp8cpB z2$yIPTey)l(#@RxGP1lzvAQ;7aZ#rzJ-~!$d>--Qp48*w@@_vpvfhYY2r%OJ7YPxy zCF#8hy1zodMZNov++svvHd`0pC63j`SM@7;YGvTjP}KY7TMLJn`LhbgT>~AR>I{o> z3TpocI}MDA^9SuZXnf11YugQdKt5(8PVa@J(31`F->Efx3bUGFr79BOHiO_dMt46y z>)DEAMcz!-eG{J|)*C7~3jXuvB<^`RtxPZ}FYxS6Wd!FDkdXX$ee2Dxt&W?T0%@KT zM=u{I0z?{~809D21m!bU-8=Qg3sNC4evzQy__QLP6b^W5wq45&VyHNJRy>3wWx8U# zc=`XPtT_IW%=#ax4f8Yj5s+aK6EAd8(nl#<_N01EhqTqtVA1>YfPpF~7|1DGWreRKJq{;df_|%zE8yD?=<|C?gl9>OK@Q&^&XUO1_iSym;)>M?Z z;tN(UMR|ZqV^s@l*y}Pb&i8=m4mAlYciz?>?l7{wB_T;m~rBmBGfC;Ra0SNE(L6svs9>W1R15V!!Z5sOo&&+NvjSnc&Fdj}D|HqLacAmeTjk2;sd1+)w}G z!Ue|bGlA+ns7xx8s(pTMD#*Jkq9}-mt5swHIS`IPaKDy$adXJ@RPtd4eu1ejA^W@8 ztax#ZywAua<}^>|inEPOP*Mfg6&1LG)@Ffk$UPxh{@+rNU~z_+TU)PthLjTWApT42YNE%fUfnqor~5UT?R!s`o)bD-QYPMtr05> zDRnJ&%PQRLe{`)->LlREHDocuxV7LF%Z|qtjo*1GvWerJvR~=|!_WKUijeVl^nff5s*B(p#v$oH;WG`?c`C%J#Zp|b-qV3tQii}Ug zQQ*Gzbf7?a746{q`+%lo{pACBO!uZ^`Y2~H2%xf~g7_t*zR7Jq^DZ5Iapp$ESrPVk z@;_EuXYIfW2v%rYwX^m;b5;dn@<9gn+%J3HBDk&DqrlqfIVbwzm-#GX__&HOL50ZA zA4%bF@rgda*HeD4sk6F{+N(}z7l%QjPyNkE9G@0LHc^&ROUJtQ-Nq*%y>=5C98Aq< z@hV4dc`xB%Ploc|r<2d>Ld`JVO(&OQ<(7qI=BH|Ru2jFfmJq)m1oaya#_3NhZRaPL zT4_Oy$U2>?v3{tW>g#nyfsPrWUvZO)@&~!}IdcwI+%N#r5?HJ0X$(Wea%_beqlR~1 z74q5HX=P1K!s24UW&cj;G2raHd6=^-X_N8@TIokX`gg8c$8UG$zL=|R~$D+L4 zE?pua9^*tNSZ* z8X(Eh-(gxAol0(&{ZnsGwUA%=wBHmr;}aqo8EC0a$iEuQ{_-2pb&7F5vtPW`{DVl}@F3LURNfn=Xn{^$)k*Qx*1Py8{8F?lxQ*~uP@}zKyJdJMYxkbT4{&0KD6d#aT51DQgzu;jldT>9 zPA^2!#jH$Oz_MN-$HmH2JI?uKwdT4<4Yr-o4}+v)(oodK$Ws9Zh4vE?KUdT%+73Bi z8m1p30E3s1u*{wf6oH;laQU=+ClQB`34mkyzy8JF5lWP|&_x>FO~eU+l;s#?Wq{d^ zDzqTfaR?s})HPqvua7`sY~}o2MCDnFS4T^B?R-*Wl+Z93_x9k$lVJw!f9j({UTII6 zz=T`jMD!(-*W;4r#z6nj59wq1!GX_T@h~wX)}OO`9Yj^jTP;67o-Lnr@#~*Je442> zenRMO!7zNrZ?bAp`XRlbQsfc&mZ|O&uW}^H*P=?tI0l2ZnMUtPwXjvoIDaGaPK_MD z7P0)kcFUBa^s{Dq^>(22_#n@-&9KEY?Opsu(~jlF3V@f~yP1Iif$rks0-!*nvINa< zNi%Pd6P5bic!Ew}gkB+Y38<0~?BO)CkWf<7Xhe1QV9_xC42tnG@!ouW2D$TyrmI+R zz&sX7-&j3}fI84MpUvLP+VaRj--LKr^l=sc%ru}K_3{j^@jREaIpROsH@)7r!(*uY zPMloVXp{>R{=)R&Cj*;yk(0s3n$|lx^?NmlT>ZN|i2$_`sU#!h5tdgQ-fv~!3Tw7m zL~Tt%a#-uHr@aiPs_V-C!XFw=Alzv$|1I&v9l1n7K=N25{H`4DSJcfaX)|i$<&<7D zAq#iLW8tLs&gZB9g={pj)N~rl>Z(~Qiu>#DZ!nC+{F^Ad=}p|@lb#jAGEQ9L^31MK zBI5^qEoWan*j3!9S9k(_=t_NFL(PKuEjbe4-o<*KOO*q&pnbkOIob%NQTazhkrr?J zIF^P|z}ZsH&9Z3`k?~$^>raHcS~fiCCYt_p;Lw7eNrR9IF3GEQ^gO%JWpkfg{1M@f zW46;JooLSf`-{aqQ81cZjuzvedc%pP%G4*UcBPZW@CZXKSl`~nu`|0>R7x7o?e%6jeFMD%Zl(9(KkK>S7thSl*nblwhyao*JAXi;r@ z$J6vw9Dv2RtmY2r?yjuVoi7P2VDtZ5JDUA|?i_HJ+VZc3I5#Q_m z=QBmUa$f6=y05vR0@Pc0c$Nl9CV>^}K1Ylthw|_H_n5$ICW+*fy}a8F+Yu;K#@5#M zo_PLnajtRyzq7#qzmUWKUvDE%s8k@u^mYD-2C6Uo7hce0iYruP21P%ilcn>5B2zOB zkI2qeY)eT>>WyVf(a_Oxg0H@s3?_HU@hxugU1vU@#rjM!$P|E~Yy z_PZMrN(f7wf9O{KZ?j)IdAd$0AEk!yE811zP5jPtSn`1`zTQjrwpVs1Rq+KRd;jLW z^oDH|p843?@gooY6ojWREP~(>vaYMwV#ZzWIm}BpXkW4gv6&L4bKg=02}#wm31}|x zbtY1!^DDtwwPu|7FZqm{bGOU&QeHQbheuS3t=ogSOFx9zYd8=Hlc|Ql38S%j-R`T` zA|a_154NLA9c_Q;j7=@;#t+lEZ#j*G)I063@3*!q@>+T9NZQ$2{KNZ>NL*RLiw6DP zzk@1zG(R{oKeqXv{7f=c$T<#IIyV|@a(WUn7(H?sj=lTtE&O8ed-U*A0E? z-y0#%n}_#uR{~v!*LIa^Xy6hR2TkjWr=*pnGZsU2FO>9U;uyCe~8%tTq{x(F*K(GN3Ou%o)i^z1(?oS;u&?j9;vKrum0T zXB$;<#pR*R4!40D_z}rMI-g#Wu zWhEf}#Gd0WlHBrt-M7U!zcQ-5R*lzqV`}8zk(@5W5E}=wdWsJ%_$2K(9!?{p9rw9; zJtJrOIM9R;ar7`Im13cq@7bU#<~~7yVj#E}$*LKRPdRLnnS@4H6yiEb6m7&53Hvh6 zZuCOfk3wn)i*PgZVXZ~A%=^ozIVj^_E1NPx_Z8#4T9rO$4ayqIS^n&G#^K6bb2c0_ zm>z0+D2|3?=Cn%;%FZOMrsZ;|mR#>(y4wCAFY31VRn}fOl36%X(sNDdsNE&qOcApk z@1b^^SjcHBvV>(mT5J^O+0hK^WH*3 zUW3d2Rv6#2hl1ot5$TZGe{J58D6xG1^{M+=@cdtwNblSa{|Z(jC8O&Xucof)Y|pHyCwht>sd5Zmasm*p%gfPuo2L|3^5IP>D6lOLWJ z?}Iqlno1IMJ?rYlAKo+aSd*=YT`nnlN7OT}{iBgag^?vB`Uy=pp|fm~2@lRUX&7QQ z)Kj-*R^is(swR$pB|idIp{f*4_4R8=(gKLr=a zWX!HBJVJNVDbNPzqFr-!7cKHU@7PWd@a8OCk4<;C z8#1v60r8$1YuERK6q2PL%ywHnJ;dpa&f2VN56H{RsxaO($p4YQVtXfR$`7@#eC2)2uCBOjX^kGI~$#z{DfJp15aS zCweuXHfoi&Ga2U|J**V$GG2JKer|q#Vq+s$N$u*S?qfi(k#=k<;rYL`NclcQI7~FIAL~hz;@QZjzENk-*j#F_iBw!H6P5O$=Qfqe5B;V!jN&e*#g~us6&jzoy3dA z6g!Izs5sG_WAxJc`qP){Zx{;5J`>Wr-mAX1=n?d1&R@)%aiXuhXn|_nj?@n|zJEGZ zc@76NFOH~+=Yr9n4*lT{fvp1S&OCsSQvQufW?R>k6y>4x=OalGjT=*0zm7*wXp*9| z$<;JFpV|)oCBBNjJ%?R~W`~gu+`sQW3obD06TD=dYb%u5l?Vo#xRx$5&Dia3V*&k3%#RXN zgzDjMHtQSsRXa-`$wc!gsP?{+x`K*~nf`z11xJ{x#NBd?{MTJFT8KB|qH)pVc+eu_ zzN#gXXh*ezv7g#6akXFQdnY|#>dGnhl?I%uSFKfx+Nd1YK|Di+ws&wWaKF>KNy*^g z;C!K;Y{qTPIc&PC!Q~WaN~%)rcK;%zI@0wArw`Ez z@$=RTF1bKF_H$X|_=P-agvI|UiY*(R4$26Brpt+zx4*_IBLsne>Epl8xWI4q4q_XB zqoKVGFsWj%$aKu3S7|W&rTmc#V=LpG#_T!D|5e*}hc)@EX=7LTfg%P31f)p`h*A}# zD2Cp9M|u-bdXXZEC4fNaAidWB29!uq5a})Sj`V~ky~8&Np51eH&+fH*?fLj8T=2d# zllOgQ=6>$`o*8>=i4^`^AR;2YQQQxRBB_#XAYC|c2!Ec%1R>2Tyea7Bfe?B*!aCCsdrK1=R4`6 z=H%YI4BeTT^dVe}g4XjroipTZiIp0zWf$p_`j&LVFE-x^4#*dZ&oeI$IA`Xq*+m$e z2TFxgwdeL+Jr~Zb;$9aikm8~W{df#9O}vM!#0mOY3F=wnBH0{@V9(X6xbs&MCHeI9 z^`V|o$IpyR)?0S%;&Ir1=gWuAN0o0n6lGr_7r9xmH!#pw7)+*)A#J4THkg%UV7+$N zc~7^%Sqv*2wjkQ>1KNTfGB9t8>!&!9#JAEMb^_!cj3Dv5w0>i@)1*M&+H7tO6aM_@ zO+-wOKwOz-n$=^H%z(f^^3BLt&u31Gc6JdoJt?>P`%rh(aP79PxQZis?lwc7VHM}2 zp-8X2xmFp15W2*U+?qMWZNr3q9fm@|1VxfS2nVd= z%}k?OrM1eczj(BU`C#_%!JIuR$)RSb8ngw$MH(iHZ__}2d%zPnxbm3C@S^z>_i zq%tJ4XI(g|0OF;NZ%a;`redXV_EF$nn|nxx9~0(-M_27wKlB%j3x=WEQ?>c;xhmD2 z(`VsjOXzt*D<%A3b$&!+&u*Y((tI;Zi)C}iwm%NF(vy+_868Q5U7)Xyz61q`BrgyC zJ28x-Daj{HYv%%&?1$PZmn?jJDzxi$Y*8;*4cj`YZiMqH(rG&u$)K}-(e2&4cK&=+ zqirR&$)Qm<*TuEIr()!Mvc4w7TU^2njAG7u)Vl1{jn}@!^&m2e*z87oon@OiL%m^# zWimS9nC4QJ_17<=$X4BQ^%2q9C_|ZFH2}Lbku~12&cbi5|HN_jtti^fRx!KC;`FPC z7?eh5PYD>I;&AW2Hz}C4Jya~>w%$HRfwc`B;S6cInji;XxDnqqJrUV%pUIj};kBt2 zbIY#JC0+VZQz&^}m6QaU!REu75Svz_mth4{6S^U*6;mlP_O(8n!t%(@D3H={Q`&om zWSICm);8peep4SFOb|7Kjto`DU?Qc#fTpKIE4Qr|%Md*`R2d+a+b|b_Qrqmw^wR3l z8z0CxFFNNkB$QSp4|-RHmMY|NW{8+8Cf$inq=zppFfNs5Gv`}+2CNo7wDyK_=8YPB zYwwyHZz`;bLQ1853AiMy@G}&u7#v(E6cQ$XP!rUH;x4zZY`> zG)Bd7y>87wB=g)jBvGL{txUaty24G)&P*9MD;N6WAxAE&;ZV_?d)bA-CeWt?hTngr z+>-xzUTt%)qtM#iSe;3Q!hvEqz~BK#BzQpW75B0 zF80E^Xa`kXo)xFo#v=R{&>C4~+6ZCnYU5Os=ol(#Pl;4c-WhEa^x_GAjLk?onzNo5 zd<{B7Ad4piP1A+q;W94Hf6CYTxHG%hjAL1=%a5rnZ3CMFVfcXGs5>RG&A3}5RQVyt zr$9#a%qlNKXPT}Vx>9%o1rmo*3zfo+D4Q%ye@F^HS6HaIT2kexU}tBB!M#@Uejxn0 zyNM3O(#ICtz5DlaZRultXE{i1yxDQ{Qg3dw^)1ehk zNI9$Z2I^BB%gr+^gnZpPr#-cW2CIw7)OH`|GZS-@l^113S1zE=Z1(9zL3ArqVHK%{ zq&<^GC&@Ps39wm&oL4(`+D6kS5_eE6J(uOhU)q_%tfLwpO?r~77v?FO+1U-XWg)6d z1eQF7h;c=m- zs>BEtsc0<(Lh5(SoTk78=PHP9_`*bmVU)VOZ_z~iO>e^jaE3XeYeAEG;t+W4! zewYaFlrkX<-J^zUvsDonDFvq&+s1Dr29He6K9!Z*{>DCB`AMcudFun=&f@ef{Pb4J zs(a?BfU5gt?V^N(WV`u~NQ$kQHzY>`Zl9E7OD8Wchwet%d1_Ss)WzB^e=I$7mXdJy zVhVRHTmz*o^(~rOcJ>?zm?B8(&O6TMF=erMYkh@N-oPq2siqcOC3Cb^eJ+m>&8ynl zAtV_oQKEhG=XyR;M0Z@AtFq=;zRg)fl*W(e5{X4x^kij^4t$tJ?snwVG+saUXB{ke zV95-qV&}$fEe(S-3)HR$j&XX6pAcL-y-WhBRh{nk3~;5$7zex6^WcxvB9bT@GNqMa zT}ybnSF4mBbCTQW+pZKdK{Oq2eZ0tS)Mf zq_ETUyASlDd0_wbURT+5uxZm~kGe88u750dkpz#yiBg(SDmvjNQjso(6=3-lf-Z-J zUB~nriW#_rCkXlg{LZBu;1h;sA*H-wl504$dmLc!6dD1z{mI!ryK3plGp z&b#rEbK3%2iQt}^E-0az6x$^Vtwol*Ma9fLUaucwX>8dUFalD8mX_>XOHZnY^_^Z4FXiDGPa>1fWLY-}O&UEw237gy{4_?wk6& z`VYyI!a*f^$cIFCyyTdYY-~9acgI1=Y1zb zZCYAdJ!4~JJ+a+?(SPedm`Ef6$odhq?chwQd5c>ujq+=_mPN_~Ur)jd$m^vXmS~n0 z>eG0?M19I)EJ}3$qFd3Grpgr*6SL9fzW7OD5voL=8r z2u7ivxk7drmC><4 zV(g3V3i=Za_B4Rgr7P21{DM)#>jrYA(&@JImSKMT0(AGDNnE&0-;*l&)@8bpoKDnB zqu~RcdX0~vIL*EM8pOu#N-!4tD#U=D(7vzTkECO~AbKv4yxl5&$wzuF@*z3q)pE&k z)hokAP+6zX#(t{Db5-7ZL2Zimvxfi9b06;?D_X6Lc8?NR8i=1Op*;Q&!NLN#7P2-1cWgiEta_L2SP>5 z#mZ6@tJLpP80&u9>?!bCeP{y@&UcAz=<`bDSTh4Zf4+$O@_dA{SXZI`=Z)0{hK2M{ zG0a8-{|Ma4ck~; z=aDs~C6KHWUEN|PFjK8^mV8Vkqx#`ZyPNp|Oqo#@vUqCOr|7f%C<0Z97$inuMnIZl zrO{CE$jeQ}ct?Y74xd{Qr6>(C0TRdC;_TD7@C-L=zVL9BPO4}#smNC9;so4Z$x5-B zw>{V>&eVtAu6icAkfpqUr7|j7eMRVXIW-M5RsQkLc$uk^io1Ta9wT~d(f==z{d0Ui zH*5?!8F*hd7@ZDI)g9eEBEe263JJ}iiv$G)QPtH&`ykkCQw5&yZ!H1l6|{wW@%OJf z06qMLt*eS_gV`&t=N0h;LSnueJ_L=r$i7ID*8+?uak&T`BUQO0TvCZ)i0WIppj$ux z9*(#kz*(7j0o$!GT{Wkv{TY74N>9pGsr!R@(g4n>B47blNXzKiuBr zM9p(*^j@zqEy~v!)Hih+#khM&207(>Tf;h@84AsHpr|%qeRX%Wa8^&yjafhs4GeVd z?V*>)YmnaC%bAYiI~(*=gii9UPTJyMuj~Df6vBVc6_8KT24Y_aur3RErORoq4LmNM z-x;%prOOvprKd~M&8<@%Mpsw-7YOSEc4w6&9yysyh!p;GN@6H4$O4O?Li=$2(lZvP zFG7>NYZ5dbo9qS~MYY}lqZ7@W;BTc&O_g&M&t2d8@HU5Z;8or?%H39o`_4}t9BkL^ z#Jj3}<~FsCQb3ofaF$MfvG(3!6rC9=ex$?Tvk@+K@XWwR_w%Ud%931--ATTFy?i?l77VdA) zv5eN^`uKRQrYIz&f7A3F^!D#|yFDz=v5C;12+P^J2xV#Vdq}SClr_gWJjPgao(oT$ zI2$Q*cnNYzM^E1M+od*@g|$w;lxCV&AGiyV{i)#_J-XZ0mXVQ-yTeClB5!}%qPjc+HBlCaKtS5am7%Yz&MAX%uiZ^ zS;{06-Uq)9s4l+2muBAXKdNB`B(wsj?;>&6*?nEGfeX4q06o_Hb_!wm3xBi3;eSlK zqL=TQTreLPgJ~FD1h@?B!%yX zKRW{U4U}eW^7b+VUQ+CN2ohGy$4&Jru09-q%U&XezYdU+Ffmp!bnvBUQ;7Pp23K3t z-VR=}4HnkWBAS`h^bp62wuZeBI#csG{yA6hX%hOH+<7%dpW ze$rxkfqHvtW)1@2C!%oh;6{4nbVxvicwW*;dMpUe91ak2QH^F1xuT(zHGyYL2h+P+ zvGg-|{6(UClw(VVe-cDPBqlIf-}*@`@w<_wn?`{}Qs%-YyTs-1r{(aIXY}MbQGU+k zlTzIzbyStIPCwepNgHIng6CVv--1!2cOc>cysLTE_)nuoT&{-YXAI)GQZn4_PGoK9uqthMpv(XUQS<#M=e38Wn zRfiW+cnijhc(I7qI5TH3j~MU2-&ztueqOsk3cAdH%0fdoe!ZQ-wV;>Uy&bjp3<=Sc zVuLc$Q4JQqCFB6y3s%rPkKdfA>oKg-zdpfEf6&mV0=*e}yWdcwQUA9D5QLt$s19gz z7RzX>pM5I-yua7<7YpLpl`v02b)LU;H|hrI;pMN?ClMxDCauFLi}y7lK*~J0MYb#O zMApfHJ#O7guIrP@{nBfpyDc48 zhm7UhORNm|M3#$GLyzp22%|bebpK|dOq*g$crM?es~jhb=>CB`V&H`2^VmQs>x9Qf zaX01hTQq8jH_|lbrO4P==psBHfxKn`Z#?5hnwJM;@Cz-;%u@H>%@0eW!%&H7Hte1> zHlq9@RISU1`joyUOD^4zg83g)6RY$2#Vp}EAYVk0j5Ym`SWTDbG3Y>JyS?@TW9$x| z5CR*w0wmv**^k99r0%W27BwL@mUJb70=$@LZ*he=Uey9m;av9Ka3g(fm~apdpII>3iFJ9j;k#qrw51J%tFj|7Um7JjudHK>$j@MVe< z@44f1Foh=i5KE-&jy`&*Q`OGK9xZ6I7hWg*Qq7Nv*n41pv;p1x{*Rt#5bC&5f&z z(NjeuY7b#!HykSUO^lasfPTJ*K2oElMK07IJf}D#?D0E=j7~TMoKZJF-<2-xwix?? zLA>ZCL!lfZ$!BS0V=cyRw~A2H#4qdAbonY`ZZxr`z)vJV8(Le@u?C+v=*BwJMsW0c zU3>=pZM%F+u)~REL&L$59?QOeNC+0dNvqi5%VJdxfrPmG{af{Kblm^V)j;&Wb(H-B z9mg(sEA`3y{gAO7wWtSzp}DPkGI~)Wj;IzsH@0#MqN*d7uFcB#7K~1B7@3O;WO!FR9SlZIl7pS5 z_<)<`&9Cl_IP>-!31A*M7*a+#j(b)`iCcp%vpmwpmi!`3|FZ)Y?8DtB&ES)9S^S2! zai6{WnD|J6l1(4`)!|8`E#a9St;W7@bkxW{c}#>~1d^iy3~@Iq*}~n|nU4dTE8Kd5 zoqWoabyT76p9j)4!L_gQdO*;zMf2A?9K^%nwms3UjlE2o)MX`G-;pe%c^%V)@71G9 z8wimdea7PIZo{)HVcHjMZj*v>Vx9~D1p4)0*~bqxE{UKEKDF>41y5zQGC3r(_8#_0Xq|(}0r|a^Voh_;z%d5RYU9cJ3Br}qKL^r^LvkKs1(A@)A9oBVHBdksTlV(4x6uK`S{DdZ{xR2ne} zo~xhC?rEvpv{!|g!irOcbPZpJoxcL1>za=#rF z-189+m`i$ROsW1oKZdX3-KfAFw(A)PoMh&9g5nMAte)u;)1i5DgjbXjaz*Qp)tKyT zR0IdXFuP^V?~Ind&jFKOss-RO{sabY0dR>hF7ZI0W^xyKr=6Nl9;c*J9bnH?L6}H0 zJsw^TY5r5{C@3`|*FQ`&&)V(MYoUyK^T%0qVJ6d>Mlx!6{z>Iq`86JEjPBD9VwVN7CPlJBAzZTd_=ROln z%(*uEY-*Hv-)RmUY}nbq88bBCVaPKZnsB}I`>PAC^PP-z_njU~htl_gqwHJ`cAk?S zSZg9S7VZ49V`>aqR!(x=%hDuthB!^@F3p_0yLc-~N$KYw)9B2V-$0Dl+U|rW{X#pm zC)@DgE&!`+^K6#jr`vy@92jpekIIkx{>F;lCUhA8x1r4^`V?LkBRuT?9y{vI^Izdl z=vq1S1cqz;kH=YZt(4o$A?KgC z>#-Nea17Zs-hmr`e_T;==^V+=4bFJZ!{D)6A$cU%P(mDEPH79F0;0nIEY;0O|AoED zc(Z=}=NBs1I&EQtXSGw1^Oy0ufcGAPaGNz-A(hs(snDhneV{B1F2dhER;ey#hAwl? z@?6h|rB(mlg81W=MKJ-KW!B8^UUlM|8tj=o6tEyqrE(Y6$AcmJs^uEZvyzsqEKVZ*Hr&l0XCXjfYf}C4bW-I}mRjBIPgE?xZf+*!V$#qYQhPp`j?S0^Gr`w# zLA;aXEg61eL1C|roDXy&S-$(0o5lp9jz}@Wi>#Lah3mlk>`z3SM$Esqo%P4$@@=e)jlWW0f$n5$;?SfVf2;?pif5P8Ey|{jvZoK!~T)0FfWoQa^c&2pP+N#FXKE2Amp{h$2K2Dt(% z2mIl|KRk3kD8S?vDOTScJwBGh(29G8X&p4QP;EGqVnxOe6vD|num>{A=N3-rSWi#~ z5WHH4l)|g!Zaj=g~YFk0LyBBx2QrtNpL@B{tBffAnhEUEkq)}Hwjz9FckGnBQ=2`$=Rhph>QXi3!$CV1`ndZxK?m2F}Q8*lA zsQPj^v~n2gchlyP-`=as#1}?Tn{&t20Vh*a=Z_&_uoNNWD#7M}fn3#Yp%aa-r$xs) zv{rOK&#ZWLvJ!z-or_(9F) zpkI^CO?*53rH9Qzj3k(M&5A|{poeWm6uR6zx_dEvaghIsYFKyU!!dN?@YB_>-Z5iDy zZw65=4N$8NcXrRV-@V)*zk{Xt_QAywg-5?;>FUrG6}r#AM>o*Apk7aH@BL{@F- zy{aL&uq2pYY=0f^{r1ft@BRPVIskgVgXh3Er3_H>5U_u5jekP=9W?m$tQ@qjh$f1esI&Mc!BdURkP(SKJ^hGE=O$&lm|5H>31djmKvvg