@aztec/protocol-contracts 3.0.0-nightly.20251126 → 3.0.0-nightly.20251128

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/artifacts/AuthRegistry.json +6 -6
  2. package/artifacts/ContractClassRegistry.json +5 -5
  3. package/artifacts/ContractInstanceRegistry.json +5 -5
  4. package/artifacts/FeeJuice.json +5 -5
  5. package/artifacts/MultiCallEntrypoint.json +6 -6
  6. package/artifacts/Router.json +5 -5
  7. package/dest/auth-registry/index.d.ts +1 -1
  8. package/dest/auth-registry/lazy.d.ts +1 -1
  9. package/dest/class-registry/contract_class_published_event.d.ts +1 -1
  10. package/dest/class-registry/contract_class_published_event.d.ts.map +1 -1
  11. package/dest/class-registry/index.d.ts +1 -1
  12. package/dest/class-registry/lazy.d.ts +1 -1
  13. package/dest/class-registry/private_function_broadcasted_event.d.ts +1 -5
  14. package/dest/class-registry/private_function_broadcasted_event.d.ts.map +1 -1
  15. package/dest/class-registry/utility_function_broadcasted_event.d.ts +1 -4
  16. package/dest/class-registry/utility_function_broadcasted_event.d.ts.map +1 -1
  17. package/dest/fee-juice/index.d.ts +1 -1
  18. package/dest/fee-juice/lazy.d.ts +1 -1
  19. package/dest/index.d.ts +1 -1
  20. package/dest/instance-registry/contract_instance_published_event.d.ts +1 -1
  21. package/dest/instance-registry/contract_instance_published_event.d.ts.map +1 -1
  22. package/dest/instance-registry/contract_instance_updated_event.d.ts +1 -1
  23. package/dest/instance-registry/contract_instance_updated_event.d.ts.map +1 -1
  24. package/dest/instance-registry/index.d.ts +1 -1
  25. package/dest/instance-registry/lazy.d.ts +1 -1
  26. package/dest/make_protocol_contract.d.ts +1 -1
  27. package/dest/multi-call-entrypoint/index.d.ts +1 -1
  28. package/dest/multi-call-entrypoint/lazy.d.ts +1 -1
  29. package/dest/protocol_contract.d.ts +1 -1
  30. package/dest/protocol_contract_data.d.ts +1 -1
  31. package/dest/provider/bundle.d.ts +1 -1
  32. package/dest/provider/bundle.d.ts.map +1 -1
  33. package/dest/provider/lazy.d.ts +1 -1
  34. package/dest/provider/lazy.d.ts.map +1 -1
  35. package/dest/provider/protocol_contracts_provider.d.ts +1 -1
  36. package/dest/router/index.d.ts +1 -1
  37. package/dest/router/lazy.d.ts +1 -1
  38. package/dest/tests/fixtures.d.ts +1 -1
  39. package/package.json +9 -8
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "transpiled": true,
3
- "noir_version": "1.0.0-beta.15+881acee6c8df42adb85ff0b9bc9ad144b43bdf6b",
3
+ "noir_version": "1.0.0-beta.15+1a930357477fc0c210dc5a8960680282d4cfa24e",
4
4
  "name": "Router",
5
5
  "functions": [
6
6
  {
@@ -356,7 +356,7 @@
356
356
  }
357
357
  },
