Skip to content

concrete mul#43

Merged
thedavidmeister merged 5 commits intomainfrom
2025-05-10-public
May 11, 2025
Merged

concrete mul#43
thedavidmeister merged 5 commits intomainfrom
2025-05-10-public

Conversation

@thedavidmeister
Copy link
Copy Markdown
Contributor

@thedavidmeister thedavidmeister commented May 10, 2025

Motivation

Solution

Checks

By submitting this for review, I'm confirming I've done the following:

  • made this PR as small as possible
  • unit-tested any new functionality
  • linked any relevant issues or PRs
  • included screenshots (if this involves a front-end change)

Summary by CodeRabbit

  • New Features

    • Added a new contract providing comprehensive decimal floating-point operations including parsing, formatting, arithmetic, comparison, and logarithmic/exponential functions.
  • Documentation

    • Improved documentation with detailed decimal arithmetic specifications for multiplication.
  • Refactor

    • Standardized function and contract names from "multiply"/"divide"/"power" to "mul"/"div"/"pow" for consistency across contracts, libraries, and tests.
    • Updated deployment scripts and import paths for improved structure.
  • Tests

    • Added extensive tests for decimal float operations including addition, subtraction, multiplication, division, negation, absolute value, inversion, comparison (eq, lt, gt), fractional part, floor, min, max, zero check, logarithm, and power functions.
    • Ensured test coverage validates consistency between library functions and deployed contract implementations, including error handling and revert behavior.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 10, 2025

## Walkthrough

This change introduces a new `DecimalFloat` contract exposing the full set of decimal floating-point operations from the `LibDecimalFloat` library as external functions for offchain access. It also standardizes naming conventions by renaming multiplication, division, power, and power10 functions from `multiply`, `divide`, `power`, and `power10` to `mul`, `div`, `pow`, and `pow10` respectively, updating all internal calls, documentation, and tests accordingly. Additionally, deployment helper functions and related imports were adjusted.

## Changes

| File(s)                                                                                         | Change Summary                                                                                                                        |
|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|
| src/concrete/DecimalFloat.sol                                                                   | Added new `DecimalFloat` contract exposing `Float` operations externally, forwarding calls to `LibDecimalFloat` functions.            |
| src/lib/LibDecimalFloat.sol                                                                     | Renamed functions: `multiply``mul`, `divide``div`, `power10``pow10`, `power``pow`; updated parameter order for `pow10`; revised NatSpec comments; updated internal calls. |
| src/lib/implementation/LibDecimalFloatImplementation.sol                                        | Renamed internal functions `multiply``mul`, `divide``div`, `power10``pow10`; updated all internal calls accordingly; replaced detailed docstring with brief comment. |
| test/lib/LibDecimalFloatSlow.sol                                                                | Renamed `multiplySlow``mulSlow`; updated internal call from `divide` to `div` in `invSlow`; no logic changes.                        |
| test/src/concrete/DecimalFloat.mul.t.sol                                                        | Added new test contract `DecimalFloatMulTest` verifying multiplication consistency between library and deployed contract.             |
| test/src/lib/LibDecimalFloat.mixed.t.sol                                                        | Renamed test function and calls from `divide` to `div` and from `multiply` to `mul`.                                                  |
| test/src/lib/LibDecimalFloat.mul.t.sol                                                          | Renamed test contract and functions from `multiply*` to `mul*`; updated all related calls.                                            |
| test/src/lib/implementation/LibDecimalFloatImplementation.mul.t.sol                             | Renamed test contract and all test functions from `Multiply*` to `Mul*`; updated all related calls.                                   |
| test/src/lib/LibDecimalFloat.div.t.sol                                                          | Renamed test contract and functions from `divide*` to `div*`; updated all related calls.                                              |
| test/src/lib/LibDecimalFloat.pow.t.sol                                                          | Renamed test contract and functions from `power*` to `pow*`; updated calls to division from `divide` to `div`.                        |
| test/src/lib/LibDecimalFloat.pow10.t.sol                                                        | Renamed test contract and functions from `power10*` to `pow10*`; updated calls to `power10``pow10` and argument order.               |
| test/src/lib/implementation/LibDecimalFloatImplementation.div.t.sol                             | Renamed test contract and functions from `Divide*` to `Div*`; updated all related calls to `divide``div`.                            |
| test/src/lib/implementation/LibDecimalFloatImplementation.pow10.t.sol                           | Renamed test contract and functions from `Power10*` to `Pow10*`; updated calls to `power10``pow10`.                                  |
| script/Deploy.sol                                                                               | Updated import path for `LibDecimalFloatDeploy`; added call to `LibDecimalFloatDeploy.decimalFloatZoltu()` after `container.writeZoltu()`. |
| src/lib/deploy/LibDecimalFloatDeploy.sol                                                       | Changed import path; added constant `LOG_TABLES_ADDRESS`; added `decimalFloatZoltu()` function deploying `DecimalFloat` contract via low-level call; unchanged existing functions. |
| test/abstract/LogTest.sol                                                                       | Updated import path for `LibDecimalFloatDeploy`.                                                                                     |
| test/src/concrete/DecimalFloat.add.t.sol                                                       | Added new test contract `DecimalFloatAddTest` verifying addition consistency between library and deployed contract.                   |
| test/src/concrete/DecimalFloat.abs.t.sol                                                       | Added new test contract `DecimalFloatAbsTest` verifying absolute value consistency between library and deployed contract.              |
| test/src/concrete/DecimalFloat.div.t.sol                                                       | Added new test contract `DecimalFloatDivTest` verifying division consistency between library and deployed contract.                   |
| test/src/concrete/DecimalFloat.eq.t.sol                                                        | Added new test contract `DecimalFloatEqTest` verifying equality comparison consistency.                                               |
| test/src/concrete/DecimalFloat.floor.t.sol                                                     | Added new test contract `DecimalFloatFloorTest` verifying floor function consistency.                                                  |
| test/src/concrete/DecimalFloat.format.t.sol                                                    | Added new test contract `DecimalFloatFormatTest` verifying formatting consistency.                                                     |
| test/src/concrete/DecimalFloat.frac.t.sol                                                      | Added new test contract `DecimalFloatFracTest` verifying fractional part function consistency.                                         |
| test/src/concrete/DecimalFloat.gt.t.sol                                                        | Added new test contract `DecimalFloatGtTest` verifying greater-than comparison consistency.                                            |
| test/src/concrete/DecimalFloat.inv.t.sol                                                       | Added new test contract `DecimalFloatInvTest` verifying inversion consistency.                                                        |
| test/src/concrete/DecimalFloat.isZero.t.sol                                                    | Added new test contract `DecimalFloatIsZeroTest` verifying zero-check consistency.                                                    |
| test/src/concrete/DecimalFloat.log10.t.sol                                                     | Added new test contract `DecimalFloatLog10Test` with external log10 function; test function commented out.                             |
| test/src/concrete/DecimalFloat.lt.t.sol                                                        | Added new test contract `DecimalFloatLtTest` verifying less-than comparison consistency.                                               |
| test/src/concrete/DecimalFloat.max.t.sol                                                      | Added new test contract `DecimalFloatMaxTest` verifying maximum function consistency.                                                  |
| test/src/concrete/DecimalFloat.min.t.sol                                                      | Added new test contract `DecimalFloatMinTest` verifying minimum function consistency.                                                  |
| test/src/concrete/DecimalFloat.minus.t.sol                                                    | Added new test contract `DecimalFloatMinusTest` verifying negation consistency.                                                        |
| test/src/concrete/DecimalFloat.parse.t.sol                                                    | Added new test contract `DecimalFloatParseTest` verifying parsing consistency.                                                        |
| test/src/concrete/DecimalFloat.pow.t.sol                                                      | Added new test contract `DecimalFloatPowTest` with external pow function; test function commented out.                                 |
| test/src/concrete/DecimalFloat.pow10.t.sol                                                    | Added new test contract `DecimalFloatPow10Test` with external pow10 function; test function commented out.                             |
| test/src/concrete/DecimalFloat.sub.t.sol                                                      | Added new test contract `DecimalFloatSubTest` verifying subtraction consistency.                                                      |
| test/src/lib/LibDecimalFloat.isZero.t.sol                                                    | Added new test contract `LibDecimalFloatIsZeroTest` verifying isZero function behavior with multiple test cases.                       |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant User
    participant DecimalFloat (Contract)
    participant LibDecimalFloat (Library)
    participant LibDecimalFloatImplementation (Library)

    User->>DecimalFloat: mul(Float a, Float b)
    DecimalFloat->>LibDecimalFloat: mul(Float a, Float b)
    LibDecimalFloat->>LibDecimalFloatImplementation: mul(int256 coeffA, int256 expA, int256 coeffB, int256 expB)
    LibDecimalFloatImplementation-->>LibDecimalFloat: returns (int256, int256)
    LibDecimalFloat-->>DecimalFloat: returns Float
    DecimalFloat-->>User: returns Float

Possibly related PRs

  • float struct #24: Adds the Float struct and refactors multiplication to use this type, directly preceding the renaming and interface changes in this PR.
  • 2025 04 04 min #25: Adds min and max functions to the LibDecimalFloat library, which are exposed externally by the new DecimalFloat contract in this PR.
  • wip on consolidating packed #30: Refactors LibDecimalFloat functions to operate on the packed Float type, affecting the same multiplication logic and type usage as this PR.

Suggested reviewers

  • hardyjosh

<!-- walkthrough_end -->

<!-- announcements_start -->

> [!TIP]
> <details>
> <summary>⚡️ Faster reviews with caching</summary>
> 
> - CodeRabbit now supports caching for code and dependencies, helping speed up reviews. This means quicker feedback, reduced wait times, and a smoother review experience overall. Cached data is encrypted and stored securely. This feature will be automatically enabled for all accounts on May 16th. To opt out, configure `Review - Disable Cache` at either the organization or repository level. If you prefer to disable all data retention across your organization, simply turn off the `Data Retention` setting under your Organization Settings.
> 
> Enjoy the performance boost—your workflow just got faster.
> 
> </details>

<!-- announcements_end -->
<!-- internal state start -->


