Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add sanction list #34

Merged
merged 11 commits into from
Nov 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Foundry CI

on:
push:
branches: [dev, master, main]
pull_request:
branches: [dev, master, main]

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly

- name: Run Forge install
run: forge install

- name: Run Forge build
run: forge build --sizes

- name: Run Forge tests
run: forge test -vvv
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,7 @@ cache/
nethereum-gen.settings
#hardhat
artifacts/
cache_hardhat/
cache_hardhat/
#drawio
*.bkp
*.dtmp
9 changes: 8 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,14 @@

Please follow [https://changelog.md/](https://changelog.md/) conventions.

## v1.0.2 - 10120609
## v1.0.3 - 20231122

- Upgrade the library CMTAT to the version [v2.3.1](https://github.com/CMTA/CMTAT/releases/tag/v2.3.1)
- Use custom errors instead of revert message (gas optimization)
- Add the rule `SanctionList`
- Upgrade OpenZeppelin to the version [v5.0.0](https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.0.0)

## v1.0.2 - 20230609

- Upgrade the library CMTAT to the vesion [v2.3.0](https://github.com/CMTA/CMTAT/releases/tag/v2.3.0)
- Set the number of runs for the optimizer to 200 for Hardhat and Foundry, see [https://docs.soliditylang.org/en/v0.8.17/using-the-compiler.html#optimizer-options](https://docs.soliditylang.org/en/v0.8.17/using-the-compiler.html#optimizer-options)
Expand Down
54 changes: 38 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
> To use the ruleEngine and the different rules, we recommend the latest audited version, from the [Releases](https://github.com/CMTA/CMTAT/releases) page. Currently, it is the version [v1.0.2](https://github.com/CMTA/RuleEngine/releases/tag/v1.0.2)

# RuleEngine

This repository includes the RuleEngine contract for the [CMTAT](https://github.com/CMTA/CMTAT) token.
- The CMTAT version used is the version [v2.3.0](https://github.com/CMTA/CMTAT/releases/tag/v2.3.0)
- The OpenZeppelin version used is the version [4.8.1](https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v4.8.1)
- The CMTAT version used is the version [v2.3.1](https://github.com/CMTA/CMTAT/releases/tag/v2.3.1)
- The OpenZeppelin version used is the version [v5.0.0](https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.0.0)

The CMTAT contracts and the OpenZeppelin library are included as a submodule of the present repository.

Expand All @@ -12,28 +14,37 @@ The contracts have been audited by [ABDKConsulting](https://www.abdk.consulting/

#### First Audit - March 2022

Fixed version : [v1.0.2](https://github.com/CMTA/RuleEngine/releases/tag/v1.0.2)

The first audit was performed by ABDK on the version [1.0.1](https://github.com/CMTA/RuleEngine/releases/tag/1.0.1).

The release 1.1 contains the different fixes and improvements related to this audit.
The release [v1.0.2](https://github.com/CMTA/RuleEngine/releases/tag/v1.0.2) contains the different fixes and improvements related to this audit.

The temporary report is available in [Taurus. Audit 3.3.CollectedIssues.ods](doc/audits/Taurus.Audit3.3.CollectedIssues.ods)

The final report is available in [ABDK_CMTA_CMTATRuleEngine_v_1_0.pdf](https://github.com/CMTA/CMTAT/blob/master/doc/audits/ABDK_CMTA_CMTATRuleEngine_v_1_0/ABDK_CMTA_CMTATRuleEngine_v_1_0.pdf).

### Tools

You will find the report performed with [Slither](https://github.com/crytic/slither) in [slither-report.md](doc/audits/tools/slither-report.md)
You will find the report performed with [Slither](https://github.com/crytic/slither) in

| Version | File |
| ------- | ------------------------------------------------------------ |
| v1.0.2 | [v1.0.2-slither-report.md](./doc/audits/tools/v1.0.2-slither-report.md) |
| v1.0.3 | [v1.0.3-slither-report.md](./doc/audits/tools/v1.0.3-slither-report.md) |

## Documentation

Here a summary of the main documentation

| Document | Link/Files |
| ----------------------------------- | ---------------------------------------------------- |
| Solidity API Documentation (docgen) | [doc/solidityAPI](./doc/solidityAPI) |
| Technical documentation | [doc/technical.md](./doc/technical.md) |
| Toolchain | [doc/TOOLCHAIN.md](./doc/TOOLCHAIN.md) |
| Functionalities | [doc/functionalities.pdf](./doc/functionalities.pdf) |
| Surya report | [doc/surya](./doc/surya) |
| Test | [doc/test/test.pdf](./doc/test/test.pdf) |
| Document | Link/Files |
| ----------------------------------- | ------------------------------------------------------ |
| Solidity API Documentation (docgen) | [doc/solidityAPI](./doc/solidityAPI) |
| Technical documentation | [doc/technical](./doc/technical) |
| Toolchain | [doc/TOOLCHAIN.md](./doc/TOOLCHAIN.md) |
| Functionalities | [doc/functionalities.pdf](./doc/functionalities.pdf) |
| Surya report | [doc/surya](./doc/surya) |
| Test (v1.0.2) | [doc/test/v1.0.2/test.pdf](./doc/test/v1.0.2/test.pdf) |



Expand Down Expand Up @@ -66,7 +77,9 @@ forge update
See also the command's [documentation](https://book.getfoundry.sh/reference/forge/forge-update).



## Compilation

The official documentation is available in the Foundry [website](https://book.getfoundry.sh/reference/forge/build-commands)
```
forge build --contracts src/RuleEngine.sol
Expand Down Expand Up @@ -101,11 +114,20 @@ forge coverage
forge coverage --report lcov
```

See [Solidity Coverage in VS Code with Foundry](https://mirror.xyz/devanon.eth/RrDvKPnlD-pmpuW7hQeR5wWdVjklrpOgPCOA-PJkWFU)
- Generate `index.html`

```bash
forge coverage --report lcov && genhtml lcov.info --branch-coverage --output-dir coverage
```

See [Solidity Coverage in VS Code with Foundry](https://mirror.xyz/devanon.eth/RrDvKPnlD-pmpuW7hQeR5wWdVjklrpOgPCOA-PJkWFU) & [Foundry forge coverage](https://www.rareskills.io/post/foundry-forge-coverage)

## Deployment
The official documentation is available in the Foundry [website](https://book.getfoundry.sh/reference/forge/deploy-commands)
### Script

> This documentation has been written for the version v1.0.2

To run the script for deployment, you need to create a .env file. The value for CMTAT.ADDRESS is require only to use the script **RuleEngine.s.sol**
Warning : put your private key in a .env file is not the best secure way.

Expand All @@ -130,6 +152,9 @@ forge script script/RuleEngineScript.s.sol:RuleEngineScript --rpc-url=$RPC_URL
```

### Local

> This documentation has been written for the version v1.0.2

With Foundry, you [can create a local testnet](https://book.getfoundry.sh/reference/anvil/) node for deploying and testing smart contracts, based on the [Anvil](https://anvil.works/) framework.

On Linux, using the default RPC URL, and Anvil's test private key, run:
Expand All @@ -143,6 +168,3 @@ forge create CMTAT_BASE --rpc-url=$RPC_URL --private-key=$PRIVATE_KEY --construc
```

See also the command's [documentation](https://book.getfoundry.sh/reference/forge/deploy-command).



2 changes: 1 addition & 1 deletion doc/accessControl/.$access-control.drawio.bkp
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<mxfile host="Electron" modified="2022-11-14T12:56:39.340Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.3.0 Chrome/104.0.5112.114 Electron/20.1.3 Safari/537.36" etag="33x45HAofQQoKoDw1dwn" version="20.3.0" type="device" pages="2"><diagram id="O96H6G2-MBiRhnGMjF2G" name="RuleEngine">3Zlbc6IwFMc/jY/tcBHQRyu02xnb7uh2un3qpBA1s0CYEKv2028i4ZbY9bIq7D5BDsmB/M8vyUnomMNodUdAMn/AAQw7hhasOqbbMQzdtDR24ZZ1Zun3e5lhRlAgKpWGCfqEwijazRYogGmtIsU4pCipG30cx9CnNRsgBC/r1aY4rL81ATOoGCY+CFXrCwroPLP28m5x+zeIZvP8zbomnkQgrywM6RwEeFkxmV7HHBKMaXYXrYYw5OLlumTtbr94WnwYgTHdp8GVNp1MwPsQPyUGWnrJ2AXOlfDyAcKF6LDr3Q6eRz/eBu7D/ePb+Gnkic+n61wT5pfJzwo3yzmicJIAnz9ZMgKYbU6jkJV0djvFMRUh1W1WFi+DhMLVl73QC20YVBBHkJI1qyIa5GoKnGxRXJaxKdCZV+OStwOCh1nhuZSM3QjVDlDQUBT8hXgrSTOCF3EAuSOtEd1sq6ab4ajCFRpVhbPPpZup6KZyFgcDPoRZyQ9BmiK/LlNdU7hC9Ce/v7ZE6VXU4/fuqlLNXYvCdqFhoMwJkszsM/GC+HD3yKKAzCDdxY8atkpcrC1hyW0EhoCij/rnbouVeMN3jFhHCip0pz6cCr+5i6ybolV1cpEcyePS0CRHmQ6Kow06RbePp6mr0DR+Hnlv3uPd/aPXvlmsK8m1bTT2t01jsqwnG46WImAK6XgRsrW3bVOZYUqsNT6X2Yp4fggBaad8Xa1t8jmKfCAIuHit086y2qZdT9GOwAh/wFbK57QOvb4in7pOHJaFxOyzKmkIL75Wn5WJyKZ0gUxErI07MxFre+wuk4mYXQkNOWHfNxMx+3VHRYpzoUwk332cDikZjWMS3WOxbABDu0kM7VNhaDeNobqzPxOG+v8IodMkhI68mdKPhNCRtne6vI6eG0L1cOQCEJbz4j+PYa/RuVBOduXN594YSmmfLp8ynBvDk581nRbDGoQlk+fHcN8zqm6TGBq9HSvp3pmhdG6gnAmfG0P1kCoCMf//oMDIgjsC7zCsMwhCNIs5oCzQkDAD34whH4QD8SBCQcB93BCYok/wvvHHmUl4nza9tG46lnvI7k78WBHOOkVCVOXtD6Puy72gdq07vf7fEbLe2gBPpyk8MIKsWP6JyaqX/7NM7zc=</diagram><diagram id="AD0m7nGBSN-_X6hBBRl8" name="RuleWhitelist">3Zlbc6IwFMc/jY/dARHQR1vtZcbu7qzudPvUSUmEbIE4IVbtp99Ewi2h3lbUXV8kh+RA/vnl5CS0rJtoeUfBLHgkEIWttgGXLWvQavOfYfA/YVmlll6vmxp8imFqMgvDGH8gaZTt/DmGKKlUZISEDM+qRo/EMfJYxQYoJYtqtSkJq0+dAR9phrEHQt36hCELUmvXNgr7PcJ+kD3ZzDocgayyNCQBgGRRMlnDlnVDCWHpVbS8QaEQL9MlbXf7yd38xSiK2S4NFqF955jj7ow56HfkxBC99a6kl3cQzmWHB8Pb/s/R5KU/eHz4+vLj22goX5+tMk24Xy4/L1wvAszQeAY8cWfBCeC2gEUhL5n8ckpiJofU7PCyfBiiDC0/7YWZa8OhQiRCjK54Fdngqm3YaRsJlCPlXRSjk8MTlEcmGwcgifBz34Vo/ELqtoeGbU3DNyxaKapRMuf1hSPjPMqZmVRSOcvQpctVKkvnNKWcpSmnsxbDvpjGvOSFIEmwVxWqqipaYvZLXH+xZelZ1hPXg2Wp2mAlC/VSI6jFBUVo/ppkTj20fXYxQH3EthGkD1xpXOyaYclsFIWA4ffq69aNlXzCd4J5R3IuTLeKRe43c5F2U7YqBxjFUR7pMkeG4ijVQXO0Rifv9uE0dTSanu4fJsPRw3hyeXGs3a2K5dbMxV5dGFNFPdpktDX5AIR9CClKEpRMyCRAT0KmECfscoLbhljWPmksczT5KIrIO8oVvKUkukwNMyQ729eH2kDUmKbuBiQvFchlFpx3WGzrJnhjYnY3A3rxeLrmDnhap1S0pymqLzH7pS8xf61S/iKKz+V7RQazLp0ghZGL6tYUxq4fu9OkMJYSudpqrr9rCmP1qo7y3OhEKUyG+PGQUtE4JEM+FMszYOicE0PnWBg658ZQPxZoCEPzf4TQPSeErroLMw+E0FX2haa6jjYNoX6ucgIIi7j4z2PYPWsstBUM1X3rzhgqibSpHk80jeHRD6mOi2EFwoLJ5jHc9XCrc04M1WMWbSXdOTO0FEfq2t40hvrpVgRi8fFCg5EP7gi8orDKIAixHwtA+UAjyg1iM4Y9EPbljQhDKHxc890g/gCva3+CmZno07qX9nXLHuyzu5NfZaSzVp4QlXnbMOs+3QsaX0y32/s7Qla1Dch0mqA9R5AXi884afXiY5g1/AM=</diagram></mxfile>
<mxfile host="Electron" modified="2023-11-22T14:06:37.261Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.6.2 Chrome/106.0.5249.199 Electron/21.3.3 Safari/537.36" etag="_l5qiawqTrViGRQXn185" version="20.6.2" type="device" pages="3"><diagram id="O96H6G2-MBiRhnGMjF2G" name="RuleEngine">3ZhbT9swFMc/TR5BuTSXPpY2MKQCUzu08YRM4jaWkjhyXNry6WcT52I7W8ugI5vUh5xj+zj+n1/jYxvONNtdEVAkNziGqWGb8c5wZoZtWyPbNvjPjPeVxw2CyrEmKBadWscSvUDhNIV3g2JYSh0pxilFheyMcJ7DiEo+QAjeyt1WOJVnLcAaao5lBFLd+x3FNKm8gWu2/i8QrZN6ZssULRmoOwtHmYAYbzsuJzScKcGYVk/ZbgpTLl6tSzXu8hetzYsRmNNjBpyZq+USPE3xXWGjbVgsZsA/E1GeQboRC56Fl5P7+bfHyezm+vZxcTcPxevTfa0Ji8vkZ8bFNkEULgsQ8ZYtI4D5EpqlzLLY4wrnVKTU8pitv3I9PyQU7jousYQriDNIyZ51Ea21mgInT5jbNjcNOkk3L/U4IHhYN5FbydiDUO0NCo40BRf38/AxvL26vg2Hp99IEdDXBbTGfQKapxLQ1QQsIV1sUvavV4UjeJPHkAczPwc+RxavVz27Rz3vVOJ5mnhRCgEZpnwjc2jy+Zp8II65eIPTznWHpl2gaUdghp/hIOXzB4feWJNP3yfyeMJLGGZFKShLFMk6yaIyccj+BzfO3dp86LbNdpK1F9bRapd4QyJ4eCukgKwhPfzFh7FUeum56+TG7UlN7SMwBRQ9ywVbX77EDF8xYitr0HBGChpqqVCtW4zqFlhqoLEcyPKVQJUwWqBXfJpl/zlRdd3zcUipaMAdoh3CmPUgxvHnli9u7N+J5ekx9AaFofdRGHqfjaF+pjgRhtZ/AKE/KAh95XTQnKXeCqHvKxCq++ipIbQ/A8L2u/ivYRgMCkNPLXbVw+fRGCpln+X+ZQydYWMoQdgy+eEY1jd3hzAcDQpDOziwkx5dGSr3Btpt1Kkx1C+pMpDzm08NRqb8HDzBVGYQpGidc0BZ5iFhDn7yQhFIJ6IhQ3HMY1wQWKIX8PQajzNT8DW9rtK9MNzZUeeN3/+V1DNfc/crZjW616t9Z0Hz3PKD8fsI2fcOwKtVCd+YQWa2d8BV9/Ym3Ql/Ag==</diagram><diagram id="AD0m7nGBSN-_X6hBBRl8" name="RuleWhitelist">3ZjZctowFIafhstkvOCFSxLIMkPaTqGT5iqjWAKrtS1GFgHy9JViGVuSG8hi4jY38fklHVm/Pqyl556nm0sKlvENgSjpORbc9NxRz+F/gcP/CWVbKF4YFsKCYlhIdiVM8ROSoiXVFYYoVyoyQhKGl6oYkSxDEVM0QClZq9XmJFF7XYIFMoRpBBJTvcWQxYUaelalXyG8iMuebUuWpKCsLIU8BpCsa5I77rnnlBBWPKWbc5QI80pfinYXfyndvRhFGTukwTrxLn17Gi6Zj36lfgbR78GJzPIIkpUc8Gh8Mfwxmd0PRzfXX+6/f52M5euzbekJz8vt58HZOsYMTZcgEiVrTgDXYpYmPLL545xkTE6p3eex+cpl/4gytKlJcgiXiKSI0S2vIktPHMsr2kigfGnvupqdHTxxfWbKeQCSiMUud2Uaf5C+vcLDvuHh7dX1bDy5ns66558TWop9gWmfPWiyz2rLPs+wD0A4hJCiPEf5jMxidCtsSnDODCspWfEsIr11XDulfa7VgJ/T4J/fln2+YR9FKXlEOwcvKEm76WGJZF9FstFT75ieBi8g2VUgZaln7Tez8Qfempnhy4B2Hs/APgBP95iODgxHzSUmg0Ox++FRlIA8x5Hqk2oqN4duf4rg1CvDu3rZaKNEWxkd7HZOVjRC+9dQBugCsf2LBYLKrs2cu9rcNH05So2iBDD8qO71muZL9vCNYD6yHRqu9uVy9D1GMW7Zqr430xMN1ER2oCUqjDESPeOzG/bbiSoR/zikdDTQBrMaYTy6k+3Ec8WXCLbvxLJ9DP1OYeh/FIb+Z2NoHkdawtD+DyAMOgVh4GgQ2m+EMAg0CPV1tG0Inc+AsPou/msYhp3C0Pc0DPVz68EYahtp2zsyhm63MVQgrJj8cAzLS799GPY7haF+zWKspAfvDF0tkb62t42hebuVgkxcmhowcucn4AElKoMgwYtMAMpnHlEuiJMXjkAylAUphlDkOOOnQfwEHp7zCWaWYkzPo/TOet7ooPPGyz8l/cy3uzaWvfbqN7NNZ0Hr1A7CwfsI2TY2IPN5jl45gzysro+L6tUlvDv+Aw==</diagram><diagram name="RuleSanctionList" id="msufnQv3a8wW5Y6DPkme">1ZfbctowEIafxpdkfMAcLjmlYUqgUyfTpDcZYQusGduisgg4T98Vlm1kuQGaMm25wftLXrH/fraE4Yzi/SeGNuE9DXBk2GawN5yxYcOna8OXULJccXu9XFgzEuSSVQkeecNSNKW6JQFOlYmc0oiTjSr6NEmwzxUNMUZ36rQVjdRVN2iNNcHzUaSr30jAw1ztuWal32GyDouVLVOOxKiYLIU0RAHdHUnOxHBGjFKeX8X7EY6EeYUv3TtuLUfD5Lv3Ay/S1udNMJi38mS3l9xSlsBwwv9satncVxRtpV/jye3gcfbwMhjfT+cvXxeziayeZ4WlkBe6B8FwFxKOvQ3yxcgOAAIt5HEEkQWXK5pwSYTVhlguhhnH+1p3TpRmlX4DqJjGmLMM7pNZWrbp5okkpB3Zsl3V8RLI8LjbRW+RpGxd5q6chAtp5gXGOpqx3mA+epgu5rOp9/Cf+Gr3TMXWrm6r1W+y1byWrW3N1hRzDyU+JzSZkZQvGPLBz7q1jG6TAIvM5j9kb0el1jEbsLUb/O1cy96eZq8OaRIMxGsZIj9CaUp81TzVabCHZU8iuHGL8Pl4bLxXokxGzS3AgfauP6cB8Pvplvn49OPKEVvj9/K1mxt61DC3oV+FxnCEOHlVa2hqolzhCyVQXcmL01YfR7v+9srLlHcdbwX1RH01kdWtJcp90BIdmCrL/n3MLH3b+SBndV7wnvAnOVNcP1cIQlRBJ4JMY1UhtQL3F6xem037TDadv8lmfavQkDqbTaeWqA75tdnUd+4YJeKQqREKHZ+hJZyXFTBRRNaJoBa6jxkIYuMgcCAdyIGYBIHIMWQ4JW9oecgnQNqImg5VukPDHV+yE8nTs0xmlG+G0xDa725R5o3V7fU/RkjWeANdrWDrvqyDEFbH7Xx69afFmfwE</diagram></mxfile>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion doc/accessControl/access-control.drawio
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<mxfile host="Electron" modified="2023-05-19T13:59:37.339Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.6.2 Chrome/106.0.5249.199 Electron/21.3.3 Safari/537.36" etag="V24dRZzOR94HyYubrwK5" version="20.6.2" type="device" pages="2"><diagram id="O96H6G2-MBiRhnGMjF2G" name="RuleEngine">3ZjbcpswEIafhstkOBiwLx2bpJlxko7dTJurjAKy0QwgRsixydNXCuIgidZOEze0V2ZX0gr9+xmtZDizdH9FQB7f4Agmhm1Ge8OZG7Ztu2OX/XBPWXks05tUng1BkfC1jhV6gXVH4d2iCBZSR4pxQlEuO0OcZTCkkg8QgndytzVO5FlzsIGaYxWCRPd+RxGNK+/YNVv/F4g2cT2zZYqWFNSdhaOIQYR3HZcTGM6MYEyrp3Q/gwlXr9alGnf5i9bmxQjM6DEDzsz1agWeZvgut9EuyJdz4J+JKM8g2YoFz4PL6f3i2+N0fnN9+7i8WwTi9WlZa8LiMvmZcbGLEYWrHIS8ZccQYL6YpgmzLPa4xhkVKbU8ZuuvXM8PCYX7jkss4QriFFJSsi41UkJNwZMnzF2bmwaduJuXehwQPGyayK1k7EGo9gYFR5qCy/tF8BjcXl3fBsPTb6QI6OsCWpM+Ac1TCehqAhaQLrcJ+9erwhG8zSLIg5mfA58ji9ernt2jnncq8TxNvDCBgAxTvpE5NPl8TT4QRVy8wWnnukPTbqxpR2CKn+Eg5fMHh95Ek0/fJ7JoyksYZoUJKAoUyjrJojJxSPmDG+dubT502+Z7ySqFdbTaBd6SEB7eCikgG0gPf/FhJJVeeu46uXF7UlP7CEwARc9ywdaXLzHDV4zYyho0nJGChloqVOsWo7oFlhpoIgeyfCVQJYwW6BWfZtl/TlRd93wcUioacI9ohzBmPYhx/LnlixvlO7E8PYbeoDD0PgpD77Mx1M8UJ8LQ+g8g9AcFoa+cDpqz1Fsh9H0FQnUfPTWE9mdA2H4X/zUMx4PC0FOLXfXweTSGStlnuX8ZQ2fYGEoQtkx+OIb1zd0hDEeDwtAeH9hJj64MlXsD7Tbq1Bjql1QpyPjNpwYjU34BnmAiMwgStMk4oCzzkDAHP3mhECRT0ZCiKOIxLggs0At4eo3Hmcn5ml5X6V4Y7vyo88bv/0rqma+5+xWzGt3r1b6zoHlu+ePJ+wgpewfg9bqAb8wgM9s74Kp7e5XuBD8B</diagram><diagram id="AD0m7nGBSN-_X6hBBRl8" name="RuleWhitelist">3Zhbc6IwGIZ/DZftcBDQS1vtYcbu7qzudHvVSUmU7AJxQqzSX79JCUISttqDlt0r+d4kX8ibR3KwvPN0c0nBMr4hECWWa8ON5Y0s13UDt89/hFKUSuj5pbCgGJaSUwtT/ISkaEt1hSHKlYqMkIThpSpGJMtQxBQNUErWarU5SdRel2CBDGEagcRUbzFkcan2fbvWrxBexFXPji1LUlBVlkIeA0jWDckbW945JYSVT+nmHCXCvMqXst3FX0q3L0ZRxvZpsE78y8CZ9pcsQL/SIIPo9+BEZnkEyUoOeDS+GP6YzO6Ho5vrL/ffv07G8vVZUXnC83L7eXC2jjFD0yWIRMmaE8C1mKUJjxz+OCcZk1Pq9HhsvnLVP6IMbRqSHMIlIilitOBVZOmJa0uAJFCBtHddz84Wnrg5M9U8AEnEYpu7No0/SN9e4WHP8PD26no2nlxPZ93zz+3bin2haZ8zaLPPPpR9vmEfgHAIIUV5jvIZmcXoVtiU4JwZVlKy4llEevu4dkr7PLsFP7fFv+BQ9gWGfRSl5BFtHbygJO2mhxWSPRXJVk/9Y3oavoBkV4GUpb6928zWP/jBzOy/DGjn8QydPfD0junowHDUXGIyOBS7Hx5FCchzHKk+qaZyc2jxUwSnfhXeNctGGyUqZLS32zlZ0QjtXkMZoAvEdi8WCCq7NnPuGnPT9uWoNIoSwPCjutdrmy/ZwzeC+ci2aHjal8vV9xjluGWr5t5MTzRQEzmhlqg0xkj0jM922G8nqkL845DS0UAbzBqE8ehOthPPNV8iKN6J5eExDDqFYfBRGAafjaF5HDkQhs5/AGHYKQhDV4PQeSOEYahBqK+jh4bQ/QwI6+/iv4Zhv1MYBr6GoX5u3RtDbSPt+EfG0Os2hgqENZMfjmF16bcLw16nMNSvWYyVdO+doacl0tf2Q2No3m6lIBOXpgaM3PkJeECJyiBI8CITgPKZR5QL4uSFI5AMZUGKIRQ5zvhpED+Bh+d8gpmlGNPzKP0zyx/tdd54+a+kn/m218ayV6t5M9t2FrRPnbA/eB8hRWsDMp/n6JUzyMP6+risXl/Ce+M/</diagram></mxfile>
<mxfile host="Electron" modified="2023-11-22T14:15:17.863Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.6.2 Chrome/106.0.5249.199 Electron/21.3.3 Safari/537.36" etag="IAOJcTwx7-sYH6vO0wR1" version="20.6.2" type="device" pages="3"><diagram id="O96H6G2-MBiRhnGMjF2G" name="RuleEngine">3ZhbT9swFMc/TR5BuTSXPpY2MKQCUzu08YRM4jaWkjhyXNry6WcT52I7W8ugI5vUh5xj+zj+n1/jYxvONNtdEVAkNziGqWGb8c5wZoZtWyPbNvjPjPeVxw2CyrEmKBadWscSvUDhNIV3g2JYSh0pxilFheyMcJ7DiEo+QAjeyt1WOJVnLcAaao5lBFLd+x3FNKm8gWu2/i8QrZN6ZssULRmoOwtHmYAYbzsuJzScKcGYVk/ZbgpTLl6tSzXu8hetzYsRmNNjBpyZq+USPE3xXWGjbVgsZsA/E1GeQboRC56Fl5P7+bfHyezm+vZxcTcPxevTfa0Ji8vkZ8bFNkEULgsQ8ZYtI4D5EpqlzLLY4wrnVKTU8pitv3I9PyQU7jousYQriDNIyZ51Ea21mgInT5jbNjcNOkk3L/U4IHhYN5FbydiDUO0NCo40BRf38/AxvL26vg2Hp99IEdDXBbTGfQKapxLQ1QQsIV1sUvavV4UjeJPHkAczPwc+RxavVz27Rz3vVOJ5mnhRCgEZpnwjc2jy+Zp8II65eIPTznWHpl2gaUdghp/hIOXzB4feWJNP3yfyeMJLGGZFKShLFMk6yaIyccj+BzfO3dp86LbNdpK1F9bRapd4QyJ4eCukgKwhPfzFh7FUeum56+TG7UlN7SMwBRQ9ywVbX77EDF8xYitr0HBGChpqqVCtW4zqFlhqoLEcyPKVQJUwWqBXfJpl/zlRdd3zcUipaMAdoh3CmPUgxvHnli9u7N+J5ekx9AaFofdRGHqfjaF+pjgRhtZ/AKE/KAh95XTQnKXeCqHvKxCq++ipIbQ/A8L2u/ivYRgMCkNPLXbVw+fRGCpln+X+ZQydYWMoQdgy+eEY1jd3hzAcDQpDOziwkx5dGSr3Btpt1Kkx1C+pMpDzm08NRqb8HDzBVGYQpGidc0BZ5iFhDn7yQhFIJ6IhQ3HMY1wQWKIX8PQajzNT8DW9rtK9MNzZUeeN3/+V1DNfc/crZjW616t9Z0Hz3PKD8fsI2fcOwKtVCd+YQWa2d8BV9/Ym3Ql/Ag==</diagram><diagram id="AD0m7nGBSN-_X6hBBRl8" name="RuleWhitelist">3ZjZctowFIafhstkvOCFSxLIMkPaTqGT5iqjWAKrtS1GFgHy9JViGVuSG8hi4jY38fklHVm/Pqyl556nm0sKlvENgSjpORbc9NxRz+F/gcP/CWVbKF4YFsKCYlhIdiVM8ROSoiXVFYYoVyoyQhKGl6oYkSxDEVM0QClZq9XmJFF7XYIFMoRpBBJTvcWQxYUaelalXyG8iMuebUuWpKCsLIU8BpCsa5I77rnnlBBWPKWbc5QI80pfinYXfyndvRhFGTukwTrxLn17Gi6Zj36lfgbR78GJzPIIkpUc8Gh8Mfwxmd0PRzfXX+6/f52M5euzbekJz8vt58HZOsYMTZcgEiVrTgDXYpYmPLL545xkTE6p3eex+cpl/4gytKlJcgiXiKSI0S2vIktPHMsr2kigfGnvupqdHTxxfWbKeQCSiMUud2Uaf5C+vcLDvuHh7dX1bDy5ns66558TWop9gWmfPWiyz2rLPs+wD0A4hJCiPEf5jMxidCtsSnDODCspWfEsIr11XDulfa7VgJ/T4J/fln2+YR9FKXlEOwcvKEm76WGJZF9FstFT75ieBi8g2VUgZaln7Tez8Qfempnhy4B2Hs/APgBP95iODgxHzSUmg0Ox++FRlIA8x5Hqk2oqN4duf4rg1CvDu3rZaKNEWxkd7HZOVjRC+9dQBugCsf2LBYLKrs2cu9rcNH05So2iBDD8qO71muZL9vCNYD6yHRqu9uVy9D1GMW7Zqr430xMN1ER2oCUqjDESPeOzG/bbiSoR/zikdDTQBrMaYTy6k+3Ec8WXCLbvxLJ9DP1OYeh/FIb+Z2NoHkdawtD+DyAMOgVh4GgQ2m+EMAg0CPV1tG0Inc+AsPou/msYhp3C0Pc0DPVz68EYahtp2zsyhm63MVQgrJj8cAzLS799GPY7haF+zWKspAfvDF0tkb62t42hebuVgkxcmhowcucn4AElKoMgwYtMAMpnHlEuiJMXjkAylAUphlDkOOOnQfwEHp7zCWaWYkzPo/TOet7ooPPGyz8l/cy3uzaWvfbqN7NNZ0Hr1A7CwfsI2TY2IPN5jl45gzysro+L6tUlvDv+Aw==</diagram><diagram name="RuleSanctionList" id="msufnQv3a8wW5Y6DPkme">1VfbctowEP0aP5LxBQd45JYmUwKdOpkmfckIW9iasS1XFgHn67vCso0sNwlNmbZPaI+kI/bsQSsMZ5rsPzGURbc0wLFhm8HecGaGbdvmwIQPgRQl4tqjEggZCUrIagCPvGAJyn3hlgQ4VxZySmNOMhX0aZpinysYYozu1GUbGqunZijEGuD5KNbRbyTgUYkOXbPBrzEJo+pky5QzCaoWSyCPUEB3R5AzN5wpo5SXo2Q/xbEQr9JlcM2t9XSSfvd+4FXe+5wF42WvJLs6ZUudAsMp/7PUdkn9jOKt1Gs2vxrfL+6exrPbm+XT19ViLrPnRSUp8EL1IJjsIsKxlyFfzOzAQIBFPIkhsmC4oSmXjrD6EMvDMON436rOG6lZtd5gVEwTzFkB+yRLzzbdkkia9FKWbNdUvDZkdFztqrZIuiysuRslYSDFPEFYRxPWGy+ndzer5eLGu/tPdLWHpiLrQJfVGnXJap5L1r4ma465h1KfE5ouSM5XDPmgZ1taRrdpgAWz+Q/Je6m61jE7bGt36Ht5LnmHmry6SdNgLK5liPwY5TnxVfFUpUEeVjyI4MKtwsfjudleiQoZdZcAB9pd/54CwPenW+bjt3+uHLEQv8bX7y7oUcHcjnpVGMMx4uRZzaGriPKEL5RAdrVfnL76c7Tbt1eZptx13AraRCOVyBq0iEodNKKDp+q0f99mlt52Puiztl/wnvAHuVKMHxsLQtSYTgSF5lXFqY1xf+HVc3vTfqc3nb/pzXar0Cz1bm86LaK2yc/tTb1zJygVj0zNoVDxBVrDe1kxJopJmArXQvUxA0A0DgIP0rGcSEgQCI4Jwzl5QesDnzBSJnI6ZOlODHd2SieSr2dJZtQ3w9smtF9tUeaFNRiOPuaQonMD3WygdZ9WQQib53a5vPnT4sx/Ag==</diagram></mxfile>
Loading