358
358
  "bytecode": "H4sIAAAAAAAA/+29C5hdR3UmWrtPq91H3eqjly0byVZLFn7INviNwQYsbGOMJEuWZNmSn21bWLZsS9bDsrHzBBLCKySem0zInWTIDY9kINyER0KGSTIkJDdhGEjIDQmBQMjkCwwBzPCaMEwYyt5L/fff/65Te591pAPu+j7p7N616l+rVq1a9a5dhKdCp/zdt3/vnbsOHLjt/u/9N3X3ruu/96ooo4bL3+PK3/h+UZgZjHYyZIWiBu3MRDV4FKH/PIZC/3m0Qv95DIf+85gX+s9jJPSfx3Gh/zxGQ/95tEP/ecwP/ecxFvrPYzz0n8eC0H8eE6H/PDqh/zwWhvo8mvBZFI4On8X5tE9iXy7e1eG3JPS/jJaG/vM4PvSfxwmh/zyWhf7zODH0n8dJof88nhH6z2N56D+PFaH/PE4O/edxSug/j5Wh/zwmQ/95rAr957E69J/HqaH/PNaE/vN4Zug/j9NC/3mcHvrP44zQfx5nhv7zWBv6z+Os0H8eZ4f+8zgn9J/Hs0L/eTw79J/HuaH/PM4L/edxfug/jwtC/3lcGPrP46LQfx4Xh/7zeE7oP49LQv95PDf0n8fzQv95XBr6z+Oy0H8ezw/95/GC0H8eLwz953F56D+PdaH/PF4U+s/jitB/HleG/vO4KvSfx4tD/3lcHfrP4yWh/zyuCf3n8dLQfx7rQ/95bAj957Ex9J/HtaH/PDaF/vPYHPrP47rQfx5bQn0eTfhsDUeHz7ZwdPhcHxrw2U4M44aGuOEgbgiIC/ZxQT0ueMcF6bhgHBd044JrXBCNC5ZxQTEu+MUFubhYFhey4uJSXPyJizNx8SQubsTFh7g4ECfv4+R6nPyOk9Nx8tgmd1d971+cvIyTi3HyL07OxcmzOLkVJ5/i5FCcvImTK3HyI05OxMmDOLiPg+84OI6D1zi4jIO/ODiLg6c4uImDjzg4iJ332LmOnd/YOY2dx9i5u/x7/2LnKHZeYuciNv6xcY6NZ2zcYuMTG4fovKNzjc4vOqfoPGLljpUvVo5ovNGwYqFfH6qDFW7F/pvNa556PVpGD0GyGvtBilFiVy/9j358lAFrpQ9Ppo9pRpul327p283SP2m+MfwQpEdZDLdV/r4B0r6BeBrNx4DmY0Rj8jbTd/ihHvO7aDzMzKNhBJBtfjPsxZgnCy16h/jt0FPZFwXhGT/On9WNcaAxfgXFDQs5LW4exJn+o+tbC3RctqMUZ7LE8AaKa0HcT5e/ViYoVw0dvbFHe7m8j/ay7vvRXoYpzsNeEIPtxTBi+BjFjUDcn1PccRD3F8D7InjeVz736JOO+PCGbdCTXQLmj1gmr4UW/cZgejLdjwp6i2tDHOo+hvnwviWwjqN0Rn9h+TtR/mLZWPqO4D9C/JXcyjYLgdUS74w+6ucckNkwrwDaSXv4+oFPvPXDr3/3H7394Nve8nOLPrngF8bOnv8jr3rVV5Z/ecWbnnjV/2NprwRZipBd3iOW/irF+wW/3dq5+ze/vXfs6le86/An/+baQwtWTH1w5avfsvNDP7PyC7f9hKV9sUr7+df94o903vWz/37yrI98Y+Tqn/7n2752zbxLPvmRx076wx//zheeeNzSXq3S/sXO73z6PZ3HX/7w69//6CVnLJl6x+Of+Op//5MP/0bna3//zgc/cZGlfQnkuc6eWEt/TbP0R/ppL22WfsjSr4f0TfqJG5qlX2jpN8LLSXv4sV99+6fXvf4j5/7Dd+a/ZuPUKx++4LUfv+FLLz/xbc/8x3vfueIdiyzttSrt5w5e8TMHl91/8ZdGP/r68968/OTPfP1t7/mnbz6y65J//qfPv2/V1yztJpH2xPNPf+6+f/uxpZ86Y/XfXv4H73jWvznp62su+9TvvOTNT3z7T/9nmC6zzc3yfETn1zVLP2zptzRL37L0W+HlZDrNkabY0m5rxvtI+uvzeVuYZ2m367TFK1Yf+Pn264uNH/zxc94zPv+DX1j3yy+64iMffuVrVnbe8cuW9gaRdu1l7Sfe8pofflX47Nu++IZvrv3A5ecsOmXdomf95S/+1fIH9t900hOW9kZjFGrleYWl3wHpSfZksPQ7w2zZc9Pe1Iz3kfp9c33eR9LeUj/tkTpyq4GFWjqfb+lva5Z+zNLf3iz9uKWfgvQ12sJJS39Hs/TnWvo7m6U/z9LfBenrjA8s/a5m/NdZ+pc1S/9iS393s/TbLP3uZumnLP09zdLfaenvbZb+Lku/p1n6XZb+vmbpX2bp72+W/m5L/0Cz9Lst/d5m6e+x9Puapb/P0j/YLP39ln5/s/QPWPoDzdLvtfQHm6XfZ+kPNUu/39I/1Cz9AUt/uFn6g5b+4WbpD1n6R5qlf8jSv7xZ+kcs/aPN0j9q6R9rlv6H4lgyjol/5ZSnXsSp/xPLyEMH77nvnoOPXL3r4PVPPV2x94GDux4+iHMakRfPLbXp7/n09xj9zfMt9l7N2+QEm89YAOlr6GSzzcFMkDyI3SE5J0NWOLkgvBD0nBnONaAsNfkdmTPrED/OH86ZxbiFQpaOiGMdLxR8Fgo+HRG3xxHrkCPWfY5YBxyxPPP4oCPWXkes/Y5Y9ztiTTlieeresw49NKBYux2xPG3CU/ee9nWvI5Zn3fa0iXscsTx99COOWIPaPlrf1/oO2NcoKn6ND78zPm3CatrvUfnqCH4p+okE/aJM/DF4X/arr9x1x6G7N+y9O1Dgru6VFSKuILptCdEYt6B//H4FvWsJWgwxeyeUz2X2Xrzr4J27t03dffeuu76XyQOcgpGuqHjPHVKksc74IpJ0MmSFoRyjRPw2ydLUKJXRqMoWtbq4fC61umHv1F1XTO07cOi+XbgVAc2UuRSEiu9UmRYgGb6bT3RX0N/rRbogsHEbzRJ6PxmywlKziqUi0uKOB+wJijsB4rA0ObSE/CZzHDa//ZRpXKZjebA8jqe4xRB3AvDmclXXMpn8Q4J+MWEtEulM9934tUQ6Hpamhs45tc3yEUNH8DDeffQKSwfdK1j+Fjfjt6Sg9MgPMU0e0/USEWdYVg9HKrAs7TDRf6r87RBdDDuJxxIhL77DrRKfINlRt2wnvegR8UwufIf47dCTXRapcsP8sZ009LGLc/SO8rBPZt2i3xupwLK0w0T/hfK3E2b7fbaTpUJefId28t9IdtQt20lDPWZvkzP8dujJLotUuWH+2E6WNuN3eY7eUR7VPqNusQ0cqcCytMNE/83yt0N0MbCdHC/kxXdoJ18tn0cr5J0MWeGw6rewnaFe6mxfyLUzw2+Hnsq9SOlR1TfV97K0HRHHU8snCD4nCD4dEXfIEeuAI9Y9jlh7HLEeGlCsvY5Y+x2x7nfEmnLE2ueI5Wn3g6ivVDtUFysGT1s97Ij1gCOWp6165nG3I9ag1u1HHbHucMSyrQjczzP8GEbD7LpXd2yCeCYnvkP8NslSk1+R0ovqM1r+ljXjt6ig9MgPMU0e0/WJIs6wTir/HqnAsrTDRP/CUqEdoouB+9QnCnnxHfapn1fiTgh5eX6hrj1ietYRpmN77KW8EM/kxHeI3w492X+Rsg+lF8vfic34LcwpX5THdH2SiDOsZ5R/j1RgWdphot9E9ngSyMT2eJKQF9+hPb60mCk76pbtpKEer8q1E8Nvh57sskiVG+aP7eSkZvyuzNE7ymO6foaIM6zl5d8jFViWdpjobyY7eQbIxHbyDCEvvkM7uaHEHa2QdzLkBa4jhoHYqJf8cii+mmtnht8OPZV7kdKjqm+Wv+WN+BVPsG0gP8Q0eUzXK0ScYZ1c/j1SgWVph4n+XrIz5MG2sULIi+/QznaRP0Ldsp0002N4Ua6dGH479GKX03aiyk3VN8vfimb81uXoHeUxXZ8s4gyrXPKbYSeIZWmHif4w2cnJIBP7o5OFvPgO7WR/iTsh5OX591R9QdyOSG90yuZq+L3bVJnWSP+gpT+5WfqHrYxPgZdcn1bC+xr2dl5ufTL8NsnStD6tJH6cP56DnRSydMJsPaaO5bTEu6EE1gOOWHscsaYcse5xxNrniLXbEWuvI9aDjlieNnGvE1Y3P1lXrocc5VrhhBXDIUesw45YU45YjzpiefpCz/q43xHLsxwfc8TytAlP3XvV7Rg88+hpEwccsQbVT3jK9XToM821acdO95718T5HLK88xueTnbA85YrBqz/hnUdev8OxZVH+jgoZaoxbX1AQnsmJ7xC/TbLU5Fek9IL543HyKiFLh+Ji4HHyKsFnleCjsB5wxNrjiDXliOWZx72OWPsdsQ47Ynnq/lFHrLlyrIf1mCPWlCPWvY5YBxyxPP3XQ45Ynrr3tFVP3Q+q//K0VU/7etARy7McPe3Lsw552tchR6zdjlieeRzUvpxnHj37E4Najp669+rLxeeTnbBiGNR+jmcfc64/8YNRhzz9hKdcXvYVn1c4YcXwsCOWp+49+wDW1vK+McOPQe1DqTEntaogPJMT3yF+O8wuyyZzYGpvkdqD1uMc32RB6ZEfYpo8as6N26TV5d8jFViWdpjoHygzpeoG79HLtZu49+qe8o8JIS/Xudw9XWofIesI07E9TsL7GuXVyrXHyfK5HXqy/yJlH0ovdeZkPX0eYk2E2Trudc1phcjPuEjH5Yzy1dB79lkFw2+HnuyqSOl/Et6x31ndjN9C9hXIDzFNHtP1qSLOsMqvdc3wO4hlaYeJ/jXkd5AH+x2LQ3nxHfqdV5HfUXWiqd1jeqP7QeMzLtJx/Wpof/Ny65fht0NP9blI2bvSi7J3S6vsdBKe69jp9yOW2d/qBJ+UX1F8MP3qOT498RkX6bjeYrnm16Pis7n11vDboSc/UaTsVunF8remEb/iMwWlR36IafKYrp8p4gzrtPLvkQosSztM9O+ndhF5cLtocSgvvsN28T1DM2VH3bKdNNNj6OTaieG3Qy92OW0nqtyUf7P8PbMZv4kcvaM8puvTRJxhnV7+PVKBZWmHif6PyU5OA5n4zMxpQl58h3byn8s/RivknQxZ4Vql6xrp/340zNZdjfT/3tKf3iz9mZb+jGbpf8fSn9ks/VWWfm2z9O+z9Gc1S/9jlv7sZulvtPTnNEt/i6V/VrP0Z1j6ZzdLf4GlP7dZ+s9b+vOapX+JpT+/Wfr3W/oLmqX/GUt/YbP0V1j6i5ql/4alv7hZ+sct/XOapX/C0l/SLH1h6Z8H6evMEVr6y5qlb5m8l+JLIZPhW1v1XKAvKn4Ni+OMV5uwmrbrSnaUj/vFlwI/zGMV1qU1sUZFXJMyeV6ozhfijydkYTljuAPoeslzDPc6YcXnNU5YMRxylOuZTlgx3Oko12mOWKc7Yp3hiLXAEetMR6y1jlhnDSjW2Y5Y5zhiPcsR69mOWOc6Yp3nhBXDyx3lOt8JK4aDjnJd4Ih1oSOWV9sRny9yxLrYEes5jlgnDiiW9e97nK+4psf5iuf1OF+xscf5iq09zjdc3eN8w5U9zhdssL7ys+BlUf6quYAa/fZrC8ILQY9/DL9NstTkd2T882zix/njdatzhSwdEcc2fq7gc67g0xFx+x2xHnHE2u2Itc8Ra68j1r2OWFOOWA86Yu1xxHpoQLE8bfV+Rywv3at2cVBs1bM+HnbEGtT6+LAjlmcdGlTdP+CI5eknPNtaTx/tqXtPfQ2qfe1zxPIsR0/dPx38xKNOWPH5dEesMx2xzhhArBh2Ocq11hHLU/fLB1Susx2xFjhhxeBpE2scsc5yxPIsR0+5PG11EH1hDHc7Ynnaqlc5esoVw6Dqy9NWz3HE8qzbXv4rhsccsaYcse5zxNrriOXZJ9/niOU592j9e5vHPhviivK3xzn8iYLwTE58h/htkqUmv+QcPuaP9yaf24zfgpxyQHlM1+eJOMOyNeGRCixLO0z0nywV2yG6GHhv8nlCXnyHe5P//9ZM2VG3bCcN9Zj9rVDDb4ee7LJIlRvmj9d6zhOydEQc94lz9a3K7pAj1gFHrHscsfY4Yj00oFh7HbH2O2Ld74g15Yh10BHLsw55luMjjli7HbEOO2J51m1P+/KsQ55+9emg+wcdsTx9tPlCOz+K/ZkO8anb98b0RtfjeZctPZ532d7jeZdN1i+6AF4W5a86i1Kjj/ZjBeGFoPuEht8mWWryO9InvIj4cf64T3ixkKUj4nj/z8WCz8WCT0fE7XfEesQRa7cj1j5HrL2OWPc6Yk05Yh10xDrkiOWp+0G11cOOWHscsTzty9PnHHDEejro/kFHLM88PjSgWJ51+35HLC/dx+fTnLBi8LTVQe0DeGJ56muu3Z5rt+fa7bl2uxvWXLv9/d9ux+Cpr0G11YcdsTz15elzPHX/gCOWZx3ybLcH1UcPan/CM4+efV/PcvTU/dPBTzzqhBWfFzhineuI5TVPHp/Pc8KKYZcj1t1OWPH5TEes5Y5YaxyxznfCiuHpoPvTHbHOcMRa64jlqa8LHbG8bNWzDsUwqHY/qHn8QfeF3nLNtR3f/21HDC9zlMuzL+epr3Mcsc5yxPJsaz3ro6e+BrXteMwRa8oR6z5HrL2OWJ7zAJ7zE577cx4qf22vF+4NK8pfdWdy5DMZssJ4QXgmJ75D/DbJUpNfkdIL5s/0ou50rsFvrKD0yA8xTR7T9SUizrDsPt6RCixLO0z058x76rdDdDHwGZlLhLz4zvQTIc+YN1N21C3bSUM9rsm1E8Nvh57sskiVm6o/qtwsbUfE8fxTrr5V2R1yxDrgiHWPI9YeR6yHBhRrryPWfkes+x2xphyxDjpi7XbE8qyPhx2xPO3LU1/7HLE87cuzDnn6VU+b8PSrg1q3PeujZx16xBHLsz4+HezrQUcszz4An8HC/nKH+KTGFIoPpje6cZGuKH/V92hq9KF/piA8kxPfIX47zM5zkz670r/Si+X9eUKWjojj+Tz1TZXnCT4dEbffEesRR6zdjlj7HLH2OmLd64g15Yh10BHrkCOWp+4H1VYPO2LtccTytC9Pn3PAEevpoPsHHbE88/jQgGJ51u37HbG8dB+fT3PCisHTVge1D+CJ5akvz3bbU/eefQBPH+3ZnxhUW/W0r7l2+wejbs/1yefsi+Pm+oXHzr4GsV8Yg6e+BtVWH3bE8tSXp8/x1P0Djliedciz7RhUHz2obZpnHj37vp7l6Kn7p4OfeNQJKz4vcMKKYZejXOc6YcVwt6NcnutDnvo6xxFruSPWGkes852wYvC0iTMdsTx171W3PeujZx2Kz+c5YcXgVR9jeDrY1+mOWGc4Yq11xPLU14WOWF6+0NNHxzCodj+oefxBb2u95Zrrm3z/tx0xvMxRLs/+hKe+PPvkZzlieba1nvXRU1+D2nY85og15Yh1nyPWXkcsz3kmz/kvz/2FfAYT97YW5e9omG2Xkc9kyApjBeGZnPgO8dskS01+RUovap+05f1SIUuH4mLYCXQc1xLvhuaw5rCOMRbvRTf8GEbDbPuvUd/Ozq3fht8OPfmTIqUX5fcs75cJWToijvs7lwk+lwk+HRG31xHrIUesexyxDjhiPeKItccR69CAynWvI9aUI9ajjlh3OGI95ojlqa/9jlie9fGwI5an3Xv6Qs9yvM8Ry9PneNrEg45YnrrfPaByHXTE8rQJz76JZ7vtWY6D6r887cuzPg6qj/bE8rSv+x2xTPc8H2H4MYxSuiLUGjudXBCeyYnvEL9NstTkV6T0osawlvfnC1k6Io73GTxf8Hm+4NMRcYccsQ44Yt3jiLXHEeuhAcXa64i13xHrfkesKUesg45YnnXIsxwfccTa7Yh12BHLs2572penXJ7l6CmXp5/wtAnPcnzQEcvT3/OdNtg36hCfuv0zTG904yJdUf6Ohtl9lBr9pVcVhGdy4jvEb4fZeW7SP1P6V3qxvL9AyNIRcbw/4gWCzwsEn46I2++I9Ygj1m5HrH2OWHsdse51xJpyxDroiHXIEctT94Nqq4cdsfY4Ynnal6dcnuXoKZenX/W0Cc9yfNARy1P3Dw0olqefuN8Ry0v38fk0J6wYPG11UPsTnlie+prrA8z1Aeb6AHN9gG5Yc32AuT5AP/U1qLb6sCOWp74G1U884IjlWYcGte3w1P2g9k088+jZj/YsR0/dPx38xKNOWPF5gSPWuY5YXvP38fk8J6wYdjli3e2EFZ/PdMRaPqByeZWjt1xrnLBi8LQJz3I83RHrDEestY5Ynvq60BHrfEesQbXVufp4bPI4qPY11w7N2b2S62WOcnn2MT3L8RxHrLMcsTzbbc+67amvQa2PjzliTTli3eeItdcRy3N+wnPexHM/E9+hsQDiivLX9gVifYt8JkNWGC4Iz+TEd4jfJllq8juyL3A58eP8mV4s72uELB2Ki4HvOFgj+KwRfI4Wliqv+G8yZIXrR4P2PZN56feYPp8JL9mWcP9CjbI9MdeWDL9NsjS1pdOIH+ePbel0IUtHxHEZnS74nC74dETcficsVfaDIFcMB5yw4vMSJyzvPE45Yj3oiPWQI9b9jlie+jrsiPVyR6yDjlh7HLE8db/XEeteRyzPPD7qiHWHI5aNDaz9wr4Tt93YNtRoSxfktt2G3w6z28gmbbfqU2H+TC899k3GU30FxDR5VF+B210bL49UYFnaYaL/jdGnflVZc58z127mfe/fr5W4E0Leiwi3bl8W0xud4nN2j3zOFnxGRbpJe/j6gU+89cOvf/cfvf3g297yc4s+ueAXxs6e/yOvetVXln95xZueeNWv9mg3N1j605ulX2Lpz2iWfrGlP7NZ+kWWfm2z9Fda+nOapV9n6c9tlL44UvbnwdvJrLTTeT+/Ee+wsrczd8UTlh7njIay04dRS//CZukvtvSXN0v/HEu/DtLX0N+kpX9Rs/RH8n9Fo/TFZyz9lShU+bvmr373uG/9+k8P/9ZfP7H38DfWPv5nV7/+9/7DZT/7kXNe8KNb/+HnvrzR0l7ViHdYYOlfLHh3kfuIzV995E0t3hOW/iW1eYdLLe01Ku0Lfru1c/dvfnvv2NWveNfhT/7NtYcWrJj64MpXv2Xnh35m5Rdu+0lL+1KV9i92fufT7+k8/vKHX//+Ry85Y8nUOx7/xFf/+598+Dc6X/v7dz74iYtj+/URar/KP598noDn+K9d/h3TWT9lG9BY2mGi/8rx0+n+vCQapzSGEcJ029OG9zXK4qTcfpXht8PsvDfpV7WJH+eP50TGhCwdiouB+8hjgs+Y4KOwHnPEmnLEOuiItccRa78j1r2OWHsdsTzzeL8j1qDa125HrEOOWIcdsTzty1Nf+xyxPO3Lsw4dcMTytIk9jli8zoZx3A8Yh/c12uWh3H6A4bfD7Ha5ST9gnPhV6SW+W1w+Hzp4z333HHxkw96pu66Y2nfg0H27hhA6zOwNsVYQFd8VYWbuMa5F7+YT3VX093qRLgjsGG8lt5DeT4assN6sYr2ItLgNgN2muI0Qh6XJoSXkN5mP+96/t58yjct0LA+WxwaKw570RuDN5ar4mPxDgn6CsMZFOtN9N35P55qoysnSdkQc18Xcnn8TD9Epn0sPceWuOw7dvWHv3YHCMP19ZYWIJxLd+grRCoFb0D9+fyK9a4W0C0oNAnNMJgZuZBBrG/GZa2TmGplpVnONzGz5+93ItEQ6nubh6Z8YJu3hx3717Z9e9/qPnPsP35n/mo1Tr3z4gtd+/IYvvfzEtz3zH+9954p3LI5TTJeVCSeEvDjFg3mb1yV/w0T/DpjSurzkF2mXlfFlTXvRofv2bNl1cP89ux7a9T2ffSBQ6FY9NtLf14p0KphJtAk/htHQkwPKdniG3w66mCdDVjji8NRoA/PXzOGxQXBF9nZ419LfTRzeBL2fDFmhtsMbpTh0eFiaHJTDM5nrOjwsD3Z4WFHZ4WG5jgk+Jv+QoB8nrJSz6sZvruvxVJjreiCrua7HbPn73fXgdPPC7JpraYeJdk8Z0WONDYsgHcs412Y/FebabGQ112bPlr/fbbbyJLw23M+pC+SdHAx97uAVP3Nw2f0Xf2n0o68/783LT/7M19/2nn/65iO7Lvnnf/r8+1Z9vUevsb1Hb3d99LA/QYMxrAdcj61lqtpfYGmHif53Fk6new0Mxuw8QulRtk/dd89dUwd3XfXAg4d2Hdp117V7D+46sO6Bu656aNcDB2sPzV5Mf18t0qlgiuDuDj6r6UTlNjsifdXUZJVSDYs3bfxM+RAr/7tOmYmpKgsa9vpEXscobozk7cYntcBUZPI5oUc+Jwg+qY5+U4egZFaOx8ozlvEvtafTYOXFGQ5Maw56mOjfCpXqzVSJleMsgnY2aGMxVM0324Zephmqkg/s87fIPocoz5hPJfM48GC+MeyokOE/ULewYSMvu4WGNUHyxOeTwkz5UValc7YrTM9LIFWdJ/w1PvyO+SiZuSPgwQexrC7kNDgTxIffpRroCcpPIWSI9vf+tuaJ9VH5LZ5xfADq4weoPqI9m8zKbsYprmo4xTptiXcpXzVegZXbBhn9HyXaoG6TENwGDWXINxxm16n4fCLkuQoriHdqSMvDuwmiHU/Qstxo27ZZ+2hPTfDwFaesNwEdh25TE++tMeBAPWyowFR1/maiNT88JHAXEi3WY0wbw84KGbiMY7i+/OX6/g/tafy/oXYG24t+li3qjoMqP5Mrlt8/9Fh+yq/uoDjlj6O+vnSM9MVTlhiOhb5uorhu+rI4m4pRA23e5G38Fs+fxnuC8ArgxfbPh6+WAD6nj4H7Ykb/dWgrnrXyqecJSh9/VxIuYquxDLdznD4k8rkY4haS3EbbKfU2SvmpaavrrIyXkkyIfXxDbNSfBTV9aPjjgp/J1RZxwxmyPPCtqQumRl7+pwWlN1n4HW+5OUHQrxT0pqtlkL6Grp6PE1GBeKtxxvEUNw/iTIZo02tJvhMaypejP8TvCPpbgK5OWXQEn1FHrPGGWIvCTBvFesg+NwZuh1TbH8vx3LJuKz90CslaCFlTfojTB/G38kOqrxvDOeSHGvYfLzSdLCGZEHtpQ+xcP2T446G6XNsiLscP7f7Oun0f3PLxk4sw29+2xDv2Q8omTxH0Pdbzc5UfYl+DfmgpxaEfMhmUH2rYppyboz/E7wh69kO5ZdERfEYdscYbYpkfwj6A1UPlh7h/t0jkB/0QjzGeA3228+fPxMI6VtXvjmEnxY0n4hYKzMj7xTC5jv5qpPzFcSSP0ZaIdAHyYO/Q1jENzz0Y/QtBN5eRfFinMZ8on+qr47zkuvnVdIsSdFguqf49bxlAm+S5q27lwm3FNdRWNFwmlvOehhXncszvlAs4V+86uHX31P5dd23ddef+XQd5haagv6tmWngkFoguBt71fBz9zct+PJu5UOB046lm11fAM/NVs/nslVYImY8ln5N75HOy4NPvpdiTiY+aue6x17QqR07Eb4fZtbrJBo2FxI/zx72RhjMpkwWlR36Iya2dGkEblnnxkQos9PxIf2fpvTqCx4nEY7GQF9+hR7+VPDWupOCKwK75M3moFQFMu5nyYfRf7Eyn200jDWyhUvVxMsyUpW59nJzj01c+q3rks0rw6be/XEV8UhvaGvqvRbn+0vC9NrSpVSe1M6PHFeGF7BuQnzqkxj051i36xpEKLJ6hNPpXk79EHuwvVXuC79BfvoJ8llr5Suk9tRqpNoF2W6l9/XzNU63UxsB+2eh/CfzyGzP8ciqPaueE8hNVK4NVWJsJS40OjtYKuuKTk58Un2OZn1RdwDLYkpCL+zqLumBdR1iYfhHFDSVkrruTRI1uFZ+FPfJZmMnnaOVnrEc+uTs22j3yaQs+/d7pwzMPVf72feRveacip91Q/vJOxdeBv30/+du6+e9xnJPdLzH8dpitvyb9km7+gfsli5vxO9IvSY2LUB5eDWDdxn82EzpSgYUrwkj/J9QvQR7cL1ki5MV32C/5II3jULe91hPM+9GojzHwKfiq+vhRqo+LIS6nPhr9QaiPf5Goj4tIZtRNO5Ef3HFR5RNVnzxVVxYm6JWtqz5BH1e+sv0Kr7I33E1wxK+o1SpVb8aAdzlbu27XgfPOv+TK703VPrLvYNUqGO+qWkq4bHP2N6eLsvGOkSHBIwa2n0VEx+XOc7l1ZOpG2y1e9QmWVOQzhLw+gVr9YKyqnZpWPsNE/9/Keq52aqrTDGhDqZ2abUrXrpC9JfIwvyLdi4KWD/O8PpFno/9iIs8TXfLM46/Uoceqi2daIg+jYbYNIIbS8eowU/a69oTpj1YfczXxqWrTvpUx14ryXFE+81zrFLRp36Y2TfXl+53/qlMXmK8rgIbHEXiUijFj4F12R2yyJOpxvUOu/PHcfyHkj/mbNzYzLyrvqTI1+q1QpqPly1SZpuqHOi2U8gXjCXo1b6DmeFP90976+cVnc2wU8dskS017ONLfUP10zF/T/obhfgYyhPJ3629wulR/g2mr6h73ARbS+279DSVTFW0v/Y1FFfkMIa99UGMes08+VjsZssIkt3utoMeOVUfFh4LuGzC96mMgPvth3B2tdLMN4pF+RQkU+xLn0e5llOHUCvlCyCsLTH+02qpTiU8/1p1i4JNfWK7PhWeMMz78jvlg+naCz6Ie+agxcK6tryufu/WJnlWz/ay6FKMF7ed51H6qfnrdtWnOf921z1S9zq2nqj/wLMKqe3oY01f144aF7DFwv8zoN1O/rOG66ma1y9Bsocc+3+acOo74ak3T5GqLuJzdu19oX/ZnX3z3L36U2z2Thd/lzB09S9D3OM+6Ue3exTnVGNBGFlIc7t41GdTu3Yb9tY05+kP8jqC/GejqlIXCWt8Qy3bcqrXHY+WTck/JGv126Dvk3NSA7U9qTXmM0o0J2UOY7XNimAw6fJeC4eFVM8yLTywY7S2Q7wtXzpR1XMhqPqKV4BHEuyJU64Z5DIm0V4aZsk1kyKbWrxGjau1/OOj15KoxiJLL8hGDstvUevrZPfI5W/BJtUn8a3z4XWqd92zig+mw37SX+k18XU1B8lxVPvN1NV+dmE63n/pNmJ7XstXcn9ofwrrPvVnD6A9Dvep2swbmM2VnuTdrGP1jR2GeifM0HGb71hheEnSe0E9vBhrWQbdrjZherTehTbLPVnteGatqbpt5L+3Cm+etcS2ham3gYrD3n6A61E3311RgnrlgGvOnamK+tALzTWPTmK9L1Mtnhpn82PfwO/Y9nD4G5XvseZTkrFkHsi//M/x2mJ3nJnN5am5C6WUceLAsHRHH7bLi80zBpyCsbnKNBbfL9w1yGdGtrxCtELhF0CZnfy+jdypriP3kFpyyapqZo5u+lPBRlpZ4x0WG6Y1O8en0yKcj+KSwLhVYRj9P0HcEvaNpWPwKotuWEI1xu5nGCnpXZRoWWsQzPlddt4oqRxknBEaRyFNLvOOiLgQvxeeyHvlcJvjwLpc/oB4K8q/hLX/SvN8IvGTP33CW/CdRXxaU5686GYBytUVczozL2t/7oV+59NTdmwpKb7LwO66SagR7maDvcebrlWrGBe/2i0HNyqkZF3unZlwaXsb5yhz9Ib6aIecZl7qzFxi3viGWzbiMQPpUXT5aPqMffFJYahbG6E03I0GvUrFPMvo/g5Hbc2hGROk7iHdDYbY/2lr+TgisBRWyK96GH0NHpDe6PvrEeVhOKCe+Q/x2mJ3nJr1hVT+UXizvarZNfUiP70+quxox6Fhom+Nhtv0WFb/Gh98xH6yrC4hPv07I5dh5Uz6IlfP9q6Z81G6hHtvg2vetsV3gZefcp7kW4lj/myCO7/PFmR2cCeLQor9RD9EfP2/lNC7TWVCnsbhdqnsSrhDydDuh/K0xzVOdUMa2iU/CLYJZmm+PVeeRV0EXAB7LHgPPGhr9d6lPjjOoNewweR/vD5KNN7HjBxvaMfe9Foh8qBUFy4fy1+MUhz52AcVh+z1BcejLbgI69qctwo6BZ2PnCdlVv6nI4JPqNxWZfJb3yGe54NPPdgt5dvNTK8an02D5V92kcHv5y7PC3x2fTreyfFa7Vbj8uE+IvjCGqjFS1YpMu0K+NaVMakVGrRrfnpAZeQTCiIF9q9GfWcrQ4zhW+lZuc1M3BjTkO/cJnIBeg+Na9I6/dnE1/b1epAsCuxWmS24BvZ8MWeGYfgLHZJ77BM7sEbdKF/9+qUjjOaJiPXpgLRBYPfYil+R6HN7T1rCeHPE4as8F5o/z3hGyqMWV+fCMcchHLZbkLNQ0xYph5xzWHNYc1hzWMcDKGXliO8X7Z9S+qILiUL7UQjimN7pxkY7bt4btzURu+2b47TA7z03atwXEr0ovPbbfC1LtKWLyrHFHxBmW7QWruoPL0vKewR8qjcjTruOI8eHxmbKrflBOOSOuWtlJbQDpp92jfDhz8KpxzbPqrovby99hon8CZg5ePT5TZjVzEIPSAdqQYXCe8MyKxdWpr0+OYWD2juXiVUtl9zibcFX5rPbU1lnlqyqjx6mM1N7TQsjD+/r+Bsro52h2B9Pn7CtT/NiGRiroeb+t0f8izO48J/HlktEKflWz8mdU8Ptl4PcBms1tEY8Qera7JcrusD6z3akZSlX/U+0B2mnKFpl3IbBSe6wt/UjQZWB4w0T/66LMc+2cy9Xo35lZrk7+RJYr6ipnF4Q6q5qyA7VjQ80gsx23BBaWNZdrt7pseFy3fidRrpYeyxXl5HI1+v+YWa7Y7zEclHcyZAVZrqgrLgPVXiN9ziZLljUGteJzHMWxT8Rn5b/RDnLKXOmXy/xPRJlz31/5hdz90XF+zfbZlzPDWw/u3b+rnBoOFFJTuUWovrpwsUgfKG1B7/i4gXKfqQUR41210Yndp9H/V6HylPuNIWeLPRZ3PxYX7J3XFvtubo2n+lLVLNUlPwamGsPVFWIUIn0grEK8i0Fte0dc7gWmvJtSlfUuqloOw+O9C3+XaDlSPZwgZEjNAKM8qRtUU+v0zAdbNDQjbtGM/h8zWzTj3Y8WDXXELZoaQatTi0avThur2e4O0aPuVYuWc5st2rm5V3Z1mFaNrJS9pHpmKf0o+1LHPdRej9QoGPffhOA7Csb8sC2kyjYG1k3qdknUTYfolZ1g3esQRrdeV8oWcOT4qoo9FIibGgGp20PQhnlUfuRUeZk59AGGOd4lbzkjQPTjvL8Iu0ALKA7T4UyFYQei69EeFyh7xPzkzMqo1b3cuppapeOzBGrfN4/8UN+4R0e1JwU9L8jMm9oDhXsGsXxOADur+oZ41QzKVRWYJyVsV+UhZbvd2mqjV/bJexKP1g6Lo73vFvPMgfuAqIfcfbcpv6N8n7J5tKVv0V5X9BsXE0/Vhcd3bPOY3ugUn06PfDqCTwrrYoGVaqtUG+p4rNJEPJXotiVEY9yC/vH7U+mdqu4YVDEVFXKHkFdMBfFXWLg1cAvQ8EVm2IQ9h7DqLspgeh7ymCzXlvV0VPCv4b4et+qojoUYdsPjO4+jfi206J1ybeq4lTpKlHOE8nffft2Cj3/wkiNHAHO38Bq96tI9R9D3uLX9jaqbxMcksYy5e5V7hLLh0a835ugP8TuCno9Q1t1OjXFbGmLZEUrUFy+w9tvH8AL1VtHNOtqy2GzkjQMgy5FLqhLdz25DOP5AkFrEUb6b81XXdxeZfC7pkc8lgk9qwwr/Gh9+x3yUzN2OFty7YDoN1rWqowW3lr+80HcqXH5zf4mppt2qbq4ogp5JZ9/BC5FM066Qbz/YJx8t4DxjPpXMI8AjEEYMfLTA6A9TP6Chf5dHC3g40ocjxdmz/8fqSHG9owU84YBaQVR8V4SZuce4bpP8V9HfTY4WNOyxvNSs4qUikgfFqBs1KMbS5KAGqdjDqXO0AMuDB6S4drYBeHO5jgo+Jv+QoOfPcKjDzKb7bvxUj4svT1Hp4t/XiDSp3n9OzYyB18najljqmEKPEzbZnwPirZcN60ly6yXmj/OuJvfVdjHuldW9NhKxFjliLXHEGnPCimHnHNYc1hyWC5baZsQHy7E94E+tou/imZe6I0pM30rwuahHPhcJPuMiXdO2r5OQWS3Csd7qXhaD6XkhAeXDEd6HFmieVVvAeYRn9EthhPf/LZgpsxrhxaBG01gOIejRfo+LjeNqsRH1yn1/tSCC9LeVv6ntbsoWcsvo41RGqa2xKA/vF/vfcBHJX9EoHG0753O7ih/Xw9wt4Eb/tzAKT20Bn1fBr2pWYkMFv8+IBcw+bgFfpOwO/UzOllLlz1L+Qu1n64TZvoe3lFaNRbjslb5ztpSq/Ym8pfSLwh64LWLbqJJP6c15S+lohRgLRfpAaQt6t7ACy3Di3zjJkbOlVN27wi7ifwiVp4oshrktpd93W0qvqhCjEOkDYRXiXQzdtpRyjU2pWKmq6WGEoVImtaVUeVjVwzJ61RNQaw6pLbWq11PV41CHJGLgFs3o25DXo3D4RbZoqCPOV+7MidF32xbEVS21pUuNbHKrYe6WUu6pddtKU3cLH9tX7ha+VK/aaQvf+LHewme6ydnCh/nnrXiqF5VrCzh6+lDF2hnioi1UrYOjD0Ad8rY8oz9d+ADDHO2Stxx/h90cvs4Ouxjs79Q6vbJHo+vRHseUPWL+c0Z5qSu5u9VV9j/q8K/qInA3spvdpLbj4drlvTTiQz7PJp51r8R+tpBf8en0yKcj+KSwni2wUvW8z9vxTMTlRLctIRrjFvSP3y+nd6qaY1DFNFwhdwh5xaTMWfEpeuRTZPK5oEc+Fwg+s7a4lA89LqO/Qk1IWT57XOh9BerLghpNGf644Mc3A2Jczja+L3eu/9B9X3/rr6fcbqpLqNzuBYLedMU7eCdDVvjR1EkstY1vnOKweTEZ1Da+houfP5qjP8TvCHrexpdbFqk7fepi2TY+ddP70fIZvI3vDuhC8da5oyWLbVW5+xjKorpN7Isa3kQ6nuuL2N809KvJm0iVXnr0tWO59ZMXARaIOMOytmYkpOs6t02HywfuisbAi4m5p4+if9s/MVP2ftysr+yxarviYxMz88K3AnNaXigx+r+DxawfSUxpcfmwbcZfXDRlH2npcbui+oYiL7a9EnwCb1dsU54xn8pnjAEP5htD1be2f4r6Ow3ridyuyENH9R11zm8IWuepRVKj6zEPl5pdXioiLQ6/psXbfJ8Pcbyh6wUQx8crXghx8ynucohbRHHrII6nfjHwNDDqKNre72ecKlOb8i6jOKxHpgs1Tfo8eMY4k5Xfcdlj+tSW7naPfNqCj5ouRn/Zx+M72aso/JWzec34HWlrU3cXPSlY+avGGTxFwuMMe64qn+cJPnXl6sMHDs8iuvUVohUCt6B//P4selc19Le/lelXrbqEkGf6aq/H0api3fZR/NaE5ll1xRg2jUj/29A9eC882+rX/PCDp9scncVwV/nLOvuDxKz0kZW6CsycE2KqyTd61QXn04cxqJnq8QzeqEuuzwtqytptxYs/cqIOwufKuvkoyzosZO2xaVtqdX6piLS44wGbu0knQBx3k5ZB3BKKOxHiuMt2EsRxE/cMiONhDX5khqfgVkAc+7uTIa5FcadA3HHwzEF19axMYro3rZrGZTp8rvI3SJd7KctvVQznEBeHc1VTULmXshj95xK+yvtiC57qUvVZTffgtIFhM+b3+4puavWH9yarlfBcu0mtoOEUAk8vqEuRlJ3b+0WA1SKM+GwXvQ0T/TcS9rhYyJDy2UsEPd5faPJMkAyYdkKks3JT9mh0/bi0CvPD9ohtQkvQs26OF/RLiSaGDtGjnlLnZ5S/Wwiy7x2bSYe+tqj4NVn5XWqqfifJM+HIB7F2EB8c7mK/fKwzjcs64V1Z8Xld+czT9qd3ptNNlM9qp8wEpbe4RWWaaGevWl2dnqen1Kr/RJhtBzz1pvKJ9FdX5HMZyPnqUs4+7uzpqHqHvo/rnfIxSM/1LlVPUSedMLtO8hSsmt5Hm2SfbDqq+hQBjwGNfjWUAe9NxvwtJNlHa8qu2pNuO4+eRRcvYRvD5wJVG6bKSl3Ut7ACS43jsN5yubeCbg+Z3mxiOKT98zDRPxvK6rWrNWaokGGsQuaRCvolJIPRXyDsJeUH0P4XE6bRXwyYfKtGN8wrKjCfC5jc11D1FC96rNuecn8C9Xg8xaHs3C4uBf5M+2Lij3Fo58w3JORVU5Ipebm9sbjN0F5dWT6PEl5NX91KldVzhby5ZTWWyB9jWbrhMNseU3UE9bG+ozHn1cS8VrTpqq9yE+BvruiPxMD9kRjYL6PPwHo4Rn0SNdbhPsl2UR9VW4/zKYZjcfn2U3y27tm4brphn9DLxbAnUlxqKdarLZ03NhN3IoEbf88kObr18Wy5i/3wroQfVjpM6VyNEVGvPM+A5bGY4pTNHm17xPyzPabyGkL98TDbo2o/lD3m3L+Qa48TkNdvlROYagxuPJWPrtvnLujZfPxIBT37fKN/eaLfc4KQITV3sUzQn0A0mH9sl5YFzRvrJepkA+XH6H800x87zXnIEzaoN7b/lI5iYJ2eJOhRV6aTDtGjfpWvPoHikC/bmaqzuXXD0kY9fHT+TNx2Ji77VbQJXAtjX230b0z4apW3lK/u5o/4ttLc+bmUr+6nrQ7q/JyyR2VfuJ3qfWRfqu+TOt2V2/dRbS37dkzH6351x/SYfmGCT7tHPm3BR80nFRW/xoffMR8ls6ovnB9VPosy88Nrh4sc86NkVnPEM/Y60BgG/WRLpOX2zuj/C4zJ3kvjFxz/st3k2i7PiS4CHSifvTlM5z+Emfoz3B792Dzlx9CP58x3In3dvhf7KvRxvB9B7W1A28O202hCcPX78+rOD6f8YAw5bSLWCV4LTM0do72x71W6RNtL9UNwrfn187vLP5HIbzf74PUHbOeXUpwaryhbMLp+9AEwP2wLqTY9BtaNGjNgO8+2gOODxRSH5c/9CNVvU/6Syxj9K5bLuvKZ5wA/VXO+NWU33fpHPJZXc3ipceXR7jsOit3wvC/6nrp2wz4E/Tm20dZ+K383RM+qL4n0rQoc/gBXQe/nw3tM9wLKM/eRGPuFRG/5HKmgNzzui3wtMZewuIsMl5MMS7rIwGsuRv8tIUNK/zGk+oSjYXZdrFFvhrENssB9SsRvB20fkyErFKw/46fsIAauy6o+YRy3ycoHqnqusApHLD4q0rC8an9kiMcVG4F+C8VdC3E7AINDi/7G/ES7fsPqaVymY1mxvDYAPtvYYpF2scA+VvVhcTN+yfqgxgB16wPPIz/d68Niihu0+oDlZXIrHcUwGfJCTn3Bsqmh/1W59cXwveqLsj1VX3pcD5+M/ml+mO2rzoVn1B3yWUIy9Fp+ao7rWJXfwmb8kuWnxvCe5Yd1q075qbk/nkepO/eH6Y/W3B+fCcCxIM79PXfhdBrUg1qDjoHn/oz+moXT6S4rn5vO7/Vxvq51rNeIucxy559y1ohz96njGvGuivmnAnDXibRct5F+iZDD6HltmGl4b47RX1sagDrGrmwW5VpHmEZ/HWDyfIqaM0jN03abM0jNtZ1AcWotStUJo+uxTqw61uvGbPe4bszrv1y/YtggsFKyLuxBVi5HLKuTCAv3oam5WbZLo79T2KUqf9N5P8o/NZ+mdJqaT+umUx7T5O4b4PFKt7lz9onq3AW2iaovULUGhTxTfQHl0/kKlgNQ/rxXF323WnfYUIH5UMLXqTykbjPstkfM5FHt/+JEOiyrUcFr0h6+mw6Gh+My5lU1Z/fDoKcLV2pZCpanS+jjnN5kQXghDNacXo9jlpXYp0c7wj692luG5aXGVNgHfjX1gVUdw37q+eUz17E3QB/4tRWYIdRfL0R53t+eievdP02tzefsGUrtwc9tF3nvlNH/HNTN1Fkmn3Wm4qvHep2J20VcZ+J+jrKvVD8c11VUGfA5BKN/M5RB6iwT7wUcryn7QiG7mkfGusH1WK3RjwrcVL1HuW2/Ntf7X0+0rd3O/dbd98Xr+blj69QZcKex9aJjPbY2+XPG1ngGgOdksI+GezV+iXwvjjtS/U2jt/nnqrEv1zmj/4AY+6r+5AbKB853m81Ze3wtyT4ZskL29VCG3yZZavI70t+4lvhx/vAapvwvt7InQq0gKr7jGoxxLXrH39K4lv5u8uXWzfR+MmSF68wqrhORFoe350xQ3FaIw9LkoFZITOa6X27F8uAVm00QtxV4c7leK/iY/EOCfhNhXSvSme678WuJdBOEkWp9Ngje3Pr8JXiHr62u1sOGUK0H+7st5GR9W3wMPdrkDbnexPDbYXbZN/Emm4kf56+ZN0FLQS7bCdVokBbDdpAM6fkjUlx6YyIdB9PYMMn8JRi7/B3Nf2C++PymsnZ8x/MfmN7oFJ/FPfJZLPiocSDfO7E0EYdzVsdT3BpIt43iToM4vk/jdMDk8eraBOZ6gRnL7nWLpvHivxuATlm64VgZbAd5MC3+PY9oY7DrwYc57aLpNP+D7AprMdvVpi5yp+xqU6jms7hHPosFn9QeAovbLPKqWmQu5y0Qx7azVeTL4rYlMK8XmLF8XrFoJh2Xfwzm8W+E9zU88PZcj2/4bZKlqce/kfhx/ni+akczftcXlB75IabJY7reKeIMy86bj1RgWdphol9QlmeH6EKYfZX3TiEvvjP9RDsZJTtB3RYVv4bL77h+Yd6tfIwP+hucv1tc4fOwJ4V+zXqe7Kt+4fjpdMeXmMovctmpetI0/zeIPE6E2brh+XZl3zcm+CxK5Kdf5cnjbPSzWJ6rqDx3QBz76Ph8Rvk8TPQ/DuW5hspT1UWlZ26X6ur5eMGn33rm9mWnIx/E4k8R3UxYrGcrJ9PzTRB3M6W7BeKQDkdd+EmSWwRvhW8Y3WzwokU6b1U2aLyGif5usMFLGtrgTopD343tIsqBekD6M4LO10gFfVW+XljmRe2vxz6FKgv2v0b/IsDkeVRlW9ge8FyhsoebRb6UTm8J3XmjntdX8B4JaVscJvprhE65XcD0qh49g2S5qYvsXL8xvdGNi3S9+hElc7c6uaVmnTynfGbb3Qx18nqqkykbQZl5HFFXz4sFn37rmccItzjyQSxuF24jLNazlZPp+VaIu43S3Q5xSIftAn7C5HbBW+HntgsvW6TzVmWDxmuY6C8CG7yHbFC1K8oGb6E41Cm3C9384TlEb3KPhHR7O0z0+xLtgqqv6Gu5XTD6A4l2wfhivlLtgrLFW0W+lE5vI6ztAgv1zO2C0inmfzvl3+hfntkuWHo1H8E+BucjeK7iOojjPiuuEKTmI3huBH0Cy3I9xKGN8HzEwkR+cN8Hz/fhvN1milsDcddR3GkQx6sPOG+3leLWQlzVvB3mG+ft+G6vny7f97huJz+dlJoXLSp+Q8hrD3Dtme/Rv9aRD2JdRXw2OfLZlMjPdYKPlRfWl36ssxp+O8yuu03mybYQP85fs5UR9DasFUTFd0WYmXuM6+c6q/HdCnFKEzxzjnnaWpEOdRHEuyFBv4Wwtoh0JnsrkR4xMB1bTEHvq9YjDWOY6N8OrdU3V0/TV/FCfXCLabJX7ZhgGYz+HSADnxbYAmlUvq6rwPx9WMl41yKNGQSmytdWyhfLsIVkMPp3i55Ai2hYHvUu/o1rvVsr5FPlxLJiK1eVHy4no39/opw2CxmwTq7vIgPTbK2Q4T8JGYR3u2LvvkdK7xYo4DdM2BspzfO67WaBUxVMG9EKzSLVLoPrRLrN9HdbyBRzbn2pI58xu2/XwV0VeWfPPb+C51DQgfujli6G0dBTm5bdhhp+O2jLmwxZoWAvZ/w4f3y+e4uQpSPisHzZjlJ8YpnaXriyTLce3Lu/qkhzG9dCiMXpA2EV4l0MVtS4zFJnI4lairHA0+2YJ4vD5TruRuLUIDo1DpxvzE90Lv9S42g46pSHYLlDNx6eoSnx8Akd/s0Uh0O3WygOh242XFVLZnylqho6q2F7R6TfnuBzeo98Thd81PIj223D5elsF2X47dBTPTniotS2EKUXVXcsrVp64k1q1pTcVramsdn6Ag3rccss67Xh0fOLc/Vq+G2Spale1XZvdQ2XmrbgK6JxK9LLgI7jWuLdUALrgCPWw45Y+x2x7nXEmnLE8syjZzl65vEeRyzPPD7oiHXQEWufI9YeR6zDjlh7HbE8bcKzPk45YnnahKe+7nfEesgRy1P39zlieer+kCOWp74OOmLtdsTy1Neg+kJPfXn6HE/7GtQ+k6dNeLbbXrqPz0ucsGLwtHtP3T/giOVp95559PQTnn0AT3096oj1WPmrjlJvJz51P22B6RdmYKn5g1Qe1TzOWMk/hiPT+nccunvD3rsDBV6FuLJCxIuIbn2FaIXALegfv7+I3rUELWLHaaWfKJcz+nh65fyC8ELQ00rH6vQKT2dj2o6IuxCeMQ757BB8OiLugCPWg45YBx2x9jli7XHEOuyItdcRy9Mm9jtiTTliedqEp77ud8Ty1Nd9jlie+nrYEcvTVu91xHo6lOMhRyxPfXm2Q7sdsTz1NajtkKe+PP29p315+hzP+uhpE559Ji/dx+clTlgxeNq9p+4fcMTytHvPPHr6iUHtfz3qiMXTJDiu5mmSuien1Yn7FJYaD6fy2OdpEhPxPKJbXyFaIXAL+sfvz6N33aZJeFfOR8tdOT3uvpOHS3iXFk4H8XbjujN1mH5pgs+yHvmoi7/HRTrLd496HEf9oZz4DvHbYXaem0wvqV1ySi897nYbK8LsqtoSmLzzLuVWrP7g1nPEsrR8OcTnStvnXWwx8OUoua4rTkN+usRN7RrMKWfEVS4xxx6b8kGsbeWv1S/ULdfjVLkqPpj+hgosO34SAx7A3Eb0WM5B8N4B8Uj/lbK84g7dj5z61DPvmA1h5iHgry5Oy4ppUVa+cGYZHAL+eomp9GzlruyAd2MuFXwVJvvGumW3TMiQwsLyWkP0VhYjFfSGx2X3r1B2fNgYy0vZzw0VMqD9GEYMVfYztGRahlz7GV6SlpXtZw3xNvp/WTqd7rgScyLM1nHKftZQHNqP6Ui1rbzTum7biulTbfgmitskZC8oDmXYlJBhjeBjbRzaX4027kZ1uY8FtTxzOsVh27OW4vDwP1+KjQfVuW3AQ+Z8ABoPv6M+OLTob9RRtP3fpw+VBIHFB3NRF6kD5lb2eLAaMTDOZOV3XPaYfm0FFh4RVHV5mOhPgvq4ZsnMfOGFjaaTHm3tgpz2HfHbJEtNfgX7K+PH+ePlyO1CFuWLzoJnjEM+qdMbGLfXEeshR6x7HLEOOGI94oi1xxHr0IDKda8j1pQj1qOOWHc4Yj3miOWpr/2OWJ718bAjlqfdP+SI5VmO9zlieZajp//y1NdBR6zdjlie+vKsQ579CU997XPE8rSvOb96bHQfn5c4YcXgafeeun/AEcvT7j3z6Okn7nfE8tSXZ3/1TkcsXtrEMfom4qPGw9sSfDD9top08RnnHHJuIWi4rblVEJ7Jg+8Q3+sWArWuosqn7rZmXhvoZWtHzqUrau4jZRsqj45Lzybi+US3uUK0IYFb0D9+fz69q1p6NmyrRupGpiLMVmNKtWr5aH2Cz5oe+azJ5LOsRz7LMvmc3iOf0zP5bOqRzybBh+/IjAGXP35jieaJSyM4Xcs3pRn9F5ZMp/tNWhrB5QX+3ikeyOH7MfEbP+x68a7QGq4w+wIYw2+H2TbZxPWeRvw4f+iW8u955BqAWkFUfFeE2V6jAMnwHS9yL6R0Te55PB3ilCa4hmCeTq9Ih7oI4t2QoD+NsE4T6Uz2ViI9YmA6tpiC3lfd82gYw0T/h7Dwyfc8Kl6oD94EZbJX3d3HMhj9n4AMfH/gaZBG5Ytr8+n0N9rWzRX8PwVe5sNLNP8g+HP+0KtV3aF4Gslg9B8FHfCdkGtF+lDxjluGtRS3NkFb9UVfVf6cL/TaVXnn8jf6v0qU/zIhQ+rrrCwD00xUyPBJIUNv90eyl+NS4pJYJnCqgmkjWqxZL2uHawfzsb+VBfR6f+TSCp5DQQe+49vSxTAaemors9tmw28HbXmTISsU7D2NH+ePh0WnCVk6Iq6qlnbj0+P9kVWNtnIWnD5Q2kK8iwEPAM8NNbrzeToMNRhLDSFiuKv8Zcf+v8Cx82cn1oMcCnMLyaBmAdTOJKNXM1fbRB5NlzhLsT2DN+qS9XVjTVnV7ArORPEuRJRvR01ZNx9lWdcLWY/2DjHezYU7xHg3F+4Q489Z4A6xjRSHO8TWUBzuELuB4nBH5XaKux3iePg/BXGnUdwdEIf3y3LgdgLLJNbZN62axmU6fK7yN1ifq6Yv2L/Y9MUoYCOfyZAVTrf0Q83S32HpW83Sn2P55K5pDIY9D97XsP87UScWVLfK8NskS01+R7pV84gf54+7VSNClg7FxbAL6DiuJd4NJbCmHLEOOmLtdsQ65Ih12BFrryOWp772OWJ52td+R6wDjlieNrHHCcvSe8n1kCOWp03c44jlaRMPOmJ5+lXPuu1lqzEMql/1tAlP/zXliOVpE576ut8Ry1Nf9zpiedqqp1ye+no6tNue+vLsr3r6aM8+wMOOWJ7+a1BtwtNPDGo75DmG8czjyx2x5vzqD4b/8irHIsyecxsUfQ2qzxnUfuF9jlie9dGzrfUsx0HsrxZh9hz2oNiXp199wBHL008M6jyTp1yeuh9UP+HZJ386jGs92+1HBlQuz3GtZzl61kfPMYznvK8nlqdNcB0qyr9xnRT3UNwE8UhvNxOpdewaa7d3jUOaABiI3XAd+q6C8EKY2dcIhD9ewS+GtogbzpDlvZffsufvJr9xSkHpTRZ+lzM2UWvapqvjSPbJkBXuGAcegXhbHK7Pz6M41IvJEH/XknwjDeXL0R/idwQ93/qXWxaLwkxbQHtXpwe3UxzuP1pKMnTbr8T7zCwPIxX0fIuZ0X+3ZIybyCeIJj4vq+CH8uG71L7DnRVYVbegnVkh+7zjp2XnfXo3CfnUFlejv1nQ454qk0fp5uageWN+sDxvo/wY/ZjIj6p/ZlOjgGNxNerOeOTzduDDesP6001HMbBObxH0qCvTSYfoUb8Wh3sHb6I4rDt8YbDaV4ina3l/l7q9EW/uS93SOEj1+mSwpVS93lrBD+VL1WtMX6dex3Brheyn1qzXW4V8g1Svz8ys12ZTc/W6e71WN43m1mu8tZVvdL0N4gx3E6Q9p3weJvpLEjZ7e5gtK+qc9Tsl6G8HGpNngmTAtBMi3U0UNwVxt5AMd5R/ox5QLt47b/SXgx5evfqpZ2Xrt5fPPdr6OmXrdwAB2/qdENcS9FwWdwn6O4HGdNIhei4X/BuxUKe8H//28u8RQY94w0S/Xvh+kw993x0k+y01Zd8kZFc3fWKdell5ZbzZIPoNvpn3lgRP5Z+tPRmpoDe8YaK/XuiLfSPWA9TTOGEa/Y0Jf2B8MV/qZoiU7m8V+VI6vY3iUHazBVU/ja7H+vkiVT8x/1w/U3mNgXVzu6BH27Xy74TZ/vBmisO6cSvxUW1krv2jDW1ZpHGr2pszyme2r3sT9qXqjbr1JGWPaCfc3qB93UpxmO5GikOdcl9RtbtIz2NAo9+f2d442fNiZc9os2zPt0NcS9DXbftNJ50wuz1gf6hsFsua2xvT0UjQZcCH4Y3+hxLtDfbbbiPZd9aUvUl9u4jaGzxfxe3NzgRPTov+oqq9MTweD/xkor3ZAbLz+Eu1N0b/mppjplR7023MxLdzo15upjiU3WxB1U+j67F+LjnWYx9ub9Af8rgI68ZNxEfNE+TaP9rQKmpveNyEWGgXKXvEejNWPrM9/ruEPabqWQysc2W/aFf8tQK0Rx7zqC/E9HEsvl3ZI+af7TGV1xjq1lUrz06Ybaspe+T2WY230YewPaId4Xh7cWmPNu+P5ylr6HW9ul0/kAwbAHs+xeFtbldR3LWQbhyeObTob8xPLPd/of5IEFjGE+9C2EBxeG8Cn9/FORK+tgrn3DdRHN43wGeJT4M4PkuM5/q3UNx6kcfRMLssapRz9lUchu/1pYMNxI/zZ/Ww3jVZ/L0J1Aqi4rsizLa+AiTDd/OJbiP9XeeaLCu5a+n9ZMgKm7hlwmBxeKqfv3lyHcRhaXJQtdBkftL7njKNy3QsD5YH1wq8aeE64M3lukHwwVsjmH4jYW0Q6Uz33fi1RDr2sCpd/Lst0qhL+7hmbyT8yZAVsu8eNfx26KnFOFKz1T2e6nsxqjWwtB0RNx+eMQ75XCv4KKycC3uUzD1e2DOf/t5QIcaQSB8oLVfVoQosw2EHm3NLWuqWLqP/jBhsqWqE8oyLd2z2DRuY7AbN8Nthtkk0MXt10QXmj81euaGOiKv6hFI3Po6mGsPGCjFUSxkIqxDvME6ZKrYmOaaK/cgqU/1SYh5lVKSP/enL2jN5Y4vaorRK1utIVqYZJVmN/msgq11+1wmzTZVb0etAFq5SW0j2yZAVsquU4bdJlqZVagvx4/w16yNiSbNWEBXfpay4W825gv5u0kdseCPS9WYV14tINZIcpTgczWNpclB9RLwxqE4fEcuDbz5S3zXlWsiWw/IPCfqthLVFpDPdd+PXEulGCaOg9zj7s1nwHib6sROe+o26/drqaj1sDtV6sL/XCDlZ3xYfQu+3dOV6E/623tZm/JLf1lM7W+p5k6r76G4gVKNBWgxozUjPXUYuvdNEOg6msWGSeU1pRdH6ji+fJ8Js611EcqMMKb/cEemNTvFZ3COfxYKPWXIb0vGXMcdEXi0OPdY2isMu306K2yDypebGGPPaBOYmERfL7tdOmEmH3qio+I2hJd6xTtXXOdXeW757tO6XOzA96wTT9ZofJbPqO+HexGefMJ0GW1P02mjHNoc3TPSvPWU63flU3/A+vpSeuS7W1fMiwaffeuY6td2RD2JVfbncsFjPVk6ptQte32c67BGofaOIofANo5sNXnGCzluVDVZ92Xsf2OCLG9og78fFHiS3h6l1DSwDztdIBX1VvjZCj4jHdmpvopKd9+DX/coRpueeaz9sHnl2s5/tZD+4ZqTsB7/UjPQ7wH52kP1gD60f+U/Va+zJ8R2+qt4p/8HpsI4+I0OGG4XMHZEe10U5Xa+2oWTuZht3k22oNWm0Dd6ja/QvAtu4l2xDfWFK6Zn7gHX1vFjw6beeuX+305EPYnH7ptamUc9WTqZnXLe+mdKpfYvcvuHattqnofBz27dHT9B5q7JBPh9p9KeDDf5wYkyTssHU/hvev6H2WqgyKEjukQr6qj1NrxLtW6q+4v4C9uVG/2rA7Pc5kJw9TSneqOf1FbxHgs5/la38dEKn6mwN5od1avQ/m9Cp0lFKp932QvHeG8wznzfYKrBQzzk6xfxvpfwb/S8k+mHbRXrVd+A+pOqHIT0vkag6pvomXMd+ObMPyX0bnFu4ieJwbuF6isM1i6q5hfjMd8Pj3ALPc+A6Dbd/uALKcyBqXyXOLQxTXt9Rvu9xbWHGeDQQltJvUfEbQl57iqvwvGepH/Mmis9WRz6IdUX5q8ZsfE6y7rwBpk+NDcd65DMm+DCW+eRANLx31+J+D+r1u+hjVtcL+cbgHY8JkB/XZ8SyMrP60fCLrtlrb4bfJllq8itSPhfzx8vZ6rxuR8RVlSnyWSr41JVrrOQfQ49ffTURlxPd+grRCoFb0D9+v5zetQQtYh+tqncs+RzfI5/jBZ9+T3UeT3yqhjt/XXNKmY/nGP3xMNz528Rwp6raoa2ltlwYv6ptDOMV8n0WXC9/R3Bc5PnMhMzXAw/mG8OOChn+kboqDV2x7KrwVCh26doUh10PLBuMC2FaF/iObe46wYexqppJe+Yu3T/XbCbRttcn8no9xWHTxHpQfJR7V3pI8TmhRz4nCD6pZr+pL1Ey81AiBvQl/0K+ZDvEqS6NDR+Gib4FvuQ7CV+CMvLfyi9XtZNVvmRbhXxFOdetfInqGm5IyIxDQOYbw44KGUZKGcyX8FLQZMgLypfw0gTW2ZPCTPnrtoWY/mi1hScRn34v+6npfvYvajnqhgQftaTWrT4uXaZ5qvrI7RrSf/jk6XTLls3Mo8dSXVWdCCFvuet6wafKB4WQboOMfiXUcW6DunX9U0O1Kvnwej2kPxHyXIUVxDujx/aPpy9uINrtCVqWG237vPLZfBEvKU+GrLDD7HmHiOQlDZRJHf/EaSQOvEUJZY7l/d4amwRRDzsrMFWdv5loLc9DApeXi7Aes76qZOAyjqGqvr9g2TT+hdTO4HR5jbLdqZakLHD5se44qPIzuWL5/UPD8quaMg1h9jSl8sdRXy85RvriMT+GY6EvjuumL4uz/A6JdLwJ1fjdD/a6nvDGgBfbPx99xeUZTh8D98WMfhO0Fc+iK9iwfV1J/BBb9Y+5nVtZIZfKpzqOz3q7l2yVl1snQ1ZYZ2XMPg2xb2mIXRBeCHra0fDHBT+Tqy3icq5wfeBbUxdMjbz8TwtKb7Lwu5xrV1YKetMVXmtTQ1fPV8fbjTfOi4QwW2cx4BF1k0Fd4XprQ/ly9If4HUHPy4m5ZdERfK5zxNreEMuullXLqexzY+B2SLX9sRxfS/109EOnkKx1/RCmr+OHuK9rtK8mP9Sw/3ih6geyH7q5IXauHzL88VBdrm0Rl+OHdn9n3b4Pbvn4yUWY7W9b4l3OMv4pgr7Hen6u8kPsa9AP3Uxx6IdMBuWHGrYp5+boD/E7gp79UG5ZdASf6xyxtjfEMj+k+uDKD7GP2iHyg36Ixxg/C3221y+biZXT746BjyVsT8TdKDAj7zdX9D/tGnF13Y71TdW2Ivsb36GtYxqeezD6N4Fufp7kw/E/5hPlU311nBf6v5dV0+1I0OX279sUp7ZN55YLtxW/Sm1Fw8Nfct7TsCIvm/Mul2yv3nVw6+6p/bvu2rrrzv27DuKISrWCPJOpDlVxMEl4tXYT/c0Hr3g280aB042nml1fAc/MV628sFdaIWQ+lnxO7pHPyYKP8kpFxa/x4Xepmd6TiQ/OymGNfjfN9KqVF0xrxzF51vMlMNP7vkQPMqXnyTBTlrp6npzj01c+q3rks0rw6Xc9WEX5Qa8/GWbmp+6KFKbfdpT5dKvXf75M88yt10b/v1ZMp/vLjHqdymNqU1pqp8f2LlibCSt39ei6DD6p1aPrMvnk5CfF51jmx7DUqiOWwZaEXHyJ6o1dsNgHqRUNZYMsc93ZCUw/luBzQ498bsjkc7Tyc32PfK7P5DPZI59JwUeNMHptP5TM3fztt8nfqsOtmHZD+cuHQL8A/vZ/k7/F2a0fdD3vcOSDWLntZ/vEadz4Tx2mSZWn0f85lOd4iZkqT6WbGxP54fvXVFmrw4aFwErtJmE9IL1qU/o4o7ooxw4Qv02y1OR3ZEN56sBgDLhxe2n5XM4CrNt14LzzL7nye1MAj+w7WDW7uhCZgvxMH+hvThdlGyaaMcEjBrafHUTH5W7vGT9Hpm603eKVr7upIp8h5Pk6TD9WgVW1A4gvuzf6U8p6nrsDSB1iS/UHuN4xXUvkYX5FuhcFLR/meX0iz0b/zESeb+iSZ+6/q74j+yama4k8jAa9W413KWLc6jBT9rr2hOmPVtu5mvhUtWnnUZumdvXhrq8rymeegf89aNMupDZN9QX7nf+q3byYryuApmpsMywwY+DdG0b//DLvPa4+yhllXkFpC/lj/l5IZarynipTo/9/oUxflFGmqfqhdqGnfMG2BL0aK6o5plS/0coHVzzyy6f4bI6NIn6bZKlpD0f6G+oQufpIT93+huF+BjKE8nfrb3C6VH+DaavqHvcBbqT33fobSqYq2l76Gzsq8hlCXvuA6Y3O7JOvaZwMWWHSZNkGcpgsaPNVJ1WGwuy6qOhVHwPx2Q/jrjulG17FNPrt0Jc4L7Er7tQK+ULIKwtMf7TaqlOJTz/mvWNIzUc/F54xzvhU+eSOSJ/is6NHPjsEn1xbX1c+d+sT7a7ZfrLNGv3t0H7uofZTnTytuzbG+a+79pKq17n1VPUHnkVYdU+lYfqqftywkD2GqtOSr6F+WcPTkpvV7hWrfz32+Tbn1HHEHxf8TK62iMvZFfaF9mV/9sV3/+JHC0pvsvC7nLmjZwn63vpfYaPaFYY7VmJAG+GPNuGuMJNB7Qpr2F/bmKM/xO8Ier5AqO6lYRi3viGW7eRKfbj8aPukqrkX80/cd3hjYh5C+SZ1yjN1YpR9GueRfU4Mk0GH71IwPNP/cYIX74Q12p+HfF9I37CoWiMcrshP6nRYEap1wzzU6bArw0zZbsiQTc0HIUbVumXEUGuIbLd1T1RuE/IoPmf3yOdswSfVJvGv8eF3qfXIs4lPVb/p16jflFrvis9Xlc+83nUt9JveQf0mTM9rrur2B7W/gHVfdWKb/YnR/ybUKz6xzfPDmM+UneWeEjL69x2FeSbO03CY7VtjeEnQeUI/jdf/V11o3O1UrdGr9Sa0SfbZ6iJCxqqa2865nFLtmUldTslrAy9bPi3DH1Ad6qb7ayowdzxjGvMPa2K+tALzL0+cxvzjRL18ZpjJr+4tIJied/+qS9NGSc6adSD7MirDb4fZeW4yl6fmJpRe1MV6vDaMcTl7RJ4p+BSE1U2useB2GZWJuIzo1leIVgjcgv7x+2X0Tk0HInY080+VVdPMHJdGLyX8DYDREu/YzDG90Sk+nR75dASfFNalAsvo1VfwOoLe0TRMxBVEty0hGuN2M40V9K7KNCy0iGd85vtiuGhYxgmB0U7kqSXepa6B3Jjgc1mPfC4TfHiXy7eph9Lwg48/ad7vWnjJnr/hLPlP5nr+qp3JKJf6PFjOjMva3/uhX7n01N2bCkpvsvA7rpJqBHuZoO9x5uuVasYF74yKQc3KqRkXk0HNuDS84vGVOfpDfDVDzjMudWcv1N1hdbFsxkV9QPRY+ox+8Elhpe7aMt2MBL1KxT7J6IfLy5vUVz2VvoN4NxRm+yO+9hmxFlTIrngbfgwdkd7o+ugT59X1ie0wO89NesOqfii98P10mJZ3H8fAI766qxGDjoW2yddlW7z6NT78jvlgXV1AfPp1QifHzpvyQSze+duPOw9jsBmIHtvgG9RMnwW1GsR2oc5Vq7uwWP84i8H3RGKbiTNBHFr0N/cDnrdyGpfpLKjdgNwu1T3honZRdbsL77yTNM+qu/Cq7oVbB7M0F55UnUdeBVWzhpjHqlnD55Y8+jlr+INk403s+MGGdsx9L7UKok4JWD6Uv+Yry9W9WewXEV/5Mt5drfozWHY8G7tRyK76Te0MPql+UzuTz/Ie+SwXfPrZbiHPbn5qO/kpXkHltLeXvzwr/GzwUzvIT6GfQxn575x+vfHLvUPX6G+Ffj2vyKhV49sTMiOPQBgxsG81+jvJtzYcx0rfym2uutu2R77Zs+CG3yZZavI70u/vtgKPU4r5HzCu2tdYECq+K8Jsj1+AZPiOvfvV9Pd6kS4I7Bjf463LN3KriKFuq8g3wmBQLR/uS6jzOXQsD75pBlvFncCby/V6wcfkVzc+8lkZdduw6b4bPzXrwCNulS7+/VKRxnNExXr0wOrDfrcluR7H8Nuhp3pyxOOovU9qz4WqO1XnLtEnFBSHfNRefYW1wQkrhp1zWHNYc1hzWMcAK2fkie0U759BP8jnzOouhGP61IL72T3yOVvwGRfpmrbJnYTMavaA9VZ3z6E6J9ttL+B7T9I8q+5KuL385RmrSRh5/s5JM2VWI88Y1Cgfy8EwOO0oyGBxNfoXE0/2gWH2h/WKK6Dd+iHx2fYN8n5uzLuyhdwy+kMqI7V3MbVf88h+KCijP6bZATW7yvxCF35cD0cq6Hm/ptF/WKz6Kfl4zGjpq2Z1zyifmd9Hgd8HaDYQ7c5492h3S5TdoZ9hu1MzXMqfpfwF1i22RbRhXulVewFTe3Qt/UjQZWB4w0T/SVHmuXbO5Wr0n84sV9NlP8oVdcXlqlbR1VnHlB2oFX81A8nltF5gqT25uXXZ6LlufT5RrvyFOJaTy9Xov5hZrng213AsrtdyRV1xuar+h9qPmbIDbB9MJ2rFYBPFqZt4U/4b7SCnzFP77Y3+W6LMue/IfqFb+xIDziwuKZ/LmcWtB/fu31VOLQYKqanA+HfV1WmLRfpAaQt6t5jilPtMTagb76qNMuw+jf5fExtllPuNIWeLNsrXj8lpw/faot3NrfFUUaqapYYyx8BUY7i6QoxCpA+EVYh3Maht0+rGohzvplSl9n4hPd+6dmTtr+ylqpaj2xpmzg0kau1S5Z9vq8R011XwwRYNzYhbNKM/HvKaatGcRj6yRUMdcYumZhZSp4rViR81W9ohetS9atGqTjohH9WLYVeHadXIqtvtpjmnqFFWti91577aK5AaBeP+jRg8R8GYH7aFVNnGUHVTDdJjeXOvFfcr8MwT1iW+mUKNenJtAWc73luxBo+4qRFQt29o86jc6C8QPsAwt3fJW84IUJ0gVrdB8GlYTIf7JQw7EF2P9rjAc1Ymhrp1lf0P2hnvRce2oOq7rKhv3OOhfAH32OvO/Cmb5j1sLwY7q7rZsGoG5aoKzGsSttutXua01anbltE+eU/b0Vqh5z1t6sYmtW+N9x/h3kzeQ1L1vTEO3AdEPeTu20z5HeX7lM2jLZ1HNo8+82Liqbrw+I5tHtPz3jXk0+mRT0fwSWFdLLCMXvWh+3wsz0Q8lei2JURj3IL+8ftT6V1L0GJQxdSukDuEvGJSk1KMhVvLtgANX5KE3Y3nEFbdRSZMz0Mek+uHSzc6KvjXcF+Pp44VGHbD4x+PF4QXgh7ZV22tRLnUUZScI3i/+/brFnz8g5ccOUKWuwXU6FWX7jmCvset0W9U3SQ+ZofdJO5e5R7Ba3h06I05+kN8dSSDj+DV3Y6LcVsaYtkRPJwY5QXjfvsYHtK/QnSzjrYs1g159QDIYl2Q1ye6n90mzvkDJSh7aoMA56uu725n8rmkRz6XCD793ohwCfHB7h0uPr/pGdNpsK5VbU23T3fyQt9WuDzl35WYatqNN9RxW4jtdQzsO3ghkmm2Vcj3K2CfvDWd84z5VDJfCzwCYcTAW9ON/m3UD2jo3+XWdB6O9OFIavbs/7E6klpvazoviaNWEBXfFWFm7jGu2yT/VfR3k63pDXssN/NAFIMaiPLAF2sDliYHNUjFHk6drelYHvwheBzd3Aq8uVyvE3xM/iFBv42w1GFY0303fqrHxZdvqHTx72tEmlTvP6dmxsDrZNscsdQ29x4nbLI/J8PXrTasJ0c8TmqiNQbOu7r6VW0X45Fr06tE4/MOR6ybHLGud8KKYecc1hzWHJYLVs7BZGwPeDFJbREqKA7lS40oMX1qcveiHvlcJPiMi3RN275OQma1CMd6q3vZCKbnhYSq7cXfeIbmWbUFnEd4Rn8ljPD+5zNmyqxGeDGo0TSWg2Fw2h4XG8fVYiPqlRcb1YII0t9W/qa2uylbyC2j1vKZ8qS2xqI8vF/sHCijEdr8oz6VwPxCF35cD3O3gBv9WClTty3gGyv4Vc1KVM28d4DfUdgCvkjZHfqZnC2lyp+l/IXaz6YuJ9pEcahj7pfW3R6utpSq/Ym8pXS5sAdui9g2quRTenPeUnpdhRgLRfpAaQt6t7ACy3DiO5zkyNlSqva+sYtYLVSeKrIY5raUft9tKb2qQoxCpA+EVYh3MXTbUsqtSkrFSlVNDyOcL0w65WFTH8FTPQG15pDaUqt6PRsr+KhDEiHMbtGM/rmZLZpTT0q2aKgjbtFyZ06Mvtu2IK5qqS1damSTWw1zt5RyT63bVpq6W/jYvnK38KV61U5b+MaP9RY+3lKa2sKHzRF/oEL1onJtAUdP36hYO0NctIWqdXD0AWjDvC3P6G8QPsAwr+uStxx/h90cvg4Nuxjs79Q6vbJHo+vRHseUPWL+c0Z5qSudu9VV9j9oZ3wdHLYF3I3sZjep7Xi4dvkmWndFPs8mnnWvVH62kF/x6fTIpyP4pLCeLbBS9bzP2/FMxOVEty0hGuMW9I/fL6d3LUGLQRXThgq5Q8grJmXOik+7Rz7tTD4X9MjnAsFn1haXUvE9LqO/Qk1IWdn1uND7ioLwQtCjKb5hVd1yqhbTcrbxfblz/Yfu+/pbfz3ldlNdQvVtnwsEvekKF65r6OpHVdNkvNU2vu0Uh82LyaC28d3cUL4c/SG+useFt/HVvZVX3QlTF8u28ambwo+Wz+BtfD8LXSjeOne0ZLGFmZ8/hrIoPhf1yOciwUd1z4qKX+PD71I3lV9EfKq2u/0KDd/UYgim5Yl2o78Uvo33lsSUSFUXBtttXHTjOmb8cLub+oYby/frYFO83W3GwgPlU8msvvWLMld96/dd1F42bNPkdjceeqjvj3J+Q9A6Ty2yGd3R3oDF20RxAxZvCMKy4+35t0PcOMVNQRzf/XkHxPHUIQaeRkQdRdv7/YxTSWpTF2/4wrbDdKGm2Z4HzxhnsvI7LntMn9oSvK1HPtsEHzXdiH3EPh7/yJ6FN/w2yVKT35FZ+NTdN08KVv6qfioPsTGuapsx8nme4FNXLseho4l4FtGtrxCtELgF/eP3Z9G7qqGj/X0sr//rRxXrtg7/18s1z6orqrBpRPql0D34W1iT/1RiTZ5PQaCetpL8au9Kj6fLsl2A4bdJlqYuIHcNvN7u7nF4Zq0gKr5L1QReb+Ol0DFKV2d3t/FV84DrBWZqfYnToS6CeDck6FMN0jjJ3kqkRwxMxxZT0HusbZsFb97l8WXo7H5z9TR9FS/UR7edDEzDMhj9/0h0uHEtT+WLazM38GhbN1fwPw48zjcrvFgQ/Dl/2MKMVMjLa5NG/+3E1gJ1CWioeIc6wLRVfyPtKOUF/1a2yAOuTV3yzuVv9MWK6bxz+Y8LGUyuGNZ3kYFpRitkmCdkEF7zir37HqnYVcB9CfZyXEpcEuMCpyqYNqLFmvWydrh2MB/7W1lAzPnS8vlI1+y+XQerdlRwi9Cu4DkUdBgPWrYQjt0mmfFm/JKbZDB/TTfJVNXSbnx63CRT1WgrZ8HpA6UtxLsYojl/pAT6Qes+M1bV9tS7yl9upE4GB/WBio06QxWYOYfI1ayO0avZatUoqcXs7Rm8UZfs0G+oKWu3TTFH7tIT8t1YU9bNR1nWDULWHmcvas+u8UwYzq7xTBjOrt1EcbdDHM/KTUHcGMXh7BrPkN8JcbxKdxfE8ZB2F8TxhoGXQdwmeOagZvOsTGKdfdOqaVymw+cqf5O7yQb9y19XzNgjLnaQq1ap0FfhbGLV3VcvTPgq77uvTJ5UfVYbwvjSkZbAHPRNX+rewdQmPzwalfNdxVy7SW2ywVUiXkFS+U3duL0DsFR+ry6fh4l+S8IelQ5TPrvb3Y1sc7jR7iaKw3R4V55hB6Lrx72WmB+2R7WbAOlZN7cIelxF502I2K7soDi0QW470N/h/bK/duJMOo+vh6nV/J0kzw2OfBCL21Oshzj1unvFNC7rRPntdeUzr+y/EiZC9pTPqc20vGr5ANSzV62uTs8rkGpjoLoLMuduYaS/uiKfB0HOV5dyqnrntPm3U/duYeVjUncLp+op6qQTZtdJPnKufL36Fi73EUZCun3mPsKPQBnw8SVsP/hrddfVlL3J5uTdpR9R9w/3enWA+hIfY6lxHNZbLvdW0O0h05tN4GSq8s/DRP86KKvXrtaYoUKG6ytkHqmgv4lkMPo3CntJ+QG0/52EafSPAyZfvNUN84oKzJ9L9DVUPU3dE92tPeX+BOrxFopD2bldvBn4M+2LiT/G8V2wLHOVvGrVOSUvtzcW905or95cPve4s7GVKqvnCnlzy+r6RP4YixcqcusI6uPtKzTmvJqY/0G06aqvchPgv7OiPxID90diYL+MPgPr4W7qk6g7kLlP8m5RH1Vbb1i9tfXFZ+sen++mG8+DPidSnBqnebelLzxxJm5q/B+fzyQ5uvXxnl8+sx/+YMIPKx2mdN7t2w18uAzLYyfFKZs92vY4KN8y4L4d2mO/vmVwHvXt1Hc2lI9mebr1uXnHsfn4kQp69vlG/4lEv+dWIUNqnHCboL9VyDxBMmBa5o31EnXCC91G/+lMf+w05yEP4aLe2P5TOoqBdXq7oEdd8QmD2yHuFopD+7+V4tQ8UqrO5tYNSxv10CZf7T0/x77a6L9Uc34u5av7NT+X8tX9tNVBnZ9DW82dn/v2spnyKJ+eOgDebS2A/VdqLQDT8Rpl3W+MYPobEnwme+QzKfj0cw4Seaq+zSTlp+5cCKa/kfJzo2N+lMy8cz6EmXOqnZOn01T5NkzL7Z3Rn3nydLrF5bM6eZG6oCBlu1VzolV7ATZD/kPoR58zzDvWfU7uV2J7yXs71AkXtL3U5RAmYz/0dTTXCU0Hva4TKl3m9kOw7v35su7yp07BdrMP/qjJAK3RHfM+ANtC3TU69pfIR/lLLmP0r1gu68pnPgH63NKnqr6jsoO6p6fVGFDZxs0Up+b5++hDBtpu+BrV1PXJ3eyGfQj6c2yjrf1OzZEVYWY7ifaM9FXrKzcQTkHv58N7TPcCyjP3kRj7hURv+RypoDc87otshrrynMScmMK8nGTY2UUGPtlq9NuEDCn9x5DqE46G2XWxRr0ZLgjP5MF3iN8O2j4mQ1YoWH/GT9lBDFyXVX1SayUpH6jqucIac8Ti08ANy+sm5dss8F5G9r3sx7ZQHM7zoP/m0KK/MT/Rrt9AewqCwOJ+HsqtfM0OkXaHwD5W9WFHM37J+qDGAHXrA6+xP93rA+8pGrT6gOVlcisdxTAZ8kJOfcGyqaH/Vbn1xfC96ouyPVVferxJZzLetTs/zPZV58KzWsfA8vIqPzXHdazKr+FnWZLlp8bwnuWHdatO+am5vxXwjHGYn9TcH6Y/WnN/K4gPjgVx/uHnaO5PjU0xLc/9Gf1bYe7vF2jur+78Xh/n61p19yem9iDEUHf9nNcdcuefuG3v9k341PwTnnV4d8X8UwG460RarttIv1PIYfS8J45peP/akb05MJbig7PKZlGudYRp9L+RmE/p9/411DPvB6vq0xt2CLP7DJY/i6vTLqg6gfnhOqHW4pG+7lo82z2uKfMnbrh+xbBBYKVkvaEHWbkcsax43wDuE1Nzs2yXRv8Hwi5V+ZvO+1H+qfk0pdPUfFo3nfKYJrWnIDWf1m3unH3idiEDtolqfpPXoFT7oPyE8uk8b2R2+TEof96ri/t71DryhgrMjyd8ncpD6sLjbm1c6lzDzkQ6rJejgtekPXw3HQzP7OM4wYvbGaP9W9DThSu1LAXL0yX0cUw2WRBeCD9QY7KVHmMy1c/DPvA/Uh9Y1TH0O+eXz1zHvgh94M9XYIag623qXCHKszRjvdBjPVnV3VQfhtcZ1R58kwH3Z6v+Gu+dMvqvQd1MnWXyWZ8svqraRewXcruY6gPGwGWR6kehTjpEz+VSZV9Y1twPxzUNVQZ8DsHo/1Wsaai7IKpuG86VvWpfAtdFrBtcj7t9dKPq/gU19o3Ptl+b6/1xZRut2lY1V5BqW7vteefzhGodSs1h4CfmDDsQXT/WZY/mXhg+A546F4hnAHieWH2sJ8r+LyfMlEedG8CyrTo/WHVW9Yzymc8PnpSwL+99hXXuGMB0Vvf7OHez+FjP3VjZ5szdoC/kOT91rvPJOyzIvlQ7iWnPKZ+5nVybsJdbEnmMoW4bxTeEY/+Lb+DFdGxLajxoMtwm9IBy3VX+DhP9+aCHVH/BaRy9Ttknjn3ZPm+HuJag57KYEvS3Aw3vo5+COL7hX81voU7Zd6kzHbcKfD7T8XwoA+4vYPvEn07dWVN25XdVfcM69WhZ39Q4n/usOxM8OS22PSMV9FXjz6uFvtifVc0nrSVMo39pwh+oNnUrvKu7b4zXUVAvvG9MjTv6158PLzrW+8a4/UjtN6y7byzX/tGG7ib7x/ac71FL9WM5LfKpsv+qfVu3Juy/27j8NMI0+qmE/Stdpuy/Wx8h1UdKrTHyV2P60D+/6lj3z9n+U/1z9L855yNz7R9taDv1t9T5W0x7evnM528P1LSvXs7fcn8rdf4W0/H8jOq7cjlWtTM8TjH6RzP7W077gJcca3/O6xaqf5vyn6l1UuU/VXvJ/vMnEv0tHJOk7qfIkT23vmGduoLaGxz7cnvT7YOTfIbf6nVVe2N43Da8MdHeqK/+oJ64vTH6x2uO11PtTbfxOs8Hqfsk1Fg+NV53ugtq6bH+ECy3N6kPwarzaWwHyCfX/tGGnl3af296ffjjBchi2C1BOUy/RvO20j5xT4j95ny575Mf+sZfveel59/PX1yKwcoortnE8v8VWr/EK79Nl3hVNn+8oEWyqXQFycD0Q4LecMdF3DDkoamOFnzodzb9/f/cd1o3HTXFX/6BXR974af++6fqlMF4mF0GRcVvDK0Edkdg8R7WEUhfw28MWfrjiP9kVvJQWD7n4UuSbbSZbN/N0RPit0mWmvyOrLeqq88xf7ze2m7G719xvRXrBJYl6g75WHmpNmWU4oYFRkz/sVNn5mOoYT56tMH/PR5m+okYcM34T8mvHQdxrTDbd1k+hon+v54yne6/0Fcd2SfEMB/ijxPx9rfpe0jQ4jP/bbKz3pDeymukIq8jlFej/0voF/EePqNB/aFcQxWYn0j0teaH6ZCqM0Y/JujnA43Joz7LNEbpUHbcl8nvVPkURIsyxHCzkKnq77bAqZJhVOCwn2dM5sn2EAP3j1qCD9YpbLNGBf8a9XieagsCyTNC+cE4zBv2nzlw/wtljhjvhTaY6VgeVZc82257Pw/eM98W0Y4QLffdUcZ5DjJ2BJ8Rwj0uIX9BOMMi3XjQ9U395spbCHlVW9IrH8TC9VXluydDVljOfeEYsM3714w2T/UZuM1rrZxOV5TP3do8i+N+Www45mOfzv0gxIiB513MR+Z+VMnoR8t8YNumfAh+vGw+tVejEJdqR4aJ/gzQ5wLSJ+rL9Knar6o2Zx7RxnBzhQ6OBzkWr6zmxWMvlceIsWylpkMZkI4xmrZrqn/FdTenf8V1FdMpHuyPq9pu3udRFT9f5C2Id0OCfrQiv0HwbnfBPU7gKP/OZ2MKEce+B/Or5hHU+B791r9Sn5s/OYX5mk/5Gk3kqxDpuJ6j7MclZFf6Q//RdA7hJz/33b9+3aMnfblfcxTP/+XDPzV+0bt+s1/47xz7ixf9p18evbVf+B877otf//Af3/3GOnMsZkcjxMuesTzxPfZt+FyA0V9O+9EbzmHIL6WzX0qN/1B+Hi/GsKVC/h3QPlxJ7YMa/6g6WdW+z8uUxeivgfY6dcbG5OpxLnxYzYWj3+T+tPLnqW8HdRu7mk7UnYbMe57AQp1yn8l0NBL0/IHhsT1sgzLgtSrl+y0O885+tyX4qrlK3Aexj+pVw/7zcaqfYmE8VLcv6owm3wExn2TCOCxLtE8OaoxqeY0yP0j1IAgs5R+4vqp5m1R/VNU7wx+0esefq8RyYXvLteGq/qLih3rAvoDZcNWcP9ZpHNMdpDHICMSpOTP2p0b/WvDth8m3o47ZHpSfYFlC0H4oZ65gXKSzclHrDHXmlrB8UU58h/jt0JN/KdjfGj8uI14LaNhPGOY2FvmpclgYtE7VegGPRdV8UmoclvInqv5x3VTzFKoNSY0XjTfOyef0m1TdwrTcTv401K23JPpNVX2jEPQ4g+lTvg9lVbqfT3FqbsGexxJ8lFzjgn4sIRf6ZEzLvLvlIbetcuojyrtRsUy4jii9ID3rcYGgHwcariMLII7P1uS2bfMpTrXx3dq2t1S0UZgP9H88flZ1DNu+ifId41qaGHjMw/S4PoX074C6+xvUv+J+tr37jwm6ouJXyYzy2Lu2oG8JeuM9X9BbHNYl1DHSoL4Qq13B73epTHCuBG2J+WNdDRVyV9UNxmqJd0b/5J0pNO/SdG2/l7mJ/za6+aqh975uZZP9HzyXF0LP+wb+c449In479NQ3KVJtHOaP+0Lzm/H7g1QbqeZZjd9YM34tK6sFAttkQb+lZLG0w0T/cWpjxkWaTpjdxvC5LNX+4LuhY4Sl2jnVlj255kxjf9bxZMgK56v2mutWQ1u4IbduGX479GTrRaqfpnyosiPuL2B57QK6Xsv+8IBi7XHEetAR66Ajlqe+9jpi7XfEut8Ra8oRyzOPBwZUrnscsTzro2c53uuI5VmHHnLE8ixHT1t9xBHL074OOWK93BHL0+4H1ed45vFRR6w7HLEec8Ty1Jdn38TTvga1X+hp94Pal9vtiLXPEcvT7ge1Lzeodu/ZN/Esx6dDmzaofblB9YWefTlPX+hZjp768rRVz/7XnY5Yg9r/us8Ry7Nue9YhT315tkOedWhQde/pvzzn5QZ1bsjTvjz7voPax/TUvVfbEZ/bTlgxWNuRs89GrY22E3wKIXNL8MFzFuPlO95XE8NomK2LGutQ2d9nM/w2yVKTX5EqH7UXwPK+QMii9tBwWaXWKZGPwhp2xOJ9ReqOjtS+IrVfXOlrLEzv3Th08J777jn4yJW77jh094a9dwcKw/T3lRUibie6LRWitQRuQf/4/XZ61xK0iD0RZhfNSIXcAfDwHReTOkai+BQ98ikEn3GRjqt2w60vZ+ZWbcNvh9l5blK1lakqvVje1fbHDsXFcDfQNXG9GPeAI9ZeR6yHHLGmHLHuccQ64Ii13xHrsCPWIUes3Y5YnuXoqS9PW73XEcvTVvc4Yg2qn/Csj566H1RbfdgRy9MmPG3VU18HHbE8fbRnH+ARRyzPtsOzDg2qfT0d/Fc/2iHry+PRJzwC+fXJmTznQVyL0hbAc5jod62aTvetyZm8C+Btzz1ecXd2QXgh6DGU4bdJlpr8joyhhogf54/HUC0hS4fiYngZ0HFcS7xLYR1wxHrYEWu/I9a9jlhTjliPOGLtdsTa54i11xFrUMvR01Y966OnXPc4Yu1xxHrIEcvTJu5zxPK0iUOOWJ768vRfnnIddsTyLEdPuQa17fAsR0/de9Ztzzw+6oh1hyPWY45Ynvoa1Hbbs273o621dTUcj/F1TWrsM5Tgo64uGxfpivJ3lOSz58mQFYYKwjM58R3it8PsPNfgV6T0r/TCa4qYtkNxMfDRXsWnEHwKgZWSy3Fp2kQ8i+jWV4hWCNyC/vH7s+idUgViq9t1RwUvCynVdirSxzCe4KPM3qZh8AYdLEJePq9b/TC9xSk+RY98CsGH9aqmk2K4q/wdJvoHVj31izcUtgQ/xMpxLQ2X7LN34/CSfa+uRS3Zp1yLulGM7SEG/FoXx7XEu5RttRyxnJqC2jffsx7RrrZQHN6wgV9V4tCivzE/Ef8Nq6dxmY5lRRszuVVd5m0xdesyph+qwFI3ScZwE8Qj/ZtWPfXbY5muVWXK9tLwdrm1ufW76mY9Vfd5+9JkSIedVz328V96+9+trVuPjF7djKe29/R4M94Z48AjEG+LU9vALA59sMkQ068l+RreTHhGjv4QX/lH7nrllsWioNuZEPRtRLhLkW15gjAmQ1bI7gYbfptkadpWTRA/zh92NxeXz2V3c8PeqbuumNp34NB9u7j1xv2zrBVExXdFmO2RC5AsJOheTH+vF+mCwI7xVnIL6f1kyAqLzCoWiUiLWwzY4xS3BOKwNDmolslkfvIevhrfa8HyWExxHYhbAry5XCcEH5N/SNB3CGtCpDPdd+PXEul4z/aoSDdpD59/3S/+SOddP/vvJ8/6yDdGrv7pf77ta9fMu+STH3nspD/88e984Yl/wzIHITOX4zjRql+Tnd9xT2bCEWuhwDLd4F1sNWz++FxvZfjt0FMdO+KtFhE/zh/nfbGQpSPi2ActFnwWCz4Ka8gRq+WINeyEFcPOOaw5rDmsOaxjgGVx2N4vpDhsP/n78+if+RxR3ZG3uie+j5PlC3Lb3WM1Wd7jtw/HC0qP/NQEPPdxVJtp7f5IBZalHSb6r6966rdDdDGwXS8U8qp+SbSXr6yaKTuPbdRvCOm+Hi8SYfkcbbvHc3S4afE7qzRPnGXGtLeVvzwz9dDq6XTfXTVTZjWDEYO6sx9tKISZujO6Hu9HX6DuR0e5uBzU/aVIf3v52yF6zLuyBfw2SQ/+Z2lqRSTmZWz1zPwMQ5yyq9vL32Givw3KeKJ8VnaM47Eqv6H4Gb3pf0TQIx5vnF1SyoTfAVLyjVfwQ30ov8b8lgG/1Lef0A+H0Nhuj1d2izO4Od89qfvdYnVwVNk5f3dL+S60g/UVsla1BzhjjvSrRZnn2LkqV6N/Zma5OvkjWa6oq5xyVbPTRq9ms9WKTSfMLktene22ipZTrqrN43I9N1Guqo1SbQi3URdklqvpsh/lirrKKVfV3ueWK69aqu+jpny0+hZGqlwxP+yjjf4FiXJt6ofXDYAfxv5iznfwkJ7LNeW3lR/GMufvpPD8K/Kp66NVu5zy0Ua/UZQ5jwnZL1TJp/QW2yGbEy9XQbYe3Lt/V7kMEiikli2KMHOqHcVYKtKHBBamSWUJF3ZY5cZrJOjpdVa50W8TKmcVsjw5Q+SGVSZ7Ic3wvYbIufu2uDulqplqYricuvFxNNUYXlwhRiHShy5Y9jfuocLi5l59qifAaeM/6y3m9gSM/q5Ei9FtZMYeRc0IYC+WR+dqRmJCpBuv4JPbQzH6PZktmfHuR0uGOuKWLHelx+jVzCKubnEPRa2MpGYWc6t56iveOEqoGikjbmoEpewLy8bKTY1K2b6qZtZC6EtvdcGxtgX+0otavVOzKGwLqolFP8G2oOo/zoxhT9l+c/YgXfrMN5y4/E8fHO/XV8XffdHZz1tw42k/2i/8ecPLf2HyXbdvqPNlMOXrhggXffRQmF2ntpa/OXvUGu5ryt6Dyl9cbfqFtoLwjF+VP+H9kZiW903HwDPfo4KP+prZ0cJSe0G5LBvuocv+eq7ht0NPtlOk9KK+iqquAOOvjeN1A6z/Xq4uGEQsrP9q9r2o+DU+/I75qBmQlC9pygd9wXHE5zhHPuq6CbV/ulc+ai+2mo3ElYXfpv5SG+LUjMKW8neY6D8DKwu/u3omjcn+AaD5k/J5FHiHULsut7luYrA4/Pod2636ejDvPFP2gUN4PteCq+Q3Ax0HHtuhHiK/z506jct0FlCXOWd7cLqBecawA+KR/r9QeTVc6QrcF0GsHyRbaFLeJ62ZxmU6C6qMU2cg+IvYLZGP1NmT1Mq0mpVuURz6pJsIv9uUy/pEni3t/JDnu9j2kf5z4JeeIH+ovvKqfLC9T30pE+VRtzbjnACnq1EPxtSOAQvKnrkeqBuB1Q5nrgc47co+Ecd4PJ7BoOqI6aGOT3yiol0zHlgWMfCYcljIi+1l0zHZT50/vOgNOza+pF9jvn/79WsvesWJp36lydeg585fDNL5C/aGMcydv5hJx/I8Hc5fFPQeW7uW4D1M9ItKDxp1+7XVYUY++awF2t/NJKPahxEq3nE+eGTNfGMYDT15gkW5nsfw20HrezJkhSOeR92/j/lr5nm4n2FcFhKq0SAthoUgWaigUyW6QaTjYOnGKzBj6HH8MJZbqvbO66pD1VdVbavqQ3GfGC2kzhfrkc8c1hzWscLiuYF1ZYsSW6KLyuejdbeGmt/iua95Ig9q3jI1181xqTly3pmFcTie5LnAMYEZZX/jqTPp2Her3xDSc4Ymm+p9YGvFY3D0a7yfoNMFazNhYXresrOwC9YWwsL0vJ64qAsWn2TB9Hy6sSXSqZ4yt3d8+nAyZIXx3PbO8NskS9P2LrXWGwPuxItxS5rxGysoPfJDTO7NLxVxhnV8+fdIBZalHSb6HWU96xBdDOxHlwp58R2uQ2+j+ou6bVp/1Rq7lU+30wS3njozL4sgTvlhPjFi9O8Dvz9Ffh/tz2ScCLq88LnuSTZVB/qtZ/bphSMfjNtGPJXNYZ20cjI9K5u3dMdDHNddtmekRwyFbxjdbHD/qTpvVTv9jdcw0f8i2OChRN+DbRDts6C4gvKCdMo+scxuI3qTe0TQI94w0T8Go3TeM2fpUVco1wbCNPofAcwPrNRyYr7UqDVli8pfK53yltpxgYX54S21SqdqJop1+hNCp2o/Es9kYd/yJorDdZEFFIfrKRMUh2smHYrDNaSFFId9S+4D43oBtwW4toX2Y31LPkHzePm+xzU5ud5X5T9Rn0q/bYpDm0zdRTWf4tQamCqXMYrDNQErI1x/SvmwGLgdNfpfStRL5XdVP8zoTxD06Ot5fyzWxRMoDtNxfT6B+OLzsvJv1APKdWv5O0z0bwU9vLqcmVT7JU2uHvdLjqn9ksuAgPdLnghxLUHPZXGSoD8RaEwnHaJXPlL5W9Qp+0jVBz5B4HMf+DcTPhJ97DKSvagpe+7eXqxT+xN9TG6nlyR4clrkU7W3var/8R8T7bTqV6Nc3E4b/e8l/IHSZaqdVv5jqciX0unxFFc1HjNsxuyxfo6r+on55/qZymsMTX1lJ8yuP6lbj9j+1fxDrv2jDdm4rena8P/1R+e85CvXfemUbmvDVm4N748cwv5FCNNjihBm9qX4LkScU+M98e1mshzJ43zg2SL5EH+Y6P/+1Jk4vMcV38WAZRcD7wfBX+Q7AfIFSpuLNUpYx/WAZXJ1BP1xNbFGE1gjhNUWWGpPaiy7vyzLhvczmL9SJ9+tTloeqm624H1wRv956hc33PMs+8VYfix/KyF/K8yWf0uF/EW5xyzq75+pPeUbADBOXV9vdGrfVUoWo/+qaOdUe2Jy9dieDKv2BG2L2xO190vZotF32/tlOlG3L+ScOEadcn/PdDQi6BGP7eE7if4e2mabZMe88174luCrrvS3OhZpTiztsse7i49TazcW1Pi6oLjc8XWL4tSNMYWQoUV/Y17r7gFV+zVVXeYx36iQVdU7vN0mhMGpd2b7nTC7XNjecm2Y98K2EvzUPADacNX+OqzTOBe6Ys00HupdnT2Ngf2p0V8Avn1l+axuaGJ7UH6CZQlB+6HUmYqcMyI9ngPLPjvE58Aa+pfa58B67CcMcxuL/FQ5LAxap8if+7rKRlL+pEVxyp+o+sd1U83fqTaE62bVPFydflPVuW5Ly+3kc6BubaS6pXxtqtzUGbMc34eyKt3Ppzi1D8GexxJ8lFxqjn4sIRf6ZN7dN0Z/p/KQ21Y59RHnqbYKy4TriNIL0lft20N63HHIdQT3W/D56ty2jW+UUW18t7ZtY0UbhflQtw2peXxs36zt+z8ZTY2O3HsFAA==",
359
- "debug_symbols": "tb3RriS7bf39Luc6FyVKJCW/ShAEjuMEBgw7cJwP+BDk3f8tSuTi7HFr1+7ec+P5+Zwza6kkka1SsVT/+9u///Hf/uc///VPf/mPv/73b7/75//97d/+9qc///lP//mvf/7rH37/9z/99S+Pf/q/v13zf0qpv/2u/tPjz/bb73j+yftP2X/q/rPvP8f6k679Z9l/0v6z7j+3Hm092nq09Wjr0darW69uvbr16tarW69uvbr16tarW69uvbb12tZrW69tvbb12tZrW69tvbb12tbjrcdbj7cebz3eerz1eOvx1uOtx1tPtp5sPdl6svVk68nWk60nW0+2nmw93Xq69XTr6dbTradbTx96Ov/U/Wfff471Z3/olWtCcSCHh2SZc6Y/NIv9x+wgDurQHcaGMZX7hOJADtWhObCDOKhDdxgL6LocpvKYQA7VYSrzBHYQh4cyGXSHsaFcDsWBHKpDc2AHcXDl4srFlWcckU4oDuRQHZoDO4iDOnSHsaG6cnXl6srVlasrV1eurlxdubpydeXmys2Vmys3V26u3Fx5RhjNIZghtqA7jA0zyhYUB3KoDs2BHVyZXZldmV1ZXFlcWVxZXFlcWVxZXFlcWVxZXFldWV1ZXVldWV1ZXVldWV1ZXVldubtyd+Xuyt2Vuyt3V+6u3F25u3J35eHKw5WHKw9XHq48XHm48nDl4cpjK9frcigO5FAdmgM7PJQrTVCH7jA2zBhcUBzIoTo0B3Zw5eLKxZVnDNZHDNYZgwuKw0O5XROqQ3NgB3FQh+4wNswYXFAcXLm6cnXluvNGreKgDt1h543aLofiQA7VoTm4cnPl5sozBludMDbMGFxQHMihOjQHdhAHdXBldmVxZXHlGYOtTagOzYEdxEEdusPYMGNwQXFwZXVldeUZg00niIM6zF/VMmFsmDG4oDiQQ3VoDuwgDurgyt2VhysPVx6uPFx5uPJw5eHKw5WHK4+t3K7LoTiQQ3VoDuwgDurQHVy5uHJx5eLKxZWLKxdXLq5cXLm4cnFlcmVyZXJlcmVyZXJlcmVyZXJlcuXqytWVqytXV66uXF25unJ15erK1ZWbKzdXbq7cXLm5cnPl5srNlZsrN1dmV2ZXZldmV2ZXZldmV2ZXZldmVxZXFlcWVxZXFlcWVxZXFlcWVxZXVldWV1ZXVldWV1ZXVldWV/YYbB6DzWOweQw2i8E6oTo0B3YQB3XoDmODxaBBcXDl4crDlYcrD1cerjxceWxlvi6H4kAO1aE5sIM4qEN3cOXiysWViysXVy6uXFy5uHJx5eLKxZXJlcmVyZXJlcmVyZXJlcmVyZXJlasrV1eurlxdubpydeXqytWVqytXV26u3Fy5uXJz5ebKzZWbKzdXbq7cXJldmV2ZXZldmV2ZXZldmV2ZXZldWVxZXFlcWVxZXFlcWVxZXFlcWVxZXVldWV1ZXVldWV1ZXVldWV1ZXbm7cndlj0H2GGSPQfYYZI9B9hhkj0H2GGSPQfYYZI9B9hhkj0H2GGSPQfYYZI9B9hgUj0HxGBSPQfEYFI9B8RgUj0HxGBSPQbEYlAdYDBoUB3KoDs2BHcRBHbqDK5MrkyuTK5MrkyuTK5MrkyuTK5MrV1eurlxdubqyxaBOYAdxmMpjQncYGywGDYoDOVSH5sAO4uDKzZWbK7MrsyuzK7MrsyuzK7MrsyuzK7MriyuLK4sriyuLK4sriyuLK4sriyurK6srzxiUa0J1aA4PZSkTxEEdHsoyZ92MQYMZgwseyjLHa8bgguowlfsEdhAHdegOY8OMwQXFgRyqgysPVx6uPGNQZ5tnDC4YC3TG4ILiQA7VoTmwgzioQ3dw5RmDShOKAzlUh+bADuKgDt1hbCBXJlcmVyZXJlcmVyZXJlcmVyZXrq5cXbm6cnXl6srVlasrV1eurlxdublyc+Xmys2Vmys3V26u3Fy5uXJzZXZldmV2ZXZldmV2ZXZldmV2ZXZlcWVxZXFlcWVxZXFlcWVxZXFlcWV1ZXVldWV1ZXVldWV1ZXVldWV15e7K3ZW7K3dX7q7cXbm7cnfl7srdlYcrD1cerjxcebjycOXhysOVhyuPrdyvy6E4kEN1aA7sIA5TmSd0h7HBYtCgOJBDdWgO7CAOrlxcubgyuTK5MrkyuTK5MrkyuTK5MrkyuXJ15erK1ZWrK1dXrq5cXbm6cnXl6srNlZsrN1durtxcublyc+Xmys2VmyuzK7MrsyuzK7MrsyuzK7MrsyuzK4sriyuLK4sriyuLK4sriyuLK4srqyurK6srqyurK6srqyurK6srqyt3V+6u3F25u3J35e7K3ZW7K3dX7q48XHm48nDl4crDlYcrD1cerjxceWzlcV0OxYEcqkNzYAdxUIfu4Moeg8NjcHgMDo/B4TE4PAaHx+DwGBweg8NjcHgMDo/B4TE4PAaHx+DwGBweg8NjcHgMDo/B4TE4PAaHx+DwGBweg8NjcHgMDo/B4TE4PAaHx+DwGBweg8NjcHgMDo/B4TE4PAaHx+DwGBweg8NjcHgMDo/B4TE4PAaHx+DwGBweg8NjcHgMDo/B4TE4PAaHx+DwGBweg8NjcHgMDo/B4TE4PAaHx+CwGOwTmgM7iIM6dIexwWLQoDiQgyt3V+6ubDE4JqhDdxgbLAYNigM5VIfmwA6uPFx5uPLYyuW6rqASREE1qAVxkARpUA8KjxIeJTxKeJTwKOFRwqOERwmPEh4lPCg8KDwoPCg8KDwoPCg8KDwoPCg8anjU8KjhUcOjhkcNjxoeNTxqeNTwaOHRwqOFRwuPFh4zYnsxkiANenj0ZjScZthuKkEUVINaEAdJkAaFB4eHhIeEh4SHhIeEh4SHhIeEh4SHhIeGh4aHhoeGh4aHhoeGh4aHhoeGRw+PHh49PHp49PDo4dHDo4dHD48eHiM8RniM8BjhMcJjhMcIjxEeIzyGe5TrCipBFFSDWhAHSZAG9aDwKOFRwqOERwmPEh4lPEp4lPAo4VHCg8KDwoPCg8KDwoPCg8KDwoPCg8KjhkcNjxoeNTxqeNTwqOFRw6OGRw2PFh4tPFp4tPBo4dHCo4VHC4+I8xJxXiLOS8R5iTgvEecl4rxEnJeI8xJxXiLOS8R5iTgvEecl4rxEnJeI8xJxXiLOS8R5iTgvEecl4rxEnJeI8xJxXiLOS8R5iTgvEecl4rxEnJeI8xJxXiLOS8R5iTgvEecl4rxEnJeI8xJxXiLOS8R5iTgvEecl4rxEnJeI8xJxXiLOS8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEOUWcU8Q5RZxTxDlFnFPEeY04rxHnNeK8RpzXiPMacV4jzmvEeY04rxHnNeK8RpxbgVFXoxrUgjhIgjSoBw0ni/NFJSg8KDwoPCzOu5EEaVAPGk4W54tKEAXVoBYUHjU8anjU8Kjh0cKjhUcLjxYeLTxaeLTwaOHRwqOFB4cHhweHB4cHhweHB4cHhweHB4eHhIeEh4SHhIeEh4SHhIeEh4SHhIeGh4aHhoeGh4aHhoeGh4aHhoeGRw+PHh49PHp49PDo4dHDo4dHD48eHiM8RniM8BjhMcJjhMcIjxEeIzyGe1jh0riMShAFPTxGNWpBHCRBGtSDhtOM800liILCo4RHCY8SHiU8SniU8KDwoPCg8KDwoPCg8KDwoPCg8KDwqOFRw6OGRw2PGh41PGp41PCo4VHDo4VHC48WHi08Wni08Gjh0cKjhUcLDw4PDg8ODw4PDg8ODw4PDg8ODw4PCQ8JDwkPCQ8JDwkPCQ8JDwkPCQ8NDw0PDQ8NDw0PDQ8NDw0PDQ8Njx4ePTx6ePTw6OHRw6OHRw+PHh49PEZ4jPAY4THCY4THCI8RHiM8RngM97DiqE0liIJqUAviIAnSoB4UHhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxzhHnHHHOEecccc4R5xxxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxLhHnEnEuEecScS4R5xJxbgVeQ4w0qAeNTVbktakEUVANakEcJEEa1IPCo4RHCY8SHiU8SniU8CjhUcKjhEcJDwoPi/NuREE1qAVxkARpUA8aThbni8KjhkcNjxoeNTxqeNTwqOFRw6OFRwuPFh4tPFp4tPBo4dHCo4VHCw8ODw4PDg8ODw4PDg8ODw4PDg8ODwkPCQ8JDwkPCQ8JDwkPCQ8JDwkPDQ8NDw0PDQ8NDw0PDQ8NDw0PDY8eHj08enj08Ojh0cOjh0cPjx4ePTxGeIzwGOExwmOExwiPER4jPEZ4DPewQrJNJYiCalAL4iAJ0qAeFB4lPEp4WJwPoxrUgjhIgjSoBw0ni/NFJSg8KDwoPCg8KDwoPCg8KDxqeNTwqOFRw6OGRw2PGh41PGp41PBo4dHCo4VHC48WHi08Wni08Gjh0cKDw4PDg8ODw4PDg8ODw4PDg8ODw0PCQ8JDwkPCQ8JDwkPCQ8JDwkPCQ8NDw0PDY8b542GxYQMyUCZWQwV24Ahc784vLEACVmADMhBuHW4dbh1uA24DbgNuA24DbgNuA24DbgNuI9ysjs2xAAlYgQ3IQAEqsAPhVuBW4FbgVuBW4FbgVuBW4FbgVuBGcCO4EdwIbgQ3ghvBjeBGcCO4VbhVuFW4VbhVuFW4VbhVuFW4Vbg1uDW4Nbg1uDW4Nbg1uDW4Nbg1uDHcGG4MN4Ybw43hxnBjuDHcGG4CN4GbwE3gJnATuAncBG4CN4Gbwk3hpnBTuCncFG7IJQO5ZCCXDOSSgVwykEsGcslALhnIJQO5ZCCXDOSSgVwykEsGcslALhnIJQO5ZCCXDOSSgVwykEsGcsmIXEJX5BK6IpfQFbmErsgldEUuoStyCV2RS+iKXEJX5BK6LrgVuBW4FbgVuBW4FbgVuBW4FbgVuBHcCG4EN4IbwY3gRnAjuBHcCG4VbhVuFW4VbhVuFW4VbhVuFW4Vbg1uDW4Nbg1uDW4Nbg1uDW4Nbg1uDDeGG8ON4cZwY7gx3BhuDDeGm8BN4CZwE7gJ3ARuAjeBm8BN4KZwU7gp3BRuCjeFm8JN4aZwU7h1uHW4dbh1uHW4dbh1uHW4dbh1uA24DbgNuA24DbgNuA24DbgNuCGXFOSSglxSkEsKcklBLinIJQW5pCCXFOSSglxSkEsKcklBLinIJQW5pCCXFOSSglxSkEsKcklBLinIJQW5pCCXFOSSglxSkEsKcklBLinIJQW5pCCXFOSSglxSkEsKcklBLinIJQW5pCCXFOSSglxSkEsKcklBLikrl4ihABXYgSNw5ZKFBUjACmxAuK1cQoYK7MARuHLJwgIkYAU2IAPhJnATuAncFG4KN4Wbwk3hpnBTuCncFG4Ktw63DrcOtw63DrcOtw63DrcOtw63AbcBtwG3AbcBtwG3AbcBtwG3EW7rHLGNBUjACmxABgpQgR1obmPiyiULC5CAFdiADBSgAjsQbgQ3gpvlktIMK7ABpxtdhgLUQAscNpp/i4qh/ftq2IEj0CJkYwESsAIbkIEChJvATeCmcFO4KdwUbgo3hZvCTeGmcFO4dbh1uHW4dbh1uHW4dbh1uHW4dbgNuA24DbgNuA24DbgNuA24DbiNcLOCPMcCJGAFNiADBajADoSbRQiJYQESsAIbkIHmtg7DU2AHjkCLkI0FSMAKbEAGwm1FSDfsQHObkWfleo4FSMAKbEAGTrd5oBlZ1Z5jB063OsPYCvccC3C61XUeYAU2IAMFqEBzs2uzX9uF9mu7sQAJWIENyEABKhBulkuq9YPlko0FaLpsOHXnSWtkhXqPRYbhVGj2H1h+2FiABKzABjRdm2eWHzYqsANHoOWHjQVIwApsQLhZfmjrjEYFTje2y7T8sNDyw8YCJGAFTrd5zhJZDZ+jABXYgcPRCvkcC5CAFdiA5kaGAjS3atiBI9Dyw0ZzW2dTErACG5CBAjS3btiBI9Dyw8YCJGAFNiADBQg3yw/zvBCyKr+Nlh82mhsbErACO3AqzBNGyAr2iljvWHTPY0LISvYcGThbJtYci+6NHTh11XQtujfOlqkNlkX3xgqcbtoMGShABXbgCLQ1gdq1WRyrtdd+/XWdLqrADhyBFt1qPWnRvZGAFdiA063bVVh0b1TgdOs2fy26F1p0byxAAlbgdOs2QhbdGwU4AtdZudYl67TchaZgY7FOzF0oQGuv9dk6N3fhcOR1dm43LEBzG4YVON1GMZxugwyn26wbIKvMeyyzDTtwBFrEbixAAlZgA5qbtcwidlhz7HTd6zLsE605dp6u3SxaSZ5jBTYgAwWogXaE7tUMCViBDchAAWqgndhpd5NWUPe4QzBkoAAVaNdmF2/n5S60E3M3FiABK7ABGShABcKN4SZwE7gJ3ARuAjeBm8BN4CZwE7gp3BRuCjeFm8LNDtK1+xorqdtoh+luLEACVmADMlCACoRbh9uA24DbgNuA24DbgNuA24DbgNsIN6uzcyxAAlZguFkh3OPm0XC6FTKcbvOkbrK6N7ITta08jexWz+rTHAk4LcgULBjsdGurUXMUoAI7cATa6bYbC5CAFQi3BjeLIVv8W72aYweOQIuhjQVIwApsQAbCjeHGcLNosVsCK0ojuw+wqrTHnY6hABXYgSPQ4mJjARKwAhsQbgo3hZvCTeHW4dbh1uFmgVOLYQMyUIAK7MARaIGzsQAJCLcBtwE3Cxy787GqNcfuaDVqj7siQ1NohqbAhgJUYAeOQDsZfmMBErACGxBuBW4FbvZLVsVwBFpAbixAAlZgAzJQgAqEG8Gtwq3CrcKtws1i3u7JrF7NUYAK7MARaNFtN21WjUZ2p2blaNRssCyON3bgCLQ43liABKzABmQg3BhuDDf7LbQbRytOcyxAAlZgA5qujbHFsd3KWe2ZIwFNQQ0bkIECVGAHjkCL440FSEC4dbhZHDcbFovjjQqcbnb/ZtVoGy2O7f7N6tHIbs+sII3sDsUq0hwbcLrZjZgVpTlON7tLsrI0svshq0ujeVQiWWGaYwESsAIbcOrKbKSVnZHdJVnd2SN5GxKwAk1BDBkoQAX2QItYUUNT6IamMAwFqMAOHIEWmxsLkIAVON3Urnh952GhAKeb3an19bWHhSNwffFh4XRT66j11YeFFWhu1lHr2w8LBWhuzbADR6DF8cYCJKC5WadaHG9koLlZV1scb+zAEWgRu9EUbFjs93jjVLA7NSsscxyBFsd2M2i1ZY4ErMAGZKAAFdiBI7DDrcOtw63DrcOtw63DrcOtw63DbcBtwG3AbcBtwG3AzeLYbl6tusyxA81tTg2rLnMsQHNTwwqcbvPNUBrrOxILBajADpxudvNq1WWO083uY626jOw+1qrLHrvlhg3IQHMTQwV2oLnNaWTVZY4FSMAKbEDTnXFsFWPVbnStYqxe1vQZ844V2IA80S5oxryjAjtwBDZzs8ts5ma93szNmjNj/rEhb9iA060shelmD4WsYmzjjO5qdx1WBVbtVsPqvardali9l2MHzpbZJ3ys3suxAAlYgQ3IwOlmNytW7+XYA/WKlmkBEnBakPXODGlHBprF+m8V2IHzgvZXVC7gdLO7AyvycqzA6WYLbyvychSgAjtwBM6QdixAAlYg3AbcBtwG3AbchrtVK/JyLEACVmADMlCACjS3YjgC7SMxG82tGhKwAs2tGTJQgAo0NzY0N7Ev25hbNyxAAprbMGxABgpQgR04Ai38NxYgAeFW4VbhZuE/n9hUK/Jy7MARaOG/sQAJWIENyEC4NbjNn/xq37uxIq+NlhQ2FiABK7ABGShABZqbzQdLIAstgWysQFOwqWFJwT4WY4VbjiPQ8sNGa69NDcsPGyuwARkoQAV24Ai0/LARbh1uHW4dbh1uHW6WH5rNX8sPG83NJq3lh40FON3YOtXyw8YGZKAA1dFKtKp9qcaKseq8O6hWjFXn3UG1YixHASpwtnfeKFQrxtpoMb+xAAk43cTaYDG/kYECVGAHTjexplvMbyxAAlZgAzJQgArsQLhZzIt1lMX8RgKaWzM0NzVkoLl1QwWa2zAcgRbzGwuQgBXYgAwUoALh1uDGcGO4MdwYbgw3hhvDjeHGcGO4CdwEbgI3gZvATeAmcBO4CdwEbgo3hZvCTeGmcFO4KdwUbgo3hZvlB7WZavlhIwErcLqpzR3LDxsFqMAOHIGWHzYWIAErEG4DbgNuA24DbiPcrBjLsQAJaLrV0BSa4Qi0/DBvPasVWDkSsAIbkIECNN2ZMoliNK1oavWvFU05MlCAdsVq2IEj0GJ+Y8wdqnCrFdiADBSgAnu0wWJ+YbuABUjRBov5jQ0IN8Q8IeYJMU+IeULME2Lezm/bxoyeZPQkoyct5lcbGD3J6EnEPCHmCTFPiHlCzBNinhDzhJi38rLdBkFPCnpS0ZOKnrSYnxsJ1crLHO3aTNdifqMAFTjdus11i/mFFvMbC5CAFdiADJxu3QLHYn4jJrgFercYskDfSMAKxNRYgb4QgzUwWAODNWLa1+sCxmBZTZljBTYgAwWowA6MqbG+HTm3F+r6euTGBrSOEkPrKGuZLQ82duAItOXBxgIkYAU2oOl2ww4cgZYUNpquXYUlhY0V2IC2pCJDASqwA0egJYWNBUhAW1oWQwEqcOqOhSPQwn/urVSrCHMk4LyKubdSrSLMkYHTbdgIWfhv7MARaOG/sQAJWIENyEC4WaAXmw96AQvQdG00LdA3NiDPD33alz7ty5MbFdgnWj/MQN84A92xTLR+mIHuWIENyEABKrADR+C4gHAbcBtwG3AbcBtwG3AbcBvhZnVijgVIwApsQAaaGxsqsAPNbQ6A1Yk5mpsYErACzW0YMtDcuqECO3C6zY2wanVijtNt7olVqxNznG7FGmlfl93IwOlWrL32jdmNHTgC7UuzGwvQdK1l1RTsKmbMt/nUvlqd2MYZ844FONs798SqVY85NiADBTjdyHrSvjC7cQTaV2Y3FiABzc2uwr42u5GBAlRgB45A+/LsxgIkINzsC7RkfWbfoN0owOlmm1BWadZsN8kqzTba12ht38gqzRynm20hWaWZYwMyUIAK7MARaPlhYwHCrcOtw63DrcOtw63DrcNtwG3AbcBtwG3AbcBtwG3AbcBthJtVpTkWIAErsAEZKEAFdiDcLD/Yzp5VpTkSsALNrRsyUIAK7MARaPlhYwES0HSH4VSwHS07GW6jxbz93FqBmiMBK7ABGShA053Ba0e/7S5puGKL+Y0MFOC84v156A4cgRbzGzGaDDfGaDJGkzGajNFkjCZjNNe3pq05gtEUjKZgNAXXtr463QwZaL1juuvb0ws7cASuL1DbuK1vUC8kYAU2IAMFqEBzs0lgMb/QAn0NlgW6bbBZBZtjAzJQYgA6BqtjsDoGa2CwLNA3EhCDhUBnBDoj0BmBzgh0RqALAl0Q6Far1mzH0A6GcxTg1LUVqZ0N12yb0A6H22ghvbEACViBDchAAZrunBpWGedYgAQ0XbsK+3HfyEABxk+zrB/3hSNw/bgvLEACVmADMtAe8VnL1iM+w3jEV63Mrs1qi2pldo4VOHVtN9TK7BwFaGMhhh04Ai38bVvTyuwcCWiPL83NFv8bGShABXbgCLTF/8YCJCDcBG4CN4GbwE3gJnBTuCncFG4KN4Wbwk3hZuFv27tWkuc4Au3e31akVpLnaG7dsAIb0B/NVivJczQ3mwSWCTaOQMsEYkNomWAjASuwARkoQAV24HC0s+QcC5CAFdiADDTd2ZNWktdsx9tK8prd+1tJnmMDMnC2d5bGVCvJc+zAEWiZYON0s51IK8lzrMDpZpuSVpLnKEAFduAItEywsQAJWIFwq3CrcKtwq3CrcGtwa3BrcLP8YBujdpacIwMFqMAOHIGWHzaam42b5YeNFWhuNty2PNgowOk2332oVr7nOAJtIbAR/63gvxX8t/bjvrEAoWA/7rarZoV6jgycLbMNNivUc+zAEWgL+o0FSMAKbEAGwq3DzaLbNresUG+jRffGAiRgBTYgAwWoQLiNcLNCPccCJKC5NUPTFUMFduAItN9520qz8j1HAlZg86TQV8wvFKACO3AEWsxvLEACWu8sFKACO9CuYuYdK+pzLEACWl6/DBuQgQJUYAeOwHYBZ++MhQ3IQAEqsAdaxNomn5XktVlLVa0kr9nOnpXkOSrQFGy4LTYX2tLdtt3sQDhHAlp7beRt6b6RgQJUYAeOQItu26Kz8j1HAlZgAzLQiwWrFertfrA43ojesTge9t9aHG9sQAYK0K7CJoHF8cYRaHG88eHGl7nNOHaswDbRBmDGsaMAdaKNxYxjx+FohXpsc8cK9dj22qxQj23/zAr12JYzVqjnyEDT7YYjsFzAAjTdYcg+uaz4zlGBPdDCdGPdtbd11dZtZKDsity6Ku42duAIXLW3CwuQgBXYgLNTi/XZDEjHETgD0nFevG0eWsWdYwU2oF1FNRSgAjtwBPIFLEACVqBVftsYswLtKqx/eQTKBSxAuwoTkwpsQAYKUIFW1W6Ty2pvF0YNfR1RQ19H1NDXsWroFzYgAwWogd2uwuZ6L0ACVqBdhXVJZ6AAFWhXYWNsVbYLrcp2YwESsAIbkIE2FtZ0C9OJzYrvHAuQgBXob9O062KgABXYgSNwvQtDhgVIwApsQAbaVehEsvZ2QwJWoL+70671fstCASqwA0fger9lYQESsALhVuFW4VbhVuFW4dbg1uC24ngYMlCACpy9M7flm5XObZxx7FiABKzABmTgdCMbwhndjh04Ai26yQbLonsjASuwxWCt6F4oQAV24AjUC4j5oJgPaldRDQWoQLsK62q1q+CJFt0bC5CAdhUWFxbdGxkoQHOzEZrRzSsYZnRvnNHtWIAErMAGZKAAFQg3i3mbUVZm51iABKzABmSgABVobmpobvOKrfjOsQAJWIENyEABKrAD4TZ/0XnuezYrvnMkYAU2IAMFqMAOnG7z961Z8Z1jARKwAhuQgQI0t27YgSPQfv03FiABK7ABZzayiVjinddW4p3XVuKd11binddW4p3XZmV23Kx/LRPMveJmBXWOpmBu9t7MQnv/bWMBErACG5CBApz9MPd0m5XOMdtYWMxvJGAFNiADBWhXUQ07cARaJthobjbXLRNsrMAGZKAAFWhuNvKWCdi62jLBxgIkYAU2IMdYDIzQwAhZJtg4HK10zrEACViBso+YaOvEso0daLpzsKygznHqiilYzG+swHkVc3u3WUGdowDnVYhZWMxvHIEW8xsL0NzEsAIbkIECVGAHjkCL7nlL0Kygzs7XaFY6x2JXbBG70CJ2o7VsGBJwtkytHyxiNzJwtkytH+x3fmMHjkD7nd9YgAQ0NzJsQAYKUIEdOOKK7RddravtF31jAzLQdNdfU2AHjsB1Cot19TqFZSEBK7ABGShADbQ4npuHzcrhHAlYgQ1oV2GDZXG8UYEdOAItjjdOt26jaXG8sQIbkIECVGAHDkerjHMsQHMrhhXYgOZGhgJUoLk1Q3ObXWKnrfHcKWt22pojASuwARk4dYc10uJ4ocXxxgIkYA20H9a5Q9SsmM1xWgxrrwXk3L5pVra20QJyYwESsAZa4AxrrwXOxgZkoAAV2IEj0BbIGwsQbgI3gZvATeAmcLOfxbkX1Ky8jOdWT7PyMrlsuGeIOApQJ9pwzx9AxxE4A8exAAloujYA3RRsALopWMvGBSxAU7CunsHg2IAMFKACzc2ueAxHKxmTuRfUrGTMkYBTd+6iNCsDk7lJ0qwMbGMxBTacCnODolkZmGMFNqDpVkMBKtDcmuEInNPeEW4EN4IbwY0YKD4WVgbm2IExmlYG5liAzYfQysDWEFoZ2BosKwPb2C5g8bGwMjDHCmxABgpQY9xaB44YLMZoMkaTWwwha4wbYzR5xBDKFR0l6F9B/wr6V1oMlmA0BaMpGoMlGE3BaCrcFG4KN4WbYjQtGGybxeqjHBvQmmO9Y8GwUYEdOBytPsqxAAlYgdPNbsytPspRgArswBFogWP3DFYf5UjACjQ3NWSgAM3NWmaBs3EEWuDYbbXVRzkSsAKn2yzJa3Zql9hNsVVNOY5AC5GNU3fW7DWrmhK70bWqKZkFKM2qphwZKEBzsyu2cNo4Ai2cNpqbXZvFULP2Wgw1a47FULPmWAy19dcU2IEj0GJoYwES0Nys1y2yNpqbNYcFqMAOHIEWbxsLkIAV2IBwE7gJ3ARuAjeFm8JN4aZwU7gp3Oy30O5urazKsQNHoP0WbixAAk5du2GyWipHBXbgCLRfyI0FSMAKbEC4DbgNuA24jXCzWirHAiRgBTYgAwWowA6EW4FbgVuBW4FbgVuBW4FbgVuBW4EbwY3gRnAjuBHcCG4EN4IbwY3gVuFW4VbhVuFW4VbhVuFW4VbhVuHW4Nbg1uDW4Nbg1uDW4Nbg1uDW4MZwY7gx3BhuDDeGG8ON4cZwY7gJ3ARuAjeBm8BN4CZwE7gJ3ARuCjeFm8JN4aZwU7gp3BRuCjeFW4dbh1uHW4dbhxtyiSCXCHKJIJcIcokglwhyiSCXCHKJIJcIcokglwhyiSCXyMol8ydfVy5ZWIDVM6KVYDkyUIAK7MBIunaCmmMBEhBuBW4FbgVuBW4FbgVuBDeCG8GN4EZwI7gR3AhuBDeCW4VbhVuFW4VbhVuFW4VbhVuFW4Vbg1uDW4Nbg1uDW4Nbg1uDW4NbgxvDjeHGcGO4MdwYbgw3hhvDjeEmcBO4CdwEbgI3gZvATeAmcBO4KdwUbgo3hZvCTeGGZYdi2aFYdiiWHYplh2LZoVh2WMGXI9w63DrcOtw63DrcBtwG3AbcBtwG3AbcBtwG3AbcRrhZwZdjARKwAhuQgQJUYAdauprL8b4WIwsL0JKjGlZgA1pyFEMBKrADR+BajCycbrbjbWVgjhXYgAwUoAI7cARaLtkItwq3Cre1GLHeWYuRhQJUYAeOQMsls9q42YlvjgQ0t2rYgAwUoF3FvLmyU9y2guWHjQ1oCtaplh82KtB6x8bN8sNCyw8bC9DcumEFNiADTdcu3mLeduitDMyxAq1/7a+tRcNCASqwA0fgWjQsNLdiSMAKbEAGClCBHTgCLeY3wm3AbcBtwG3AbcDNYt4eGFgZmNhDACsDcyRgBTYgAwWowA4cgQVuBW4FbgVuBW4FbgVuBW4FbgVuBDeCG8GN4EZwI7gR3AhuBDeCW4VbhVuFW4VbhVuFW4VbhVuFW4Vbg1uDW4Nbg1uDW4Nbg1uDW4NbgxvDjeHGcGO4MdwYbgw3hhvDjeEmcBO4CdwEbgI3gZvATeAmcBO4KdwUbgo3hZvCTeGmcFO4KdwUbh1uHW4dbh1uHW4dbh1uHW4dbh1uA24DbgNuA24DbgNuA24DbgNuw934ilzCV+QSviKX8BW5hK/IJXxFLuErcglfkUv4WrmkGY7AlUsWFiABK7ABGShABZqbGo7AlUsWmhsbErACG5CBAlRgB47AlUsWwq3CbeWSYdiADOyBKz90QwJOhW79a/lhIwMFqMAOnO3t1iWWHzYWIAHNzYwtP2xkoLlZey0/bOzA6TafLbJVsDkWIAGn2yzWZqtgk2HttUwwbIwtE2wcgZYJNpquGJquXYVlgmHNmZlAL3ObmcBRgArsE605MxNsnJnAsQBporW3m4U1p5uFjXw3C2vODH8tZjHD33EEzvB3LEACVuB0K9aGGf6OGtNoYEatmJ9YVswvLEACVmADMlCACuxAuBW4FbgVu6BqWIENaBfUDAWowA4cgXQBC5CAFdiAcCO4kbmJYQeOwHoBC5CAFdiADBQg3CrcKtwa3BrcmrmxoY0QGQpQgR04AtdKYWEBErACGxBuDDeGG8ON4SZwE7gJ3ARuAjeBm8BN4CZwE7gp3BRuCjeFm8JN4aZwU7gp3BRuHW4dbh1uHW4dbh1uHW4dbh1uHW4DbgNuA24DbgNuA24DbgNuA24j3Oi6gAVIwApsQAYKUIEdCLcCtwK3ArcCtwK3ArcCtwK3ArcCN4IbwY3gRnAjuBHcCG4EN4Ibwa3CrcKtwq3CrcKtwq3CrcKtwq3CrcGtwa3BrcGtwQ25hJBLCLmEkEsIuYSQSwi5hJBLCLmEkEsIuYSQSwi5hJBLCLmEkEsIuYSQSwi5hJBLCLmEkEsIuYSQSwi5hJBLCLmEkEsIuYSQSwi5hJBLCLmEkEsIuYSQSwi5hJBLCLmEkEsIuYSQSwi5hJBLCLmEkEsIuYSQSwi5hJBLCLmEkEsIuYSQSwi5pCKXVOSSilxSkUsqcklFLqnIJRW5pCKXVOSSilxSkUsqcklFLqnIJRW5pCKXVOSSilxSkUsqcklFLqnIJRW5pCKXVOSSilxSkUsqcklFLqnIJRW5pCKXVOSSilxSkUsqcklFLqnIJRW5pCKXVOSSilxSkUsqcklFLqnIJRW5pCKX2Ll1Ol9GYju3zrEACViBDchAASqwA+EmcBO4CdwEbgI3gZvATeAmcLNcMjc72QoLHc2tGxKwAhuQgQJU4HSbLxixlRtutPuWjdNtvlXEVm7oWIHmZi2zW5iNArRxW2IdOAJXLllYgASswAZkoAB9F5tXEeJGuwoyJGAFNiADBahA67OlOwLLBTQ3NiRgBZpbNWSgAG0n3dwsa2wcgXQBC5CAFdiADBSgXcW8O7DSRMcCtKtQwwpsQLuKbihA67Nh2IEj0O5QZkUYWxmjIwErsAEZKMDpNkvG2MoYHUeg5YeNBUhAq8NbaOWRNhbsxaO8ixsXjsBV3LiwAAlYgVZNaLNkFTcuFKACvZCXV3HjQssEGwuQgBXYgAwUIEa+Y+Q7Rr5j5DtGvmPkO0a+Y+Q7Rr5j5DtGfmDkB0Z+YOQHRn5g5AdGfmDkB0Z+YORHjLxVYDoWIAFj5FetpY38qrUsCzswRn7VWm4sQAJWYIz8qrXcKEAFxsivWsuFdAELkIAV2IAMFKD1zgx/q7V0LEAC2ljYVVjMb2SgAHWXvTOv8v+FI3CV/y8sQAJWYAMy0MbYrmJFt+GK7oUFSMAKbEAGClCBcGO4CdwEbgI3+/WfdaRsBZaODBSgAjvQ3OyK9QIWIAErsAEZKEAFdiDcLBPMule2AktHAk63ZlPDMsF8d5Kt7NJRgArswBFomWBjARLQ3MSwAc1NDQWowA6cbrNqiq3s0rEACViBDchAAU63+T4kW9mlo7nN3rGyS8cCJGAFmkU1FKACO3AE2gbmLG9gq7V0JGAFNiADzU0NFdiBI9BSxcYCJGAFNiAD4WbLg/l0na3W0nEE2vJgVjqw1Vo6EnC6ifW6LQ9sOWO1lirWO7Y82KjADhyBlkA21nlUjFEL4iAJ0qDuZBFsq04rdtxoEbzxcSm2DBQ7AGNRDWpBHCRBpmho8Sg2gnaQ3PqHLYiDZJ73baRBPWg4rS/KGJUgM7HrsjDcaH1tQ2RhuFGA1sw5RHYmnNrS3AoSHWc7q9EUmCULbPWIjgrswBFop1iwUQmioBrUgjioeydadeHqRKsuVLuntOpCx3mp9ojSqgsdraXN8NHStqgHDad1+KtRCaIgU7SGWACoNWQd7TZpnexmVILm37b/zo6DWtSCOEiCNMhMlswItHlvDwytRNCRgNZMG037Mew2hPZjuNBOgrLLsN/C1TH2W7ixAhtwynYbTfst3KjAHh1ukbTQImkj3BRuCjeFm8JN4aZwU7gp3DrcOtw63DrcOtzst3Cj+FTvmNQdk7pjUttP4cbiaBV5ao9jrSLPsQLnHB9GHCRBGtSDhtP6uqJRCaKgGhQeJTxKeJTwKOFhv1HzZVW2EjzHArSLUcMKnJ04X3dlK8FzFKACO3AE2m/Uxulmz4utBM+xAs2tGzJQgNPNHjNbCZ7jCLTz2cioBFFQDWpBHGSKhhZ59gzbiu/UHlFb8Z1jAzJwttSeYVvxnWMHjkBbsm6cTbUOsCi1J99We+fYgGZmI2pRulGBD7NuD7btuLaNM0r7ZZc2o9SRgDN7WRPstLZFHCRBGtSduilaZ82Y63ZHY1V33R6gW9WdowI70FpqFzguYAESsAJnU813naBsJEGzqXZxdqziorHJqvA2lSAKMpNu2IAM7IHFmjkMCTg7tBi1IA6aPVIWKrADZ4/YnarV1DlOK7sntZo6x9lYe4RsNXXdHixbTV23jUurqeu2f2g1dY4dOAJnuDoWIAErcLrZtqPV1HXbj7Oaum77ZlZT120Tzqrnuv3gW/WcIwErsAEZKIFsYnaZXIAErMAGZKAEiolZR4n9NRtVaUAGCnDeWdtV2qENi4aTvXm+qARRUA1qQRwkQeGh4aHh0cOjh0cPjx4ePTx6ePTw6OHRw6OHxwiPER4jPEZ42HkMNhPWoWpGY5HsI9WMShAF1aAWxEESpEE9KDxKeJTwKOFRwqOERwmPEh4lPEp4lPCg8KDwoPCg8LDAmMt9sQKxXtc/nZNnvtYqdsRZn+dCidV09XmnL1bT5ViAc1o3U7BDF0zAzlxYxEESpEE9aDjZaQuLShAFhYeEx5zrfWZGsYqtPhOsrNPFrIk2sxfVoBbEQRKkQT1oONnMXhQePTx6ePTw6OHRw6OHRw+PdQTDpHUCg1EJsq1CoxrUgqwXHtlMrAarzzW2WA1Wnwt6sRosxwpsQAYKUIEdOALLBYRbgVuBWzE3NWSgABXYgSPQfm82FiABKxBuBDeCG8GN4EZwW2+WG5UgCqpBLYiDTLFPtN+U+WqLlPW+hVENakH26oGRBGlQDxpO66VPo3nhFuFWMtXnTpFYyZRjB85LZGum/cBsLEACVmADMlCACuxAuCncbKnH1nRb6m2sQHOzcVAGmpt1q5qbdeuM026BYCVTG2ekOk63NTAzVh2nm1jQ2OJw9aSVOZiDVTks0qAeNJwsXBeZog3mXOx1sUZbcIq1dHTgcLQCqD63O8QKoBwJWIENOHXnnZ9YUVOf+xBiRU193oeKFTU5VmADMlCACuzAEWhhOO9ZxYqaHAlobmzYgAwUoLmJYQeOwFUKaVSCKGjei1h32B3aIg6SIA3qQfaUaZLtHy4qQXY9aliBDcjAHmg/j3M7RKw4ydEUbLRt1beRgbbbaaRBPWg42b3ZohJEQTWoBXFQeEh4SHhIeGh4aHhoeGh4aHhoeGh4aHhoeGh49PDo4WGx2W1oLDY3NuDsr26jYzduGxU4x6HbHLQbt4V249ZtdOzGbSMBK7ABzc2Gz6J5o7nZmFk0D2uZRfO8zxcrQXIswOk27+DFSpAcG9B2FYwkSIN60HCyZwaLTLEazpbOW36xgqI+D1gXKyhyHIEWxxutpWpIwApsQAbajb6R/Zoamdf6hw+vcdn1zyh2LBOttTOOx2UtmIHsaL1tNAVMakZjuaynZjQ6NiDPvy+GAlRgB45AvoAFaO0yY67ABhRv2AzXTT1ozGbZxc54dSzAqV+s3TNkHRtwXk2x/pxR6zi9ivXcjFvHEWjH8a2uteP4NhKwAhuQgQJUYAeOwA63DrcOtw63DrcOtw63DrcOtw63AbcBtwG3AbdhPWmTaTBQgNaTNtajA4ejlQSNuUchVhLkSMAKNLduaG7D0K5tiSmwA6fb3K4QKwlyLEACVmADMlCACuxAuBHcCG5kPcmGFdiADBSgAjtwBNYLWIBwq3Crdm3FkIECVGAHjsB2AQuQgBVobmTIQAGOQMsIc79IrPhnkLXXMsJGBgrQ2mvDbelh4wiUC1iABKzABmSgAOEmcBO4KdwUbgo3NTeb1dqA5mYTXAWoQBt5m/YrPxiu/LCwAAlYgaa7cLa32pycMT9si8KKfxwJWIGzvfP5iVjxj6MAFdiB5jYv3op/HAuQgBXYgOamhgJUYAeOQIv5jQVIwApsQLhZzM8SELGSIMcOnG5zJ1ysJGjYVo2VBDlON9s9sZIgx+lmGylWEuQoQAV24Ai0X/uNBUjACoRbhVuFW4VbhVuFW4Nbg1uDW4Nbg1uDW4Nbg1uDW4Mbw43hxnBjuDHcGG4MN4Ybw43hJnATuAncBG4CN4Gb5QfbG7LyIccOHIG2frCfAysfciRgBTYgAwWowB7Y7SrY0NprMdQZaO21Cd4V2IEj0PLDxgIkoOlaMAz074grtjIfxwIkoPXvMGxABgowRtPKfBxjNK3Mx7EACViBLdpgMb9RgArs0YYV84Yr5hfCjeBGcEPMC2JeEPOCmBeKuSOEnqzoyYqeXDFvbajoyYqeRMwLYl4Q84KYF8S8IOYFMS+IeVkxb21o6MmGnmzoyYaetJifRVtiFT8bLeZte81OV3MkYAVONzYxi/mNAlRgB45Ai/mNBWhubFiBMcHtSLVhu+J2pJpjB45AxdSwhcBGDJZisBSDpZj2immvGCzFYCkGq2OwOgarY7A6JmLHROyYGhb+tgdodUgbLfw3WkdZP1j4286glSI5NiADBajADhyOdnia49S1jXkrUHJkoACnru1DWoWS4wi0pLDRFgL219ZCYGEFNiADBajAHriW+WRIwAq0q6iGDLSrYEMFdqBdxZxRVsDkWIDTzbZB7Ww0xwZkoAAV2IEj0MJ/YwHCzTbnupEEaZDtBRgNp7UTYDQVdSEBK3C23/YfreTJUYA2CkY9aDhZfC8qQRRUg1oQB0lQeEh4SHhoeGh4aHhoeGh4aHhoeGh4aHhoePTw6OFhQW0bqFbw5NiA1mHNUIDTSJdCB45AC3XbELaKJ0dzs6loob6xAc3NxtxCfeN0sy1FO+bMcbrNEi+xY84cC9Cml1ENakEcJEHqZEFum5RWKzVmQZZYsdSwbTOrlnIUoAKtpUtsBNpv/MYCJKC5DcMGZKAAFdiBtgk3u8gqphwLkIAV2IAMFKACOxBuFuS2fWolU44ENDfrSfuNt31PK5tyNDc2VKC5We9Y+C+0+N9YgASswAZkoAAVCDeGm8BN4CZwE7gJ3ARuAjeBm8BN4KZwU7gp3BRuCjeFm8JN4aZwU7h1uHW4dbh1uHW4dbhZZrAtZivLcuzAEWj7grY/amVZjgSswAZkoAAV2B2tDmvMjzWI1VwN2+W1mitH2w+bB7zIWJt9m3viAS5X4pKYEtt2m+0XW/nV6horv1pXbuVXjgVIQNtfsf3xsTbyNnNiSRwjayVYjjGyo17AAiRgBTYgR5OqABXYgbi+tnqpGpfEq5dsaNbDgM0tMSdel7g0NXFPPMB8JS6JKXFNvHxtfjAnVowgLy+bLevxwOL1fGBzSUwYFknDKGkYJQ2jpGEUTdwTYyCREAYSwkBCGEgIAwlhICEMJISBhDDWll+xCbz2/DZTYrucYt2yHgvYM4+xngtslsSauCce4PVwYHNJTImXvk2hIYk1cU+89B9TSK1MLLgkpsT+u65WLebIQAEqsANH4FovLCzAtp63qVWIbZIgq9c06kHDidYlqHFJTImtuNSoBXHQ6rRurIl74rGeA6odW7apBFFQDWpBHCRBGtSDwqOFRwuPFh4tPFp4tPBo4dHCo4VHCw8ODw4PDo+VB4r1/8oDmzmx7CeiauVvjvac1DrNKnIWWkXORn9OqlYD57ieftqArGSwmRNbeYWRBvWg4WQFOYtK0NK0KbOeAM47RL3WFj9ZG9Ye/+IV8ZtL4vXAlo1r4paYE0vi5SvGPfEA2w2B9ZPdDyyioBrUgjhIgjSoB41N5bqCShAF1aAWxEESpEE9aF3J7PGyFgObS2JKXBO3xJxYEq+nqZdxTzzAKyGQtWclhM2UeD1TJeOWmBN38Azw+VRErT5u0/p7izmxJNbEPfEAr+VAs7av5cBmSlwTm+980KFlLQc2S2Lzbdb2tRzYPMBrOTD3obSs5cBmSlwTL99mvHyt/WsJ0Gx81hJg8VoCbC6Jl/4wXs9I7bpW1LO1bUU9m+9aAmzWxD3xei5rbVvFAptLYkq8fK39q0qArW2rTIBtjqwsIda2lSXEvFaWWLyyxOaSmBLXxC2x+Yq1Z2WJzWne7ToB410osLgkpsRpXo/lZde41gibJfG6Rrv2tUbYPIJprRE2l8SUuCZuiTmxJNbEPfHynXODVv7YXBJT4pq4JebEklgT98TJl5IvJV9KvpR8V/6YlZJKa/kwd9OUVv7YPMCrcGCz6c/NNaVVOrC5Jm6JV14kY0msiXviAV55ZnNJTIlrYtPXxZq4Jx7glU/mtpbSyiebKXFN3HZJl66CwY0CVGAHjsC1qFhYgKu/FnNiSayJe+IBXvli7rfp+rDnNTfndH3Z81KbrytHbO6Jl47NiZUjNq9+sXmzcsTmmtjab0tTWjlisyTWxD3xAK98sdl8bcFMK19srolbYk4siXWXfmpdacG6p660sJkSL3kybok5sSTWxOuyqvEAr7SwuSRel2W+Ky1sbomXrxpLYk28fO0aV1pYvNLC5uXbjJfvMF6FH5ex+c4NPa1rWbFZEq+iErvelRY2l8SUeOnb9a7wtylZV/hv7okHeIX85rZLrLWuat+FArRxNs9VA7xwBPIFLEACVmADMnDV1lgfrmXD4rVs2FwSr36wcVzLhs0tMSf2SnW1+kLHDhyBdsOwsQAJWIENaLX61mFWq79xXYx19C4VWlwSU+J1Maa4Yn8zJ5bEmrgntjcSrG+tMnhjARKwAhuQgQJUoL9toW2FvK362wr5zTVxS7yuZhhLYk3cE9uNquF6GWdhARKwAhuQgQKco1PmVqRawWBwSUyJa+KWmNcrTLo/fGqkQT1oOK2PnhqV9YKTWrngphrUgjhIglb7jdtqp41Hq4lbYusFNhSgAjtwBPIFLEACVmADwo3hxnBjuDHcBG4CN4GbBbYVwaoVBgZr4p549dJMHFYcGFwSU+KauCXmxJJ4+VrbtCce4H4lXr5iTIlr4paYMYJdEmvinniA14ODzSVxmi0jzZb1mGBu+Wpbzwk298RLf0aylRMWK29UqycMpsQ1sV3X3CNVqykMlsSa2HznXqVaXeGDZx9aYWFwSUyJa+KWmBNLYk3cEyfflSVsG5BXlthMiWvilpgTS2JN3BObr+1SWbHhg60fbEHgTIlr4paYE0tiTdwTD3BLvm35ijElrolbYk4siTVxTzzAvHxtznBJTIlr4paYE0tiTWy+dm9slYjOtuBwLokpcU3cEnPih6/tIlg94qYeNJzsRfVFJWhpWp+v3DKPH9JVYOhs+dL+E3sHcGMBErACG5CBAtTAlTqqTfuVOmyLilfq2FwTt8ScWBJr4nU5dskrpRjLSimbS+Ll241r4paYE0tiTdwTL985JWSlFNtWk5VSNlPimrgl5sQSwyRFE/fEA7xSyuaSmBLXxC3xHC7LxFaw6DgCV96wPT5ZeWPzuigTWXljc0u8LoqNJbEmXg+QbYBW3li88sbmkpgSm6/t98nKG5s5sSTWxD3xAK+8sXnpF+M5xe0nSFa428JVVrhvLomtmbadKCvcN69mWvescN8siVczrXvWMmTzAK9lyOaSmBLXxMtXjDmxJNbEPfEAW65Y3bBWG5ZxZK02NnNiSbzkbVat1cbmAV4pY/PMRbZAknV8zMIKbEAGClCB3VFXSpgliqorJWyuiVtiux5ba+tKCZs1cU889tlDakWLjgVIwApsQAYK0PrJ1u26Qn5zSWzXM8/tU10hv7klXtdjmmsVsXldj/XRWkVsHuCVDWZZo+rKBpspcU3cEnNiSbx8xbgnHuCVDTaXxJS47hPU1KoZ7SQ4tXJGO5JM13ltG0egnde2sQAJWIFtH1+m+xS3hQJU4HSzDZJ1tttCezN5YwESsAIbkIECnLqrE1c+sI0EXflgMyWuiVtiTiyJ18B04554gNdtyeZ5QWss4jRFXSe6bWxABgpQgR04AtfSwXbKdS0dNrfEdjm2I65r6bBZE9vl2O6UrqWDcV9LB9tS6itPbKbE5muD3Fee2MyJJbEm7okHeC0dbKe4r6XDZkpcE7fEnNgmx2UYk6MTJkenkpgS18QtMSeWxJgcnXpiTI5er8QxOdbZcRsrsAEZKEAFdmBMDitTfNxp2CDZz7hzSUxg+40mu1WyQsLglthe2rGCAaslDNbEPfEAr/eENpfElLgmbomTrybfvnRssvb139u1dEn/fLXNJlZfbbPJ0Qd4XIlLYkpcE7fEq202tYYk1sTL18ZlLN85bezYtgd34+U7jCmuxQ5vC26J1/tRbDzA5UpcElPimrgl5sSSWBMvXzFevnYtdCUuiSnx8rXrpZaYE0tiTdwTD3C9Ei9N60P7ISXb9rACwQfP+bAqBKlYH9qPpzMlrokl8dKZc2lV/DkvnWa84sX6itd/b30lV+KSePla/+y4W9wSM/RX3O1/rol74gFecbf6YcXdZkpcE6frXa/jrWtc7+NtTv2w5n9dbH/X7qVWiZxzTzyc+yqRc155iY3t2ud9bbdiuGBJrIl74qWvk1csbC6JKXFN3BJz4uXbjTVxTzzAKxY2l8SUuCZeXsNYEmvinniA1/zfXBJT4pq4JU6+Nfmu2Jn3391q6IIHeMXR5pKYEleMS0tj2tKYtjSm6/doltn0VQ1H8/a6WzVcsCbuiVfbbC6tWNtcElPimrgl5sSSePlW4554gFesbS6JKXFNzLjeFXfN5v+Kr8X9wjWu37vNlLgmXtdi/dk5sSRe12Jze/0mbh7QGcl3JN+RfEfyXb+Jm9PYjTR2I43dSGM34FsueK0yMZoPl3pZc37xmvObS2JKXBO3xJxYEmvi5FuTb0u+Lfm25NuSb0u+Lfm25NuWbzfuiQd4/dZsLokpcU3cEnNiSZx8Ofly8pXkK8lXkq8kX0m+knwl+UryleQryVeTryZfTb6afDX5avLV5KvJV5OvJt+efHvy7cm3J9+efHvy7cm3J9+efHvyHcl3JN+RfEfyHcl3JN+RfEfyHcl3wHeVnzmXxJS4Jm6JObEk1sQ9cfItybck35J8S/Itybck35J8S/ItybckX0q+lHwp+VLypeRLyZeSLyVfSr6UfGvyrcm3Jt+afGvyrcm3Jt+afGvyrcm3Jd+WfFvybcm3Jd+WfFvyTfmKUr6ilK8o5StK+YpSvqKUryjlK0r5ilK+opSvKOUrSvmKUr6ilK8o5StK+YpSvqKUryjlK0r5ilK+opSvKOUrSvmKUr6ilK8o5StK+YpSvqKUryjlK0r5ilK+opSvKOUrSvmKUr6ilK8o5StK+YpSvqKUryjlK0r5ilK+opSvKOUrSvmKUr6ilK8o5StK+aqmfFVTvqopX9WUr2rKVzXlq5ryVU35qqZ8VVO+qilf1ZSvaspXNeWrmvJVTfmqpnxVU76qKV/VlK9qylc15aua8lVN+aqmfFVTvqopX9WUr+rKV/PxTl/1cjQf7/RVL+dcElPimrgl5sSSWBP3xMl35av53KevmjpnSrx8ybgl5sTLV4w1cU+8fOcarK58tbkkpsQ1cUvMiSWxJu6Jk68kX0m+knwl+UryleQryVeSryRfSb6afDX5avLV5KvJV5OvJl9Nvpp8Nfn25NuTb0++Pfn25NuTb0++Pfn25NuT70i+I/mO5DuS70i+I/mO5DuS70i+A77tuhKXxJS4Jm6JObEk1sQ9cfItybck35J8S/Itybck35J8S/ItybckX0q+lHwp+VLypeRLyZeSLyVfSr6UfGvyrcm3Jt+afCvyQ9v5Z95rt51/FpfElLgmbok5sSTWxD1x8uXky8mXky8nX06+nHw5+XLy5eTLyVeSryRfSb6SfCX5SvKV5CvJV5KvJF9Nvpp8Nflq8tXkq8lXk68mX02+mnx78u3Jtyffnnx78u3Jtyffnnx78u3JdyTfkXxH8h3JdyTfkXxH8h3JdyTfAV++rsQlMSWuiVtiTiyJNXFPnHxL8i3JtyTfknxL8i3JtyTfknxL8i3Jl5IvJV9KvpR8KflS8qXkS8mXki8l35p8a/KtyXfln1kU0Vc5oTMnlsSauCce4JWvZsFCX+WEzpR4+RbjlpgTj8iHvHPR4pKYEtfELfHStOtduWizJl7Xosbmq3YtKxdtLokpcU3cEnNiSayJe+Lku3KRWl+tXLSZEtfELTEnlsSauCfGbxantRCntRCvXKTWVysXbW6JObEk1sQ98QCvXLS5JE6+I/mO5DuS70i+I/mO5Dvgu+oQnUvi5TWMW2JOLIk1cU9sXrPipa/aQ+eSmBLXxC0xJ5bEmrgnTr4r/8zqmL5qD50p8fKtxi3x8hVjSbx81bgnXr7zPm6VJTqXxJS4Jm6JObEk1sQ9cfJtybcl35Z8W/Jtybcl35Z8W/JtybclX06+nHw5+XLy5eTLyZeTLydfTr6cfCX5SvKV5CvJV5KvJF9JvpJ8JflK8tXkq8lXk68mX02+K0d1i5GVozZr4p7YfIfN1ZWjNpfElLgmbok5sSTWxD1x8h3JdyTfkXxH8h3JdyTfkXwHfHXlovneX1+FjjSLCvsqdHReOs1YEmvinniAV/7ZXBIvTTbGWOvOIbP/deeQxSUxJV5tFuOWmBNLYswxpeSbcoimHKIph2jKIZpyiO4cYu2pnFgSa+KO9qwcsnjlkM3JN+UQTTlEUw7RlEM05RBNOUQb5ra21M+c+plTP68cstrDqZ859XPKIZpyiKYcoimHaMohmnKIphyiksZ355DFqZ8l9bOk8V05ZHPq55RDNOUQTTlEUw7RlEM05RDVdL2arjflEE05ZNVEbu6pn3vq551D1LgmXv1s+juHLJbEmnj61svi2nLIZsshziUxJa6JW2JOLMaWKyyHOI+I5VUoWefrcX0VSjpT4poYc6lfnFgSa+KeGLHTy5UYY9oLJa6JW2JOLIk1cU+MubRKJessIO+rVNK5JV59aP1Dqw+tnaSJe+IBrlfikpgS18QNvF5rsLVlX6816Prnq8DU2r9ea9hcElPimrgl5sSSWBP3xMl3vR9h69W+3o/YTIlr4paYE0tiTdwTD7AmX02+mnxXPfQ8YqGv2ktnTiyJNXFPPMCrHnpzSUyJk29PvusFCVtX75MZbf28j2bc3BJzYkmsiXviEbzqMJ1L4uVVjZdXM+bEklgTLy82HuBV3Ly5JKbENXFLzIklsSZOviX5UvKl5EvJl5LvKnu2e5BVn+m8vOYYrdrLYjlhrBcgNlPipTmMW2JOLIk1cU88wOsFiM0lMSVOXrzyw2JOLIk1cU88wBa/ddZJ9lXD6UyJa+KWmBNLYk3cEw+wJl9dvjY/lRLXxMuXjDmxJF6+Nld1+dq46/K1se7L18axl8SUuCZuiTmx+ZJ5WVw798QDvH67N5fElLgmbok5cfIdyXck3xG+Y9WjOpfElLgmbok5sSTWxD1x8i3Jtyx9MW6JGbx+W2cN+Vj1os7Lqxv3xAO8fls3l8SUuCZuiZfvMDbfeSzcWPWizj3xAFvMOpfElLgmbok5cfJtybcl35Z8Ofly8l05YX4HaKya0jrfgxirpnSPBacxkjRGK/bnOwVj1ZQ618QtMSeWxMt3cU+82m9eK/Y3l8Sr/Wy8dGxurFjevNpv17VieY3diuXNlLgmXvo2r1Ysb5bEab71NN96mm8j+Y7kO5LvSL47lieXFV91MScW8IqLWW881nGGzprY2jbrbMc6znCz/SY6W9tm3elYxxk6W9tmve6DW2JOvHybsSbuiQd4xeDmkpgSL182bok5sSTWxD3xiPlQdqzZ9e5YU+OWmBNLYk3cEw8wI7esOlVnSlwTt4i7VafqLIk1cU88wCs2N5fEBF7ryWHzYb1wO6wf1gu3i9cLt5tLYkps65lhmmudOWwOrHXm5p54BK96S+el34wpcU3cEnNiSayJly8bD/Bac24uiSlxTdwSc+LlJcY98QCvdebmkpgS18QtMSeWxMmXku96vW7uG4xVY+lcElPimrglZoxLlcSaGGO66iTL3H8Yqx6yzIOVxqqHdB7gdb+5eb0bVYwpcU3cEnNiSayJe+L1btSc57secnNJTIlr4paYEyuud+0vzT2QsWsdNxOucd1Lbm6JOfG6FuvP/dmvxT3xuhab22sfaXOBTk++Pfn25NuT73oJf3Mau57GrqexG2nsRvLdeWD83//9029//usffv/3P/31L//697/98Y+//e5/4x/892+/++f//e2/fv+3P/7l77/97i//8+c//9Nv/9/v//w/9h/993/9/i/2599//7fHv3309B//8u+PPx+C//GnP/9x0v/9E/729fyvzr0P2n993gNISJSr/CBSnou0+XthEk0goO2Hv0/P/36dL8Xb36+D0ACl+1dR5usp+yoeAff0KtpzkRmgS6HU+Put3v3rVcR7oT62/dECkh8k5CAx9w52P6AJ2u/+fSk+Ex7P5uLvP/rjB4F+6McmrvD4Fe5PJcapG8hHoj6eLD2VOPWkfaV890Mai489WQ5Tkqye0zQeuTtp8I+hUU7TssaADnRn6XT7QuzjvD6g9PxCDhos1YfkgRgS+bEV8w78+aiOEaPK9FTiMLPsoARTeOyYpgi9biv05pfx2L98rnD3MvT5ZZw6Uy+PsAeOZxJ0SDWPX2rPE48f2/JUorzbFXSYmWQnj65GlJRr2odG1EMj5nECqxFDnzfilC/t1XiTmGsxRHqT+xdiR0rtC+Hy9EIOE4uQNK+nAucIGxKTIqWbjyPa3096J41G+BV9LDWeJot6HfN3/Jhz6o3HMvhHjcPs5O4jIhcnBbk/MRrHxOAUZR8nRj1Mz8em6giNgd6o+uFKDu0gvSJKHg/BMbBfGJPhndFaL8/H5DA/H5vivrp53Aemca0/rkxmIDzVYHv0uQe2cVrf1B9nWO3fMDvGu7PjfC1yxVqNhcfTa2mn33c7RGYnjj5SS8aPGvTu/DjO0psp8KhxM1oavx8tTd7ujePIjobl48hrpo8je8qldrTQyqWPB4wY2Y8a4/QjXT3mqKXf2Nr5Bw0+5NImWuOuJs2wjxrHdjCXWCyMQzsOs1Qo2vFYCvJTjePICMXNSZGaf/A/9Cq3U0tihsjjccJzjcNMbXZU7+rVkmbZVzS4RNQ9sL12LbZfvq6llUN/9NPCoY1YmsuLGqpYkSq9ptGxqu3Xc43zDNGrxwx5LPefqgj90l8HtYMWVzvmlzWet+MwuvNJNO7mu15PspnwL82H2nvkQx38fGREf2mfztdvvB3zlY/n7Tjlsqo97qhTbn9sn/6gode7fXpsRYs9jsde6vW0FccVmcbewGP3uz9dkWk9ZfY6IrP/ELcfNE43Hvb+7IpbGjni6L5Gl8iF44c89kFD3l8X6tuz9NyjPeaGUHltVKRC4zAq/XQPNax8fk8PGuPJLD23IzYJ6uOR+/N20Gk11TAqeVv0w0zvh3ZUlrg5lh/acV+jtRb3QEzXcw1+f4Z1+ZUzrNpn2Pao9Nfivl6xCfXYc9bnIzt+7Qyrdrjvakc9RMs43UO12AN6pLN0LfTjjvM4zNJ55ObWePza0Usawz7/t+5eSj1otPdn2OB3Z9g5ZrFF2fN+wYdYGXrKg7Gaezz1qk81jrOjxrZanfeAL8302mOGPfZBnmrYl1feeqJxbEWLW8oqeR//p1achiXd/dSat3HGF0RG5MHH0/LrIHLaGpPYDBqi6QHLh4WYfaDkqYj61Yy0Tq/tCxdDhA3kVk49ou/HnH2h5L2gO6Yxbg0/+u1p+rAPmRxGNzrkSuuojw8XTs+cavRpu55vqZdyHJcSTxdI84bShy4t9XT3cxXc/VylPd0POs+RVvDzMA4T/vTQhpv64DCzPH8Od3p2dHtw9P3B6d8xOONbBuf4zIIFWw9Pn0K10/ZWZKKmaXvrp2eTp8c39cKT+/JDTuxfEMFtUH384h1E2vvPOInffsh5krj5lPP2lRwec97u0h+eJX1lXEqk5krjkFc/eSJ1q6KgnB5J3X28dr4cKRQix8upp+VuxXI3ryQ+prOzSOz5zYO/DyLf8FC/vv9Uv77/WL9+w3P9Y5cO3IaM9uK4dDtbd11MK+O5yOnB1OO2PfZR9apPy0bOc3WMeBZ80SGvtvr+DGnt7Rlykrg5Q25fyYsp8dGP8Xt3tXHo0v4NXTre79Lxfpf2X/wrk2cpl9d+ZR5/c4RIP4wLf0eR1DckVH4/ofI31El9Q0LlX7rA5AtjcvVD8ZuU0yPHjsd0ekjJp6dSo8Td/5XvY/oX6kuJNXYQWk83EB+rZI+PpW6WgpTTc6m7Ty/OImzfQdlzhOrzh6jl9Gyq2pv0e58p3crIFySqxIZqTR37UWKcnilHKxqV5xLn/rhZYGMfOHr+fEtjj0jT9o7cl7i9qXLaNbu3qXKUkHjGLjRelIhUJk0OEsfV1FUxTenQG8cupZHm+kGkv79p/8k0u1v7VE6PqO4WP9m76O89iz23g6JmgCgtU39ux3XcvosnuswHkXPHauwzPZ6MXHzoWH47nx0l7uWzrr84n/3QH7mI/qf8fpS5W9Flr8c930loeGjGLT20f1mkf4OI1FdF7lWoldMDK6oiUU6hz8u6yumJVe1R51Z7yrE/ixwL/0bsn/ervyjS41UH6rkS8osiaAnxN4jU6yByGp2bhXv25txhDd1jDa3jtSFuSI+Ntb86T6K2oo6rvdgnN4sq6fTs6seqyvZax7YR5a5tdH5N5G5d5Rcu5zTEd/NJf56U6PQA6+4rIccHWDUePddc4PlzQ04VAYzdTc77rP2DxvGpb4mG/LATpx80Ti9fXVeqwWnPNfj4sAZFOI9e5edXc+zWuJf+4Wn8z916FBkYm3H45Tr+nkuJWfK4ZT4sk+j0DEuj5iwXin585eaThoTGbMjz+y06vUmFPPC4D0/TpOtXmnK3NproeL90rziaTs9+7lZHH0XulkefW9IK3nwp/cWW1OhZ/rEM5Ssde7NS2z6A+vyn+F6p9lnkZq32WeRmsfYnl9OjY6XLiyJ4qs6D+cU7BGlRavTg9roM9l8eY6WvytytYqf6djHrUeLe9slZ4t72yXmv8G41PR2fad0sp6f337b6rB0oqH8sqcpTkVMJVolN+nm0y0sSyPXzVJGXbtC1XhE3WnW8OOE17fUrl3EY4P7uvsdZ4ta+Bx3fuPqGfY8f+4Pe6FY8xeX6alZT3Lw9WK7no3N6FnNzdI4SN0dHfvHo/NAfer0+Oppkyqsyd1/PsW9mvPljcZK4+WNxlPiGH4tuRTirP+ZXQA/90d59BnKUeGRoLCpU+HpNRNNvn0p5USTNEe2v5fpOuE+Zn7l7cb7efo2LTu9gfZMMUdyPUr3yTe31okihF0VuvphG+v5ZAcd23Hw17SzCcQrEIxuX10Qe4xHbfdcPG0ofn5q3958z29x+fjn3XpOj0xOi+6drnNL0zZftziKMamb9YffkKyIauZo1l838JPL+mqC/vybob68JPumNePrAvY5Db/TTr1/stD9uJOtB5Hh7H7/C5Xq60XdsBkfFvHC9XrwWjiKRx/MDflkkLkau8bJIbGnJ4d3S8/jefEGVzm9mfYPI3coKGu9vDYz3twbG21sD5964WVnxSZfeq6yo5xer7lVWfPJDc+/t4bPIzdd263Xs2Hvv7dpHJ57m5psv7h5FGkWfzIOMDiJvbw2cJW790NTy9tbAuTewGd1qf/4ecz0eCXivN86nCt7rjfb2z+5pqt99F/oscvM107PIzTc8zyI42K/qq+FfUfP6EHnekkrf8MJLpW944eWT0bn3Am89PX259QLvUeHeoaSV+Dv6VN7v03p6BXAdl71a8tjtRp9+KFarx9MCb/XpsRk3X2g+i0iU75cu14siN9+KtqPU310BHEUGC85Ry9U2H09BOooIdvbzkverIiVE0uh8UeTem+L19Ajp3pviR4nHE+lYJ1656qeNr1xMx8WMV7tVaxwToWlP8GsiHQPcUwn+TyLtV4tQwevVpR5G5yhCsWVLlPvkSyJVIobzyugnkfPL0fdOFKjtdPbFveNgjxq3T7ls7x9zeZK4d5t3lrh1m3fujZu3eZ906c3bvNMjqNtJ/jjLbp5JUE9Psu6eSVD5eLhbLKDn8yhczIepyu+/Tlj57dcJjxL3Xjm7fyV6uJJTj45YF5Uxnp7DXOX04suIGlV+/NK82I5bp03U07Oae6dNWAn4YTMipvoPpaUfTps4i2Cv+YHlNZFyXfFMoh3OvTi3hCvOTZdXRW6ewFGPrwPdPoHjMxnkswfrqzJ4RPLg9GLDV2VikKbk4cTsYwfXgaHOK5svjVLDE+BcyvWzyPGgWHxTpB6S0mk1cY2Y/OXqLyWDH1ZpqV79o8bx+dW9ZHB6WauMeMDxeDCfa++v++242aXnoY2brMco11cDsMS7+A+uLwcgNUQOycsBSFFsPiVPZ82f1mrpgUt9dbk3QqI9lzjfI6U7vvxmxMc7k+P7CPc2OY8S9zY5B/1SiZu7xucOjY34R9+2px36yWbrvUMj65BvWD+Pt78QVMc3fCOojm/4StC5W2+egdmubzgEs50eYanG22+PSXK9KHLzKM2jSKeoUe8tV218SUTi7bcuIgcReTeLnNuhsRLvyqex6b+2HT0ehM+vpj9vR3k7q54lbqXEVt5OicfeuHtcazs9wvoWkbtbPa28fa7wUeLeVs9Z4tZWz7k3bm71fNKl97Z6GpX3f6rOifnmsZ7t9PDp5i5N+4ajBdv7Rwu2948WbN9wtOC5R+/t0rTzm0e3dmk+acetXZpW3z6wtZ3Wh3d3ac4iN3dpjiJ3d2nOLbm5S3MWublL047PnW7v0nwmc3OX5hOZu7s0n8nc3KU5d/DNXZqzyM1dmmME3dtSOAbyzV2as8a9XZp2+v7VzWRwfE5yc5fm2I6bXXoe2nu7NJ/M1bu7NJ/I3N2l+Uzm5i7NeZl1a5fmk5XanV2aT+oM732mpPE37AccRe7tBzT+hv2Axt+wH3Aummw4R6ON519fOIsMFE2WVl8TufvNlCb1F4vcvkWStz+McZS4eYt0lLh3i3Tsjbu3SOcuvXmLpN/wlaFPSo3vfW6kKf1ikbsfLTmLdCzpu74qopGO6Hw58g057fRJrNtfQj/3Ce4vfvgW+k+XM45DjGUnj8LPfio+Eak4u3Dw0x2s43OsdOs3RforIjf3sD67mHvtOL0ziFvQSqdJf8xq91Yk58R4a0VyfKHkVis+eSfl3rro+PIjJjvncy2/9Aal4J1SGfVFkR7HkdC4+DWRelGUx190upzT9vXNdzmPIoKDh6Xr0zehjxJIITJIX5OIHT0Z/Fzi+AFJnEGnL79j+4NIe1WEIFKfjwtfbz8TOEvceibAF/1SibtvpBw7VP7huQFfHJWOdch4NYPklrws0uP0gQe+LJJWRCeR49EQ93L7+XSJW7n9fGZO7GsMoheP3Yli5wc+fU2wvv87V9//nTsfJBaPi1nbyweJxW0I//Apmq+JDJxGNl49SKwzWqKvHq7WW3xwoPPLR5rFJONBr/fJgMiLh/A9dl1iG4+1fofIi4fwPW5lYhtB+NXjAAW7InqcbCcRxWGpnZ+LMB3CT0esEft1PX/3gk9vYOXLkXRkyMe9xM9aotGSw1sgfPo+FkvFwYTp4eIXeqTjQxv9Ej2041jBEmUwj59QPogcPzeMrbO0Q/NYYt2fIx3b8ONwQBSfvih1e46cvmx1e4580pKbc6S/PUdO7bg9R9r1DXPkdIbfN8yRx3o4+uM6HLXKp29KMfV/fB5M/6BxaMhj7z4OyNBcbNW/cjFxDjxfvR4uRr7hYvQXX0yJwrEHvvirxzUOcH+kLH1RhNAS4u8QkfKqSGz0Pn4JrldFoq73ofdyx8Y3f/jlI4ofPwAQaYfvBp0/HNJQIcB5If7ja1zMb3986Cxx7873+OTqfYmbJyseO7Ti2LCqzz+iwqfvZN06AOncjIbb73yy3M/NaO8ns+OW6L1k9smHaQi1MMRPL+YTkfQhCekHkePXKG5+Iuckcm8P8Cxxaw/wE4k7e4Dnz0rduof/5MtUd+7hP/lAnuIDef3Fj+zh1JIHPq2DYz2+kRNflKJW2nON4/u9tyoc+bS5e6/C8Shxr8Lx/pUovdajNdLxD9VVX9JgQtjXp1WS3I/vsjI2M55XSX6icavS8pMZ1pEHW3nejrc/jHmUuDk7Tgfa3TxegE+nBBIOb7kOCqdW3PtSC4/DXVSPO7E+nher8enlKMFpv1Ja/k7SyyL8okiLHSppVA4i/O64nK8lDil54KvXQvGQXCjfq39NJFb7QuPVoanxIWqp+fSXDyJyerpULmwcTM61yXJfZlAspR7YXhWJs5dGLeNFkRrHwI4q8qJIYxw1dJ1acpiw85CiEBnP6xnlOr7ff+fY4nM7etwVjp7uxX5ux12RdJbUF0Xih+aB8ppIuUqc4vZgPcmchpjxrCkvJL442TomW47jr4nEDeZD5HkAfuE3/GmRtZw+hnXvq0/nNfOINbOW+rwVp49j3vxe+Fmkxv5Dq1oOIuNYRsAoI3h+NefTAm+tvOX0ttW9tdVR4t7aSj4p47+zqpHT3tK9VY2c3pJ6bARF0V3h5z/i90fl+V3EJ7NDkJmfv5Jw1JhfF42LGfqqxvW2RjqxMOexr2kIduv6c43TQ6qbd0SfaNy6IzpfS8Mka9Lf13hxjlWK76D88FH6n/rjdMcskr4QdYi6Y0OUcfyqPE+FdXzD4I5fPLiKb0+eArcd38WLT1KUkp6UfbFTBz7ue5hlpydU915qknZaUN18qenYjnsvNZ1/s+299qXRDgc1fCIST4absLwqEjuprZ1WD6fDXu6WmNtRDE+H92aJ+fly8EYv53v4ny6H63dcTvvFl8Ml1sucb+N/vhx5c617bgbHdJ3P7w/NONWplHSAe9qn/tin4+07xGMrYkuj/bDh/qEVcqr7v0b6cl+uyZCviPSKs2j7089CfdaS+K168NPPQp17RFGkchiX4/lm70s8fmVwgvOVD6KVr4jc7VT+hk79ROTeHDmGnSjeVevltQQveDz92Iq7XhWJVwik1Rd/aoRj9S5yvXo5LZZ4kh+Z/SSi33AGu6j84gQvEosr0et0Oae3Vm++EnVsieKzQ4+HzIch7tf72wjH16pubiN0ensb4SRxcxvh+Kj75jZC57e3EU4Pm25vI9welcMt3nl23NtGOJ4/eXMb4RON622Nm3eJ4+7tO7/Wp3e3M84a97Yzjl+1unnHe9a4d8d7vJYW9ZQ1P3/7qR39V7fj3rbKbY0XY+7mtooeP2p1d1tlfMN+16BfPDD3tkT0km/YEjk35NaWiB7PA7y1JaLXeH9L5NiOm1sinyxibr2SreX8/v+tV6H1/WMFP72Ye+041v3FEkTpOmwSnarD4s4svcvUvnRfNkY6uuril+6GCqrcH0zytDveLk49Stwc2U9uuW/2R/mG/jgeGnfzFvMocrNHzg+p81d1rvx8+WvPui/E/0Pm8PC+lG95ZH6SuVdgepa4VWD6icSdAtNPKmcunIp0vVwIFHP+IfK8/KacXqjSESv3/pgySGf8BZF+FbyD1J6L6OkFopsHaWqVt+9S9fS46t5d6lHi3l3q/SvRw5Ucn6vcOkhTTy9T3VzcfdKOWwdp6ullqptrqtMTorvHVx7bcW9NdeyOm8cRnjXuHUeo7f1lavuOZWp7e5l6TkAUR2V0yp/F/pjF3i+3p+PLKbcq5ZXfPwtY+e2zgI8SN1PY7SvR1zr0XqE8nd+xuVMnr6fDKW7eJX+icSuRvl+GRecUeLPYlo6nZNwrkz1q3KySPUX93brS2xqHstKzxr2q0lq/Y4V87NWbNaXnltydI8c+uVlTetT4hqu5O1fP13JvrrZvqIG+rXGYq+0bKqDbtxRAn3v1Xuny+Qf3VtGxHp9K3SnEOB718UO9cC4H+XDLf3oqde9V47PEva2YLu9uPBy/PD16rOZKfhf9p874hgN/tX/Lgb9vL2FO55ff/EjrSeHeN1pPl3H3E63Hrrh3Jq2O453gzTNpj59FjfM9HjeW+ciicl/j0QtXuprnhwzoePvDP2eJW0Hbr+vdoD0d/0Kq//BgvI+f/Xp7lr//JeL+DbO8vz/L+/Ud56afvk1DV9z5ED1/Ib+dv29z66X+c6So4plJT3uVHyOlv/9pqv7+p6n6+8+QvtAd5fk5Kcedl9JQLsH5eNBXNfr7Grnw8qPGqfqzxulCVDVvZfOHgTk1pFc8dc1fXvhJ5FiHGkt96mlf7WsiPQ5OpJ7fI/2iCFpC/A0i9XoqwqdH8xL7c4/trfHa4DSkkR/OCPziCMdZZ4/F/vN+5dMPneB0P+ntpR5peN7RRn8+NOewSZVK/XnY9NMZkDfL0Ho9psQLZUbpeeVPDTktL5Xje47KI62E+geN0/m+DeUbLd1llw+/msej/a74+a4Xteca7fgINx41PFj4+dUcuzVub2tNT+h/7tajyEglYM8nyfnNqRKTpAidfnxPi5pbd7iftCMkZjuenxPaT6f7IfQeuwZpkvQPxx2eatpbPGl84PN2nDS4RuEU18Nhsnw8MDFucx8or2ngsdjcYH6qcR6ZFgeOPLi9rBKV5A8ez/tE6N17AKF37wHkmAB6Kr8Y17MagX76nRklNtpHeb7SPEpQvBMziPpLt7k1zix5cPrx/tLIatrBUC7PVTq/vTt1lri3fOe3d6e+0B30eqd2qNQXg06xrnqwPD+3scv7d1by/p2V/No7qx+743Aw72dDo0nl+Ymaom9nMn17N+N0JR0HHz34kJPtZYT3tnaOEo9siN8Ylafvb30iooxyZX36/tZnIsjuD34pr3bCMuSxIH0evHIqfHjcpcY+QM8HUX5F5bERE8+m65UXmtdrGoVe02Cc7clpaL6icfcrMvoNb+eeNJhjg+aRRPLo0n0N1Piy/nCM/Iebs9O7OTcT81HiXmLub5eSnjsjtlW459eMf+qM4wekYiPisdasB5HTGdR3To89N4OjbEo41wl96VoYVajc+WURnDF6jZdF4gxaKfp8rh8/Th+3djxOGm//Xurbv5fHD+rd3P0/f5Tv5u7/+Ibd/2PUUk+v5edBuT405O2nU/39p1Pj/adTx87A/XrLL8J97Ixx/ALVrc4Y73/E6rG5+XY2Pu2S4UDfqj98f6bc1xDsbynVpxrj0vef0Y/jm1I3f/DLaYbd+8LwKNc3XEwp33Exp3elSvzaFsofbvrwzG6U0wDj7dO086j9C80QnPuQS40+NqOcZvvdTHgUGSw4CTM/wvj4NYCjiGA7Jv9QflUkytEkl8X9JHKsnUqv5UiuixtfaUmcIztkvHo5Wj0XDU03dV8T6ejYfvj6zKD6i0V+qIiv8rRjzyL4/htR7pMviVR83C//Xv08xHq6nFsHSZdTdr23LDtL3FqXHa/k7sLsLHJzZTZOT6lu56Mixx2mO68pjfp+jf+ob9f4HyXu1fjfv5LnBXLnHr33mtL4hmP5yukRNQm+DSw9lwrrF0SwdfDA8prI3TeVzi3hitpYOYmM4wNVhMyD02+NfkmGK16t5VSu8lUZHKnzkJSDzKln6kD35t+bL3Vvw8ZqfmL2s8jpYLx7rz6doufm22RnjXtvk41TYcW9t8nG8YS/m2+THdtxt0uPQxtLzsco11cjp8Q7aQ9OOfqLU54aIofk5QCkqNCYkofIOS4H7n0Y57yiuPVhnPPKNT5eMLQ//0rgkPc3BOT9DQFpv1Ti5re9zh0qcWej+ffm45Om8fZduHxD2f+Qbyj7H8eDyqIIUPM34D+e8XHSeDxm8j7tLZepf0VD4jirLvL89Ldx3O25N9FPzdAoVOnKemgG/9Jm9NjtfjwmODXj7U/6nSXuxay+feTJOIXsRXH3Prfqn3YGv3t/eFS4dXt4uo67d4dHjbs3h/0bXk0px33EmzeH/f1PpY3+9qfSjhI3bw5vX8np5vB6/+bwGw4oK6dXB+7fHNJ33BzSd9wc0nfcHNbvuTms33NzWL/n5pC+4+aQvuPmsLx/J3N9w83h9fbN4ZqW790dzvOy3r89PLfkbq/Sd9wf1u+5P6zfc39Yv+P+8LgcuHV7eF5Q3Lk77G8/DZyvsL9/I/JQ+YajqE/Pvh9TKl41aSM/7r3uawwUE5RWn2sc6+5b1N0zPX8GfyrfubfcPCrcWm4eV3k3l5tHjZvLzccD1m94ODqOj1awwOr9+ew4aVDH4Vxd62saGvFCp3aUi/p3RB19x/3/sU+w2BulHq7n9GLV3QPgj2dLtKjubHzl27yP2zunV6tuHgD/EHn/odVD5O2nVmeNe3cmDw09LozuvH33EDndIt06Bf6hcfx42r1j4L8wNnoam+MsuXUQ/Fnk5knwn4pc74vcOwv+sTF69/BzfrFjb54G/5nIrePgH5dzfOXs1kFmn4ncu50+X869E+HLxeWXt+TWmfBfEHk1AG+eCv/ok9Pq5Oax8J/N+7sThX/18Nw7Gb5cp09U3T0a/rOm3DobftZ1vX8nLPQdd8Ly/v7CZ2ucW+fDz3exzyp3DmY/q9x9EPbZ9dxsyekBMt7srcT1tbulW/fS57ulO/fSx6r8W2041/XfacP53SSsxTltvH7p/SbBO1Iy6msaPV6RppHeK/raO1IUCf6i59fST18xuPui1VHk3knqZ4lbJ6l/InHnJHU5fyG74c7mem1kf9BoL2oQNOrzQXlswr79mvUnGreeTq6d+1+pcfMbBufvW//DV1e/Ni6x9CYdL2aP3I5XNXqspx74qkbaqTlpvJ3R5e2M/snhCLHyGEQvnq+Ao2GpPts7O541ca8n6N2eOJ4AgjoT1vyyx1dOEemxG8m9lhc14vfxgS+eZtIZ7Xj1VJUed1EPuVdPVSm4c6GX+2NA4zAup9Uo46011voNGq+ddvPYVI2de+H2ogaeIOhpjh2/RovDuzo/1yjHZ6I6YjXY88d16s8qdO96HguPwyOzT9qCr56UY1uOnx2Ih9+P0U6HXH+hJR0ndvdL9NQSOe7NxrdGe+GTyqk6ivGwKT2jeayrbs+UjlvkcTgHpBwrXu/PFLq+ZaaM75gpRN8wU8Z3zJTTs6v7M4X4V84Uxge7OH+v6+eZQqcPOlMcKsKUf/36R5HTrYxSvIqvudyzf+Fq4iRNvno9XM3p3LnbV3M8cvobrqbE9vsDX/v94xpHYHIlfU2D0A7ib9CQ8qJGPO7lel0vakTh+0Pu1T6Nk6+5HmLmrFGh0Z6vKc4HHMeLsJT3yD4eTvz48Xz7kJVPNO7d7ZZWf63GvTvmY59WnONT9Tr16bvHrByb0XDTnY9G+gfN6N+QyE6nE99MZOdTtAmlkukw36+dxM34CJE875F+nU9punWc91Hk5sbfUeLext9Z4s7G3/G4+Fu37+cD5+/cvh9/Je+1obzbhvYt3/ls3/KZTz3V3t3/MMxR5t4cPUvcmqOfSNyZo+dvXN38ws1R4/3vKN2fI599F+rmHNHvmSP6/hzR9+eIvj1HjsXVqMwqOad/uAs6S8Sjh5KzyFck8HyM0mFkHyUeN/7H+6iBBe6rGlEBIem+8iuXkk/wSFuqX5GQCNsfnxZ+QUKL4HHQqTM6/WqVIiirlPwY5Wsq2L4rOuhVlYEvbOeN1S8NMGpNSV+LmBpFwI/ZUl5rBZ4G1+ulC3kskhkbommTedxVWBsBqzdL66804rEhiPPy+0sRVypO3K3jtVZw+hpT09ckBBWQfbx2IZiclV67kBq/B4/E/tKF4F1bbfKKwIh7wFy+8pWLuOKe6YdPKPwU6nT90uk94sHFoNd6Iub2UH6zK18TqIRidKrPv2tzlIiFzgPH2xLpTuVLEtjfoMNXfo6njOMbP7VdL0m0KOOrfL3WF/hcUa15JfyqxGuDiirAmnPml/oCtUStvjaoraJoteprEgVlvPzioAq+HSMvtaJonIf3WJy0lyTw3aeSH6N/lCh0PGaFkP9J6Nl207Ed+LphZ37tUvo//EDilyRiipf+WpSUHq+e/vAdjq9dCMpcL3pborzaCoXES+H+WOuiL5q+3YrXBvXuOy90erx0850XOu163X3n5bS60Fh/t34939A4rhiRNCRLtPsLcIkbtCJ1vCTRGV954NdaMeLE+8eKrLwiQRf2uK9WX2oFvjL1SMevXYjisyq9vHQh8/s/cT8zXmsFPtxVWv5S3RckWkTJ4ykoP5UodHwe9P4NYo0d6vLDYucrlxLfIS35PZ1XO/RFCZRxzkmCrvj4yi2149mMF15wS7sPcj/ScMOdX2j52IxzsKbzTOQliY4DQK78LvZPnXE6J+/227bEx6PE771te9xKidvu+Uz4dDnH154Ud++i5enxPZ+pxKHIDxZ+rnJ8fRiv6l16HKD+7uPg429k1Bw/fi5fmmr5i5t5Yf3zlZxeNLo/1Y6n7d09Xv2zEcazEHn+HaJHW9ovnydMeLUll8z+3Lt3DwA9FWN9okI4b1qOKqdzp+4WutGp0P1moduxJbcL3eyYvqfXc7fQjfQ0c28Vup2zwWNk05dNOS1tHg/RPrblVLoXu4vok3Y7VzeKPZxW83uU/HH9r+8fof0Qef+YtIfI2+eknTVuHkdw/2L0dDHvn6NdqH/DWWmftARvqlxFDy05vch070VZOh3VcvvUtrPK3WPbjiq3z207t+XuwW1nFSoovju2ZRxvtq6QmXw4wuoznbvnyH2ic/sguc907p4kd+7lu0fJnVXuniV3jKabL3sfw/ruaXJnkZvHydEYb+eGeh3vxG6+RH9syd1+PY/wzfPkPpm1tw+U+0Tn9olyn+ncPFLudHPYLkEIPZ8t9fqGpUK93l8qHDVuLhXuX8zzpcKx/CFuLH9IS19QYEI5a32+0qinIwfvHq3zici9c0rut+S5yHGadvwqt3Johr4/w04ad2fY6SHW3ecEld5/TlCpHB+/49Nf+XHvh9rHh8phRTu/GhYq4/BbXo8fdbq1d/hJx978plM9vTVFOEvqOkmU40oU+5gPLqeePY3PzdrUT1QYr3LzD5vUX1KheILxwPaySpzwM2oZL/cLo+5X5NV52+Oh4ehcT/P2rkr6kN9XVSK/PVBeVLlf+vtZ/96rq76dsJ8vZevp/D888VI9pcnzYd43S7M/1blZnP24JPmeITrp3CvP/kTjVn32ZxpPC7T/5fF/fv+HP/3tX//81z/8/u9/+utf/vvx9/5vSv3tT7//tz//cf/f//ifv/wh/du/////5f/m3/72pz//+U//+a//9be//uGP//4/f/vjVJr/7rdr/88/9/nZlf54Gv4v//Rbefz/UR4/i+PxoPfx/+vj/z+2SZjmv5v/sc7zPR7/o/MfzP+6z1/zx//Qv/zfbO7/Aw=="
359
+ "debug_symbols": "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"
360
360
  },