<!-- DwQgtGAEAqAWCWBnSTIEMB26CuAXA9mAOYCmGJATmriQCaQDG+Ats2bgFyQAOFk+AIwBWJBrngA3EsgEBPRvlqU0AgfFwA6NPEgQAfACgjoCEYDEZyAAUASpETZWaCrKNwSPbABsvkCiQBHbGlcSHFcLzpIACImDAZ/Gkhmb2jIAHc0ZAcBZnUaejkw2A9sREpiujQJeFo2JBo+LM8fP0DgxFCMRwEKgBYAZjD8SrbufER1fBc/bQwvTCJsNFIAeip4DA1malgNADMvfGoNGBLrOyVEBPhucXwsWnxpSAx8UN58GqV7blF4fbwBiQJS4bReZAqfB4UbMd6SajwB78PiIfBePBIrD7aajBiwRYkU4ASVCmwYGKu6DCJGY3AWSXS6lg9lE9wwyBxfDh4gkiIeABp7OjMYL0Bh6PjRABrRBCgQw3AlcqssRYyH+SCRfahWl3WSndyMEoMWWq9lahrZMES5z0HJ5RCTZFxQEUHbs7LYfHoZDSkgkbibIijWz2HY+IXYDDqGmdYOvEjpSD7aNqh5oLzqWRCrMYaUJ/yRPkYMlOjooi5y8X0cmUhPXfxkRCwd7IAHobj0oEqSLymFvcj8faVFXODw7Cj++jNJh0yIFQ3nMMAVRsABkUMhYLhcNxEBxVqsiMzsAINHP1nMFhglisSFfNttdgcjtRVtxvF5VoMNEZ9MY4BQGQ9D4COaB4IQpDkFQBQKKw7BcLw/DCGykgvEUTBKFQqjqFoOgASYUBwKgqCYDgBDEGQyhwXObCllwVDJg4TgzJhijKLhmjaLoYCGIBpgGIgFAMKscQJCQNCrAAIv8EYAGJvpoaJeBwBjRBpBgWJAACCxJUTB1BRCxk7yGBxqEogRg6YmyYAMrorU2YKKWVBiK8aBsPQAAGskMPAClKd5W4oK5ijenQQrpAgPrlBQUiQpCWBgfs+JzGAaAMAw0iTAIkQZFQXYVM40ISqM3nrvAAh+QFmaKccuDBVmAhUDMmD0EWRn0NwziTLeNYptMHriP1zWtfA0gkmSdLTLgyBKh43n1dQwWdBQ3qhO1vpov5XUpmmnophQLCQBVVU1YFDXeUKzTpCQrSzg8nSYHNA2Ylm4gvPsx3MG0DJRHCtDeJNZweHEuBubqAAe4zlJC8G8CQJQcuhrKhOZJBQ40GCZp4mq4jUSb7fEh1KtQILwP4YhePImwSPg/oKBQ/iIOMEoJmNzjyKmJPqvwWBLUFkB8hiIPuCqPPphyoUUtgPw9RQfUhmgIJybjhwNUdJ0q2tCZMkqkCUMdfD+OMFAjUQQpcsNCYqxr5MENSSj+RG9gQ8GN0UMybDiMC+B/LBfMABRoLQtDqFiQo5BDmXskK5BEPyGA3QIKl4B4IvBEKKReOI3YMEnQrhzUzrJ6FUiK1iACUQpzgrSDIv7NHB+0mbZrmOXFJgQpEP4Rl8GTGA1wN3RsF7wLvRHLxB99sdYrjCu4FbRzTNnmwBY42doFDG/MEKABelAjFKppV6cOlhxHGY+DmKDQ7DLxHInXtKnkwJbZjbPsPA6sHcH3njHSAARgAAzXVOk/UB4CAH4HSN5KuXdQj+CCJTDwKs4jPVLOgMOLNkAK08pJCoXItT4AZtgbgYRezSCFD1J0URNjY0zDTLWv0VZKHpPgWQURQ60FwS5TBmhIAAFFMosklhaSY85ubTEyBQWg7ZXqbE/K9R2C1IDRmwjTDmVVWryALg9MqiRsAUGlmolm3gl4ZGZNCUIOwGFzFthgPRDwY7uWekkXEPCr4418E/IES5UDg0hsUMoPBjrfBeCraMAIJq1lLJQfYmUPDEJSmlTYjAszsHmiMBhyh3L6xZM7Wqvh7YWzAOMBh/AA5J3bPOWk7B6FYAclmcOuB5Ccy9pNIw5hLA6Vzs3J6wxRjOwWIHQZGMYazSiLiT8eUgSG1LFPKyBgoAADkiZBNjtgpQtAuC+TVl4ZajVQqnWEqJcSiQHwXTqkpDQKlgoFNGDiHwsCEyY0YSUv+T01KQF0KdcRWIeC9RIEHXW/U2BwhmGtBB7zKA+Lxh4IxJjkBBzkDQRAfQhRHKrt5AwvyoDeQBcia21Ag5HPQDCrGcKF7GMRZJYx0tQXu3BbSaYsgcV4r+YSr5WAeFkqUugLFAqBCUo+QitouAGUouxbi/F/yeX2DPPyzWaAhWaxFYbKlJiaWaiRYymVnKCVEqwHkboiBlXkzQKK6lvhPy6vpciyAFrcAcrldy3myIVDmvJVazVYq7V0slY651rquXGuSN4Z1grIDko1bC7VtraUSqlU6g1brw3FyjaqmNwrrUJvFXq6VSlQ1GoVXTLNeb4UBuTcGtNYaFWBCzWq8mcatVVqTYWp1AhSFeBLfKj1WBc5NpzeqytOrA0ptRT2vt7qpaQCILgYdsax2JvtUGxl3b0QzvDbPBgFa/U2oLQ6/VxbZX1oHSmFeFB93xvbWuyddbS0XsAaAm9bbcaE2TJ2kNZ6n1zsgSAt9YrP01pPQ1bdCrAFLtzQe/NIHv2Pv7XO010HR2wbvRO2tp7DVIYtDsKGqGW0rqPeuot4Hf24cBUgAAWkfIDh7q3fs3b23FGloj/kEmc1YzVViVWqgco5dz0RqTY1pXp+loI0WMo4Uyw4LK3mkG4c4HTuY8s5LiHOecswFzjhTEukceCwIqOZUBN0yqSaoLaozfAm5jOlsiNRgsrpu3WvkygdKcZeRYadTTtwabBUdt5HO0Di61BIAFkY3li7QMAZQKBQyYHALAWZnysWKARdOoA4KLM/hqikDTU4ABhaYOWHjh36rk/N+iIQJb49cw5SliR1PomCdkDz3PqO4LQPajsPQ+gWiqcgyZPPTyCxYvzshgqACTCHz3gQuSDC9N060WhSJbi2AyAM3EtQLPqDSAqzqB2Vy/BFr6mB7nF8/nJOxM513XtfSJJ9BHlsMkuCKImNsoUDuN5tRRTXbOG9pJeZrN/iAh04Cq4Nw1D9TUZd7T13bOFxlvWfqrZkxMBIPsMHE1SzVk/g8LJKX7DwCINLOc0O0FlTR34Uq5WQxkS7Jk2gS4PD4J9sZuRRDcTbY25kZAaUFP0EdplbK33HNHNWhDDaKZKadAGo5sEeVpDSWoGgYrrlY7BR4Xw8ocRaBRWZJ17rcEDu4CO6INohw0Iw4QIgU4qzj4EgU8gO7E5Q4eFUecDRlAtGjXwCeBgQoja4id7QPMltKxBPRJe2BkBeiyDK6ODznlgxJXoE8Bgjh2DXfIcbrp3TtJ9MaDUoZv3RCjJLxMs2cEZlnm0ws8IE1llQHkgq/wI3dmUeRHD2QhHQgasqxh0DZHqA4s213k1kafXNv7wgwf47h+ptPScs6/GXY3OcyplfXGeN1YE7c+5KyY1t7IAQzvs6LShaUH3uPc/4n5sY8ekfLqlsX4h5IG/A/79D4Q8v9Jq/6sJdLQWouZt8RJuMqpeNzp98GohMvBcUW8FVJhSdqAk1c8uo9lw00tX1tdO5FdIhEAVcwR1dXFLFyVSk79gMJov0n8l9yNx839kQX1ANyClIbocE8CqFCDVcSDIZKDD14NaCf0V89918GtN8dFQD/8d9IDRDilBND9ECL128z9MDINrNP92DeFOClduDiCXE+DQoqCiZf96CtssDYFNDtk+F8DlceCDDY5+C4NqDF9hD/85DLoVpgDdEwDRJd9oCxCFD0RWNNIVlONwCeMAp6R6lSwk4oC195DGtmts92Q4CRNNJC8JNqJYJpNWIzIRwBdSBlkjQsD/AahoREBmEO9Ztc4JsHlmgVCvNAtgsBp1BkBQQ3t098AGAwUQw+cxgFhsontDcVYWoJoCiWAWtQpw5wcKsyxqRnpTQwAHhmEojIgWsk5z5Wh59fBqtskaitNJsMgOt0C4JHZqsajgpNhOgSBQ5Tg7IAp4BRkaYhQ1Fw0osFslB6jkBGiohAtosrEDYmFGAmFkBTjuEsppg6cCs9t3jsDecGjT8mjItmCHlDcmBmZpA2Y6cQTWhwS7dQYVRGjU90Asc2QI1ajoijDD09jihjpsAiBWxFRlNJCXAhQ6w5YEx/8AMYtYEoEidvJolcBKpyBnBiR79xgGQsRvIWcSEA8Boo8SkjhkxzIBtkk1M2g7EsA0wndSBaAABufmZhN4hVEbNPSoSmS3dzeIF4V3dAfpfwZnHpXSB0kvT3DwEZZwSvEcfHc2aZPgWZevb+T6ZvY/C9ZAnGINMGXUugNQi9HvIOBhAAJgAFYAA2YnUnOgYrTHbHdgHSdk0sVMjM/HcgUsAsow4szM8gWgHMrHIEHHXAAAIULNwCrNLPYCbLH3MIVRzkTKLPTOrOzOeHrP8nzNbPbMmTLNwArOTMHIjOHNzIbM7InMHI7NLC7KuMHVZPkAAJgOoCa2iI2La18IgIEFWDWJiNayxHiMAKSKPJSKxDgIQLDLnQjNQM1EKNjInz0zC37LbPnJJxrLrLzPLNXJLKnPHMrMAqzNrJHNAubPAs1S/g3O7J/MzTnIzIXLgqXLHLAugogpQpnKQuwpAuXI3KQvXObLH3SS3z3MCPvPWMfIeC3NOQiMgMvOPJvI8I3wPOSNiNSMUNfIkSAo/OjMJHPwsLuxwI4KdEoV0KILVwcLEBIqAsXNHMbMosgtLDQsYKwGYJDlkvmi4MUt4NjlUtgrIrwssUwuQoJx0tYrop4vEL4ofIEulNPMiP4uvIeFvP3NwEPKYvcoeGfPUlCIgDACMHRVwDPL8oYoajsmVLSLCvY0yIMik3tBk1APMi/OKPOFKJIHKLKCqLPwOIm0StgWCgJBkADCwF+KF0ixzgqrgUBKZM2icXk1ICGTaKBSoHZ0ViFD1TCFkD+GrFxB2LlP8VhKQPEFaADmtmQDhx7AtFVPSBGD+3VgFVNhZmYulhPCkCwCKGwoUFwsbPNKourFD3D0gEPmOhBLhiFC+ASWVNVhoCliJzeHdDbn3muxqBVnosSIakCqvM2M+ojHgEPhlN0kvnZCYVvhNIvQuOuLC1Ojpmau+M6qiG+hOgBs8ICu8s2Kv3C1qwCMBtcqCp8q2ABMeTUUQAIXQAoCWFOyjC60RBtwnEklbHoDKCxtxFC1LlapsXtMaATDUSURhFxBsWUVZB2EWR6PtxGHeBKD4GNVxlxD8X0Uxpdw6x2B+HSV+wBH2D/DExdOL1JhGDLwpC9MOirymVAgDLr3mWDKb3/GEsBXfKjMxvoGxt+j0opMOOav/KrNIvgvIuIoIrsunNnIHKwrUpwo0pXIjqoq7OpIfw7SEMwvArH0C3DSauVKDpguAtDusujoAsIvsvDtspDtOsTtsuTqcJ/wzpjqzscp3NOmcqOXRpX2itio7qUmaufL/FEzCMioMB7q4wuUIRkn8u2G8A0GUmExSpNr0nSpyMyryLk1yuslskgGaScjaTjFCE2Xcn2XiuoAAFlvBoAQgrj2wwogYhihkRZagjJYRxsrsLRVaPp8jyo7znNj72qhdzhcbeLjkVNZSAGUAZpzZkByBsonRQD2EQIyAxzzS0BGcm9yo+6JCQCZh3TTogC2k/gppVZARyAkp0NcYSgvAA4bsLQxsvAhF314DEF/a/NMHcA1qCGhZM4XgyhRaWTcHZAAByZABh4KH2Lm2UrUw+uhwFbyaKy+rwWSDhLhWgYKdhI4WQeGb6aQFka4m0bKOTRzP+rwyBraagGgOkFREYHvMILhpzLw8W16btA2P60YW9Kh+6WhraMvVRqIAB0Ry45ITmxQEkEcNRTx3Y4EhwLKAMeRdkzaOhGB1htRaMdIQqP4DqaQCxTkH6OPJWthj+wFSRxQDUDwVuLwcJjx5h3E3wMoygOaRJ5Ctkeac4TRzhAJ5S3AIJpa8HBzEYBp82Vq0YOmtgQ2ZmaYAJeaEIBZBwFmfhBoFB+QLaDEqmXAch5AcyPp67XoAkcovgXoTh2q0YLfXx9pwMLRrpjXMQY250ovAZUxC2i5q2uzLZn0yZP0+2zwOZYEZ2xTI/My9yHhb80+sm3AJR6+zoVihRkIVYCeh4CSKSUxzQHOee0KqAKwR24EcNEFyS3s7wJhj5T/YjR/UjOg0fViyBsFvGyFm+o/LF35uRz1MOUF8NRR7wFRq52gElyhlh9JallFul6FpekeqKuFmQ887Bk4PIKGOgdFlSdI1K8TVevaEybKgomMvKj3WZ8NEbDIWcGM72/J2FzoaST4kgIBAAeQrgGAy1NdwHNYkGtdtahoAHVmR9b8qeVXiLtQnJRQT+ZuHnMDHMB4HjjNRwTz80ANAibUUx9+jTZBiohHlvIY3M0RVwEtpvIGBZ7KSaYg4NAi2E3ESHtH7U3c2+yi2NAcVZTowepTQExzJzFc40HknDp/AZGdSJKaEdr4oBGPBpgSdNhcZorJr34ypFSY90hjbC9XTzbhly9ra+ZbavnKxAynbFkQzXbW9wzRLPao24y51oqnWwsXXKABgg5SXaVX92WQgnXz2KBL3r3/AqXun27SbaX4A5XaAoXjl/9x72KpXP3QHthv35WF74DRWIrxXOh4WgO4rwW82FXF7RM0qLM1WsqZgcqtWlMwZ339X+ivzjWcbpWIX36aY/37WyPhXGotjPkL0zSFTA3OozjbGKPlrAU7T6rvMGHDiiWbUtcyo+O6iEsc4BOE0hOfJgtBqsS0J8sDQzhSJ4hKQXhcqTlXGWRInanKtEkjHjVzSJraT8GQGXL8a3LKapOP2Ei8amo26DPZSx33iOX83ZArBMppwMao30BIS5FgxjSRgebRghsaiJOfFgo9X6b0keqIZZAwAdMfQ8pujpQBosg4pPRZSNaFSDDo8NYaCu34gjXDSVj5A1FPMm2RwDP5dzhIH+jMxGhea+AMEln4gzJDmyjsw7nl752+Z8HPS3m5NfSa8HamX/nQygWkEkTQWaOKPZAqOGCZuvAqOj9d2516q9ke8wvMwC60zwK9uCKX3MMwNKWGDxPmGdv9vM6Du+WSMH1sMlC1upvz9NvzujkZ9DvXCZVTvCXXu2CR1R8buyW7vyMVuT8O89kXPDj3PTQ6BnV3u+XX8XPofpw4f/uXUEfoPBJAO/COKCb2REO8bgauKQq0XIOlXl6sjDI4J1XsPNXLI8PZHzGypgSYvdWNT9mPBegyA2hqifb1ElYYglHDi0hHZoglG0gvWSBLSzTZOrc1R+p0EYyTk0mJQfdZAExw1ehRaQh5WXTomfB9iEa51TOjkifdq83DiqrqhOeTmk3HsRnjPIsyOzfgqthgt7jHjnjb5HfrOUWB6e8u6Oe49bfLn7fU2yP/fvB0bHPZmNabp231Qic2dCFDnNg6cfjaQ5h1FCuJKIGCOou5p7oRwiOjXePne8esQheJt5vAty+LOk5aOoaHctaI23cfh8Gx24+jTSvnn1TGOCFDOlBFlARKB9i25ScRmyuiZIvTUQw4gDrUjuluuzbeve/VZXnvS7K13a9Rut2XbAX331vff/KXfKaq/6Q5ub6FuQOzPT+G+r6r+AOJWEPOLdqCfQG7/UjSeMW3bkQj+HXz+NMWjMdBARMMiKV7RHiECUbAD8AoA7SouhopYBqWdfCmvfyW70sHuFof/pDwmwwCdITiMARXX/Jpk+gkdKCgwhIFkDUKkAzoNAKPj4DZAhA6csQNIFUVS6lA+um+xuahATejFEGuyEb6g9lCT3CHlANm4wCrW5ACAQwRc4SCpBiAlyKQWP5n1zOqAgQQ/xFaYDAU2AsQa50kEkAYB0grbC530GGCFByAm/qbwr4PBBBWgv/iINOg4CL++g/QUYMcG6CXB8grgUoN4FA1rBGAWwb/zqoOCABs3IBEmQGB9B0yAAdgAAcAATniGxDohaZFMoMCTJAI3BoQrwOEMiExCEhSQlIWkIGAZDpBArd9r4PJr8DK+GgxqEIMe7g93BtAsIREKiFpk4hiQ5IakPSFAIPWSoJgVkn/LhDYhVAyuqWGGGjDNyMg3QbkLaEdDCh3Qkob0OZADDccQwpMiMLYGtkJhnAk5BYJs4f9/BgQ1blgJCFOCaYQCS1rEMuFAJ4hWQlzjcOuGWs7h5gioSgOqE2DahL5E4doLOG6DDiAAcSyBmCaB5HLwECMQAgi9hbwywXwOJ4BCvh9Q04Y0OyGAisgrg3Si5whEYjvBwSSoaoI+EIj0BmgoITz1UJNCwRhxB3LgBsCFVGmDAsAWyCTg7chy8dBCqXUnJEUORhddSghRbJJ14BUw4wboOpG0iK4M5AgTDCZHsgWR1dBOvhTrrwDuRsdSysXUbL8jFRRFKYeUO4HKDwWn/GocSLqHD0YOQkG4HcGnqqNkqaHFVhh2p5Ycf6W9AwEaCiKzQgUBsYhPiK5acIMaxHXjtECLbwccewHA4WZ29EGgVI0Qe1gGI0BBjYqHTWQO/zDGXNOEcBKMacD6EIAsAjmdaBgGkHGobodTEmqGKOThjY2/lajOiElTSC6urLWsAhHDhGRmEaAHUBUBzYuI5glADQBk3UAGCqx2ACAQrX4ALQ+AWXXEFOzy4t87SutIkEvznYr9BkfXJdgN1XbDcfmQZPfgCwdzkAh64VcIsGNWAJikxpYlMRGNQ4ZFbR2RTDhvRw709nR5wV0cMx6gejuc64f3NAC4IaAKk9+O3PcgNb85S+fPFWKx1RjPiWQjyAnKdEDEZZOGkWQMdBPPg70MENoHgeuCtYAiAA+tAB0hNl1wQiOyBhJ0jSRpINgfCXZAxoMJjoD9FNiMRlw/thEI4kgI4GsKdxvIICKGNEJ0ggJpI8QvoPJBTIploh8QpMoVkGB9BaA0QvoGgD6AgJYhsQgYIVjTJ0BYhaQlMkIhklplpI4QqGkaBpagNgokDIhh4H6KPi4IQEneiBKkDui9gukHeu8Q2pmdKxucAcSW0hB1jS8wDMjuGLs5CNpmzLR4KeLaaLQUWBk99vwwqzzBNgaCOhMwDyjyBnsJCdIGAGLD3RTo1WGCflXA4zgjKp0diZxO4m8T+Jgk4SaJMiESSpJMkuSQpKUm0AVJUQ9SSAk0naSSGtCOGHiD7gWgsIg7EcHpLM5a5+cTCY3Nmk6DTAXgZiY9NwhynpIIUbKInJ2ljDNA/G3LRQcElwJOhqmaiC4okieLVhYwQzV6M9iwDB5uQOUe8DEBRZcAExKYTogGL2yYwGgCYdsbFKim/suC+Yk/FqTBI59BcXXecY80N4vMK8NtD5tXn9LrjN2jeAFlAHVwCJtkoLNafziegoTIAaEzCdhNwn4TCJxE0iXZDsiQAAAvJADylcSeJfEgSUJJEliTyp0k2SfJMUnKTVJDUpqUmVbpCM9ReNbyZ5UgJHivJp4n/j8JZY7Ij2l+Csf2Kvap14U36FFqrH8a0AL42hJ0AoKcqwiGonM6Qghx5kqzqAZYw/CaKx5wsvUpBXjO+JCDWiLxukSnhlUVQ3i6ezuBnqZOsmDQ+AXo08b6MAkmtogkrY8UpB1nogoxCWT2RrNPHezVZfMyMU30VojiFAPwdWv7nmTqdpx7uX6b0h66Li1+/XTfkNzBkbs/mm45ZNuNnF6zR62PXulrM0DFwUOqkJeuhyvH2ibZWtBnpA0I6GsJKZfMuaeyUA18ne7cyQFR3o7+SPIbAc0rSVY5/F1qC2AWtxye68ciaW3FhtmyJr2ti4c8qzh8QkDgIcs8ne6IpxIh31ZYVIbTmKiq5kxQgYIRmFLyjn1sPOjSGgKQCa5qiskA0C6uu2vk+QgCa0DaNWFuj3RfAi0h8d/lxg+8xa/g7wqAXxEGiWKMfOXOGkTbTy+eDrDuSQGR50B7WJ7SQMgvUZE4WeAC/XjVgKTRdQgdpbziLihL+ce+/PD3OcBC5ryV5g84MJlzjmB4VpuXZUkTmOmQArqhYTPukm7aC5iu8wUrlQpTz9R5+38QZMQn5pYgwAo872hqXOb4ddRdperu5idIF4U5C4p5ouw37Ayt+a4nOQ3iWSu0JuZIryHsi8kWt5uW2cxRIHm5P84OXssjrG0kCVzvhYPckWvLCxzyLuBFS7jHQ+6mETuW2Zeedyu6hLm613KJrdywz0F3CPcmxRgNJH/9Z5v3BqPD0iVA9olgS5bJIC8Vvc0e/ioQl91iUlifZvchJQLOCEoi0FESDBaj2xQI9phZrdBa/LqXFoGlxSlFk62W5FzYOMVBxWXK/GwJK55PGuVT1yKyZbxds+8QoqUHNyAJrc+BWRysDWYu57M0BssvSB9zpq/fIeX9B6wjAqKP8C0FPN54ms0s9rLLIsxuKlhmxCQCYEFJWnmVkcnJfqDmxNDSgNllAe1ifA+WVVVsaWWhYFkAQrysF2xHBXUwBkVN4BRykpv6yDaONjk8CwZXdmkGBZkVg46Gq0nng3xfWHNJUIoAoXe0+aE8wFMiARVblME4bEvgspNZOKIkqKuCZmgUFw5WcybAkkaCc4KoHWnyxWBjR46BZoqGyxADpOVDiVncpJfYOSTK7CLlYZUOmN0QRwjg0sA0SRY3GqSHQFQoQJ4K8HeDC0KgKvTROrz9zylxxOXJUrHlVLnBoqWzc7DMshjJzTa/0jyR6WXGZzPmei7FgYu3YH9dR//JZSsqv5WKy5Gy2xQLBLn+ESlsBQBC4qRG/CURPynld4rCVl1fFKag7q/gTWWFk1xZVNTmp8XpqRCwa2BMtzsGVL3Fgq6zOakxEhAhVZQgWP6s2XlK3FpizLNZlyUCps0y6G7gEpfwMFgVKSy1DPlvzdrClf+etUWsbUiselY9Z/geMcXMFhl1cy8WMvXoTLbZRRRufn3GbUrBcbcyNdQB5WgJVl+IjZUepvr9zuimeTEjaXeZPJTS9NNbBQFAS0KTlpVIFXyTgEfIRVYMYErXzLkQKtg8JLzqzTY5rLb+/g5FfFhprnAxmrOL0v1QJIPE8gXvXFUWL/X7rNAQG/8V7WLEotINyWOPMyUHac4bM4ERmlnlxzYahm5QEjr7SDhPwPxuhK9svHoKBYZ4f3BjW9Kri1s9snKi9NyusygIMFfK6eQKprUfrhNoK3wEZ0DbvrpKn6wTq3yNz7LW1SWFeQwvlKrMzV07TUln14V6lCy+8gdhwvajXVba05fgBXEnFbR9pLTMQDUgdUPMBuS47RSuxBl2112nqsbkYsP4hCG162SxWBqOSnqQEoaikXGIjV4aF1kHVxcIJRHwkvF2a9MsRm/RJa0yulZgolvCWYUUtTdNNTlphYNqz1JIipSYtBYJaB16PSJT2oy0fr214GEdeSzcLjqMNIWktYkr+GdBD1ICWpfUqiagiQtvWtpf1sLWtaP13SvccXNnWxVX+rvEOVUPhF0rF1Noi2aqzrlrqG50yx5e5DmU4bFl/6/wYguPXvD4RXS89XtgmrUNaG7xH5ae1LgibqigWW7ZIChp9JcFkK38gLR3QmsTtu1drJGxA1Y1aVi8hLHSqhrFZMSrMMrGQpuitA+Nc6JjkQsB0NUBiSSc6RazSCPJogTrNIEHCJBEANAq2apWextYXtQRD7UnU+3gQab5kFjBPoMnwXZirVIQDPgV2I6PUBFd6i9Fpt1FMd5FdTKIFvhn7GSOsyix0lcpoA3LBF9JRkkLTeJPFZxy/J1S5qBlubdF2crzXnJ82+q/NB2+vuyCO2BqgtcI3amdpJHikj5za0Fs9v0wPAk12Wh3flsd3FldKNu+3U7o915q0tHKYiGzwHQZ9weOGBBRa0fYDAIRr6atU0udaU6w9WQCPRRmD0RJQ99w+9pIGT0zpidSgdZInF5CWsY9KeqPdnsRBSB09CezPXnttYQjAMkex1mnpj1V6IBQe8vY8Pz016H2Vw1vWXtT0RJr6GASnVaytbn0q15OspX3orgD6h9jet1OXon2IBKdvegvbXokCz759ZAKfVyhn2D7EAKZdqEmUX1OtZ9O+iUHvoz3d6SdFceIZTtL2NKl9j7S/RXFL1N6QgK4DAGDW+p0A4ATYQgiSoeCAZvdoIl/W/qzCHxf2sAL/U6z/3O7ktIRdjGKxnX2KX+/g+bQSMW3RazZyrVbXaPGUatNtRoJufTR3V6k91KLADd1uO1661BWINredpdHgqrtRCLlZmvk0Pa31kWJg1An7k+83lMobrWiSVCS9tthCk4sjp84YloS5C7g6aBC1Q0kNTxZwC8XtLvbnVoCmYO8V+2u9kV62f7XSjLY0SDY4CiDaiSgWhBnOIQJhrHB5XCqqNomyLNFXMNiAhV36toHLktU6s5cXfDkjiWcbCxMwFYOnel0T66bri2fYjhAy1YM1WctKZhMSQV5lRtVbwTaGSXcgGq1e2vdw4wsjzaa8ujm1OZostqq7xk7m7fiNw3GQzxuvmlEeocppkGjdBh/XVQfG0JKLdh6cNP/yYPrZ3dXuqA+lozXvKQtnR9MrmugNH455sjVo51twD2HcAlhxfVMdrUcpp1Jcyesixnpeplt5slelgdXU4GnRNkELnvVaSldZmgrfyjpFTi2K76EMcKI/UdgVwAQgitBKnBFBJBeG/ktuAfVcPBsvCRk/nsZvxE+SfC/O3qUAQAZ59dRSgMhpEiOm1N6DKtLlV6kBUEhJu5LNRF6meMZxfD3U6kPtW57krQo0tTCEwmM0qYgmabVONINKbM49sMjeHfQ2ipnHCCp4lBTLK0bwwQuobG0sY2AYhTBD2XOkOOAeUtt0YBRIk68oRPMM+DWnC5rLMEOkmvUEjOFQ5hg1RcMAyiEhjzXhixd4u1ARLkcFNBDIrqlOeQB9kDCeguAHYQ+TSRibehsodAXaUk3S5tMW0hTIU+U0NhBBMwhpDsHtLpEwNmmn8VpouxlOQMLijsWzdBo8CwaJmxsPyc2FpSIyUY1y/vEjGqBIhDmkkO6NzzURC6FU/OhMdcyUGzbKaXJx42nBeOYmqkjzHIxoo+0ZydFWc75vou80+qlBeLPZCiwZNhaHWcY5Y1clWOpwY1pauGfi252px6tlqApU1qKVICKhHZ8402u511jhZgKek6nHDGw8fUK6XEVsmBNKROz9LRY9Nt7PT0VBWgMOOsYwObHa52B2nptr2NEwDjzkMdicZUHyyLjRhKiRFBR13H9gDx7ZN4jePf0Szp0Hk6CcgCkgoG1eB5f8ZUMrMyoJjfyqFO4FE4NT5UQhiNWST5NszO5ME0oIhNRSKG6SpNO8R4SInLUYceaA4yAK8MwSAvbC0IzlNhwFT+Kqk0aBpN+7je9JsOOufUYsnOEbJomByaMafHdz/9d9hY13B6gbG2yexpFmouYmxGaAVeQIGCjhSQwmnGpmKlDORZSLEp6ri6uDPdNGLvFykyQzrgCnRgrpp2e6eWBAW1Lp0NLo0yEQBBgoSp0oBgAyboMsmXx45DRY2nnBIlFxfadWDURjsAzYgB5fmclBGWBpcOwZr6cIWG5aa9NY6X5LCsch4zEu5ZsH2OZZnBGgJmGoCiy55mmT0V7gUEy8QWgizSOThf1A0uxN4GiAVML/MMQJWEwBcOGNWeV3pzXV9Z91Rrt35lHtdrZpcyBdONhwuzSxxFpchPNIceEMauVKMerS4tRrabMOOOc2hDqNUNWijKMdpOAo2zFI+WTxZJYwGOMU2hA+cmmtT08NFcsnkuswPXntjt53YzvUfMH1nzs5/ymbv/aXHPzNxkYD+b/OqrsQPKd4z/QQsqCkLpBEhqZOgtkcAToBIE6Be6YoW2p4uIWD8b570XdExh3k/hfIbigbusJgeTQr0snyeACSIaO0R/3JRsxVFnhgpd+Ps1YLpJgEqZepNZ99rZK6pTxY0aBTqQ7JjkIYyxOQ3wW0N1acz0kvWN9iRNWSz5a3LKJaLCYDS5afzQk2Srhl8q2I3Zv+szLLABWGNPOBWXiElTZyEUHSaZM/j8l0WASWJARMArtTIKwlZCvM65c4VlRNKeWmBMabtu7MfFfFGT9lT4zVK0p2yD0oKEcZhZs12uUMB5ARzTM0zo8AknfbSAIqxkc1ve2YrkFyg2KE8MJhPgtDdhYXZWCbE5x6i7q1ooKP2YijHqwa4YqPzrJ0c4l1a50rKXQtu6R566ysdPN3Wf+Tdm7itaFnoUcllW6NF2qIv3pMlvanUT4LbvxKSRA9yJdzd5SrW72Uek69PjR7DqRts9vEfPYm2wHTRU1+IDNbw2BALzFPNbTecdG4cDA95+yI5EOOM8vrKg5y++conXGx5wsSgPcY8YemgL5lr2GiFBsDpwbwFvE1jZ+1lynDkDVC45nm6zw2Aa1KcLxy5CkAwAnQXi1tDhu/1ELghkhgTahOA9iLXKwIGReRMppxpDgXOBA8CDMWuaQbWCQrZ8O23pGXNji3SbMMBA+bfF7RoLcEvC2w2ot7k/g6Z7RX+TCzahxYjkzeRyHeliM3w4LOQxST9DkJixesvJXxmzjO2w7ahVaXrTcTO0800cspMKbGlqy+OBsuZh/L+jq060GCv+mpREV0ZvTXDPIw6mxmqK7KbEZqOObu8uZplZjuS7kz+zNMzlcTuaX7HLVoBgZazva3rHgD95V1ec09XXNhR9XY2c11DWWzq01u/5XfuP8w1Xd0+zdZnoX2YtOGUY0PbZYNoAgG18ezBkntHcUUzGPtNU9zNr2FUdhnh6Vd5b9bMeF1vpeAWPN4aNYUze6ytqvMrrrZG216/saftPnjjr98FvVGmAf376X5p+r/d/PlRxn6WAeXs1TOS09HLDqB6Rxge4Xgk8D4Bug5ICYPcAvF6Khrz6pJhpgKXHB9A09vBSxH3TQh5jgItE3IlJN94vs4ocQq9nV6BhwSs9QsPnG7D/Wpw/kbRU1nFAXhwmIEvJhRLZjd9kJcpwSPDbgpnJrQ5yqimQwhKKF8LB/hRP1b3jBg9zvgte3OmZV0gqSf2fQvQISd+wCqbVPgXTngVwx7aYSZ3xtojTZAGbY+OnPLbXlqIHiddO2Obuzt8Ufabs3fOlHLL4JNpbaCB3FHUZ0OwE6jtqcnoLXUJ8c/TO5XHgqCdyAK4N4qrSrvJ2ksQkczsvKzdmeFRLhSduk0n1d29Q2c8313vV0Mlu8Pexe4BUXk1kp0iz7Onn9ng56wJ6pqcjm50YLse76maefcx1Y1lQeG4SWMt68ib5cw5hCCovN7HarcyvhRY5up1k23pT2e7vRukOJKTQJM42OWy16sznY3fYfu71FnH15Z7qNDfyQho1ADZ1ceonfm24eeJ5MO93AVcWHNFowutQOQuZU8VzrZLg7ganSZgHSTBjztIIZ9/oKOhyTHjZpEByk+ASpIjkOhbQm3Fsf55CcIu1NlrXKpt+C6bfww8T9lxzHxiHdfVHWM9AgPVjsjMoiAHLhF9mKRc83i3M79FwLZVhC3KVIjn51Dd5NabJHRtwdngGlrmQeqhKGdxy/QCJwDGowKWhLX5e1Nb3GvBVE6+DuLQgC8LvlzS/hQXEGr8TFV6Y89vOmXxf76niB7dOVMFXNr+pi7ace5Y1X3jn2/8nw9oaA7jTIO5GZSuTMKAQeDK17BEXGukz0ZkPKZpVsZmTmoVrhpR4V5dhjooifPPc1yO1nerauv1zv1KMN2g3uow64O5ncRvLrYket7NbxoHAZ3cbvN/MgLc/lX3qbyc5Ol6IhNIU7KGFpW9c+5uE3nTkN+vbDcwe+nm59pQLBi9/vD7512twi1Kc93G3bkS+6Mqtk09b7d47t+9aONy4XzqztyKO/+vf2gbowI5wcwge7oIuCqNy2c4ws/ZPJMD2C2u/cg3OPAv7rqs8/6hIO3nqDz51BbwcoewLEFoh4+7FQguX3bkcF8Z1uduQCPsLnEwLHo+qm8A4HsY1ypRduRYPqjTF6FEQ8QOUbTnydgbYstqJSPwpvZzt4HnVYog7jNW/ChJuKPXvfXuJ8y58f/IPvlJzR7R/xPHfGPv3wBYK7Y8mP22Tp/vC6eJevQrHlTOPPIGlddhrbjNth7D8dsGOHHInkVx7civ2uQzv62T8M11eKfjYKn+Zu1Y08hPtXcn1r+E4Tv6erVXDC4uDHeR25y7jq1J1XeXYZPbPJRiGQ58gDGLnPlb+r0U/C15eo3Xn0DrugWt/IOni5xLxt5C8kOp7x3F/FU4o8JfQW53zKKW5VRbnBnuXkZ557w0Lpivy60rw6M3pdu3rvb6r0fRWd40ARuABr1/e/M7O/z3kBdMFCDi9xbijQMAIPAQRf1nINHuj5jd6/Y3+vGGxGy4CG9kgVOcsYh8C7pdwn+NC6Tb7JuAbh/1HjD2F3ibxcneV7FI/35d9ZMCPkweLu7784e8Evnvxt9H7I4r9ff6AP34n4en+9JWe/NDt79VkekV/w46zZhN14k9/OifdjqrAj+MciuOPKPgpgbEseagBPy/xV8CUcfk/nH4nqn++y1fhmx/CnkO0p9jOqejXiZyXXHYic8/k7O5UkxX4h+Z2Qfkn6qxaG9w+APkC9gKiaHzmhPXBdnyNxfGu0yd/Xez0DdZfYN1BYUWf3zc9hnK63y8G3bzyd9KnKAG1850Zz3DQS/VNy2tQvYNDadtzE+hQCA/BJT2tIPVe0S9unEIEb9UvDtVID0vXk1DdUAg8xrd4DdAI89MAtXzM4NAOmGd9HrGZzK93fCr098WkJZxq9ffD/gwAF7X6w/Mg/J+kndX6MWiUDR+QFAT9JXNCxT8/gIH2N0cGXGz2w4HdG2AZEHV5xQcUueBTucHnbBzlUvnaC3u8YbcCy1UAXQm3Ih03d4jphwXTtC0CK4FUHMgVYfbxYdCTHwD+Ny0MfH8cLsDh2gUzvEIHFIJAJv34sW/G7xFt2/Bb3EspbKxjuB9iOuHThRgOmFH4sTf6kO8CTQpiH8V/Zjxp9UaJQNoUtoWfzZB5/Ll0X9uBEhk39Umcf1yZvMDS0pN+PAB2x8EYAHHZpLSXH28tAA33BDA/LA/yE92fP01GAwrU/0p8tbJQUv8EreT25db/Rn0Cc1POflZ92ALTz4BardSz088rWoNxhmg8/11E9iCANX4xfFcVrsBreAP35HPEaxDcSDJQLQC63QQLw1RA3APjcmWQLz9p/A/X3TcdraEQHdvg5QJfJ/PHFjN8k3C0GioUgq3wnMOA2r0J4fgngKPt9Zdz1GcZ6GjCPgxA6Z1d965eZwfMvfF+xhCT+SESPhA/cd22cvYXZ0cxiQ46E68L0ESx5MjJbP0gtZoWBlEAt3dpFZJd3OIy8D8/Wpk8sioIv2N52Q/AFL9bXNkPpCOQyvxhdeUFhw/lbmTm0RdEg/jVRCVQ/ADSD+HeDyJhQ3CW3XchHTkzQ9CXSy179zIbyHlCDJJhG+9qXOH18BpQ2hkUchTYwI6DWXMRidC1QolVtUdgjwAY97bJj3h9SfZV1Q0VgsTzWD4nDYPqCr/A2C0cKmO/zDt9gx/0mBY7eOwuCuXBYJ/81GXk3/9SVHqSdCHgtOSeC3VUGSycA3d4MQCnPfJxUFiQQ0N+CVfM+yJDDQuN1K1CAstENCGnNNyfd06JrQoDoQuezpCYBdrV7CunC9ANCYBdEM2hy3Pex3MSDNsNxCcvPgL+DVfPDQAxSQtt2vE5nD3wWdZAvt3kDaQlQTfEiAYrRUDP7cd0LJlaCOEm8ftE2WhZYbFwLehLAxaARtYLSH2T9nMXkPMD32ZbwWJ/OK4IY5jeADHBcz5SJBYdnAJmmOCbNWgjUQBALIHudQEOUgBxX4YC28NIg66kcweSIMOINELGhDS4uSDUO8hONJjTHwSbRGBYheweQCIc4kEoIwBHwuCAqhXwujkxVvEOGlxVNQQJEmIGkWgGWIYQLqWssVYevwdYrw0BF4dooIEHAloQLwDiQBEI5TQR1XLN3FtUPR73Q87Qif1vUCI/3HixNefMNOYFVXBX0t1IgBkM0UcEMHYUzg5kL/tgnY4Ns1OfKZmF8nNL12rC+rWsLgDpfBAIHtzGZsPBZpI0LSV9uzDsLKdTzPcKBCl7U3x19anC9CgiIQ2pihCVwqgP8oQo7LzgMT7HcJnpc4fcOvtnrcrymVKvakM+sLw4KJoCO7ZTjHctnW4xD8WvFMza8RLXOAj8CCRAFj8nceP2o9cQDGwAjU/LC3T8eTcBiAjdRTw0lDVvQv1Jtc4RUJqwCI45Ah8HMBm2cw5gtiwSCTDJIM6B1wf91ll+bK7wyC2/bkI79WzbSNtDpHElx6kZohR2v9LI7O0oiFouFST9QwsAN0dIw8yNY91/BaWR9WGCx3R8hg2y0E8nbI/zJ9YwCnyDNEwzV2TCtg+n12CpmTMMNcEzHMOf88wi11OYP/MRlaiB5IsOUdY4IJlLDkQQAJ8MQA0JG8M9cbxCF81FEX08ioA54NgC7PPyIbC5fIKLxpto9sPt9/gvKObdQqRaziiCA2cP/RJjEgO3tW0f1BHDJ0CgJN9LdeKORCVzEIG2jFwxpzQwBnQ8wJCHfGenwwCorYw7cXrY8KpDTw7304ChWbeEZC6owGwajHMfDE5C50VyJVpeo4BnQsjA/bQz8+Qkb1OhrAghFsC0HaYAwcsHKzlwcxbWzhcgo3HO0JF73QFx8CYTKaPeJ8MWaOgtLYoiKWi5LIWB0c6/egIpFz6beGNDrvc0JLCrQoxhtDu/OlAn9N6Mlx8xt4F9RuifQ0lyiCWbP0JUcxGeOMWiuXKMxTj5goGNaAPo4Vy+jHTH6LR89IiI0ScRgyYPx8VohS0BiSfYTxjCT/eMPBjf/C/yhidXG6L1cMwgJ3St5mbMJa4X/bn0uDD/AxFidbohJyCxt4K2ItAbY6yJeUQwQuwqBi7Y6B6gc9J8ncjLPZQzrMbPfqzrC3gqGUbDPg5AP8oM4qGDZiMA3KNPMNYoEIRCsY/mLwxy4oWInthww32fxXhCqNpZjYuLxBCkQwtwg9aBTONYCVUdgN3sZzRBNAY/4rKOPtI3TsOASnwFt0vMDw9bU7dpAk8P3oDYrEMITNgE2IBsf7FkL/MbYiB1NQT43QLtj/w74wGiTob9wG8RovA1xdc/KkAjjJomhnpdjeU1FjjyoHhITj6bJOJDYjvcAJ1CMEjaP1CoBTYCzjqQXRhbBMg4R2yDNI8R1GCpHXoIujPHV5QUTro1MOsTJ/UuKWk54w+OUSm41x20cNE16KCxNgWhUxhRAdOC9A4mJ0GasFDUK1mZug8xz7i+gzH2GCLbDyytsWbPEzmCIwvxIwBaFY/0iT3bVYNnjiwyTwyTnQuK0WDErRxJv90wvYKjsWfJ/2citgrhO3iCw9uJid8knGPchqsNK1mYlQUJGfo88GQEKZNpErDZBNmJ+SU8TNCUGuonI1rm4TNgXhORB8YrAAEM642OErC8jQGWgDfXN+N8jc5HJygB5ZNpJ4EhWFhLCicoshKQ5TUFxVaofkLX15j6GexOJYt7GBNFi4EilmN8eYsVEkjFGfROwTB1YWJt8VY/gMJDyEs1E1inrbWOKiN1e+xkCGEmkInCVBc+k2AygVhKa9zY84C4SRLU1DKA5kumwMD+ox2MGjvw0RJwtRows0kSJokfyjiuVTFMQBFEi2MRSrDTxLCD0IA72Ti84okC0TTvXRNoF6UgxNNDW/NlLMTA4ixKAcMPZwxkdq466gySsUqlwkjh/Wl1kTZQ45Urj7QkUxrjyXalI0YrXCIDMh2g24PcCIw90KLFO49j2+iYknfz+iB4rH0STPQkeK8I0k8jwnjSklVzBi0w0pIyAPHKf1ri9UyGEABMAgbj6UgjxhiwwjRM6T3bB/0RjN4lGMiccbLmD9SfMANKxjGXYHwKTumONIWTz4nEiviTYepKai0zVZKs90nGAMl9wZHZJl8mYr4N/j6UgBIECgE85PpS/PeL2lj0E5IHpTBwsgKN8EEuFPBYEUs1Ha0wE0EKS8e0soAVihwr9XHD97StN7SNw7KNITIopDgVhygUFIkC3fSZUhTSo/WNhSJ0lQXc5FYEgGRSJ3FpE0DzgBdKo8wHIC3Mhj3UpGDBz3SpFHhegRWHfC5vTdwQZt3UUKhMNXWOD3kbIjSNs5VsBGwFI+MHdPKAQpPkJAiVYEm0iU4SYFFpT8rUAhPTJvLlUAzgUKLWQz8HJCPJYeqeVw5TPkmtVQzdo0Q1NN4YcL2cYi4ODx3oc4yBjxcicEVIeV4MkMCstPjSJRzMGXfeOWSxAUkwXTiaDmwgtokpE238pTSpNxBygSIDEBpgc0k4zvaAVAXc+sGyQNS5UuoOjCxXWMNmYXUplxTSEnTjJk83UoNJOCmfYxBqSkY44LsidPOqxMiY0tqCTSD4mG0fiazZ+Os8JfLZPpjS0hAPLSf47dOBRq0oFPnTgUBtNQSm0n8k4yvFcLxmkoUCGHbTWnWQHRRMUfJUoDDk/yiAy90lBPzc0En8kFU8M7liZQDgiLzZQXMZcPwSu0vGgSziE/EMBS1Y082jVKEq+y1jJA1dIBZ10mFPKiCs9ZWLVH+P6zUCnXEIGM1lVcNCDhEseBAgcHYzC2ESho/BzESauCRLYi8mUjk4irOV2JgshdbnCAIr3dUDDjvA6EyljjeftTHSKbGCMos1ErwngiKNDH1asUTJxLkwNgOi0ylFYU+TX5lVT411wysKMAF5/qKiIIJpBEF3GpwVfREzwpSJ6HPhCra+AiTlaMMPhg6IISJEjT5NOIE10gXh1yRVeI91PFDElmH0YBUo6JyDO/SxMoUi4voJEtLlYyNRjXE9TJOj94oTwzSEweyP8NGmLhWVcsrKXTxtKMxanXh/sMqBxBM8GjWFBIgNoPYT7jYzTWZhkzuB51DM6ZNxzKqV1wRwWU0eLYcbMyuxpiawjzScyvVRmKQDz8FFhDUTk2dIK9vPCrJ/5+0lLL9otsm1H6cUo0dRiV8srdPBY1c6tzxChnbcLOStcj9SXTyQo8LoS9YhrP7cmsszmoNqotrPvDQoNiJedpsogC2UILXBy2g5sn8LOZLMijKX9xE8EwlCVvFoy5VMtcmz4zds6kEgdevQ7KmJ0MqhzOyJUv41RIVEu+FIinQW2AgR3xLjWChk+RoH+ysVQHPhpgckKHQRBI+JGEi5dKHIrUksWSJihYAdkh9IcYJXH1wMgRSPTxEcvlJ/T9JXONu8C4zUHOjXoB0MLyigymhqoCcmrmMR28H3wxzCcxpEQ94+AI36gJXNrlVdqcsVyDZjpdlXGz5YL2EnAnieQHKBXochCRyPY9500dOslJMLzw0ZEEvSlIF3ENxIlG4PWDNXFxEF980uzMLTNknyIVzmzPZPckmEz3MaNqo4p1ViOY8rIdyYtK5MljE8/jWTyHkstwzcQeOVCDhisBCFbz+APAAQR8Arhy60P1EdIWNeA05LnTvPHIEdz23GrPXU6s6FOftGs83Lxo7IM8H3SHI1kJg0zwUgl0Cwbc9NOdo8zoI8D+QsxxGyUPSPP3ipC0gjRtRUjPKMCmI5Xlgys/ElOCQwM9bIYxSHfjRyBwXeamptFUAQFELG4VRPncmbL920KRGMRhyAwPbDI7yQgPgv4x8MjFwOjUcyQrcDJbGcGlsCgoZGjhgkZh1SSmbPCMekTCiUwVcWPG00R8RXGjN0iZHXVxELIYQFDML3QKICKBt8j9Pcg2/R2ENdacuOziLgYqeNBi8kvItB9QiueAGZtMpeIZ84Y1eJUzw0noMjN0iuosHQMjJZO9StkGTNFSU7YPjCdV4Z5UzTb46+LGSzg0ApV0NkwbkcypfZzKVymwitJUEPCzzLKykOZgqBCZwxgPDIzwQcNwTYElp1eTO0ngtAZ1ihcz5i9i49ncKzwEdKOKx0tKLiy1i/gunSSE9z0i0uwmARYLDw2hJKjOCuQM3yfBZ3nXDvc1QKZD6ojhMaiRi0jXKh5Q96S5CuXdQqGzfoERIz9BvXQstD95F4BZVOUqWAPBXaR0IHC9LMiAMK06TUE9DioekmE5BMBEuzoRgPTieJ1AV+juUnQeLnniDeP8AJR5wo+F4drVdorFSbEz1PJd6S4KCiZmEAYsistUiWSjCvAIUApyyoD2xPyUmKZO1TuSikVbCYBZyxgF+pHuIptiSqEUCCofZjFuJeURGUkdjNUpCGRbqQLgF45HFyw1KHWLUqPhzDOpCsMfzDhj4zgApEFCRbSsYB2pXeFFCpL6AW0tIiYeUMqPgRmf0qopwy6cBuooy57AoA1AGOBmAqKBBGBj10MIHWhkkbnDFKnS6KmpEXS1UIRjWGTAF3IgCBKUHB/SjHHlF5iBI0WZsIKIH9KigQ0roxa2BngFKguLNLaQwAVCPZydHVLnLBrGR4KYAK4akCoAFMEuIeoxit5FoAuqDqy+hcQf0q2hqyqMtKQL8u1S2RXYsbzcMLYI6GfzUHXrIcCsHVYD/ZnyeP08R6daWCQjA7D2zLtKYjyMgD1k2mOLSmzLXVyctkZz1BKpw9XM+LZCAZXlDNfPANuSDrVa3lC20g3xOKp0LdF2tamev2c9eS46FoKMed5MMLZ8tOMQrkggcICBDBNL2ac4K55L3LwEkNyQqFQqGE8hoic1AYQShUYUO5CK9CuIrQQwsveBiy/ACDokyUgTlEEKVslor0yqCrOswifiCIgFkUCHAhIIQqJOxEIWYGYg3fdiGwgVAFMvwheIQwBEq6IdQAwlagRAAwkOuJMDoAMJZ6GGYAIAwBEqBgBgCARaAAQAYABAFMgGB4hIBCAR0yNMgSEHKgYFARohJMgEBaAPoGsrVAEBG8qbhaIQDAVKkyqAhDYIBDklYhZSRSFIhRqQGA0AEgAEBEhDyr6AscRIX8raABgBAR9geITQB4q1QHoBCIMKrQAQEQYCAR9gPoESrBJTKpAQGAFMn2A5JEgDcrohOIWiEGAJMniE4hfYHTJ7KkBDQBohFMhCqRK+IRTJSq3KoGABAMqT6BkhNACTIGAaIQGB9gJMklUQEXiSCqQESSUlUGAPoCTI0yWqXiEhqsKpTIsoEoQEA4hVKviESAYSQGAQEVMlyraASVSAQWxNMniFUI6SWSEBAbqpIBdqkKtCqIAE7A0qtKnSsKpqCfSpAgVKoAA -->