361
361
  {
362
362
  "name": "public_dispatch",
@@ -579,7 +579,7 @@
579
579
  }
580
580
  },
581
581
  "bytecode": "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",
582
- "debug_symbols": "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"
582
+ "debug_symbols": "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"
583
583
  }
584
584
  ],
585
585
  "outputs": {
@@ -881,7 +881,7 @@
881
881
  },
882
882
  "3": {
883
883
  "path": "std/array/mod.nr",
884
- "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat<let M: u32>(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n"
884
+ "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat<let M: u32>(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the [`Self::sort_via`] function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n"
885
885
  },
886
886
  "323": {
887
887
  "path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr",
@@ -933,7 +933,7 @@
933
933
  },
934
934
  "6": {
935
935
  "path": "std/collections/bounded_vec.nr",
936
- "source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n if is_unconstrained() {\n for i in 0..append_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n static_assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0, \"cannot pop from an empty vector\");\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n if is_unconstrained() {\n for i in 0..self.len {\n ret |= predicate(self.storage[i]);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element\n /// in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.mapi(|i, value| i + value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Calls a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::<u32, 4>::new();\n /// vec.for_each(|value| result.push(value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Calls a closure on each element in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::<u32, 4>::new();\n /// vec.for_eachi(|i, value| result.push(i + value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(i, self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use `from_parts_unchecked` to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n\n if is_unconstrained() {\n for i in len..MaxLen {\n array[i] = zeroed;\n }\n } else {\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n }\n\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen>\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n let _ = vec.get(0);\n }\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_beyond_length() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n let _ = vec.get(3);\n }\n\n #[test]\n fn get_works_within_bounds() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(2), 3);\n assert_eq(vec.get(4), 5);\n }\n\n #[test]\n fn get_unchecked_works() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n assert_eq(vec.get_unchecked(0), 1);\n assert_eq(vec.get_unchecked(2), 3);\n }\n\n #[test]\n fn get_unchecked_works_past_len() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n assert_eq(vec.get_unchecked(4), 0);\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_setting_beyond_length() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n vec.set(3, 4);\n }\n\n #[test]\n fn set_unchecked_operations() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n\n vec.set_unchecked(0, 10);\n assert_eq(vec.get(0), 10);\n }\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn set_unchecked_operations_past_len() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n\n vec.set_unchecked(3, 40);\n assert_eq(vec.get(3), 40);\n }\n\n #[test]\n fn set_preserves_other_elements() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n\n vec.set(2, 30);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 30);\n assert_eq(vec.get(3), 4);\n assert_eq(vec.get(4), 5);\n }\n }\n\n mod any {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn returns_false_if_predicate_not_satisfied() {\n let vec: BoundedVec<bool, 4> = BoundedVec::from_array([false, false, false, false]);\n let result = vec.any(|value| value);\n\n assert(!result);\n }\n\n #[test]\n fn returns_true_if_predicate_satisfied() {\n let vec: BoundedVec<bool, 4> = BoundedVec::from_array([false, false, true, true]);\n let result = vec.any(|value| value);\n\n assert(result);\n }\n\n #[test]\n fn returns_false_on_empty_boundedvec() {\n let vec: BoundedVec<bool, 0> = BoundedVec::new();\n let result = vec.any(|value| value);\n\n assert(!result);\n }\n\n #[test]\n fn any_with_complex_predicates() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n\n assert(vec.any(|x| x > 3));\n assert(!vec.any(|x| x > 10));\n assert(vec.any(|x| x % 2 == 0)); // has a even number\n assert(vec.any(|x| x == 3)); // has a specific value\n }\n\n #[test]\n fn any_with_partial_vector() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n\n assert(vec.any(|x| x == 1));\n assert(vec.any(|x| x == 2));\n assert(!vec.any(|x| x == 3));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn map_with_conditional_logic() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n\n let result = vec.map(|x| if x % 2 == 0 { x * 2 } else { x });\n let expected = BoundedVec::from_array([1, 4, 3, 8]);\n assert_eq(result, expected);\n }\n\n #[test]\n fn map_preserves_length() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|x| x * 2);\n\n assert_eq(result.len(), vec.len());\n assert_eq(result.max_len(), vec.max_len());\n }\n\n #[test]\n fn map_on_empty_vector() {\n let vec: BoundedVec<u32, 5> = BoundedVec::new();\n let result = vec.map(|x| x * 2);\n assert_eq(result, vec);\n assert_eq(result.len(), 0);\n assert_eq(result.max_len(), 5);\n }\n }\n\n mod mapi {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-mapi-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| i + value * 2);\n // docs:end:bounded-vec-mapi-example\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| (i + value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn mapi_with_index_branching_logic() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n\n let result = vec.mapi(|i, x| if i % 2 == 0 { x * 2 } else { x });\n let expected = BoundedVec::from_array([2, 2, 6, 4]);\n assert_eq(result, expected);\n }\n }\n\n mod for_each {\n use crate::collections::bounded_vec::BoundedVec;\n\n // map in terms of for_each\n fn for_each_map<T, U, Env, let MaxLen: u32>(\n input: BoundedVec<T, MaxLen>,\n f: fn[Env](T) -> U,\n ) -> BoundedVec<U, MaxLen> {\n let mut output = BoundedVec::<U, MaxLen>::new();\n let output_ref = &mut output;\n input.for_each(|x| output_ref.push(f(x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-each-example\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n vec.for_each(|value| { *acc_ref += value; });\n // docs:end:bounded-vec-for-each-example\n assert_eq(acc, 6);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| value * 2);\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn for_each_on_empty_vector() {\n let vec: BoundedVec<u32, 5> = BoundedVec::new();\n let mut count = 0;\n let count_ref = &mut count;\n vec.for_each(|_| { *count_ref += 1; });\n assert_eq(count, 0);\n }\n\n #[test]\n fn for_each_with_side_effects() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n let mut seen = BoundedVec::<u32, 3>::new();\n let seen_ref = &mut seen;\n vec.for_each(|x| seen_ref.push(x));\n assert_eq(seen, vec);\n }\n }\n\n mod for_eachi {\n use crate::collections::bounded_vec::BoundedVec;\n\n // mapi in terms of for_eachi\n fn for_eachi_mapi<T, U, Env, let MaxLen: u32>(\n input: BoundedVec<T, MaxLen>,\n f: fn[Env](u32, T) -> U,\n ) -> BoundedVec<U, MaxLen> {\n let mut output = BoundedVec::<U, MaxLen>::new();\n let output_ref = &mut output;\n input.for_eachi(|i, x| output_ref.push(f(i, x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-eachi-example\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n vec.for_eachi(|i, value| { *acc_ref += i * value; });\n // docs:end:bounded-vec-for-eachi-example\n\n // 0 * 1 + 1 * 2 + 2 * 3\n assert_eq(acc, 8);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn for_eachi_on_empty_vector() {\n let vec: BoundedVec<u32, 5> = BoundedVec::new();\n let mut count = 0;\n let count_ref = &mut count;\n vec.for_eachi(|_, _| { *count_ref += 1; });\n assert_eq(count, 0);\n }\n\n #[test]\n fn for_eachi_with_index_tracking() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([10, 20, 30]);\n let mut indices = BoundedVec::<u32, 3>::new();\n let indices_ref = &mut indices;\n vec.for_eachi(|i, _| indices_ref.push(i));\n\n let expected = BoundedVec::from_array([0, 1, 2]);\n assert_eq(indices, expected);\n }\n\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n\n #[test]\n fn from_array_preserves_order() {\n let array = [5, 3, 1, 4, 2];\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array(array);\n for i in 0..array.len() {\n assert_eq(vec.get(i), array[i]);\n }\n }\n\n #[test]\n fn from_array_with_different_types() {\n let bool_array = [true, false, true];\n let bool_vec: BoundedVec<bool, 3> = BoundedVec::from_array(bool_array);\n assert_eq(bool_vec.len(), 3);\n assert_eq(bool_vec.get(0), true);\n assert_eq(bool_vec.get(1), false);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n use crate::convert::From;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n\n mod push_pop {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn push_and_pop_operations() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n\n assert_eq(vec.len(), 0);\n\n vec.push(1);\n assert_eq(vec.len(), 1);\n assert_eq(vec.get(0), 1);\n\n vec.push(2);\n assert_eq(vec.len(), 2);\n assert_eq(vec.get(1), 2);\n\n let popped = vec.pop();\n assert_eq(popped, 2);\n assert_eq(vec.len(), 1);\n\n let popped2 = vec.pop();\n assert_eq(popped2, 1);\n assert_eq(vec.len(), 0);\n }\n\n #[test(should_fail_with = \"push out of bounds\")]\n fn push_to_full_vector() {\n let mut vec: BoundedVec<u32, 2> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n vec.push(3); // should panic\n }\n\n #[test(should_fail_with = \"cannot pop from an empty vector\")]\n fn pop_from_empty_vector() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n let _ = vec.pop(); // should panic\n }\n\n #[test]\n fn push_pop_cycle() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n\n // push to full\n vec.push(1);\n vec.push(2);\n vec.push(3);\n assert_eq(vec.len(), 3);\n\n // pop all\n assert_eq(vec.pop(), 3);\n assert_eq(vec.pop(), 2);\n assert_eq(vec.pop(), 1);\n assert_eq(vec.len(), 0);\n\n // push again\n vec.push(4);\n assert_eq(vec.len(), 1);\n assert_eq(vec.get(0), 4);\n }\n }\n\n mod extend {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn extend_from_array() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_array([2, 3]);\n\n assert_eq(vec.len(), 3);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 3);\n }\n\n #[test]\n fn extend_from_slice() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_slice(&[2, 3]);\n\n assert_eq(vec.len(), 3);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 3);\n }\n\n #[test]\n fn extend_from_bounded_vec() {\n let mut vec1: BoundedVec<u32, 5> = BoundedVec::new();\n let mut vec2: BoundedVec<u32, 3> = BoundedVec::new();\n\n vec1.push(1);\n vec2.push(2);\n vec2.push(3);\n\n vec1.extend_from_bounded_vec(vec2);\n\n assert_eq(vec1.len(), 3);\n assert_eq(vec1.get(0), 1);\n assert_eq(vec1.get(1), 2);\n assert_eq(vec1.get(2), 3);\n }\n\n #[test(should_fail_with = \"extend_from_array out of bounds\")]\n fn extend_array_beyond_max_len() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_array([2, 3, 4]); // should panic\n }\n\n #[test(should_fail_with = \"extend_from_slice out of bounds\")]\n fn extend_slice_beyond_max_len() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_slice(&[2, 3, 4]); // S]should panic\n }\n\n #[test(should_fail_with = \"extend_from_bounded_vec out of bounds\")]\n fn extend_bounded_vec_beyond_max_len() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n let other: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n vec.extend_from_bounded_vec(other); // should panic\n }\n\n #[test]\n fn extend_with_empty_collections() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n let original_len = vec.len();\n\n vec.extend_from_array([]);\n assert_eq(vec.len(), original_len);\n\n vec.extend_from_slice(&[]);\n assert_eq(vec.len(), original_len);\n\n let empty: BoundedVec<u32, 3> = BoundedVec::new();\n vec.extend_from_bounded_vec(empty);\n assert_eq(vec.len(), original_len);\n }\n }\n\n mod storage {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn storage_consistency() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n\n // test initial storage state\n assert_eq(vec.storage(), [0, 0, 0, 0, 0]);\n\n vec.push(1);\n vec.push(2);\n\n // test storage after modifications\n assert_eq(vec.storage(), [1, 2, 0, 0, 0]);\n\n // storage doesn't change length\n assert_eq(vec.len(), 2);\n assert_eq(vec.max_len(), 5);\n }\n\n #[test]\n fn storage_after_pop() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n\n let _ = vec.pop();\n // after pop, the last element should be zeroed\n assert_eq(vec.storage(), [1, 2, 0]);\n assert_eq(vec.len(), 2);\n }\n\n #[test]\n fn vector_immutable() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n let storage = vec.storage();\n\n assert_eq(storage, [1, 2, 3]);\n\n // Verify that the original vector is unchanged\n assert_eq(vec.len(), 3);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 3);\n }\n }\n}\n"
936
+ "source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a [`Vec`][crate::collections::vec::Vec]`<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n if is_unconstrained() {\n for i in 0..append_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n static_assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0, \"cannot pop from an empty vector\");\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n if is_unconstrained() {\n for i in 0..self.len {\n ret |= predicate(self.storage[i]);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element\n /// in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.mapi(|i, value| i + value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Calls a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::<u32, 4>::new();\n /// vec.for_each(|value| result.push(value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Calls a closure on each element in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::<u32, 4>::new();\n /// vec.for_eachi(|i, value| result.push(i + value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(i, self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use [`from_parts_unchecked`][Self::from_parts_unchecked] to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n\n if is_unconstrained() {\n for i in len..MaxLen {\n array[i] = zeroed;\n }\n } else {\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n }\n\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen>\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n let _ = vec.get(0);\n }\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_beyond_length() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n let _ = vec.get(3);\n }\n\n #[test]\n fn get_works_within_bounds() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(2), 3);\n assert_eq(vec.get(4), 5);\n }\n\n #[test]\n fn get_unchecked_works() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n assert_eq(vec.get_unchecked(0), 1);\n assert_eq(vec.get_unchecked(2), 3);\n }\n\n #[test]\n fn get_unchecked_works_past_len() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n assert_eq(vec.get_unchecked(4), 0);\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_setting_beyond_length() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n vec.set(3, 4);\n }\n\n #[test]\n fn set_unchecked_operations() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n\n vec.set_unchecked(0, 10);\n assert_eq(vec.get(0), 10);\n }\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn set_unchecked_operations_past_len() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n\n vec.set_unchecked(3, 40);\n assert_eq(vec.get(3), 40);\n }\n\n #[test]\n fn set_preserves_other_elements() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n\n vec.set(2, 30);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 30);\n assert_eq(vec.get(3), 4);\n assert_eq(vec.get(4), 5);\n }\n }\n\n mod any {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn returns_false_if_predicate_not_satisfied() {\n let vec: BoundedVec<bool, 4> = BoundedVec::from_array([false, false, false, false]);\n let result = vec.any(|value| value);\n\n assert(!result);\n }\n\n #[test]\n fn returns_true_if_predicate_satisfied() {\n let vec: BoundedVec<bool, 4> = BoundedVec::from_array([false, false, true, true]);\n let result = vec.any(|value| value);\n\n assert(result);\n }\n\n #[test]\n fn returns_false_on_empty_boundedvec() {\n let vec: BoundedVec<bool, 0> = BoundedVec::new();\n let result = vec.any(|value| value);\n\n assert(!result);\n }\n\n #[test]\n fn any_with_complex_predicates() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n\n assert(vec.any(|x| x > 3));\n assert(!vec.any(|x| x > 10));\n assert(vec.any(|x| x % 2 == 0)); // has a even number\n assert(vec.any(|x| x == 3)); // has a specific value\n }\n\n #[test]\n fn any_with_partial_vector() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n\n assert(vec.any(|x| x == 1));\n assert(vec.any(|x| x == 2));\n assert(!vec.any(|x| x == 3));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn map_with_conditional_logic() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n\n let result = vec.map(|x| if x % 2 == 0 { x * 2 } else { x });\n let expected = BoundedVec::from_array([1, 4, 3, 8]);\n assert_eq(result, expected);\n }\n\n #[test]\n fn map_preserves_length() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|x| x * 2);\n\n assert_eq(result.len(), vec.len());\n assert_eq(result.max_len(), vec.max_len());\n }\n\n #[test]\n fn map_on_empty_vector() {\n let vec: BoundedVec<u32, 5> = BoundedVec::new();\n let result = vec.map(|x| x * 2);\n assert_eq(result, vec);\n assert_eq(result.len(), 0);\n assert_eq(result.max_len(), 5);\n }\n }\n\n mod mapi {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-mapi-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| i + value * 2);\n // docs:end:bounded-vec-mapi-example\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| (i + value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn mapi_with_index_branching_logic() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n\n let result = vec.mapi(|i, x| if i % 2 == 0 { x * 2 } else { x });\n let expected = BoundedVec::from_array([2, 2, 6, 4]);\n assert_eq(result, expected);\n }\n }\n\n mod for_each {\n use crate::collections::bounded_vec::BoundedVec;\n\n // map in terms of for_each\n fn for_each_map<T, U, Env, let MaxLen: u32>(\n input: BoundedVec<T, MaxLen>,\n f: fn[Env](T) -> U,\n ) -> BoundedVec<U, MaxLen> {\n let mut output = BoundedVec::<U, MaxLen>::new();\n let output_ref = &mut output;\n input.for_each(|x| output_ref.push(f(x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-each-example\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n vec.for_each(|value| { *acc_ref += value; });\n // docs:end:bounded-vec-for-each-example\n assert_eq(acc, 6);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| value * 2);\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn for_each_on_empty_vector() {\n let vec: BoundedVec<u32, 5> = BoundedVec::new();\n let mut count = 0;\n let count_ref = &mut count;\n vec.for_each(|_| { *count_ref += 1; });\n assert_eq(count, 0);\n }\n\n #[test]\n fn for_each_with_side_effects() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n let mut seen = BoundedVec::<u32, 3>::new();\n let seen_ref = &mut seen;\n vec.for_each(|x| seen_ref.push(x));\n assert_eq(seen, vec);\n }\n }\n\n mod for_eachi {\n use crate::collections::bounded_vec::BoundedVec;\n\n // mapi in terms of for_eachi\n fn for_eachi_mapi<T, U, Env, let MaxLen: u32>(\n input: BoundedVec<T, MaxLen>,\n f: fn[Env](u32, T) -> U,\n ) -> BoundedVec<U, MaxLen> {\n let mut output = BoundedVec::<U, MaxLen>::new();\n let output_ref = &mut output;\n input.for_eachi(|i, x| output_ref.push(f(i, x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-eachi-example\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n vec.for_eachi(|i, value| { *acc_ref += i * value; });\n // docs:end:bounded-vec-for-eachi-example\n\n // 0 * 1 + 1 * 2 + 2 * 3\n assert_eq(acc, 8);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn for_eachi_on_empty_vector() {\n let vec: BoundedVec<u32, 5> = BoundedVec::new();\n let mut count = 0;\n let count_ref = &mut count;\n vec.for_eachi(|_, _| { *count_ref += 1; });\n assert_eq(count, 0);\n }\n\n #[test]\n fn for_eachi_with_index_tracking() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([10, 20, 30]);\n let mut indices = BoundedVec::<u32, 3>::new();\n let indices_ref = &mut indices;\n vec.for_eachi(|i, _| indices_ref.push(i));\n\n let expected = BoundedVec::from_array([0, 1, 2]);\n assert_eq(indices, expected);\n }\n\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n\n #[test]\n fn from_array_preserves_order() {\n let array = [5, 3, 1, 4, 2];\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array(array);\n for i in 0..array.len() {\n assert_eq(vec.get(i), array[i]);\n }\n }\n\n #[test]\n fn from_array_with_different_types() {\n let bool_array = [true, false, true];\n let bool_vec: BoundedVec<bool, 3> = BoundedVec::from_array(bool_array);\n assert_eq(bool_vec.len(), 3);\n assert_eq(bool_vec.get(0), true);\n assert_eq(bool_vec.get(1), false);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n use crate::convert::From;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n\n mod push_pop {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn push_and_pop_operations() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n\n assert_eq(vec.len(), 0);\n\n vec.push(1);\n assert_eq(vec.len(), 1);\n assert_eq(vec.get(0), 1);\n\n vec.push(2);\n assert_eq(vec.len(), 2);\n assert_eq(vec.get(1), 2);\n\n let popped = vec.pop();\n assert_eq(popped, 2);\n assert_eq(vec.len(), 1);\n\n let popped2 = vec.pop();\n assert_eq(popped2, 1);\n assert_eq(vec.len(), 0);\n }\n\n #[test(should_fail_with = \"push out of bounds\")]\n fn push_to_full_vector() {\n let mut vec: BoundedVec<u32, 2> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n vec.push(3); // should panic\n }\n\n #[test(should_fail_with = \"cannot pop from an empty vector\")]\n fn pop_from_empty_vector() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n let _ = vec.pop(); // should panic\n }\n\n #[test]\n fn push_pop_cycle() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n\n // push to full\n vec.push(1);\n vec.push(2);\n vec.push(3);\n assert_eq(vec.len(), 3);\n\n // pop all\n assert_eq(vec.pop(), 3);\n assert_eq(vec.pop(), 2);\n assert_eq(vec.pop(), 1);\n assert_eq(vec.len(), 0);\n\n // push again\n vec.push(4);\n assert_eq(vec.len(), 1);\n assert_eq(vec.get(0), 4);\n }\n }\n\n mod extend {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn extend_from_array() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_array([2, 3]);\n\n assert_eq(vec.len(), 3);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 3);\n }\n\n #[test]\n fn extend_from_slice() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_slice(&[2, 3]);\n\n assert_eq(vec.len(), 3);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 3);\n }\n\n #[test]\n fn extend_from_bounded_vec() {\n let mut vec1: BoundedVec<u32, 5> = BoundedVec::new();\n let mut vec2: BoundedVec<u32, 3> = BoundedVec::new();\n\n vec1.push(1);\n vec2.push(2);\n vec2.push(3);\n\n vec1.extend_from_bounded_vec(vec2);\n\n assert_eq(vec1.len(), 3);\n assert_eq(vec1.get(0), 1);\n assert_eq(vec1.get(1), 2);\n assert_eq(vec1.get(2), 3);\n }\n\n #[test(should_fail_with = \"extend_from_array out of bounds\")]\n fn extend_array_beyond_max_len() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_array([2, 3, 4]); // should panic\n }\n\n #[test(should_fail_with = \"extend_from_slice out of bounds\")]\n fn extend_slice_beyond_max_len() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_slice(&[2, 3, 4]); // S]should panic\n }\n\n #[test(should_fail_with = \"extend_from_bounded_vec out of bounds\")]\n fn extend_bounded_vec_beyond_max_len() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n let other: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n vec.extend_from_bounded_vec(other); // should panic\n }\n\n #[test]\n fn extend_with_empty_collections() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n let original_len = vec.len();\n\n vec.extend_from_array([]);\n assert_eq(vec.len(), original_len);\n\n vec.extend_from_slice(&[]);\n assert_eq(vec.len(), original_len);\n\n let empty: BoundedVec<u32, 3> = BoundedVec::new();\n vec.extend_from_bounded_vec(empty);\n assert_eq(vec.len(), original_len);\n }\n }\n\n mod storage {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn storage_consistency() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n\n // test initial storage state\n assert_eq(vec.storage(), [0, 0, 0, 0, 0]);\n\n vec.push(1);\n vec.push(2);\n\n // test storage after modifications\n assert_eq(vec.storage(), [1, 2, 0, 0, 0]);\n\n // storage doesn't change length\n assert_eq(vec.len(), 2);\n assert_eq(vec.max_len(), 5);\n }\n\n #[test]\n fn storage_after_pop() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n\n let _ = vec.pop();\n // after pop, the last element should be zeroed\n assert_eq(vec.storage(), [1, 2, 0]);\n assert_eq(vec.len(), 2);\n }\n\n #[test]\n fn vector_immutable() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n let storage = vec.storage();\n\n assert_eq(storage, [1, 2, 3]);\n\n // Verify that the original vector is unchanged\n assert_eq(vec.len(), 3);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 3);\n }\n }\n}\n"
937
937
  },
938
938
  "62": {
939
939
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/capsules/mod.nr",