<!-- internal state end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=rainlanguage/rain.math.float&utm_content=43):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 984d991 and 3c1dbcb.

📒 Files selected for processing (8)
  • src/concrete/DecimalFloat.sol (1 hunks)
  • src/lib/LibDecimalFloat.sol (2 hunks)
  • src/lib/implementation/LibDecimalFloatImplementation.sol (3 hunks)
  • test/lib/LibDecimalFloatSlow.sol (1 hunks)
  • test/src/concrete/DecimalFloat.mul.t.sol (1 hunks)
  • test/src/lib/LibDecimalFloat.mixed.t.sol (1 hunks)
  • test/src/lib/LibDecimalFloat.mul.t.sol (1 hunks)
  • test/src/lib/implementation/LibDecimalFloatImplementation.mul.t.sol (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: git-clean
  • GitHub Check: rainix (ubuntu-latest, rainix-sol-test)
  • GitHub Check: rainix (ubuntu-latest, rainix-sol-static)
🔇 Additional comments (22)
test/src/lib/LibDecimalFloat.mixed.t.sol (1)

21-21: Consistent function renaming applied.

The function call has been updated from multiply to mul, maintaining consistency with the standardized naming convention established across the codebase.

src/concrete/DecimalFloat.sol (1)

1-12: Well-structured concrete contract implementation.

This new contract provides a clean external interface to the mul function in the LibDecimalFloat library. The implementation correctly uses the library, follows appropriate naming conventions, and properly implements the function as external pure.

test/lib/LibDecimalFloatSlow.sol (1)

10-10: Consistent function renaming for slow implementation.

The function name has been standardized from multiplySlow to mulSlow, maintaining consistency with the other multiplication function renames in the codebase.

src/lib/implementation/LibDecimalFloatImplementation.sol (3)

92-93: Function renamed with concise documentation.

The function has been renamed from multiply to mul with a brief but clear comment indicating it's a stack-only implementation. This standardizes the naming convention across the codebase.


125-125: Updated internal reference to renamed function.

The recursive call has been updated to refer to the renamed mul function, maintaining consistency throughout the implementation.


836-836: Updated function reference in linear interpolation.

The function call within the unitLinearInterpolation method has been updated to use the renamed mul function, ensuring consistency across all internal references.

test/src/lib/LibDecimalFloat.mul.t.sol (3)

9-9: Contract renamed to follow consistent naming convention

The contract has been renamed from LibDecimalFloatMultiplyTest to LibDecimalFloatMulTest to align with the standardized naming convention for multiplication functions across the codebase.


12-22: Updated function name and implementation call

The function has been renamed from multiplyExternal to mulExternal and now correctly calls LibDecimalFloatImplementation.mul instead of multiply. This change maintains the same functionality while adhering to the new naming convention.


24-26: Updated method name and implementation call

The secondary helper function has been renamed and updated to use the new mul method name instead of multiply. This change maintains consistency with the new naming convention.

src/lib/LibDecimalFloat.sol (3)

421-438: Enhanced documentation for multiplication operation

The function documentation has been replaced with a more detailed excerpt from the decimal arithmetic specification, providing a comprehensive explanation of how the multiplication operation works, including coefficient handling, exponent combination, and rounding behavior.

This improved documentation makes the code more maintainable and easier to understand.


442-451: Renamed function from multiply to mul

The function has been renamed from multiply to mul to standardize the naming convention for multiplication operations across the library. The implementation correctly calls the updated LibDecimalFloatImplementation.mul method.

This change maintains the same functionality while providing a more concise and consistent API.


608-610: Updated implementation call in power function

The internal call in the power function has been updated to use the renamed LibDecimalFloatImplementation.mul method instead of multiply. This ensures consistency with the new naming convention throughout the library.

test/src/concrete/DecimalFloat.mul.t.sol (3)

1-7: New test file with appropriate imports

This new test file correctly imports the necessary dependencies, including the core DecimalFloat contract, the LibDecimalFloat library, and the Forge Test contract.


8-13: Well-structured test contract with helper method

The DecimalFloatTest contract is properly structured with the appropriate library usage and includes a helper method mulExternal that cleanly wraps the library's multiplication functionality.


15-26: Comprehensive test for deployed contract behavior

The testMulDeployed function effectively verifies that the deployed DecimalFloat contract's multiplication behavior is consistent with the library implementation:

  1. It creates a new instance of the DecimalFloat contract
  2. It tries to multiply two floats using the library's implementation
  3. If successful, it verifies that the deployed contract returns the same result
  4. If the library implementation reverts, it verifies that the deployed contract reverts with the same error

This ensures behavioral consistency between the library and contract implementations.

test/src/lib/implementation/LibDecimalFloatImplementation.mul.t.sol (7)

14-14: Contract renamed to follow consistent naming convention

The test contract has been renamed from LibDecimalFloatImplementationMultiplyTest to LibDecimalFloatImplementationMulTest to align with the standardized naming convention for multiplication functions.


17-21: Updated test method name and implementation call

The test function has been renamed from testMultiplyZero0Exponent to testMulZero0Exponent and now correctly calls the renamed implementation method LibDecimalFloatImplementation.mul.


25-29: Updated test method name and implementation call

The test function has been renamed from testMultiplyZeroAnyExponent to testMulZeroAnyExponent and now correctly calls the renamed implementation method.


33-37: Renamed test methods with consistent naming convention

Multiple test methods have been renamed from using "Multiply" to "Mul" in their names, maintaining a consistent naming convention throughout the test file and calling the renamed implementation methods.

Also applies to: 41-45, 49-53, 57-61, 76-80


65-73: Updated test method with exponents

The test method for multiplication with exponents has been updated to use the renamed mul method while maintaining the same test logic and assertions.


82-90: Renamed gas benchmark tests

The gas benchmark test methods have been renamed to use the "Mul" naming convention, contributing to the overall consistency of the codebase.


92-107: Updated property-based test with renamed methods

The property-based test has been updated to call both the renamed implementation method LibDecimalFloatImplementation.mul and the renamed slow implementation method LibDecimalFloatSlow.mulSlow. The test logic remains unchanged, ensuring comprehensive testing of the implementation.

Comment thread test/src/lib/LibDecimalFloat.mul.t.sol Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🔭 Outside diff range comments (1)
src/lib/implementation/LibDecimalFloatImplementation.sol (1)

1-852: 💡 Verification agent

🧩 Analysis chain

Verify the consistency of function naming across the codebase.

All arithmetic function names have been standardized (multiplymul, dividediv, power10pow10). This change enhances consistency and readability but requires verification that all references have been updated.


🏁 Script executed:

#!/bin/bash
# Check for any remaining instances of the old function names to ensure complete renaming

echo "Checking for remaining references to 'multiply'..."
rg -i -l "multiply" --glob "*.sol" | grep -v "comment\|doc"

echo "Checking for remaining references to 'divide'..."
rg -i -l "divide" --glob "*.sol" | grep -v "comment\|doc"

echo "Checking for remaining references to 'power10'..."
rg -i -l "power10" --glob "*.sol" | grep -v "comment\|doc"

Length of output: 1036


Update remaining references to standardized arithmetic function names

The grep run shows that occurrences of the old names still exist in both code and tests. Please replace:

  • multiplymul
  • dividediv
  • power10pow10

in the following files:

• test/src/lib/LibDecimalFloat.mul.t.sol
• test/src/lib/implementation/LibDecimalFloatImplementation.mul.t.sol
• src/lib/LibDecimalFloat.sol
• src/concrete/DecimalFloat.sol
• src/lib/implementation/LibDecimalFloatImplementation.sol

• test/src/lib/LibDecimalFloat.pow.t.sol
• test/src/lib/implementation/LibDecimalFloatImplementation.pow.t.sol

• test/src/lib/LibDecimalFloat.pow10.t.sol

After updating function calls and doc‐comments in those files, rerun the search to confirm no legacy names remain.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3c1dbcb and e1888ed.

📒 Files selected for processing (13)
  • script/Deploy.sol (2 hunks)
  • src/concrete/DecimalFloat.sol (1 hunks)
  • src/lib/LibDecimalFloat.sol (5 hunks)
  • src/lib/deploy/LibDecimalFloatDeploy.sol (2 hunks)
  • src/lib/implementation/LibDecimalFloatImplementation.sol (6 hunks)
  • test/abstract/LogTest.sol (1 hunks)
  • test/lib/LibDecimalFloatSlow.sol (2 hunks)
  • test/src/lib/LibDecimalFloat.div.t.sol (1 hunks)
  • test/src/lib/LibDecimalFloat.mixed.t.sol (1 hunks)
  • test/src/lib/LibDecimalFloat.pow.t.sol (5 hunks)
  • test/src/lib/LibDecimalFloat.pow10.t.sol (1 hunks)
  • test/src/lib/implementation/LibDecimalFloatImplementation.div.t.sol (3 hunks)
  • test/src/lib/implementation/LibDecimalFloatImplementation.pow10.t.sol (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: rainix (ubuntu-latest, rainix-sol-test)
  • GitHub Check: rainix (ubuntu-latest, rainix-sol-static)
  • GitHub Check: git-clean
🔇 Additional comments (47)
test/abstract/LogTest.sol (1)

7-7: Import path update looks good.

The change correctly reflects the reorganization of deployment-related code into a dedicated deploy subdirectory, which improves code organization. The import is still used correctly in the file's logic.

script/Deploy.sol (2)

6-6: Import path update looks good.

The change correctly reflects the reorganization of deployment-related code into a dedicated deploy subdirectory.


20-21: New deployment step for DecimalFloat contract properly integrated.

This addition correctly integrates the deployment of the new DecimalFloat contract within the broadcast block, following the existing pattern with Zoltu suffix for deployment methodology.

test/src/lib/LibDecimalFloat.mixed.t.sol (3)

13-13: Function name standardization looks good.

Renaming to testDiv1Over3 aligns with the standard Solidity naming conventions and matches the library function name change.


16-16: Method call renaming from divide to div looks good.

This change is part of the standardization of naming conventions throughout the codebase, aligning with common Solidity practices.


21-21: Method call renaming from multiply to mul looks good.

This change is part of the standardization of naming conventions throughout the codebase, aligning with common Solidity practices.

test/src/lib/implementation/LibDecimalFloatImplementation.pow10.t.sol (5)

9-9: Contract name standardization looks good.

Renaming to LibDecimalFloatImplementationPow10Test aligns with the library function name change and maintains consistency in the codebase.


12-12: Helper function rename from checkPower10 to checkPow10 looks good.

This change aligns with the standardization of naming conventions throughout the codebase.


20-20: Library function call rename to pow10 looks good.

Updated to use the standardized function name in the implementation library.


25-25: Test function rename to testExactPows looks good.

This change maintains consistency with the renamed function being tested.


27-33: Helper function call updates look good.

All calls to the helper function have been consistently updated to use the new name checkPow10. This thorough approach ensures no references to the old name remain.

Also applies to: 37-44, 54-59, 64-68, 82-82

src/lib/deploy/LibDecimalFloatDeploy.sol (1)

16-17: Unused constant & duplicated literal

LOG_TABLES_ADDRESS is declared but never referenced; the hard-coded address is duplicated inside the assembly block.
Replace the literal with the constant to reduce maintenance risk and ensure single-source-of-truth.

[ suggest_nitpick ]

test/lib/LibDecimalFloatSlow.sol (2)

10-18: Rename looks good

mulSlow cleanly replaces the old multiplySlow name without altering behaviour.
No further action required.


42-44: Confirm denominator ordering after rename

The signature of LibDecimalFloatImplementation.div is
div(int256 numCoeff, int256 numExp, int256 denCoeff, int256 denExp).

Just double-check that (1e37, -37) is intended to be the numerator here; previously the helper may have taken the reciprocal internally.

test/src/lib/LibDecimalFloat.pow10.t.sol (5)

8-8: Contract name has been updated for consistency.

The contract name has been updated from LibDecimalFloatPower10Test to LibDecimalFloatPow10Test to match the renamed function.


11-12: Function renamed and parameter order updated.

The function name has been updated from power10External to pow10External for consistency, and the implementation call has been updated to match the renamed function in the library.


15-16: Function renamed and parameter order swapped.

The function pow10External has been updated to call LibDecimalFloat.pow10(float, logTables()) instead of the previous LibDecimalFloat.power10(logTables(), float), changing both the function name and the parameter order.


19-19: Test function renamed for consistency.

The test function has been updated from testPower10Packed to testPow10Packed to align with the function naming convention changes.


21-21: All internal function calls updated consistently.

All calls to pow10External have been updated from previous power10External calls, ensuring consistent naming throughout the test suite.

Also applies to: 26-26, 28-28, 35-35

test/src/lib/LibDecimalFloat.div.t.sol (4)

9-9: Contract name has been updated for consistency.

The contract name has been updated from LibDecimalFloatDivideTest to LibDecimalFloatDivTest to match the renamed function.


12-12: Function renamed to maintain consistency.

The function has been renamed from divideExternal to divExternal and the internal call has been updated from LibDecimalFloatImplementation.divide to LibDecimalFloatImplementation.div.

Also applies to: 18-18


24-25: External function name and implementation call updated.

The function has been renamed from divideExternal to divExternal and the library call has been updated from LibDecimalFloat.divide to LibDecimalFloat.div.


28-28: Test function and call references updated consistently.

The test function has been renamed from testDividePacked to testDivPacked with all internal function calls updated accordingly to maintain consistency.

Also applies to: 31-31, 33-33, 39-39

test/src/lib/implementation/LibDecimalFloatImplementation.div.t.sol (4)

12-12: Contract name updated for consistency.

The contract name has been changed from LibDecimalFloatImplementationDivideTest to LibDecimalFloatImplementationDivTest to align with the renamed operation.


13-13: Helper function and implementation call renamed.

The internal helper function has been renamed from checkDivision to checkDiv and the internal call updated from LibDecimalFloatImplementation.divide to LibDecimalFloatImplementation.div.

Also applies to: 22-22


28-29: Test functions and implementation calls updated.

All test functions have been renamed from testDivide* to testDiv* and all calls to the implementation's division function have been updated to use LibDecimalFloatImplementation.div instead of LibDecimalFloatImplementation.divide.

Also applies to: 30-38


42-43: All remaining test functions and references updated consistently.

All remaining test function names have been updated from testDivide* to testDiv* and their implementation calls have been updated to use the div function instead of divide.

Also applies to: 47-48, 52-53, 58-59, 63-64, 68-69, 73-74, 78-80, 85-86, 91-91, 97-97, 109-109

src/lib/implementation/LibDecimalFloatImplementation.sol (6)

92-93: Function documentation and name updated.

The multiply function has been renamed to mul and its documentation has been simplified to indicate it's a stack-only implementation.


125-125: Internal recursive call updated for consistency.

The internal recursive call has been updated from multiply to mul to maintain consistency with the function renaming.


181-181: Division function renamed for consistency.

The divide function has been renamed to div following the naming convention update. All the implementation logic remains unchanged.


471-471: Division call inside log10 function updated.

The internal call to the division function has been updated from divide to div to reflect the renamed function.


489-489: power10 function renamed to pow10.

The power10 function and its recursive internal call have been renamed to pow10 for consistency with the other renamed functions.

Also applies to: 497-497


836-836: References to multiply and divide updated in interpolation function.

The calls to multiply and divide within the unitLinearInterpolation function have been updated to mul and div respectively.

Also applies to: 844-844

src/lib/LibDecimalFloat.sol (9)

421-437: Documentation improvement for multiplication operation

The documentation has been significantly improved with a detailed excerpt from the decimal arithmetic specification, which clearly explains how coefficients, exponents, and signs combine during multiplication and how rounding is applied.


442-442: Function rename: multiply → mul

Renaming from multiply to the more concise mul follows standard naming conventions in Solidity math libraries and improves consistency.


446-446: Internal call update for multiplication function

The internal call to the implementation library has been correctly updated to match the renamed function.


460-460: Function rename: divide → div

Renaming from divide to the more concise div aligns with standard naming conventions and is consistent with other function renames in this PR.


464-464: Internal call update for division function

The internal call to the implementation library has been correctly updated to match the renamed function.


558-560: Parameter order change and function rename for power10 → pow10

The function has been renamed from power10 to pow10 and the parameter order has been changed to accept the Float struct first and the tablesDataContract address second. The NatSpec comments have been updated accordingly.


563-563: Internal call update for pow10 function

The internal call to the implementation library has been correctly updated to use the renamed function, while maintaining the original parameter order with the tables address first.


600-600: Function rename: power → pow

Renaming from power to the more concise pow follows standard naming conventions in Solidity math libraries and improves consistency.


609-609: Internal call updates in pow function

The internal calls to mul and pow10 have been correctly updated to match the renamed functions.

Also applies to: 612-612

src/concrete/DecimalFloat.sol (5)

1-8: Well-structured imports and appropriate license

The imports are well-organized, bringing in the necessary libraries for floating-point math operations, along with proper licensing and specific solidity version.


9-11: New DecimalFloat contract with proper library import

This contract will serve as an external-facing wrapper around the LibDecimalFloat library, properly importing the library using the using statement.


18-21: Consistent function implementations with clear documentation

All functions consistently follow the same pattern of forwarding calls to the underlying library functions, with clear NatSpec documentation describing each function's purpose and parameters.

Also applies to: 26-28, 34-36, 42-44, 49-51, 57-58, 64-66, 72-74, 80-81, 88-89, 96-97, 105-106, 112-113, 119-120, 126-127, 133-134, 141-142, 149-150, 157-158, 164-165


125-127: Proper handling of logarithmic and exponential functions

The logarithmic and exponential functions (pow10, log10, pow) correctly pass the LOG_TABLES_ADDRESS constant to the underlying library functions, simplifying the external interface by hiding the implementation detail of the tables data contract.

Also applies to: 132-134, 140-142


1-166: Comprehensive external API for decimal floating-point operations

This new contract successfully exposes the full set of decimal floating-point operations from the LibDecimalFloat library as external functions, enabling offchain access to all functionality. The contract is well-structured, consistently implemented, and properly documented.

Comment thread src/lib/deploy/LibDecimalFloatDeploy.sol
Comment thread test/src/lib/LibDecimalFloat.pow.t.sol
Comment thread test/src/lib/LibDecimalFloat.pow.t.sol
Comment thread test/src/lib/LibDecimalFloat.pow.t.sol
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e1888ed and a0431f4.

📒 Files selected for processing (21)
  • test/src/concrete/DecimalFloat.abs.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.add.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.div.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.eq.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.floor.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.format.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.frac.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.gt.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.inv.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.isZero.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.log10.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.lt.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.max.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.min.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.minus.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.mul.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.parse.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.pow.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.pow10.t.sol (1 hunks)
  • test/src/concrete/DecimalFloat.sub.t.sol (1 hunks)
  • test/src/lib/LibDecimalFloat.isZero.t.sol (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: rainix (ubuntu-latest, rainix-sol-test)
  • GitHub Check: rainix (ubuntu-latest, rainix-sol-static)
  • GitHub Check: git-clean
🔇 Additional comments (34)
test/src/concrete/DecimalFloat.log10.t.sol (2)

1-7: The imports and Solidity version look good.

The file correctly imports all necessary components and specifies a recent Solidity version (0.8.25), which includes the latest security fixes.


8-14: Implementation of the log10External function looks correct.

The external function properly wraps the library method call with the required logTables parameter. This follows the established pattern for testing library functions against concrete contract implementations.

test/src/concrete/DecimalFloat.pow10.t.sol (3)

1-7: The imports and Solidity version look good.

The file correctly imports the necessary components with a recent Solidity version (0.8.25).


8-14: The pow10External function is implemented correctly.

The external function properly wraps the library method call with the required logTables parameter from the inherited LogTest contract.


15-26: Consider uncommenting the testPow10Deployed function.

Similar to the log10 test, this test function is commented out. If it's meant to be included in the test suite, it should be uncommented. The function itself is well-structured with proper assertions and error handling.

test/src/concrete/DecimalFloat.isZero.t.sol (3)

1-7: The imports and Solidity version look good.

The file correctly imports the necessary components and uses a recent Solidity version (0.8.25).


8-14: The isZeroExternal function is implemented correctly.

The external function properly wraps the library method call for checking if a Float value is zero.


15-26: The testIsZeroDeployed function looks good.

This test function follows best practices by:

  1. Deploying a fresh contract instance
  2. Comparing results between the library function and contract implementation
  3. Properly handling reverts with expectRevert
  4. Using assertEq for result verification
test/src/concrete/DecimalFloat.lt.t.sol (3)

1-7: The imports and Solidity version look good.

The file correctly imports the necessary components and uses a recent Solidity version (0.8.25).


8-14: The ltExternal function is implemented correctly.

The external function properly wraps the library method call for the less-than comparison between two Float values.


15-26: The testLtDeployed function looks good.

This test function is well-structured with:

  1. A new contract instance deployment
  2. Proper comparison between library and contract results
  3. Consistent error handling for reverts
  4. Clear assertions using assertEq
test/src/concrete/DecimalFloat.pow.t.sol (1)

1-27: Function and file structure looks good

The test contract follows a good pattern of testing the pow functionality of the DecimalFloat contract by comparing library usage with the deployed contract behavior. The structure is consistent with other test files and properly handles both success and error cases.

test/src/concrete/DecimalFloat.eq.t.sol (1)

1-27: Test implementation looks good

This test correctly verifies that the eq function in the deployed DecimalFloat contract behaves identically to the library function, including proper error propagation. The structure follows a consistent pattern with other tests and properly handles both success and revert cases.

test/src/concrete/DecimalFloat.frac.t.sol (1)

1-27: Test implementation is well-structured

The test for the frac function properly verifies that the deployed contract behaves identically to the library function. The test correctly unwraps Float values for comparison and handles error cases appropriately.

test/src/concrete/DecimalFloat.gt.t.sol (1)

1-27: Test implementation is correct

The test for the gt function properly verifies that the deployed contract behaves identically to the library function. The test follows the consistent pattern established in other test files and correctly handles both success and error cases.

test/src/concrete/DecimalFloat.floor.t.sol (1)

1-27: Well-structured test contract for floor function

This test contract effectively validates that the DecimalFloat contract's floor method produces identical results to the LibDecimalFloat library's implementation. The try-catch pattern ensures proper handling of both successful executions and reverts.

A few observations:

  1. The test follows a good pattern of comparing the library implementation with the contract implementation
  2. Error handling is properly implemented with vm.expectRevert
  3. Unwrapping Float values for comparison is the correct approach
test/src/concrete/DecimalFloat.format.t.sol (1)

1-28: Well-implemented test for string formatting functionality

This test validates that the format function in the DecimalFloat contract correctly delegates to the LibFormatDecimalFloat.toDecimalString method. The test structure is solid, with proper handling of both successful executions and reverts.

Unlike the numeric tests that unwrap Float values, this test correctly uses string equality comparison since the return type is a string.

test/src/concrete/DecimalFloat.abs.t.sol (1)

1-27: Consistent test implementation for absolute value function

This test for the abs function follows the same robust pattern as the other tests, comparing the results from the library implementation with the contract implementation. The error handling and assertion logic are correctly implemented.

The test effectively verifies that the DecimalFloat contract's abs method preserves the behavior of the underlying library function.

test/src/concrete/DecimalFloat.add.t.sol (1)

1-27: Binary operation test follows established pattern

This test for the add function correctly validates a binary operation (addition), following the same solid test pattern used across all the other function tests. The test appropriately handles two input parameters and compares the results from both implementations.

The consistent test structure across all these files demonstrates good testing practices and will make maintenance easier.

test/src/concrete/DecimalFloat.min.t.sol (1)

1-27: Well-structured test for DecimalFloat min function

This test ensures the min function in the DecimalFloat contract behaves consistently with the library implementation. The test structure is robust, handling both successful cases and error conditions appropriately.

Good use of fuzzing with the parameter types, which will test a wide range of input values. The test correctly compares unwrapped values and handles error propagation properly.

test/src/concrete/DecimalFloat.inv.t.sol (1)

1-27: Clean implementation of inv function test

This test effectively validates that the inv (inverse) function in the concrete DecimalFloat contract mirrors the behavior of the library implementation. The structure follows best practices by:

  1. Testing with fuzzed inputs
  2. Comparing unwrapped results for equality
  3. Properly handling error cases to ensure consistent revert behavior

The test will help ensure that the exposed external function behaves identically to the library method.

test/src/concrete/DecimalFloat.minus.t.sol (1)

1-27: Properly implemented test for minus function

This test correctly validates the behavior of the minus function (negation operation) on Float values. The test follows the project's established pattern for testing concrete implementations against library behavior.

The implementation properly handles both successful executions and error cases, ensuring the contract implementation matches the library functionality exactly.

test/src/concrete/DecimalFloat.sub.t.sol (1)

1-27: Effective test for subtraction operation

This test thoroughly validates the sub function, ensuring that the concrete implementation in DecimalFloat behaves identically to the library implementation. The test:

  1. Properly fuzzes both input parameters
  2. Verifies result equality for successful operations
  3. Ensures consistent error propagation when operations fail

Good implementation that follows the project's consistent testing pattern for arithmetic operations.

test/src/concrete/DecimalFloat.max.t.sol (1)

1-27: Implementation looks robust and well-structured.

This is a well-designed test contract for validating the max function of the DecimalFloat contract. The test ensures that the external contract implementation matches the behavior of the library function, handling both successful executions and error cases appropriately.

test/src/concrete/DecimalFloat.parse.t.sol (1)

1-29: Comprehensive test for parsing functionality.

The test thoroughly validates that the parse function in the DecimalFloat contract behaves identically to the library implementation. I appreciate the validation of both error selectors and parsed values, which ensures complete behavior matching.

test/src/concrete/DecimalFloat.div.t.sol (1)

1-27: Division function test properly validates behavior.

This test correctly validates that the newly renamed div function (previously divide) in the DecimalFloat contract matches the behavior of the library implementation. The test structure handles both successful calculations and error propagation.

test/src/concrete/DecimalFloat.mul.t.sol (1)

1-27: Multiplication function test is properly structured.

This test thoroughly validates that the newly renamed mul function (previously multiply) in the DecimalFloat contract matches the behavior of the library implementation. The test structure follows a consistent pattern across all arithmetic operations, making the test suite maintainable.

test/src/lib/LibDecimalFloat.isZero.t.sol (7)

1-6: Good choice of Solidity version and imports.

The file uses the latest Solidity version (0.8.25) and correctly imports the necessary components from both the project and Forge Standard Library.


7-9: Clean contract definition with appropriate library usage.

The contract properly extends the Forge Test contract and correctly applies the LibDecimalFloat library to the Float type.


10-12: Well-designed external helper function.

This external function will be useful for testing external vs internal calls to the isZero function.


14-23: Well-implemented test for deployment consistency.

This test appropriately verifies that both external and internal calls to isZero() produce identical results and properly handles revert cases. The try-catch pattern is a good practice for testing expected reverts.


25-27: Good functional equivalence test.

This test correctly verifies that isZero() is functionally equivalent to comparing with zero using eq(), which confirms consistent behavior across different comparison methods.


29-37: Comprehensive zero representation tests.

This test effectively covers multiple zero representations with different exponents, ensuring the isZero() function correctly identifies all variations of zero.


39-43: Thorough negative case testing.

The function properly tests that non-zero values return false for isZero(), using fuzzing with proper assumptions to ensure comprehensive coverage.

Comment thread test/src/concrete/DecimalFloat.log10.t.sol
Comment thread test/src/concrete/DecimalFloat.pow.t.sol
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
src/lib/deploy/LibDecimalFloatDeploy.sol (1)

16-16: 🧹 Nitpick (assertive)

Avoid magic-address duplication – reference the declared constant

You have correctly introduced LOG_TABLES_ADDRESS, but the literal 0x7A0D... is still hard-coded further below in the inline assembly block.
Keeping the same value in two places invites drift and makes auditing harder. Because Solidity constants are accessible in Yul, you can safely reference the constant inside the assembly block.

-        bool success;
+        bool success;

…and later:

-            success := call(gas(), 0x7A0D94F55792C434d74a40883C6ed8545E406D12, 0, …
+            success := call(gas(), LOG_TABLES_ADDRESS,                      0, …
📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 95049a3 and 5cc32b7.

📒 Files selected for processing (1)
  • src/lib/deploy/LibDecimalFloatDeploy.sol (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: rainix (ubuntu-latest, rainix-sol-test)
  • GitHub Check: rainix (ubuntu-latest, rainix-sol-static)
  • GitHub Check: git-clean

Comment thread src/lib/deploy/LibDecimalFloatDeploy.sol
@thedavidmeister thedavidmeister merged commit 08aa22d into main May 11, 2025
4 checks passed
This was referenced Aug 11, 2025
Merged
@coderabbitai coderabbitai Bot mentioned this pull request Aug 27, 2025
4 tasks
@coderabbitai coderabbitai Bot mentioned this pull request Jan 29, 2026
4 tasks
@coderabbitai coderabbitai Bot mentioned this pull request Feb 8, 2026
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant