diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 700be04..d8b6e9c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,30 +1,31 @@ name: Continuous Integration -on: [push, pull_request] +on: + push: + branches: + - master + pull_request: jobs: test: name: Test - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - node-version: ["12", "14", "16", "18"] + timeout-minutes: 15 + runs-on: ubuntu-latest steps: - name: Checkout project - uses: actions/checkout@v2 + uses: actions/checkout@v6 - name: Setup Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v6 with: - node-version: ${{ matrix.node-version }} - check-latest: true - cache: 'npm' + node-version: "lts/*" + cache: "npm" - name: Install dependencies run: npm ci + - name: Install Playwright dependencies + run: npx playwright install --with-deps chromium + - name: Run tests run: npm test diff --git a/.gitignore b/.gitignore index 07d2049..7097acb 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,4 @@ typings/ tmp .DS_Store +.idea/ diff --git a/build/bls12381_wasm.js b/build/bls12381_wasm.js index 27fc492..d7d853b 100644 --- a/build/bls12381_wasm.js +++ b/build/bls12381_wasm.js @@ -1,18 +1,16 @@ - - exports.code = "AGFzbQEAAAABlQESYAJ/fwBgAX8AYAF/AX9gAn9/AX9gA39/fwF/YAN/f38AYAN/fn8AYAJ/fgBgBH9/f38AYAV/f39/fwBgBH9/f38Bf2AGf39/f39/AGAIf39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38Bf2AHf39/f39/fwF/YAl/f39/f39/f38Bf2ALf39/f39/f39/f38BfwIPAQNlbnYGbWVtb3J5AgAZA9MC0QIAAQIBAwMEBAUAAAYHCAUCBQUAAAUAAAAAAgIAAQUICQUFBQgICAgAAgABAgEDAwQEBQAABgcIBQIFBQAABQAAAAACAgABBQgJBQUFCAgICAACBQAAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgDAAgIAgAACQsLBQULAAgNCQgCAgEBAAUFAAUFAAAAAAMACAICCQgAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgFAwAICAIAAAkLCwUFCwUDAAgIAgAACQsLBQULBQUJCQkJCQACAgEBAAUABQUAAgAAAwAIAgkIAAICAQEABQUABQUAAAAAAwAIAgIJCAACBQgJBQAAAAAAAAAAAAACAgICBQAAAAUAAAAABA4PEBEFB84nvQIJaW50cV9jb3B5AAAJaW50cV96ZXJvAAEIaW50cV9vbmUAAwtpbnRxX2lzWmVybwACB2ludHFfZXEABAhpbnRxX2d0ZQAFCGludHFfYWRkAAYIaW50cV9zdWIABwhpbnRxX211bAAIC2ludHFfc3F1YXJlAAkOaW50cV9zcXVhcmVPbGQACghpbnRxX2RpdgAND2ludHFfaW52ZXJzZU1vZAAOCGYxbV9jb3B5AAAIZjFtX3plcm8AAQpmMW1faXNaZXJvAAIGZjFtX2VxAAQHZjFtX2FkZAAQB2YxbV9zdWIAEQdmMW1fbmVnABIOZjFtX2lzTmVnYXRpdmUAGQlmMW1faXNPbmUADwhmMW1fc2lnbgAaC2YxbV9tUmVkdWN0ABMHZjFtX211bAAUCmYxbV9zcXVhcmUAFQ1mMW1fc3F1YXJlT2xkABYSZjFtX2Zyb21Nb250Z29tZXJ5ABgQZjFtX3RvTW9udGdvbWVyeQAXC2YxbV9pbnZlcnNlABsHZjFtX29uZQAcCGYxbV9sb2FkAB0PZjFtX3RpbWVzU2NhbGFyAB4HZjFtX2V4cAAmEGYxbV9iYXRjaEludmVyc2UAHwhmMW1fc3FydAAnDGYxbV9pc1NxdWFyZQAoFWYxbV9iYXRjaFRvTW9udGdvbWVyeQAgF2YxbV9iYXRjaEZyb21Nb250Z29tZXJ5ACEJaW50cl9jb3B5ACkJaW50cl96ZXJvACoIaW50cl9vbmUALAtpbnRyX2lzWmVybwArB2ludHJfZXEALQhpbnRyX2d0ZQAuCGludHJfYWRkAC8IaW50cl9zdWIAMAhpbnRyX211bAAxC2ludHJfc3F1YXJlADIOaW50cl9zcXVhcmVPbGQAMwhpbnRyX2RpdgA2D2ludHJfaW52ZXJzZU1vZAA3CGZybV9jb3B5ACkIZnJtX3plcm8AKgpmcm1faXNaZXJvACsGZnJtX2VxAC0HZnJtX2FkZAA5B2ZybV9zdWIAOgdmcm1fbmVnADsOZnJtX2lzTmVnYXRpdmUAQglmcm1faXNPbmUAOAhmcm1fc2lnbgBDC2ZybV9tUmVkdWN0ADwHZnJtX211bAA9CmZybV9zcXVhcmUAPg1mcm1fc3F1YXJlT2xkAD8SZnJtX2Zyb21Nb250Z29tZXJ5AEEQZnJtX3RvTW9udGdvbWVyeQBAC2ZybV9pbnZlcnNlAEQHZnJtX29uZQBFCGZybV9sb2FkAEYPZnJtX3RpbWVzU2NhbGFyAEcHZnJtX2V4cABPEGZybV9iYXRjaEludmVyc2UASAhmcm1fc3FydABQDGZybV9pc1NxdWFyZQBRFWZybV9iYXRjaFRvTW9udGdvbWVyeQBJF2ZybV9iYXRjaEZyb21Nb250Z29tZXJ5AEoGZnJfYWRkADkGZnJfc3ViADoGZnJfbmVnADsGZnJfbXVsAFIJZnJfc3F1YXJlAFMKZnJfaW52ZXJzZQBUDWZyX2lzTmVnYXRpdmUAVQdmcl9jb3B5ACkHZnJfemVybwAqBmZyX29uZQBFCWZyX2lzWmVybwArBWZyX2VxAC0MZzFtX211bHRpZXhwAIABEmcxbV9tdWx0aWV4cF9jaHVuawB/EmcxbV9tdWx0aWV4cEFmZmluZQCEARhnMW1fbXVsdGlleHBBZmZpbmVfY2h1bmsAgwEKZzFtX2lzWmVybwBXEGcxbV9pc1plcm9BZmZpbmUAVgZnMW1fZXEAXwtnMW1fZXFNaXhlZABeDGcxbV9lcUFmZmluZQBdCGcxbV9jb3B5AFsOZzFtX2NvcHlBZmZpbmUAWghnMW1femVybwBZDmcxbV96ZXJvQWZmaW5lAFgKZzFtX2RvdWJsZQBhEGcxbV9kb3VibGVBZmZpbmUAYAdnMW1fYWRkAGQMZzFtX2FkZE1peGVkAGMNZzFtX2FkZEFmZmluZQBiB2cxbV9uZWcAZg1nMW1fbmVnQWZmaW5lAGUHZzFtX3N1YgBpDGcxbV9zdWJNaXhlZABoDWcxbV9zdWJBZmZpbmUAZxJnMW1fZnJvbU1vbnRnb21lcnkAaxhnMW1fZnJvbU1vbnRnb21lcnlBZmZpbmUAahBnMW1fdG9Nb250Z29tZXJ5AG0WZzFtX3RvTW9udGdvbWVyeUFmZmluZQBsD2cxbV90aW1lc1NjYWxhcgCFARVnMW1fdGltZXNTY2FsYXJBZmZpbmUAhgENZzFtX25vcm1hbGl6ZQByCmcxbV9MRU10b1UAdApnMW1fTEVNdG9DAHUKZzFtX1V0b0xFTQB2CmcxbV9DdG9MRU0Adw9nMW1fYmF0Y2hMRU10b1UAeA9nMW1fYmF0Y2hMRU10b0MAeQ9nMW1fYmF0Y2hVdG9MRU0Aeg9nMW1fYmF0Y2hDdG9MRU0AewxnMW1fdG9BZmZpbmUAbg5nMW1fdG9KYWNvYmlhbgBcEWcxbV9iYXRjaFRvQWZmaW5lAHETZzFtX2JhdGNoVG9KYWNvYmlhbgB8C2cxbV9pbkN1cnZlAHARZzFtX2luQ3VydmVBZmZpbmUAbxdmcm1fX3JldmVyc2VQZXJtdXRhdGlvbgCIAQdmcm1fZmZ0AIwBCGZybV9pZmZ0AI0BCmZybV9yYXdmZnQAigELZnJtX2ZmdEpvaW4AjgEOZnJtX2ZmdEpvaW5FeHQAjwERZnJtX2ZmdEpvaW5FeHRJbnYAkAEKZnJtX2ZmdE1peACRAQxmcm1fZmZ0RmluYWwAkgEdZnJtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24AkwEIcG9sX3plcm8AlAEPcG9sX2NvbnN0cnVjdExDAJUBDHFhcF9idWlsZEFCQwCWAQtxYXBfam9pbkFCQwCXAQxxYXBfYmF0Y2hBZGQAmAEKZjJtX2lzWmVybwCZAQlmMm1faXNPbmUAmgEIZjJtX3plcm8AmwEHZjJtX29uZQCcAQhmMm1fY29weQCdAQdmMm1fbXVsAJ4BCGYybV9tdWwxAJ8BCmYybV9zcXVhcmUAoAEHZjJtX2FkZAChAQdmMm1fc3ViAKIBB2YybV9uZWcAowEIZjJtX3NpZ24AqgENZjJtX2Nvbmp1Z2F0ZQCkARJmMm1fZnJvbU1vbnRnb21lcnkApgEQZjJtX3RvTW9udGdvbWVyeQClAQZmMm1fZXEApwELZjJtX2ludmVyc2UAqAEHZjJtX2V4cACtAQ9mMm1fdGltZXNTY2FsYXIAqQEQZjJtX2JhdGNoSW52ZXJzZQCsAQhmMm1fc3FydACuAQxmMm1faXNTcXVhcmUArwEOZjJtX2lzTmVnYXRpdmUAqwEMZzJtX211bHRpZXhwANoBEmcybV9tdWx0aWV4cF9jaHVuawDZARJnMm1fbXVsdGlleHBBZmZpbmUA3gEYZzJtX211bHRpZXhwQWZmaW5lX2NodW5rAN0BCmcybV9pc1plcm8AsQEQZzJtX2lzWmVyb0FmZmluZQCwAQZnMm1fZXEAuQELZzJtX2VxTWl4ZWQAuAEMZzJtX2VxQWZmaW5lALcBCGcybV9jb3B5ALUBDmcybV9jb3B5QWZmaW5lALQBCGcybV96ZXJvALMBDmcybV96ZXJvQWZmaW5lALIBCmcybV9kb3VibGUAuwEQZzJtX2RvdWJsZUFmZmluZQC6AQdnMm1fYWRkAL4BDGcybV9hZGRNaXhlZAC9AQ1nMm1fYWRkQWZmaW5lALwBB2cybV9uZWcAwAENZzJtX25lZ0FmZmluZQC/AQdnMm1fc3ViAMMBDGcybV9zdWJNaXhlZADCAQ1nMm1fc3ViQWZmaW5lAMEBEmcybV9mcm9tTW9udGdvbWVyeQDFARhnMm1fZnJvbU1vbnRnb21lcnlBZmZpbmUAxAEQZzJtX3RvTW9udGdvbWVyeQDHARZnMm1fdG9Nb250Z29tZXJ5QWZmaW5lAMYBD2cybV90aW1lc1NjYWxhcgDfARVnMm1fdGltZXNTY2FsYXJBZmZpbmUA4AENZzJtX25vcm1hbGl6ZQDMAQpnMm1fTEVNdG9VAM4BCmcybV9MRU10b0MAzwEKZzJtX1V0b0xFTQDQAQpnMm1fQ3RvTEVNANEBD2cybV9iYXRjaExFTXRvVQDSAQ9nMm1fYmF0Y2hMRU10b0MA0wEPZzJtX2JhdGNoVXRvTEVNANQBD2cybV9iYXRjaEN0b0xFTQDVAQxnMm1fdG9BZmZpbmUAyAEOZzJtX3RvSmFjb2JpYW4AtgERZzJtX2JhdGNoVG9BZmZpbmUAywETZzJtX2JhdGNoVG9KYWNvYmlhbgDWAQtnMm1faW5DdXJ2ZQDKARFnMm1faW5DdXJ2ZUFmZmluZQDJAQtnMW1fdGltZXNGcgDhARdnMW1fX3JldmVyc2VQZXJtdXRhdGlvbgDjAQdnMW1fZmZ0AOcBCGcxbV9pZmZ0AOgBCmcxbV9yYXdmZnQA5QELZzFtX2ZmdEpvaW4A6QEOZzFtX2ZmdEpvaW5FeHQA6gERZzFtX2ZmdEpvaW5FeHRJbnYA6wEKZzFtX2ZmdE1peADsAQxnMW1fZmZ0RmluYWwA7QEdZzFtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24A7gELZzJtX3RpbWVzRnIA7wEXZzJtX19yZXZlcnNlUGVybXV0YXRpb24A8QEHZzJtX2ZmdAD1AQhnMm1faWZmdAD2AQpnMm1fcmF3ZmZ0APMBC2cybV9mZnRKb2luAPcBDmcybV9mZnRKb2luRXh0APgBEWcybV9mZnRKb2luRXh0SW52APkBCmcybV9mZnRNaXgA+gEMZzJtX2ZmdEZpbmFsAPsBHWcybV9wcmVwYXJlTGFncmFuZ2VFdmFsdWF0aW9uAPwBEWcxbV90aW1lc0ZyQWZmaW5lAP0BEWcybV90aW1lc0ZyQWZmaW5lAP4BEWZybV9iYXRjaEFwcGx5S2V5AP8BEWcxbV9iYXRjaEFwcGx5S2V5AIACFmcxbV9iYXRjaEFwcGx5S2V5TWl4ZWQAgQIRZzJtX2JhdGNoQXBwbHlLZXkAggIWZzJtX2JhdGNoQXBwbHlLZXlNaXhlZACDAgpmNm1faXNaZXJvAIUCCWY2bV9pc09uZQCGAghmNm1femVybwCHAgdmNm1fb25lAIgCCGY2bV9jb3B5AIkCB2Y2bV9tdWwAigIKZjZtX3NxdWFyZQCLAgdmNm1fYWRkAIwCB2Y2bV9zdWIAjQIHZjZtX25lZwCOAghmNm1fc2lnbgCPAhJmNm1fZnJvbU1vbnRnb21lcnkAkQIQZjZtX3RvTW9udGdvbWVyeQCQAgZmNm1fZXEAkgILZjZtX2ludmVyc2UAkwIHZjZtX2V4cACXAg9mNm1fdGltZXNTY2FsYXIAlAIQZjZtX2JhdGNoSW52ZXJzZQCWAg5mNm1faXNOZWdhdGl2ZQCVAgpmdG1faXNaZXJvAJkCCWZ0bV9pc09uZQCaAghmdG1femVybwCbAgdmdG1fb25lAJwCCGZ0bV9jb3B5AJ0CB2Z0bV9tdWwAngIIZnRtX211bDEAnwIKZnRtX3NxdWFyZQCgAgdmdG1fYWRkAKECB2Z0bV9zdWIAogIHZnRtX25lZwCjAghmdG1fc2lnbgCqAg1mdG1fY29uanVnYXRlAKQCEmZ0bV9mcm9tTW9udGdvbWVyeQCmAhBmdG1fdG9Nb250Z29tZXJ5AKUCBmZ0bV9lcQCnAgtmdG1faW52ZXJzZQCoAgdmdG1fZXhwAK0CD2Z0bV90aW1lc1NjYWxhcgCpAhBmdG1fYmF0Y2hJbnZlcnNlAKwCCGZ0bV9zcXJ0AK4CDGZ0bV9pc1NxdWFyZQCvAg5mdG1faXNOZWdhdGl2ZQCrAhFmdG1fZnJvYmVuaXVzTWFwMAC0AhFmdG1fZnJvYmVuaXVzTWFwMQC1AhFmdG1fZnJvYmVuaXVzTWFwMgC2AhFmdG1fZnJvYmVuaXVzTWFwMwC3AhFmdG1fZnJvYmVuaXVzTWFwNAC4AhFmdG1fZnJvYmVuaXVzTWFwNQC5AhFmdG1fZnJvYmVuaXVzTWFwNgC6AhFmdG1fZnJvYmVuaXVzTWFwNwC7AhFmdG1fZnJvYmVuaXVzTWFwOAC8AhFmdG1fZnJvYmVuaXVzTWFwOQC9AhNibHMxMjM4MV9wYWlyaW5nRXExAMsCE2JsczEyMzgxX3BhaXJpbmdFcTIAzAITYmxzMTIzODFfcGFpcmluZ0VxMwDNAhNibHMxMjM4MV9wYWlyaW5nRXE0AM4CE2JsczEyMzgxX3BhaXJpbmdFcTUAzwIQYmxzMTIzODFfcGFpcmluZwDQAhJibHMxMjM4MV9wcmVwYXJlRzEAxAISYmxzMTIzODFfcHJlcGFyZUcyAMUCE2JsczEyMzgxX21pbGxlckxvb3AAxgIcYmxzMTIzODFfZmluYWxFeHBvbmVudGlhdGlvbgDKAh9ibHMxMjM4MV9maW5hbEV4cG9uZW50aWF0aW9uT2xkAMcCGmJsczEyMzgxX19jeWNsb3RvbWljU3F1YXJlAMgCGmJsczEyMzgxX19jeWNsb3RvbWljRXhwX3cwAMkCCGY2bV9tdWwxALACCWY2bV9tdWwwMQCxAgpmdG1fbXVsMDE0ALICEWcxbV9pbkdyb3VwQWZmaW5lAL4CC2cxbV9pbkdyb3VwAL8CEWcybV9pbkdyb3VwQWZmaW5lAMACC2cybV9pbkdyb3VwAMECCvK7BdECPgAgASAAKQMANwMAIAEgACkDCDcDCCABIAApAxA3AxAgASAAKQMYNwMYIAEgACkDIDcDICABIAApAyg3AygLLAAgAEIANwMAIABCADcDCCAAQgA3AxAgAEIANwMYIABCADcDICAAQgA3AygLTQAgACkDKFAEQCAAKQMgUARAIAApAxhQBEAgACkDEFAEQCAAKQMIUARAIAApAwBQDwVBAA8LBUEADwsFQQAPCwVBAA8LBUEADwtBAA8LLAAgAEIBNwMAIABCADcDCCAAQgA3AxAgAEIANwMYIABCADcDICAAQgA3AygLawAgACkDKCABKQMoUQRAIAApAyAgASkDIFEEQCAAKQMYIAEpAxhRBEAgACkDECABKQMQUQRAIAApAwggASkDCFEEQCAAKQMAIAEpAwBRDwVBAA8LBUEADwsFQQAPCwVBAA8LBUEADwtBAA8LxQEAIAApAyggASkDKFQEQEEADwUgACkDKCABKQMoVgRAQQEPBSAAKQMgIAEpAyBUBEBBAA8FIAApAyAgASkDIFYEQEEBDwUgACkDGCABKQMYVARAQQAPBSAAKQMYIAEpAxhWBEBBAQ8FIAApAxAgASkDEFQEQEEADwUgACkDECABKQMQVgRAQQEPBSAAKQMIIAEpAwhUBEBBAA8FIAApAwggASkDCFYEQEEBDwUgACkDACABKQMAWg8LCwsLCwsLCwsLQQAPC7wCAQF+IAA1AgAgATUCAHwhAyACIAM+AgAgADUCBCABNQIEfCADQiCIfCEDIAIgAz4CBCAANQIIIAE1Agh8IANCIIh8IQMgAiADPgIIIAA1AgwgATUCDHwgA0IgiHwhAyACIAM+AgwgADUCECABNQIQfCADQiCIfCEDIAIgAz4CECAANQIUIAE1AhR8IANCIIh8IQMgAiADPgIUIAA1AhggATUCGHwgA0IgiHwhAyACIAM+AhggADUCHCABNQIcfCADQiCIfCEDIAIgAz4CHCAANQIgIAE1AiB8IANCIIh8IQMgAiADPgIgIAA1AiQgATUCJHwgA0IgiHwhAyACIAM+AiQgADUCKCABNQIofCADQiCIfCEDIAIgAz4CKCAANQIsIAE1Aix8IANCIIh8IQMgAiADPgIsIANCIIinC5ADAQF+IAA1AgAgATUCAH0hAyACIANC/////w+DPgIAIAA1AgQgATUCBH0gA0Igh3whAyACIANC/////w+DPgIEIAA1AgggATUCCH0gA0Igh3whAyACIANC/////w+DPgIIIAA1AgwgATUCDH0gA0Igh3whAyACIANC/////w+DPgIMIAA1AhAgATUCEH0gA0Igh3whAyACIANC/////w+DPgIQIAA1AhQgATUCFH0gA0Igh3whAyACIANC/////w+DPgIUIAA1AhggATUCGH0gA0Igh3whAyACIANC/////w+DPgIYIAA1AhwgATUCHH0gA0Igh3whAyACIANC/////w+DPgIcIAA1AiAgATUCIH0gA0Igh3whAyACIANC/////w+DPgIgIAA1AiQgATUCJH0gA0Igh3whAyACIANC/////w+DPgIkIAA1AiggATUCKH0gA0Igh3whAyACIANC/////w+DPgIoIAA1AiwgATUCLH0gA0Igh3whAyACIANC/////w+DPgIsIANCIIenC6ciGgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4gA0L/////D4MgADUCACIFIAE1AgAiBn58IQMgBCADQiCIfCEEIAIgAz4CACAEQiCIIQMgBEL/////D4MgBSABNQIEIgh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIEIgcgBn58IQQgAyAEQiCIfCEDIAIgBD4CBCADQiCIIQQgA0L/////D4MgBSABNQIIIgp+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIIIgkgBn58IQMgBCADQiCIfCEEIAIgAz4CCCAEQiCIIQMgBEL/////D4MgBSABNQIMIgx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIMIgsgBn58IQQgAyAEQiCIfCEDIAIgBD4CDCADQiCIIQQgA0L/////D4MgBSABNQIQIg5+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyALIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIQIg0gBn58IQMgBCADQiCIfCEEIAIgAz4CECAEQiCIIQMgBEL/////D4MgBSABNQIUIhB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIUIg8gBn58IQQgAyAEQiCIfCEDIAIgBD4CFCADQiCIIQQgA0L/////D4MgBSABNQIYIhJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyALIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyANIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIYIhEgBn58IQMgBCADQiCIfCEEIAIgAz4CGCAEQiCIIQMgBEL/////D4MgBSABNQIcIhR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIcIhMgBn58IQQgAyAEQiCIfCEDIAIgBD4CHCADQiCIIQQgA0L/////D4MgBSABNQIgIhZ+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyALIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyANIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIgIhUgBn58IQMgBCADQiCIfCEEIAIgAz4CICAEQiCIIQMgBEL/////D4MgBSABNQIkIhh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIBZ+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIkIhcgBn58IQQgAyAEQiCIfCEDIAIgBD4CJCADQiCIIQQgA0L/////D4MgBSABNQIoIhp+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIBh+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIBZ+fCEDIAQgA0IgiHwhBCADQv////8PgyALIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyANIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyARIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyAVIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyAXIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIoIhkgBn58IQMgBCADQiCIfCEEIAIgAz4CKCAEQiCIIQMgBEL/////D4MgBSABNQIsIhx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIBp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIBZ+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAXIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIsIhsgBn58IQQgAyAEQiCIfCEDIAIgBD4CLCADQiCIIQQgA0L/////D4MgByAcfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAafnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAYfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSAWfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgESASfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgFSAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgFyAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgGSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgGyAIfnwhAyAEIANCIIh8IQQgAiADPgIwIARCIIghAyAEQv////8PgyAJIBx+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIBp+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIBZ+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAXIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAbIAp+fCEEIAMgBEIgiHwhAyACIAQ+AjQgA0IgiCEEIANC/////w+DIAsgHH58IQMgBCADQiCIfCEEIANC/////w+DIA0gGn58IQMgBCADQiCIfCEEIANC/////w+DIA8gGH58IQMgBCADQiCIfCEEIANC/////w+DIBEgFn58IQMgBCADQiCIfCEEIANC/////w+DIBMgFH58IQMgBCADQiCIfCEEIANC/////w+DIBUgEn58IQMgBCADQiCIfCEEIANC/////w+DIBcgEH58IQMgBCADQiCIfCEEIANC/////w+DIBkgDn58IQMgBCADQiCIfCEEIANC/////w+DIBsgDH58IQMgBCADQiCIfCEEIAIgAz4COCAEQiCIIQMgBEL/////D4MgDSAcfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAafnwhBCADIARCIIh8IQMgBEL/////D4MgESAYfnwhBCADIARCIIh8IQMgBEL/////D4MgEyAWfnwhBCADIARCIIh8IQMgBEL/////D4MgFSAUfnwhBCADIARCIIh8IQMgBEL/////D4MgFyASfnwhBCADIARCIIh8IQMgBEL/////D4MgGSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgGyAOfnwhBCADIARCIIh8IQMgAiAEPgI8IANCIIghBCADQv////8PgyAPIBx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIBp+fCEDIAQgA0IgiHwhBCADQv////8PgyATIBh+fCEDIAQgA0IgiHwhBCADQv////8PgyAVIBZ+fCEDIAQgA0IgiHwhBCADQv////8PgyAXIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAZIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAbIBB+fCEDIAQgA0IgiHwhBCACIAM+AkAgBEIgiCEDIARC/////w+DIBEgHH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgGn58IQQgAyAEQiCIfCEDIARC/////w+DIBUgGH58IQQgAyAEQiCIfCEDIARC/////w+DIBcgFn58IQQgAyAEQiCIfCEDIARC/////w+DIBkgFH58IQQgAyAEQiCIfCEDIARC/////w+DIBsgEn58IQQgAyAEQiCIfCEDIAIgBD4CRCADQiCIIQQgA0L/////D4MgEyAcfnwhAyAEIANCIIh8IQQgA0L/////D4MgFSAafnwhAyAEIANCIIh8IQQgA0L/////D4MgFyAYfnwhAyAEIANCIIh8IQQgA0L/////D4MgGSAWfnwhAyAEIANCIIh8IQQgA0L/////D4MgGyAUfnwhAyAEIANCIIh8IQQgAiADPgJIIARCIIghAyAEQv////8PgyAVIBx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAXIBp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAbIBZ+fCEEIAMgBEIgiHwhAyACIAQ+AkwgA0IgiCEEIANC/////w+DIBcgHH58IQMgBCADQiCIfCEEIANC/////w+DIBkgGn58IQMgBCADQiCIfCEEIANC/////w+DIBsgGH58IQMgBCADQiCIfCEEIAIgAz4CUCAEQiCIIQMgBEL/////D4MgGSAcfnwhBCADIARCIIh8IQMgBEL/////D4MgGyAafnwhBCADIARCIIh8IQMgAiAEPgJUIANCIIghBCADQv////8PgyAbIBx+fCEDIAQgA0IgiHwhBCACIAM+AlggBEIgiCEDIAIgBD4CXAvOIBABfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfkIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAA1AgAiBiAGfnwhAiADIAJCIIh8IQMgASACPgIAIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AgQiB358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCCCIIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgByAHfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CCCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIMIgl+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAh+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIMIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhAiCn58IQIgAyACQiCIfCEDIAJC/////w+DIAcgCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAggCH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCFCILfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAJfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CFCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIYIgx+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAJIAl+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIYIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhwiDX58IQIgAyACQiCIfCEDIAJC/////w+DIAcgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAggC358IQIgAyACQiCIfCEDIAJC/////w+DIAkgCn58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCICIOfnwhAiADIAJCIIh8IQMgAkL/////D4MgByANfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAMfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSALfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgCiAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CICADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIkIg9+fCECIAMgAkIgiHwhAyACQv////8PgyAHIA5+fCECIAMgAkIgiHwhAyACQv////8PgyAIIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAKIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIkIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AigiEH58IQIgAyACQiCIfCEDIAJC/////w+DIAcgD358IQIgAyACQiCIfCEDIAJC/////w+DIAggDn58IQIgAyACQiCIfCEDIAJC/////w+DIAkgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAogDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAsgC358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCLCIRfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiANfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAMfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CLCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgByARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyANfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDCAMfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CMCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCCARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCANfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CNCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCSARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCAOfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDSANfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4COCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCiARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAOfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CPCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCyARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAPfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDiAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CQCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDCARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgDiAPfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CRCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDSARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDiAQfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDyAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CSCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDiARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDyAQfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CTCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDyARfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgECAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CUCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgECARfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CVCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgESARfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CWCADIQQgBEIgiCEFIAEgBD4CXAsKACAAIAAgARAIC5ICAQF+IAA1AAAgAX4hAyACIAM+AAAgADUABCABfiADQiCIfCEDIAIgAz4ABCAANQAIIAF+IANCIIh8IQMgAiADPgAIIAA1AAwgAX4gA0IgiHwhAyACIAM+AAwgADUAECABfiADQiCIfCEDIAIgAz4AECAANQAUIAF+IANCIIh8IQMgAiADPgAUIAA1ABggAX4gA0IgiHwhAyACIAM+ABggADUAHCABfiADQiCIfCEDIAIgAz4AHCAANQAgIAF+IANCIIh8IQMgAiADPgAgIAA1ACQgAX4gA0IgiHwhAyACIAM+ACQgADUAKCABfiADQiCIfCEDIAIgAz4AKCAANQAsIAF+IANCIIh8IQMgAiADPgAsC04CAX4BfyAAIQMgAzUAACABfCECIAMgAj4AACACQiCIIQICQANAIAJQDQEgA0EEaiEDIAM1AAAgAnwhAiADIAI+AAAgAkIgiCECDAALCwurAgcBfwF/AX8BfwF+AX4BfyACBEAgAiEFBUHYACEFCyADBEAgAyEEBUGIASEECyAAIAQQACABQSgQACAFEAFBuAEQAUEvIQZBLyEHAkADQEEoIAdqLQAAIAdBA0ZyDQEgB0EBayEHDAALC0EoIAdqQQNrNQAAQgF8IQggCEIBUQRAQgBCAIAaCwJAA0ACQANAIAQgBmotAAAgBkEHRnINASAGQQFrIQYMAAsLIAQgBmpBB2spAAAhCSAJIAiAIQkgBiAHa0EEayEKAkADQCAJQoCAgIBwg1AgCkEATnENASAJQgiIIQkgCkEBaiEKDAALCyAJUARAIARBKBAFRQ0CQgEhCUEAIQoLQSggCUHoARALIARB6AEgCmsgBBAHGiAFIApqIAkQDAwACwsLtQILAX8BfwF/AX8BfwF/AX8BfwF/AX8Bf0GYAiEDQZgCEAFBACELQcgCIQUgAUHIAhAAQfgCIQRB+AIQA0EAIQxBqAMhCCAAQagDEABB2AMhBkGIBCEHQZgFIQoCQANAIAgQAg0BIAUgCCAGIAcQDSAGIARBuAQQCCALBEAgDARAQbgEIAMQBQRAQbgEIAMgChAHGkEAIQ0FIANBuAQgChAHGkEBIQ0LBUG4BCADIAoQBhpBASENCwUgDARAQbgEIAMgChAGGkEAIQ0FIANBuAQQBQRAIANBuAQgChAHGkEAIQ0FQbgEIAMgChAHGkEBIQ0LCwsgAyEJIAQhAyAKIQQgCSEKIAwhCyANIQwgBSEJIAghBSAHIQggCSEHDAALCyALBEAgASADIAIQBxoFIAMgAhAACwsKACAAQagGEAQPCywAIAAgASACEAYEQCACQcgFIAIQBxoFIAJByAUQBQRAIAJByAUgAhAHGgsLCxcAIAAgASACEAcEQCACQcgFIAIQBhoLCwsAQdgGIAAgARARC/wkAwF+AX4BfkL9//P/DyECQgAhAyAANQIAIAJ+Qv////8PgyEEIAA1AgAgA0IgiHxByAU1AgAgBH58IQMgACADPgIAIAA1AgQgA0IgiHxByAU1AgQgBH58IQMgACADPgIEIAA1AgggA0IgiHxByAU1AgggBH58IQMgACADPgIIIAA1AgwgA0IgiHxByAU1AgwgBH58IQMgACADPgIMIAA1AhAgA0IgiHxByAU1AhAgBH58IQMgACADPgIQIAA1AhQgA0IgiHxByAU1AhQgBH58IQMgACADPgIUIAA1AhggA0IgiHxByAU1AhggBH58IQMgACADPgIYIAA1AhwgA0IgiHxByAU1AhwgBH58IQMgACADPgIcIAA1AiAgA0IgiHxByAU1AiAgBH58IQMgACADPgIgIAA1AiQgA0IgiHxByAU1AiQgBH58IQMgACADPgIkIAA1AiggA0IgiHxByAU1AiggBH58IQMgACADPgIoIAA1AiwgA0IgiHxByAU1AiwgBH58IQMgACADPgIsQfgIIANCIIg+AgBCACEDIAA1AgQgAn5C/////w+DIQQgADUCBCADQiCIfEHIBTUCACAEfnwhAyAAIAM+AgQgADUCCCADQiCIfEHIBTUCBCAEfnwhAyAAIAM+AgggADUCDCADQiCIfEHIBTUCCCAEfnwhAyAAIAM+AgwgADUCECADQiCIfEHIBTUCDCAEfnwhAyAAIAM+AhAgADUCFCADQiCIfEHIBTUCECAEfnwhAyAAIAM+AhQgADUCGCADQiCIfEHIBTUCFCAEfnwhAyAA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DiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCBCEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AgghAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiABNQIMIQMgEyAHIAN+fCEGIAZC/////w+DIRMgBkIgiCEFIBQgCCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIAkgA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAKIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBcgCyADfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAYIAwgA358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGSANIAN+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBogDiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCECEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AhQhAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiABNQIYIQMgEyAHIAN+fCEGIAZC/////w+DIRMgBkIgiCEFIBQgCCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIAkgA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAKIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBcgCyADfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAYIAwgA358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGSANIAN+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBogDiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCHCEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AiAhAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiABNQIkIQMgEyAHIAN+fCEGIAZC/////w+DIRMgBkIgiCEFIBQgCCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIAkgA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAKIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBcgCyADfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAYIAwgA358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGSANIAN+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBogDiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCKCEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AiwhAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiACIBM+AgAgAiAUPgIEIAIgFT4CCCACIBY+AgwgAiAXPgIQIAIgGD4CFCACIBk+AhggAiAaPgIcIAIgGz4CICACIBw+AiQgAiAdPgIoIAIgHj4CLCACQcgFEAUEQCACQcgFIAIQBxoLC/dNHgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfiAANQIAIQYgADUCBCEHIAA1AgghCCAANQIMIQkgADUCECEKIAA1AhQhCyAANQIYIQwgADUCHCENIAA1AiAhDiAANQIkIQ8gADUCKCEQIAA1AiwhESASIAYgBn58IQQgBEL/////D4MhEiAEQiCIIQMgByAGfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgCCAGfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgCSAGfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgCiAGfiEFIBYgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFiAEQiCIIAVCIIhCAYZ8IQMgCyAGfiEFIBcgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFyAEQiCIIAVCIIhCAYZ8IQMgDCAGfiEFIBggBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGCAEQiCIIAVCIIhCAYZ8IQMgDSAGfiEFIBkgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGSAEQiCIIAVCIIhCAYZ8IQMgDiAGfiEFIBogBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGiAEQiCIIAVCIIhCAYZ8IQMgDyAGfiEFIBsgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGyAEQiCIIAVCIIhCAYZ8IQMgECAGfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAGfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBMgByAHfnwhBCAEQv////8PgyETIARCIIghAyAIIAd+IQUgFCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEUIARCIIggBUIgiEIBhnwhAyAJIAd+IQUgFSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEVIARCIIggBUIgiEIBhnwhAyAKIAd+IQUgFiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEWIARCIIggBUIgiEIBhnwhAyALIAd+IQUgFyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEXIARCIIggBUIgiEIBhnwhAyAMIAd+IQUgGCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEYIARCIIggBUIgiEIBhnwhAyANIAd+IQUgGSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEZIARCIIggBUIgiEIBhnwhAyAOIAd+IQUgGiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEaIARCIIggBUIgiEIBhnwhAyAPIAd+IQUgGyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEbIARCIIggBUIgiEIBhnwhAyAQIAd+IQUgHCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEcIARCIIggBUIgiEIBhnwhAyARIAd+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gFCAIIAh+fCEEIARC/////w+DIRQgBEIgiCEDIAkgCH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIAogCH4hBSAWIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRYgBEIgiCAFQiCIQgGGfCEDIAsgCH4hBSAXIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRcgBEIgiCAFQiCIQgGGfCEDIAwgCH4hBSAYIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRggBEIgiCAFQiCIQgGGfCEDIA0gCH4hBSAZIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRkgBEIgiCAFQiCIQgGGfCEDIA4gCH4hBSAaIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRogBEIgiCAFQiCIQgGGfCEDIA8gCH4hBSAbIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRsgBEIgiCAFQiCIQgGGfCEDIBAgCH4hBSAcIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRwgBEIgiCAFQiCIQgGGfCEDIBEgCH4hBSAdIAVC/////w+DQgGGfCADfCEEIARC/////w+DIR0gBEIgiCAFQiCIQgGGfCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyAVIAkgCX58IQQgBEL/////D4MhFSAEQiCIIQMgCiAJfiEFIBYgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFiAEQiCIIAVCIIhCAYZ8IQMgCyAJfiEFIBcgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFyAEQiCIIAVCIIhCAYZ8IQMgDCAJfiEFIBggBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGCAEQiCIIAVCIIhCAYZ8IQMgDSAJfiEFIBkgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGSAEQiCIIAVCIIhCAYZ8IQMgDiAJfiEFIBogBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGiAEQiCIIAVCIIhCAYZ8IQMgDyAJfiEFIBsgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGyAEQiCIIAVCIIhCAYZ8IQMgECAJfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAJfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBYgCiAKfnwhBCAEQv////8PgyEWIARCIIghAyALIAp+IQUgFyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEXIARCIIggBUIgiEIBhnwhAyAMIAp+IQUgGCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEYIARCIIggBUIgiEIBhnwhAyANIAp+IQUgGSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEZIARCIIggBUIgiEIBhnwhAyAOIAp+IQUgGiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEaIARCIIggBUIgiEIBhnwhAyAPIAp+IQUgGyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEbIARCIIggBUIgiEIBhnwhAyAQIAp+IQUgHCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEcIARCIIggBUIgiEIBhnwhAyARIAp+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gFyALIAt+fCEEIARC/////w+DIRcgBEIgiCEDIAwgC34hBSAYIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRggBEIgiCAFQiCIQgGGfCEDIA0gC34hBSAZIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRkgBEIgiCAFQiCIQgGGfCEDIA4gC34hBSAaIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRogBEIgiCAFQiCIQgGGfCEDIA8gC34hBSAbIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRsgBEIgiCAFQiCIQgGGfCEDIBAgC34hBSAcIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRwgBEIgiCAFQiCIQgGGfCEDIBEgC34hBSAdIAVC/////w+DQgGGfCADfCEEIARC/////w+DIR0gBEIgiCAFQiCIQgGGfCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyAYIAwgDH58IQQgBEL/////D4MhGCAEQiCIIQMgDSAMfiEFIBkgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGSAEQiCIIAVCIIhCAYZ8IQMgDiAMfiEFIBogBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGiAEQiCIIAVCIIhCAYZ8IQMgDyAMfiEFIBsgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGyAEQiCIIAVCIIhCAYZ8IQMgECAMfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAMfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBkgDSANfnwhBCAEQv////8PgyEZIARCIIghAyAOIA1+IQUgGiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEaIARCIIggBUIgiEIBhnwhAyAPIA1+IQUgGyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEbIARCIIggBUIgiEIBhnwhAyAQIA1+IQUgHCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEcIARCIIggBUIgiEIBhnwhAyARIA1+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gGiAOIA5+fCEEIARC/////w+DIRogBEIgiCEDIA8gDn4hBSAbIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRsgBEIgiCAFQiCIQgGGfCEDIBAgDn4hBSAcIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRwgBEIgiCAFQiCIQgGGfCEDIBEgDn4hBSAdIAVC/////w+DQgGGfCADfCEEIARC/////w+DIR0gBEIgiCAFQiCIQgGGfCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyAbIA8gD358IQQgBEL/////D4MhGyAEQiCIIQMgECAPfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAPfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBwgECAQfnwhBCAEQv////8PgyEcIARCIIghAyARIBB+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gHSARIBF+fCEEIARC/////w+DIR0gBEIgiCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyABIBI+AgAgASATPgIEIAEgFD4CCCABIBU+AgwgASAWPgIQIAEgFz4CFCABIBg+AhggASAZPgIcIAEgGj4CICABIBs+AiQgASAcPgIoIAEgHT4CLCAepwRAIAFByAUgARAHGgUgAUHIBRAFBEAgAUHIBSABEAcaCwsLCgAgACAAIAEQFAsLACAAQfgFIAEQFAsVACAAQfgREABBqBIQAUH4ESABEBMLEQAgAEHYEhAYQdgSQbgHEAULJAAgABACBEBBAA8LIABBiBMQGEGIE0G4BxAFBEBBfw8LQQEPCxcAIAAgARAYIAFByAUgARAOIAEgARAXCwkAQagGIAAQAAvLAQQBfwF/AX8BfyACEAFBMCEFIAAhAwJAA0AgBSABSw0BIAVBMEYEQEG4ExAcBUG4E0H4BUG4ExAUCyADQbgTQegTEBQgAkHoEyAC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AgQgADUCCCABNQIIfCADQiCIfCEDIAIgAz4CCCAANQIMIAE1Agx8IANCIIh8IQMgAiADPgIMIAA1AhAgATUCEHwgA0IgiHwhAyACIAM+AhAgADUCFCABNQIUfCADQiCIfCEDIAIgAz4CFCAANQIYIAE1Ahh8IANCIIh8IQMgAiADPgIYIAA1AhwgATUCHHwgA0IgiHwhAyACIAM+AhwgA0IgiKcLjAIBAX4gADUCACABNQIAfSEDIAIgA0L/////D4M+AgAgADUCBCABNQIEfSADQiCHfCEDIAIgA0L/////D4M+AgQgADUCCCABNQIIfSADQiCHfCEDIAIgA0L/////D4M+AgggADUCDCABNQIMfSADQiCHfCEDIAIgA0L/////D4M+AgwgADUCECABNQIQfSADQiCHfCEDIAIgA0L/////D4M+AhAgADUCFCABNQIUfSADQiCHfCEDIAIgA0L/////D4M+AhQgADUCGCABNQIYfSADQiCHfCEDIAIgA0L/////D4M+AhggADUCHCABNQIcfSADQiCHfCEDIAIgA0L/////D4M+AhwgA0Igh6cLjxASAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+IANC/////w+DIAA1AgAiBSABNQIAIgZ+fCEDIAQgA0IgiHwhBCACIAM+AgAgBEIgiCEDIARC/////w+DIAUgATUCBCIIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCBCIHIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AgQgA0IgiCEEIANC/////w+DIAUgATUCCCIKfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCCCIJIAZ+fCEDIAQgA0IgiHwhBCACIAM+AgggBEIgiCEDIARC/////w+DIAUgATUCDCIMfnwhBCADIARCIIh8IQMgBEL/////D4MgByAKfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCDCILIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AgwgA0IgiCEEIANC/////w+DIAUgATUCECIOfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCECINIAZ+fCEDIAQgA0IgiHwhBCACIAM+AhAgBEIgiCEDIARC/////w+DIAUgATUCFCIQfnwhBCADIARCIIh8IQMgBEL/////D4MgByAOfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAMfnwhBCADIARCIIh8IQMgBEL/////D4MgCyAKfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCFCIPIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AhQgA0IgiCEEIANC/////w+DIAUgATUCGCISfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCGCIRIAZ+fCEDIAQgA0IgiHwhBCACIAM+AhggBEIgiCEDIARC/////w+DIAUgATUCHCIUfnwhBCADIARCIIh8IQMgBEL/////D4MgByASfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgCyAOfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAMfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAKfnwhBCADIARCIIh8IQMgBEL/////D4MgESAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCHCITIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AhwgA0IgiCEEIANC/////w+DIAcgFH58IQMgBCADQiCIfCEEIANC/////w+DIAkgEn58IQMgBCADQiCIfCEEIANC/////w+DIAsgEH58IQMgBCADQiCIfCEEIANC/////w+DIA0gDn58IQMgBCADQiCIfCEEIANC/////w+DIA8gDH58IQMgBCADQiCIfCEEIANC/////w+DIBEgCn58IQMgBCADQiCIfCEEIANC/////w+DIBMgCH58IQMgBCADQiCIfCEEIAIgAz4CICAEQiCIIQMgBEL/////D4MgCSAUfnwhBCADIARCIIh8IQMgBEL/////D4MgCyASfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAOfnwhBCADIARCIIh8IQMgBEL/////D4MgESAMfnwhBCADIARCIIh8IQMgBEL/////D4MgEyAKfnwhBCADIARCIIh8IQMgAiAEPgIkIANCIIghBCADQv////8PgyALIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyANIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyARIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAx+fCEDIAQgA0IgiHwhBCACIAM+AiggBEIgiCEDIARC/////w+DIA0gFH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gEn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgEH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgDn58IQQgAyAEQiCIfCEDIAIgBD4CLCADQiCIIQQgA0L/////D4MgDyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgESASfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAQfnwhAyAEIANCIIh8IQQgAiADPgIwIARCIIghAyAEQv////8PgyARIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIBJ+fCEEIAMgBEIgiHwhAyACIAQ+AjQgA0IgiCEEIANC/////w+DIBMgFH58IQMgBCADQiCIfCEEIAIgAz4COCAEQiCIIQMgAiAEPgI8C4wSDAF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfkIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAA1AgAiBiAGfnwhAiADIAJCIIh8IQMgASACPgIAIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AgQiB358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCCCIIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgByAHfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CCCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIMIgl+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAh+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIMIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhAiCn58IQIgAyACQiCIfCEDIAJC/////w+DIAcgCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAggCH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCFCILfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAJfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CFCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIYIgx+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAJIAl+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIYIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhwiDX58IQIgAyACQiCIfCEDIAJC/////w+DIAcgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAggC358IQIgAyACQiCIfCEDIAJC/////w+DIAkgCn58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAcgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAggDH58IQIgAyACQiCIfCEDIAJC/////w+DIAkgC358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAogCn58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAggDX58IQIgAyACQiCIfCEDIAJC/////w+DIAkgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAogC358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAkgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAogDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAsgC358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAogDX58IQIgAyACQiCIfCEDIAJC/////w+DIAsgDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAsgDX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAwgDH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAwgDX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIA0gDX58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjggAyEEIARCIIghBSABIAQ+AjwLCgAgACAAIAEQMQu2AQEBfiAANQAAIAF+IQMgAiADPgAAIAA1AAQgAX4gA0IgiHwhAyACIAM+AAQgADUACCABfiADQiCIfCEDIAIgAz4ACCAANQAMIAF+IANCIIh8IQMgAiADPgAMIAA1ABAgAX4gA0IgiHwhAyACIAM+ABAgADUAFCABfiADQiCIfCEDIAIgAz4AFCAANQAYIAF+IANCIIh8IQMgAiADPgAYIAA1ABwgAX4gA0IgiHwhAyACIAM+ABwLTgIBfgF/IAAhAyADNQAAIAF8IQIgAyACPgAAIAJCIIghAgJAA0AgAlANASADQQRqIQMgAzUAACACfCECIAMgAj4AACACQiCIIQIMAAsLC7ACBwF/AX8BfwF/AX4BfgF/IAIEQCACIQUFQegXIQULIAMEQCADIQQFQYgYIQQLIAAgBBApIAFByBcQKSAFECpBqBgQKkEfIQZBHyEHAkADQEHIFyAHai0AACAHQQNGcg0BIAdBAWshBwwACwtByBcgB2pBA2s1AABCAXwhCCAIQgFRBEBCAEIAgBoLAkADQAJAA0AgBCAGai0AACAGQQdGcg0BIAZBAWshBgwACwsgBCAGakEHaykAACEJIAkgCIAhCSAGIAdrQQRrIQoCQANAIAlCgICAgHCDUCAKQQBOcQ0BIAlCCIghCSAKQQFqIQoMAAsLIAlQBEAgBEHIFxAuRQ0CQgEhCUEAIQoLQcgXIAlByBgQNCAEQcgYIAprIAQQMBogBSAKaiAJEDUMAAsLC7UC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GCENIAA1AhwhDiABNQIAIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIEIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIIIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIMIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIQIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIUIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIYIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIcIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiACIA8+AgAgAiAQPgIEIAIgET4CCCACIBI+AgwgAiATPgIQIAIgFD4CFCACIBU+AhggAiAWPgIcIAJBiBsQLgRAIAJBiBsgAhAwGgsLqyQWAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4gADUCACEGIAA1AgQhByAANQIIIQggADUCDCEJIAA1AhAhCiAANQIUIQsgADUCGCEMIAA1AhwhDSAOIAYgBn58IQQgBEL/////D4MhDiAEQiCIIQMgByAGfiEFIA8gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhDyAEQiCIIAVCIIhCAYZ8IQMgCCAGfiEFIBAgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhECAEQiCIIAVCIIhCAYZ8IQMgCSAGfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAGfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAGfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAGfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAGfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w9+Qv////8PgyECIA4gAkIBfnwhBCAEQiCIIQMgDyACQv////8PfnwgA3whBCAEQv////8PgyEOIARCIIghAyAQIAJC/rf5/w9+fCADfCEEIARC/////w+DIQ8gBEIgiCEDIBEgAkKCyPadBX58IAN8IQQgBEL/////D4MhECAEQiCIIQMgEiACQoWwh80AfnwgA3whBCAEQv////8PgyERIARCIIghAyATIAJCiLDnmQN+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkLI+vXMAn58IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQtPOtp8HfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAN8IQQgBEL/////D4MhFSAXIARCIIh8IRZCACEXIA8gByAHfnwhBCAEQv////8PgyEPIARCIIghAyAIIAd+IQUgECAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEQIARCIIggBUIgiEIBhnwhAyAJIAd+IQUgESAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyERIARCIIggBUIgiEIBhnwhAyAKIAd+IQUgEiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyESIARCIIggBUIgiEIBhnwhAyALIAd+IQUgEyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyETIARCIIggBUIgiEIBhnwhAyAMIAd+IQUgFCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEUIARCIIggBUIgiEIBhnwhAyANIAd+IQUgFSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEVIARCIIggBUIgiEIBhnwhAyAWIAN8IQQgBEL/////D4MhFiAXIARCIIh8IRcgDkL/////D35C/////w+DIQIgDiACQgF+fCEEIARCIIghAyAPIAJC/////w9+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkL+t/n/D358IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQoLI9p0FfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJChbCHzQB+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkKIsOeZA358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQsj69cwCfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC0862nwd+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgECAIIAh+fCEEIARC/////w+DIRAgBEIgiCEDIAkgCH4hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogCH4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgCH4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCH4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQv////8PfkL/////D4MhAiAOIAJCAX58IQQgBEIgiCEDIA8gAkL/////D358IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQv63+f8PfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCgsj2nQV+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkKFsIfNAH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQoiw55kDfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCyPr1zAJ+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLTzrafB358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyARIAkgCX58IQQgBEL/////D4MhESAEQiCIIQMgCiAJfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAJfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAJfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAJfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w9+Qv////8PgyECIA4gAkIBfnwhBCAEQiCIIQMgDyACQv////8PfnwgA3whBCAEQv////8PgyEOIARCIIghAyAQIAJC/rf5/w9+fCADfCEEIARC/////w+DIQ8gBEIgiCEDIBEgAkKCyPadBX58IAN8IQQgBEL/////D4MhECAEQiCIIQMgEiACQoWwh80AfnwgA3whBCAEQv////8PgyERIARCIIghAyATIAJCiLDnmQN+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkLI+vXMAn58IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQtPOtp8HfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAN8IQQgBEL/////D4MhFSAXIARCIIh8IRZCACEXIBIgCiAKfnwhBCAEQv////8PgyESIARCIIghAyALIAp+IQUgEyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyETIARCIIggBUIgiEIBhnwhAyAMIAp+IQUgFCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEUIARCIIggBUIgiEIBhnwhAyANIAp+IQUgFSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEVIARCIIggBUIgiEIBhnwhAyAWIAN8IQQgBEL/////D4MhFiAXIARCIIh8IRcgDkL/////D35C/////w+DIQIgDiACQgF+fCEEIARCIIghAyAPIAJC/////w9+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkL+t/n/D358IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQoLI9p0FfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJChbCHzQB+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkKIsOeZA358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQsj69cwCfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC0862nwd+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgEyALIAt+fCEEIARC/////w+DIRMgBEIgiCEDIAwgC34hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gC34hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQv////8PfkL/////D4MhAiAOIAJCAX58IQQgBEIgiCEDIA8gAkL/////D358IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQv63+f8PfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCgsj2nQV+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkKFsIfNAH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQoiw55kDfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCyPr1zAJ+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLTzrafB358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAUIAwgDH58IQQgBEL/////D4MhFCAEQiCIIQMgDSAMfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w9+Qv////8PgyECIA4gAkIBfnwhBCAEQiCIIQMgDyACQv////8PfnwgA3whBCAEQv////8PgyEOIARCIIghAyAQIAJC/rf5/w9+fCADfCEEIARC/////w+DIQ8gBEIgiCEDIBEgAkKCyPadBX58IAN8IQQgBEL/////D4MhECAEQiCIIQMgEiACQoWwh80AfnwgA3whBCAEQv////8PgyERIARCIIghAyATIAJCiLDnmQN+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkLI+vXMAn58IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQtPOtp8HfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAN8IQQgBEL/////D4MhFSAXIARCIIh8IRZCACEXIBUgDSANfnwhBCAEQv////8PgyEVIARCIIghAyAWIAN8IQQgBEL/////D4MhFiAXIARCIIh8IRcgDkL/////D35C/////w+DIQIgDiACQgF+fCEEIARCIIghAyAPIAJC/////w9+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkL+t/n/D358IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQoLI9p0FfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJChbCHzQB+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkKIsOeZA358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQsj69cwCfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC0862nwd+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgASAOPgIAIAEg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KQOIATcDiAEgASAAKQOQATcDkAEgASAAKQOYATcDmAEgASAAKQOgATcDoAEgASAAKQOoATcDqAEgASAAKQOwATcDsAEgASAAKQO4ATcDuAELkgMAIAEgACkDADcDACABIAApAwg3AwggASAAKQMQNwMQIAEgACkDGDcDGCABIAApAyA3AyAgASAAKQMoNwMoIAEgACkDMDcDMCABIAApAzg3AzggASAAKQNANwNAIAEgACkDSDcDSCABIAApA1A3A1AgASAAKQNYNwNYIAEgACkDYDcDYCABIAApA2g3A2ggASAAKQNwNwNwIAEgACkDeDcDeCABIAApA4ABNwOAASABIAApA4gBNwOIASABIAApA5ABNwOQASABIAApA5gBNwOYASABIAApA6ABNwOgASABIAApA6gBNwOoASABIAApA7ABNwOwASABIAApA7gBNwO4ASABIAApA8ABNwPAASABIAApA8gBNwPIASABIAApA9ABNwPQASABIAApA9gBNwPYASABIAApA+ABNwPgASABIAApA+gBNwPoASABIAApA/ABNwPwASABIAApA/gBNwP4ASABIAApA4ACNwOAAiABIAApA4gCNwOIAiABIAApA5ACNwOQAiABIAApA5gCNwOYAgsvACAAELABBEAgARCzAQUgAUHAAWoQnAEgAEHgAGogAUHgAGoQnQEgACABEJ0BCwscAQF/IAAgARCnASAAQeAAaiABQeAAahCnAXEPC4sBAQF/IABBwAFqIQIgABCxAQRAIAEQsAEPCyABELABBEBBAA8LIAIQmgEEQCAAIAEQtwEPCyACQdiHARCgASABQdiHAUG4iAEQngEgAkHYhwFBmIkBEJ4BIAFB4ABqQZiJAUH4iQEQngEgAEG4iAEQpwEEQCAAQeAAakH4iQEQpwEEQEEBDwsLQQAPC9kBAgF/AX8gAEHAAWohAiABQcABaiEDIAAQsQEEQCABELEBDwsgARCxAQRAQQAPCyACEJoBBEAgASAAELgBDwsgAxCaAQRAIAAgARC4AQ8LIAJB2IoBEKABIANBuIsBEKABIABBuIsBQZiMARCeASABQdiKAUH4jAEQngEgAkHYigFB2I0BEJ4BIANBuIsBQbiOARCeASAAQeAAakG4jgFBmI8BEJ4BIAFB4ABqQdiNAUH4jwEQngFBmIwBQfiMARCnAQRA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IABB4ABqIABBwAFqQajhAhChASABQeAAaiABQcABakGI4gIQoQFBiNwCQejcAkHo4gIQoQFBiNwCQcjdAkHI4wIQoQFB6NwCQcjdAkGo5AIQoQFBqOECQYjiAiACEJ4BIAJBqOQCIAIQogEgAiACEIQCQYjcAiACIAIQoQFBqN4CQYjfAiACQeAAahCeASACQeAAakHo4gIgAkHgAGoQogFByN0CQYjlAhCEAiACQeAAakGI5QIgAkHgAGoQoQFB6N8CQcjgAiACQcABahCeASACQcABakHI4wIgAkHAAWoQogEgAkHAAWpB6NwCIAJBwAFqEKEBC4ECACAAQejlAhCgASAAIABB4ABqQcjmAhCeAUHI5gJByOYCQajnAhChASAAIABB4ABqQYjoAhCiAUGI6AIgAEHAAWpBiOgCEKEBQYjoAkGI6AIQoAEgAEHgAGogAEHAAWpB6OgCEJ4BQejoAkHo6AJByOkCEKEBIABBwAFqQajqAhCgAUHI6QIgARCEAkHo5QIgASABEKEBQajqAiABQeAAahCEAkGo5wIgAUHgAGogAUHgAGoQoQFB6OUCQajqAiABQcABahChAUHI6QIgAUHAAWogAUHAAWoQogFBiOgCIAFBwAFqIAFBwAFqEKEBQajnAiABQcABaiABQcABahChAQs1ACAAIAEgAhChASAAQeAAaiABQeAAaiACQeAAahChASAAQcABaiABQcABaiACQcABahChAQs1ACAAIAEgAhCiASAAQeAAaiABQeAAaiACQeAAahCiASAAQcABaiABQcABaiACQcABahCiAQsnACAAIAEQowEgAEHgAGogAUHgAGoQowEgAEHAAWogAUHAAWoQowELMAEBfyAAQcABahCqASEBIAEEQCABDwsgAEHgAGoQqgEhASABBEAgAQ8LIAAQqgEPCycAIAAgARClASAAQeAAaiABQeAAahClASAAQcABaiABQcABahClAQsnACAAIAEQpgEgAEHgAGogAUHgAGoQpgEgAEHAAWogAUHAAWoQpgELKQAgACABEKcBIABB4ABqIAFB4ABqEKcBcSAAQcABaiABQcABahCnAXELqwIAIABBiOsCEKABIABB4ABqQejrAhCgASAAQcABakHI7AIQoAEgACAAQeAAakGo7QIQngEgACAAQcABakGI7gIQngEgAEHgAGogAEHAAWpB6O4CEJ4BQejuAkHI7wIQhAJBiOsCQcjvAkHI7wIQogFByOwCQajwAhCEAkGo8AJBqO0CQajwAhCiAUHo6wJBiO4CQYjxAhCiASAAQcABakGo8AJB6PECEJ4BIABB4ABqQYjxAkHI8gIQngFB6PECQcjyAkHo8QIQoQFB6PECQejxAhCEAiAAQcjvAkHI8gIQngFByPICQejxAkHo8QIQoQFB6PECQejxAhCoAUHo8QJByO8CIAEQngFB6PECQajwAiABQeAAahCeAUHo8QJBiPECIAFBwAFqEJ4BCzMAIAAgASACIAMQqQEgAEHgAGogASACIANB4ABqEKkBIABBwAFqIAEgAiADQcABahCpAQs1ACAAQcABahCZAQRAIABB4ABqEJkBBEAgABCrAQ8FIABB4ABqEKsBDwsLIABBwAFqEKsBDwuPAgQBfwF/AX8Bf0EAKAIAIQVBACAFIAJBAWpBoAJsajYCACAFEIgCIAAhBiAFQaACaiEFQQAhCAJAA0AgCCACRg0BIAYQhQIEQCAFQaACayAFEIkCBSAGIAVBoAJrIAUQigILIAYgAWohBiAFQaACaiEFIAhBAWohCAwACwsgBiABayEGIAVBoAJrIQUgAyACQQFrIARsaiEHIAUgBRCTAgJAA0AgCEUNASAGEIUCBEAgBSAFQaACaxCJAiAHEIcCBSAFQaACa0Go8wIQiQIgBSAGIAVBoAJrEIoCIAVBqPMCIAcQigILIAYgAWshBiAHIARrIQcgBUGgAmshBSAIQQFrIQgMAAsLQQAgBTYCAAvOAgIBfwF/IAJFBEAgAxCIAg8LIABByPUCEIkCIAMQiAIgAiEEAkADQCAEQQFrIQQgASAEai0AACEFIAMgAxCLAiAFQYABTwRAIAVBgAFrIQUgA0HI9QIgAxCKAgsgAyADEIsCIAVBwABPBEAgBUHAAGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEgTwRAIAVBIGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEQTwRAIAVBEGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEITwRAIAVBCGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEETwRAIAVBBGshBSADQcj1AiADEIoCCyADIAMQiwIgBUECTwRAIAVBAmshBSADQcj1AiADEIoCCyADIAMQiwIgBUEBTwRAIAVBAWshBSADQcj1AiADEIoCCyAERQ0BDAALCwsyACAAQej3AhCdASAAQcABaiABEIQCIABB4ABqIAFBwAFqEJ0BQej3AiABQeAAahCdAQsRACAAEIUCIABBoAJqEIUCcQsSACAAEIYCIABBoAJqEIUCcQ8LEAAgABCHAiAAQaACahCHAgsQACAAEIgCIABBoAJqEIcCCxgAIAAgARCJAiAAQaACaiABQaACahCJAguFAQAgACABQcj4AhCKAiAAQaACaiABQaACakHo+gIQigIgACAAQaACakGI/QIQjAIgASABQaACakGo/wIQjAJBiP0CQaj/AkGI/QIQigJB6PoCIAIQmAJByPgCIAIgAhCMAkHI+AJB6PoCIAJBoAJqEIwCQYj9AiACQaACaiACQaACahCNAgscACAAIAEgAhCKAiAAQaACaiABIAJBoAJqEIoCC30AIAAgAEGgAmpByIEDEIoCIAAgAEGgAmpB6IMDEIwCIABBoAJqQYiGAxCYAiAAQYiGA0GIhgMQjAJByIEDQaiIAxCYAkGoiANByIEDQaiIAxCMAkHogwNBiIYDIAEQigIgAUGoiAMgARCNAkHIgQNByIEDIAFBoAJqEIwCCyAAIAAgASACEIwCIABBoAJqIAFBoAJqIAJBoAJqEIwCCyAAIAAgASACEI0CIABBoAJqIAFBoAJqIAJBoAJqEI0CCxgAIAAgARCOAiAAQaACaiABQaACahCOAgsYACAAIAEQiQIgAEGgAmogAUGgAmoQjgILGAAgACABEJACIABBoAJqIAFBoAJqEJACCxgAIAAgARCRAiAAQaACaiABQaACahCRAgsZACAAIAEQkgIgAEGgAmogAUGgAmoQkgJxC2oAIABByIoDEIsCIABBoAJqQeiMAxCLAkHojANBiI8DEJgCQciKA0GIjwNBiI8DEI0CQYiPA0GokQMQkwIgAEGokQMgARCKAiAAQaACakGokQMgAUGgAmoQigIgAUGgAmogAUGgAmoQjgILIAAgACABIAIgAxCUAiAAQaACaiABIAIgA0GgAmoQlAILHQEBfyAAQaACahCPAiEBIAEEQCABDwsgABCPAg8LHgAgAEGgAmoQhQIEQCAAEJUCDwsgAEGgAmoQlQIPC48CBAF/AX8BfwF/QQAoAgAhBUEAIAUgAkEBakHABGxqNgIAIAUQnAIgACEGIAVBwARqIQVBACEIAkADQCAIIAJGDQEgBhCZAgRAIAVBwARrIAUQnQIFIAYgBUHABGsgBRCeAgsgBiABaiEGIAVBwARqIQUgCEEBaiEIDAALCyAGIAFrIQYgBUHABGshBSADIAJBAWsgBGxqIQcgBSAFEKgCAkADQCAIRQ0BIAYQmQIEQCAFIAVBwARrEJ0CIAcQmwIFIAVBwARrQciTAxCdAiAFIAYgBUHABGsQngIgBUHIkwMgBxCeAgsgBiABayEGIAcgBGshByAFQcAEayEFIAhBAWshCAwACwtBACAFNgIAC84CAgF/AX8gAkUEQCADEJwCDwsgAEGImAMQnQIgAxCcAiACIQQCQANAIARBAWshBCABIARqLQAAIQUgAyADEKACIAVBgAFPBEAgBUGAAWshBSADQYiYAyADEJ4CCyADIAMQoAIgBUHAAE8EQCAFQcAAayEFIANBiJgDIAMQngILIAMgAxCgAiAFQSBPBEAgBUEgayEFIANBiJgDIAMQngILIAMgAxCgAiAFQRBPBEAgBUEQayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQhPBEAgBUEIayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQRPBEAgBUEEayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQJPBEAgBUECayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQFPBEAgBUEBayEFIANBiJgDIAMQngILIARFDQEMAAsLC9EBAEHIrgMQnAJByK4DQciuAxCjAiAAQcicA0GgAkGIoQMQrQJBiKEDQcilAxCgAiAAQcilA0HIpQMQngJByKUDQYiqAxCkAkGIqgNByKUDQYiqAxCeAkGIqgNByK4DEKcCBEAAC0GIoQMgAEGIswMQngJByKUDQciuAxCnAgRAQciuAxCHAkHosAMQiAJByK4DQYizAyABEJ4CBUHItwMQnAJByLcDQcilA0HItwMQoQJByLcDQeieA0GgAkHItwMQrQJByLcDQYizAyABEJ4CCwtqAEHoywMQnAJB6MsDQejLAxCjAiAAQYi8A0GgAkGovgMQrQJBqL4DQejCAxCgAiAAQejCA0HowgMQngJB6MIDQajHAxCkAkGoxwNB6MIDQajHAxCeAkGoxwNB6MsDEKcCBEBBAA8LQQEPC3gAIAAgAEHgAGpB6NADEKEBIABB4ABqIABBwAFqQcjRAxChASAAQeAAaiABIAJBwAFqEJ4BQcjRAyABIAIQngEgAiACQcABaiACEKIBIAIgAhCEAkHo0AMgASACQeAAahCeASACQeAAaiACQcABaiACQeAAahCiAQvsAQAgACABQajSAxCeASAAQeAAaiACQYjTAxCeASAAIABB4ABqQejTAxChASAAIABBwAFqQcjUAxChASAAQeAAaiAAQcABaiADEKEBIAMgAiADEJ4BIANBiNMDIAMQogEgAyADEIQCIANBqNIDIAMQoQEgASACIANB4ABqEKEBIANB4ABqQejTAyADQeAAahCeASADQeAAakGo0gMgA0HgAGoQogEgA0HgAGpBiNMDIANB4ABqEKIBQcjUAyABIANBwAFqEJ4BIANBwAFqQajSAyADQcABahCiASADQcABakGI0wMgA0HAAWoQoQELkAEAIAAgASACQajVAxCxAiAAQaACaiADQcjXAxCwAiACIANB6NkDEKEBIABBoAJqIAAgBEGgAmoQjAIgBEGgAmogAUHo2QMgBEGgAmoQsQIgBEGgAmpBqNUDIARBoAJqEI0CIARBoAJqQcjXAyAEQaACahCNAkHI1wMgBBCJAiAEIAQQmAIgBEGo1QMgBBCMAgtQACABIABBMGpByNoDEBQgAUEwaiAAQTBqQfjaAxAUIAFB4ABqIABBqNsDEBQgAUGQAWogAEHY2wMQFCACIAFBwAFqQajbA0HI2gMgAhCyAgtsACAAQYj+BCABEJ4BIABB4ABqQej+BCABQeAAahCeASAAQcABakHI/wQgAUHAAWoQngEgAEGgAmpBqIAFIAFBoAJqEJ4BIABBgANqQYiBBSABQYADahCeASAAQeADakHogQUgAUHgA2oQngELigIAIAAgARAAIABBMGogAUEwahASIAFByIIFIAEQngEgAEHgAGogAUHgAGoQACAAQZABaiABQZABahASIAFB4ABqQaiDBSABQeAAahCeASAAQcABaiABQcABahAAIABB8AFqIAFB8AFqEBIgAUHAAWpBiIQFIAFBwAFqEJ4BIABBoAJqIAFBoAJqEAAgAEHQAmogAUHQAmoQEiABQaACakHohAUgAUGgAmoQngEgAEGAA2ogAUGAA2oQACAAQbADaiABQbADahASIAFBgANqQciFBSABQYADahCeASAAQeADaiABQeADahAAIABBkARqIAFBkARqEBIgAUHgA2pBqIYFIAFB4ANqEJ4BC2wAIABBiIcFIAEQngEgAEHgAGpB6IcFIAFB4ABqEJ4BIABBwAFqQciIBSABQcABahCeASAAQaACakGoiQUgAUGgAmoQngEgAEGAA2pBiIoFIAFBgANqEJ4BIABB4ANqQeiKBSABQeADahCeAQuKAgAgACABEAAgAEEwaiABQTBqEBIgAUHIiwUgARCeASAAQeAAaiABQeAAahAAIABBkAFqIAFBkAFqEBIgAUHgAGpBqIwFIAFB4ABqEJ4BIABBwAFqIAFBwAFqEAAgAEHwAWogAUHwAWoQEiABQcABakGIjQUgAUHAAWoQngEgAEGgAmogAUGgAmoQACAAQdACaiABQdACahASIAFBoAJqQeiNBSABQaACahCeASAAQYADaiABQYADahAAIABBsANqIAFBsANqEBIgAUGAA2pByI4FIAFBgANqEJ4BIABB4ANqIAFB4ANqEAAgAEGQBGogAUGQBGoQEiABQeADakGojwUgAUHgA2oQngELbAAgAEGIkAUgARCeASAAQeAAakHokAUgAUHgAGoQngEgAEHAAWpByJEFIAFBwAFqEJ4BIABBoAJqQaiSBSABQaACahCeASAAQYADakGIkwUgAUGAA2oQngEgAEHgA2pB6JMFIAFB4ANqEJ4BC4oCACAAIAEQACAAQTBqIAFBMGoQEiABQciUBSABEJ4BIABB4ABqIAFB4ABqEAAgAEGQAWogAUGQAWoQEiABQeAAakGolQUgAUHgAGoQngEgAEHAAWogAUHAAWoQACAAQfABaiABQfABahASIAFBwAFqQYiWBSABQcABahCeASAAQaACaiABQaACahAAIABB0AJqIAFB0AJqEBIgAUGgAmpB6JYFIAFBoAJqEJ4BIABBgANqIAFBgANqEAAgAEGwA2ogAUGwA2oQEiABQYADakHIlwUgAUGAA2oQngEgAEHgA2ogAUHgA2oQACAAQZAEaiABQZAEahASIAFB4ANqQaiYBSABQeADahCeAQtsACAAQYiZBSABEJ4BIABB4ABqQeiZBSABQeAAahCeASAAQcABakHImgUgAUHAAWoQngEgAEGgAmpBqJsFIAFBoAJqEJ4BIABBgANqQYicBSABQYADahCeASAAQeADakHonAUgAUHgA2oQngELigIAIAAgARAAIABBMGogAUEwahASIAFByJ0FIAEQngEgAEHgAGogAUHgAGoQACAAQZABaiABQZABahASIAFB4ABqQaieBSABQeAAahCeASAAQcABaiABQcABahAAIABB8AFqIAFB8AFqEBIgAUHAAWpBiJ8FIAFBwAFqEJ4BIABBoAJqIAFBoAJqEAAgAEHQAmogAUHQAmoQEiABQaACakHonwUgAUGgAmoQngEgAEGAA2ogAUGAA2oQACAAQbADaiABQbADahASIAFBgANqQcigBSABQYADahCeASAAQeADaiABQeADahAAIABBkARqIAFBkARqEBIgAUHgA2pBqKEFIAFB4ANqEJ4BC2wAIABBiKIFIAEQngEgAEHgAGpB6KIFIAFB4ABqEJ4BIABBwAFqQcijBSABQcABahCeASAAQaACakGopAUgAUGgAmoQngEgAEGAA2pBiKUFIAFBgANqEJ4BIABB4ANqQeilBSABQeADahCeAQuKAgAgACABEAAgAEEwaiABQTBqEBIgAUHIpgUgARCeASAAQeAAaiABQeAAahAAIABBkAFqIAFBkAFqEBIgAUHgAGpBqKcFIAFB4ABqEJ4BIABBwAFqIAFBwAFqEAAgAEHwAWogAUHwAWoQEiABQcABakGIqAUgAUHAAWoQngEgAEGgAmogAUGgAmoQACAAQdACaiABQdACahASIAFBoAJqQeioBSABQaACahCeASAAQYADaiABQYADahAAIABBsANqIAFBsANqEBIgAUGAA2pByKkFIAFBgANqEJ4BIABB4ANqIAFB4ANqEAAgAEGQBGogAUGQBGoQEiABQeADakGoqgUgAUHgA2oQngELhQEAIAAQVgRAQQEPCyAAEG9FBEBBAA8LIABBiKsFQfirBRAUIABBMGpBqKwFEAAgAEG4qwVBiK0FEBQgAEEwakG4rQUQAEH4qwVB+KsFEGBB+KsFIABB+KsFEGhB+KsFQYitBUH4qwUQaEH4qwVB6KsFQRBB+KsFEIUBQfirBUGIrQUQXg8LEgAgAEHorQUQbkHorQUQvgIPC7QCACAAELABBEBBAQ8LIAAQyQFFBEBBAA8LIABByK4FQfCwBRCeASAAQeAAakHIrgVB0LEFEJ4BQfCwBUGorwVBsLIFEJ8BQdCxBUGQswUQowFB8LAFQfCzBRCjAUHQsQVB2K8FQdC0BRCeAUGwsgVB4LIFQcCwBRARQbCyBUHgsgVB4LIFEBBBwLAFQbCyBRAAQZCzBUHAswVBwLAFEBFBkLMFQcCzBUHAswUQEEHAsAVBkLMFEABB8LMFQaC0BUHAsAUQEEHwswVBoLQFQaC0BRARQcCwBUHwswUQAEGAtQVB0LQFQcCwBRARQdC0BUGAtQVBgLUFEBBBwLAFQdC0BRAAQbC1BRCcAUHwswVBuLAFQQhB8LMFEN8BQfCzBUGwsgVB8LMFEL0BQfCzBSAAELgBDwsTACAAQZC2BRDIAUGQtgUQwAIPC9gEACAAQcABakHQtwUQoAEgAUHgAGpBsLgFEKABQdC3BSABQfC5BRCeASABQeAAaiAAQcABaiACQeAAahChASACQeAAaiACQeAAahCgASACQeAAakGwuAUgAkHgAGoQogEgAkHgAGpB0LcFIAJB4ABqEKIBIAJB4ABqQdC3BSACQeAAahCeAUHwuQUgAEHQugUQogFB0LoFQbC7BRCgAUGwuwVBsLsFQZC8BRChAUGQvAVBkLwFQZC8BRChAUGQvAVB0LoFQfC8BRCeASACQeAAaiAAQeAAakHQvQUQogFB0L0FIABB4ABqQdC9BRCiAUHQvQUgASACQcABahCeAUGQvAUgAEGwvgUQngFB0L0FIAAQoAEgAEHwvAUgABCiASAAQbC+BSAAEKIBIABBsL4FIAAQogEgAEHAAWpB0LoFIABBwAFqEKEBIABBwAFqIABBwAFqEKABIABBwAFqQdC3BSAAQcABahCiASAAQcABakGwuwUgAEHAAWoQogEgAUHgAGogAEHAAWogAhChAUGwvgUgAEGQvwUQogFBkL8FQdC9BUGQvwUQngEgAEHgAGpB8LwFQfC5BRCeAUHwuQVB8LkFQfC5BRChAUGQvwVB8LkFIABB4ABqEKIBIAIgAhCgASACQbC4BSACEKIBIABBwAFqQZC5BRCgASACQZC5BSACEKIBIAJBwAFqIAJBwAFqIAJBwAFqEKEBIAJBwAFqIAIgAkHAAWoQogEgAEHAAWogAEHAAWogAhChAUHQvQVB0L0FEKMBQdC9BUHQvQUgAkHgAGoQoQELsgQAIAAgARCgASAAQeAAakHQwAUQoAFB0MAFQbDBBRCgAUHQwAUgACABQeAAahChASABQeAAaiABQeAAahCgASABQeAAaiABIAFB4ABqEKIBIAFB4ABqQbDBBSABQeAAahCiASABQeAAaiABQeAAaiABQeAAahChASABIAFBkMIFEKEBQZDCBSABQZDCBRChASAAQZDCBSABQcABahChAUGQwgVB8MIFEKABIABBwAFqQfC/BRCgAUHwwgUgAUHgAGogABCiASAAIAFB4ABqIAAQogEgAEHAAWogAEHgAGogAEHAAWoQoQEgAEHAAWogAEHAAWoQoAEgAEHAAWpB0MAFIABBwAFqEKIBIABBwAFqQfC/BSAAQcABahCiASABQeAAaiAAIABB4ABqEKIBIABB4ABqQZDCBSAAQeAAahCeAUGwwQVBsMEFQbDBBRChAUGwwQVBsMEFQbDBBRChAUGwwQVBsMEFQbDBBRChASAAQeAAakGwwQUgAEHgAGoQogFBkMIFQfC/BSABQeAAahCeASABQeAAaiABQeAAaiABQeAAahChASABQeAAaiABQeAAahCjASABQcABaiABQcABahCgASABQcABaiABIAFBwAFqEKIBIAFBwAFqQfDCBSABQcABahCiAUHQwAVB0MAFQdDABRChAUHQwAVB0MAFQdDABRChASABQcABakHQwAUgAUHAAWoQogEgAEHAAWpB8L8FIAEQngEgASABIAEQoQELCAAgACABEHILbQIBfwF/IAAgARDMASABELEBBEAPCyABQdDDBRC1ASABQaACaiECQT4hAwJAA0BB0MMFIAIQwwIgAkGgAmohAiADLACo0AMEQEHQwwUgASACEMICIAJBoAJqIQILIANFDQEgA0EBayEDDAALCwuAAQIBfwF/IAIQnAIgABBXBEAPCyABEFcEQA8LIAFBoAJqIQNBPiEEAkADQCAAIAMgAhCzAiADQaACaiEDIAQsAKjQAwRAIAAgAyACELMCIANBoAJqIQMLIAIgAhCgAiAEQQFGDQEgBEEBayEEDAALCyAAIAMgAhCzAiACIAIQpAILEAAgAEHwxQVBoAQgARCtAgvsBQAgACAAQYADakHQzgUQngEgAEGAA2pBkMoFEIQCIABBkMoFQZDKBRChASAAIABBgANqQbDPBRChAUGwzwVBkMoFQZDKBRCeAUHQzgVBsM8FEIQCQdDOBUGwzwVBsM8FEKEBQZDKBUGwzwVBkMoFEKIB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"; - exports.pq = 712; - exports.pr = 3464; - exports.pG1gen = 42968; - exports.pG1zero = 43112; - exports.pG1b = 4776; - exports.pG2gen = 43256; - exports.pG2zero = 43544; - exports.pG2b = 17272; - exports.pOneT = 43832; - exports.prePSize = 288; - exports.preQSize = 20448; - exports.n8q = 48; - exports.n8r = 32; - exports.q = "4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787"; - exports.r = "52435875175126190479447740508185965837690552500527637822603658699938581184513"; - \ No newline at end of file +export const code = "AGFzbQEAAAABlQESYAJ/fwBgAX8AYAF/AX9gAn9/AX9gA39/fwF/YAN/f38AYAN/fn8AYAJ/fgBgBH9/f38AYAV/f39/fwBgBH9/f38Bf2AGf39/f39/AGAIf39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38Bf2AHf39/f39/fwF/YAl/f39/f39/f38Bf2ALf39/f39/f39/f38BfwIPAQNlbnYGbWVtb3J5AgAZA9MC0QIAAQIBAwMEBAUAAAYHCAUCBQUAAAUAAAAAAgIAAQUICQUFBQgICAgAAgABAgEDAwQEBQAABgcIBQIFBQAABQAAAAACAgABBQgJBQUFCAgICAACBQAAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgDAAgIAgAACQsLBQULAAgNCQgCAgEBAAUFAAUFAAAAAAMACAICCQgAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgFAwAICAIAAAkLCwUFCwUDAAgIAgAACQsLBQULBQUJCQkJCQACAgEBAAUABQUAAgAAAwAIAgkIAAICAQEABQUABQUAAAAAAwAIAgIJCAACBQgJBQAAAAAAAAAAAAACAgICBQAAAAUAAAAABA4PEBEFB84nvQIJaW50cV9jb3B5AAAJaW50cV96ZXJvAAEIaW50cV9vbmUAAwtpbnRxX2lzWmVybwACB2ludHFfZXEABAhpbnRxX2d0ZQAFCGludHFfYWRkAAYIaW50cV9zdWIABwhpbnRxX211bAAIC2ludHFfc3F1YXJlAAkOaW50cV9zcXVhcmVPbGQACghpbnRxX2RpdgAND2ludHFfaW52ZXJzZU1vZAAOCGYxbV9jb3B5AAAIZjFtX3plcm8AAQpmMW1faXNaZXJvAAIGZjFtX2VxAAQHZjFtX2FkZAAQB2YxbV9zdWIAEQdmMW1fbmVnABIOZjFtX2lzTmVnYXRpdmUAGQlmMW1faXNPbmUADwhmMW1fc2lnbgAaC2YxbV9tUmVkdWN0ABMHZjFtX211bAAUCmYxbV9zcXVhcmUAFQ1mMW1fc3F1YXJlT2xkABYSZjFtX2Zyb21Nb250Z29tZXJ5ABgQZjFtX3RvTW9udGdvbWVyeQAXC2YxbV9pbnZlcnNlABsHZjFtX29uZQAcCGYxbV9sb2FkAB0PZjFtX3RpbWVzU2NhbGFyAB4HZjFtX2V4cAAmEGYxbV9iYXRjaEludmVyc2UAHwhmMW1fc3FydAAnDGYxbV9pc1NxdWFyZQAoFWYxbV9iYXRjaFRvTW9udGdvbWVyeQAgF2YxbV9iYXRjaEZyb21Nb250Z29tZXJ5ACEJaW50cl9jb3B5ACkJaW50cl96ZXJvACoIaW50cl9vbmUALAtpbnRyX2lzWmVybwArB2ludHJfZXEALQhpbnRyX2d0ZQAuCGludHJfYWRkAC8IaW50cl9zdWIAMAhpbnRyX211bAAxC2ludHJfc3F1YXJlADIOaW50cl9zcXVhcmVPbGQAMwhpbnRyX2RpdgA2D2ludHJfaW52ZXJzZU1vZAA3CGZybV9jb3B5ACkIZnJtX3plcm8AKgpmcm1faXNaZXJvACsGZnJtX2VxAC0HZnJtX2FkZAA5B2ZybV9zdWIAOgdmcm1fbmVnADsOZnJtX2lzTmVnYXRpdmUAQglmcm1faXNPbmUAOAhmcm1fc2lnbgBDC2ZybV9tUmVkdWN0ADwHZnJtX211bAA9CmZybV9zcXVhcmUAPg1mcm1fc3F1YXJlT2xkAD8SZnJtX2Zyb21Nb250Z29tZXJ5AEEQZnJtX3RvTW9udGdvbWVyeQBAC2ZybV9pbnZlcnNlAEQHZnJtX29uZQBFCGZybV9sb2FkAEYPZnJtX3RpbWVzU2NhbGFyAEcHZnJtX2V4cABPEGZybV9iYXRjaEludmVyc2UASAhmcm1fc3FydABQDGZybV9pc1NxdWFyZQBRFWZybV9iYXRjaFRvTW9udGdvbWVyeQBJF2ZybV9iYXRjaEZyb21Nb250Z29tZXJ5AEoGZnJfYWRkADkGZnJfc3ViADoGZnJfbmVnADsGZnJfbXVsAFIJZnJfc3F1YXJlAFMKZnJfaW52ZXJzZQBUDWZyX2lzTmVnYXRpdmUAVQdmcl9jb3B5ACkHZnJfemVybwAqBmZyX29uZQBFCWZyX2lzWmVybwArBWZyX2VxAC0MZzFtX211bHRpZXhwAIABEmcxbV9tdWx0aWV4cF9jaHVuawB/EmcxbV9tdWx0aWV4cEFmZmluZQCEARhnMW1fbXVsdGlleHBBZmZpbmVfY2h1bmsAgwEKZzFtX2lzWmVybwBXEGcxbV9pc1plcm9BZmZpbmUAVgZnMW1fZXEAXwtnMW1fZXFNaXhlZABeDGcxbV9lcUFmZmluZQBdCGcxbV9jb3B5AFsOZzFtX2NvcHlBZmZpbmUAWghnMW1femVybwBZDmcxbV96ZXJvQWZmaW5lAFgKZzFtX2RvdWJsZQBhEGcxbV9kb3VibGVBZmZpbmUAYAdnMW1fYWRkAGQMZzFtX2FkZE1peGVkAGMNZzFtX2FkZEFmZmluZQBiB2cxbV9uZWcAZg1nMW1fbmVnQWZmaW5lAGUHZzFtX3N1YgBpDGcxbV9zdWJNaXhlZABoDWcxbV9zdWJBZmZpbmUAZxJnMW1fZnJvbU1vbnRnb21lcnkAaxhnMW1fZnJvbU1vbnRnb21lcnlBZmZpbmUAahBnMW1fdG9Nb250Z29tZXJ5AG0WZzFtX3RvTW9udGdvbWVyeUFmZmluZQBsD2cxbV90aW1lc1NjYWxhcgCFARVnMW1fdGltZXNTY2FsYXJBZmZpbmUAhgENZzFtX25vcm1hbGl6ZQByCmcxbV9MRU10b1UAdApnMW1fTEVNdG9DAHUKZzFtX1V0b0xFTQB2CmcxbV9DdG9MRU0Adw9nMW1fYmF0Y2hMRU10b1UAeA9nMW1fYmF0Y2hMRU10b0MAeQ9nMW1fYmF0Y2hVdG9MRU0Aeg9nMW1fYmF0Y2hDdG9MRU0AewxnMW1fdG9BZmZpbmUAbg5nMW1fdG9KYWNvYmlhbgBcEWcxbV9iYXRjaFRvQWZmaW5lAHETZzFtX2JhdGNoVG9KYWNvYmlhbgB8C2cxbV9pbkN1cnZlAHARZzFtX2luQ3VydmVBZmZpbmUAbxdmcm1fX3JldmVyc2VQZXJtdXRhdGlvbgCIAQdmcm1fZmZ0AIwBCGZybV9pZmZ0AI0BCmZybV9yYXdmZnQAigELZnJtX2ZmdEpvaW4AjgEOZnJtX2ZmdEpvaW5FeHQAjwERZnJtX2ZmdEpvaW5FeHRJbnYAkAEKZnJtX2ZmdE1peACRAQxmcm1fZmZ0RmluYWwAkgEdZnJtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24AkwEIcG9sX3plcm8AlAEPcG9sX2NvbnN0cnVjdExDAJUBDHFhcF9idWlsZEFCQwCWAQtxYXBfam9pbkFCQwCXAQxxYXBfYmF0Y2hBZGQAmAEKZjJtX2lzWmVybwCZAQlmMm1faXNPbmUAmgEIZjJtX3plcm8AmwEHZjJtX29uZQCcAQhmMm1fY29weQCdAQdmMm1fbXVsAJ4BCGYybV9tdWwxAJ8BCmYybV9zcXVhcmUAoAEHZjJtX2FkZAChAQdmMm1fc3ViAKIBB2YybV9uZWcAowEIZjJtX3NpZ24AqgENZjJtX2Nvbmp1Z2F0ZQCkARJmMm1fZnJvbU1vbnRnb21lcnkApgEQZjJtX3RvTW9udGdvbWVyeQClAQZmMm1fZXEApwELZjJtX2ludmVyc2UAqAEHZjJtX2V4cACtAQ9mMm1fdGltZXNTY2FsYXIAqQEQZjJtX2JhdGNoSW52ZXJzZQCsAQhmMm1fc3FydACuAQxmMm1faXNTcXVhcmUArwEOZjJtX2lzTmVnYXRpdmUAqwEMZzJtX211bHRpZXhwANoBEmcybV9tdWx0aWV4cF9jaHVuawDZARJnMm1fbXVsdGlleHBBZmZpbmUA3gEYZzJtX211bHRpZXhwQWZmaW5lX2NodW5rAN0BCmcybV9pc1plcm8AsQEQZzJtX2lzWmVyb0FmZmluZQCwAQZnMm1fZXEAuQELZzJtX2VxTWl4ZWQAuAEMZzJtX2VxQWZmaW5lALcBCGcybV9jb3B5ALUBDmcybV9jb3B5QWZmaW5lALQBCGcybV96ZXJvALMBDmcybV96ZXJvQWZmaW5lALIBCmcybV9kb3VibGUAuwEQZzJtX2RvdWJsZUFmZmluZQC6AQdnMm1fYWRkAL4BDGcybV9hZGRNaXhlZAC9AQ1nMm1fYWRkQWZmaW5lALwBB2cybV9uZWcAwAENZzJtX25lZ0FmZmluZQC/AQdnMm1fc3ViAMMBDGcybV9zdWJNaXhlZADCAQ1nMm1fc3ViQWZmaW5lAMEBEmcybV9mcm9tTW9udGdvbWVyeQDFARhnMm1fZnJvbU1vbnRnb21lcnlBZmZpbmUAxAEQZzJtX3RvTW9udGdvbWVyeQDHARZnMm1fdG9Nb250Z29tZXJ5QWZmaW5lAMYBD2cybV90aW1lc1NjYWxhcgDfARVnMm1fdGltZXNTY2FsYXJBZmZpbmUA4AENZzJtX25vcm1hbGl6ZQDMAQpnMm1fTEVNdG9VAM4BCmcybV9MRU10b0MAzwEKZzJtX1V0b0xFTQDQAQpnMm1fQ3RvTEVNANEBD2cybV9iYXRjaExFTXRvVQDSAQ9nMm1fYmF0Y2hMRU10b0MA0wEPZzJtX2JhdGNoVXRvTEVNANQBD2cybV9iYXRjaEN0b0xFTQDVAQxnMm1fdG9BZmZpbmUAyAEOZzJtX3RvSmFjb2JpYW4AtgERZzJtX2JhdGNoVG9BZmZpbmUAywETZzJtX2JhdGNoVG9KYWNvYmlhbgDWAQtnMm1faW5DdXJ2ZQDKARFnMm1faW5DdXJ2ZUFmZmluZQDJAQtnMW1fdGltZXNGcgDhARdnMW1fX3JldmVyc2VQZXJtdXRhdGlvbgDjAQdnMW1fZmZ0AOcBCGcxbV9pZmZ0AOgBCmcxbV9yYXdmZnQA5QELZzFtX2ZmdEpvaW4A6QEOZzFtX2ZmdEpvaW5FeHQA6gERZzFtX2ZmdEpvaW5FeHRJbnYA6wEKZzFtX2ZmdE1peADsAQxnMW1fZmZ0RmluYWwA7QEdZzFtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24A7gELZzJtX3RpbWVzRnIA7wEXZzJtX19yZXZlcnNlUGVybXV0YXRpb24A8QEHZzJtX2ZmdAD1AQhnMm1faWZmdAD2AQpnMm1fcmF3ZmZ0APMBC2cybV9mZnRKb2luAPcBDmcybV9mZnRKb2luRXh0APgBEWcybV9mZnRKb2luRXh0SW52APkBCmcybV9mZnRNaXgA+gEMZzJtX2ZmdEZpbmFsAPsBHWcybV9wcmVwYXJlTGFncmFuZ2VFdmFsdWF0aW9uAPwBEWcxbV90aW1lc0ZyQWZmaW5lAP0BEWcybV90aW1lc0ZyQWZmaW5lAP4BEWZybV9iYXRjaEFwcGx5S2V5AP8BEWcxbV9iYXRjaEFwcGx5S2V5AIACFmcxbV9iYXRjaEFwcGx5S2V5TWl4ZWQAgQIRZzJtX2JhdGNoQXBwbHlLZXkAggIWZzJtX2JhdGNoQXBwbHlLZXlNaXhlZACDAgpmNm1faXNaZXJvAIUCCWY2bV9pc09uZQCGAghmNm1femVybwCHAgdmNm1fb25lAIgCCGY2bV9jb3B5AIkCB2Y2bV9tdWwAigIKZjZtX3NxdWFyZQCLAgdmNm1fYWRkAIwCB2Y2bV9zdWIAjQIHZjZtX25lZwCOAghmNm1fc2lnbgCPAhJmNm1fZnJvbU1vbnRnb21lcnkAkQIQZjZtX3RvTW9udGdvbWVyeQCQAgZmNm1fZXEAkgILZjZtX2ludmVyc2UAkwIHZjZtX2V4cACXAg9mNm1fdGltZXNTY2FsYXIAlAIQZjZtX2JhdGNoSW52ZXJzZQCWAg5mNm1faXNOZWdhdGl2ZQCVAgpmdG1faXNaZXJvAJkCCWZ0bV9pc09uZQCaAghmdG1femVybwCbAgdmdG1fb25lAJwCCGZ0bV9jb3B5AJ0CB2Z0bV9tdWwAngIIZnRtX211bDEAnwIKZnRtX3NxdWFyZQCgAgdmdG1fYWRkAKECB2Z0bV9zdWIAogIHZnRtX25lZwCjAghmdG1fc2lnbgCqAg1mdG1fY29uanVnYXRlAKQCEmZ0bV9mcm9tTW9udGdvbWVyeQCmAhBmdG1fdG9Nb250Z29tZXJ5AKUCBmZ0bV9lcQCnAgtmdG1faW52ZXJzZQCoAgdmdG1fZXhwAK0CD2Z0bV90aW1lc1NjYWxhcgCpAhBmdG1fYmF0Y2hJbnZlcnNlAKwCCGZ0bV9zcXJ0AK4CDGZ0bV9pc1NxdWFyZQCvAg5mdG1faXNOZWdhdGl2ZQCrAhFmdG1fZnJvYmVuaXVzTWFwMAC0AhFmdG1fZnJvYmVuaXVzTWFwMQC1AhFmdG1fZnJvYmVuaXVzTWFwMgC2AhFmdG1fZnJvYmVuaXVzTWFwMwC3AhFmdG1fZnJvYmVuaXVzTWFwNAC4AhFmdG1fZnJvYmVuaXVzTWFwNQC5AhFmdG1fZnJvYmVuaXVzTWFwNgC6AhFmdG1fZnJvYmVuaXVzTWFwNwC7AhFmdG1fZnJvYmVuaXVzTWFwOAC8AhFmdG1fZnJvYmVuaXVzTWFwOQC9AhNibHMxMjM4MV9wYWlyaW5nRXExAMsCE2JsczEyMzgxX3BhaXJpbmdFcTIAzAITYmxzMTIzODFfcGFpcmluZ0VxMwDNAhNibHMxMjM4MV9wYWlyaW5nRXE0AM4CE2JsczEyMzgxX3BhaXJpbmdFcTUAzwIQYmxzMTIzODFfcGFpcmluZwDQAhJibHMxMjM4MV9wcmVwYXJlRzEAxAISYmxzMTIzODFfcHJlcGFyZUcyAMUCE2JsczEyMzgxX21pbGxlckxvb3AAxgIcYmxzMTIzODFfZmluYWxFeHBvbmVudGlhdGlvbgDKAh9ibHMxMjM4MV9maW5hbEV4cG9uZW50aWF0aW9uT2xkAMcCGmJsczEyMzgxX19jeWNsb3RvbWljU3F1YXJlAMgCGmJsczEyMzgxX19jeWNsb3RvbWljRXhwX3cwAMkCCGY2bV9tdWwxALACCWY2bV9tdWwwMQCxAgpmdG1fbXVsMDE0ALICEWcxbV9pbkdyb3VwQWZmaW5lAL4CC2cxbV9pbkdyb3VwAL8CEWcybV9pbkdyb3VwQWZmaW5lAMACC2cybV9pbkdyb3VwAMECCvK7BdECPgAgASAAKQMANwMAIAEgACkDCDcDCCABIAApAxA3AxAgASAAKQMYNwMYIAEgACkDIDcDICABIAApAyg3AygLLAAgAEIANwMAIABCADcDCCAAQgA3AxAgAEIANwMYIABCADcDICAAQgA3AygLTQAgACkDKFAEQCAAKQMgUARAIAApAxhQBEAgACkDEFAEQCAAKQMIUARAIAApAwBQDwVBAA8LBUEADwsFQQAPCwVBAA8LBUEADwtBAA8LLAAgAEIBNwMAIABCADcDCCAAQgA3AxAgAEIANwMYIABCADcDICAAQgA3AygLawAgACkDKCABKQMoUQRAIAApAyAgASkDIFEEQCAAKQMYIAEpAxhRBEAgACkDECABKQMQUQRAIAApAwggASkDCFEEQCAAKQMAIAEpAwBRDwVBAA8LBUEADwsFQQAPCwVBAA8LBUEADwtBAA8LxQEAIAApAyggASkDKFQEQEEADwUgACkDKCABKQMoVgRAQQEPBSAAKQMgIAEpAyBUBEBBAA8FIAApAyAgASkDIFYEQEEBDwUgACkDGCABKQMYVARAQQAPBSAAKQMYIAEpAxhWBEBBAQ8FIAApAxAgASkDEFQEQEEADwUgACkDECABKQMQVgRAQQEPBSAAKQMIIAEpAwhUBEBBAA8FIAApAwggASkDCFYEQEEBDwUgACkDACABKQMAWg8LCwsLCwsLCwsLQQAPC7wCAQF+IAA1AgAgATUCAHwhAyACIAM+AgAgADUCBCABNQIEfCADQiCIfCEDIAIgAz4CBCAANQIIIAE1Agh8IANCIIh8IQMgAiADPgIIIAA1AgwgATUCDHwgA0IgiHwhAyACIAM+AgwgADUCECABNQIQfCADQiCIfCEDIAIgAz4CECAANQIUIAE1AhR8IANCIIh8IQMgAiADPgIUIAA1AhggATUCGHwgA0IgiHwhAyACIAM+AhggADUCHCABNQIcfCADQiCIfCEDIAIgAz4CHCAANQIgIAE1AiB8IANCIIh8IQMgAiADPgIgIAA1AiQgATUCJHwgA0IgiHwhAyACIAM+AiQgADUCKCABNQIofCADQiCIfCEDIAIgAz4CKCAANQIsIAE1Aix8IANCIIh8IQMgAiADPgIsIANCIIinC5ADAQF+IAA1AgAgATUCAH0hAyACIANC/////w+DPgIAIAA1AgQgATUCBH0gA0Igh3whAyACIANC/////w+DPgIEIAA1AgggATUCCH0gA0Igh3whAyACIANC/////w+DPgIIIAA1AgwgATUCDH0gA0Igh3whAyACIANC/////w+DPgIMIAA1AhAgATUCEH0gA0Igh3whAyACIANC/////w+DPgIQIAA1AhQgATUCFH0gA0Igh3whAyACIANC/////w+DPgIUIAA1AhggATUCGH0gA0Igh3whAyACIANC/////w+DPgIYIAA1AhwgATUCHH0gA0Igh3whAyACIANC/////w+DPgIcIAA1AiAgATUCIH0gA0Igh3whAyACIANC/////w+DPgIgIAA1AiQgATUCJH0gA0Igh3whAyACIANC/////w+DPgIkIAA1AiggATUCKH0gA0Igh3whAyACIANC/////w+DPgIoIAA1AiwgATUCLH0gA0Igh3whAyACIANC/////w+DPgIsIANCIIenC6ciGgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4gA0L/////D4MgADUCACIFIAE1AgAiBn58IQMgBCADQiCIfCEEIAIgAz4CACAEQiCIIQMgBEL/////D4MgBSABNQIEIgh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIEIgcgBn58IQQgAyAEQiCIfCEDIAIgBD4CBCADQiCIIQQgA0L/////D4MgBSABNQIIIgp+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIIIgkgBn58IQMgBCADQiCIfCEEIAIgAz4CCCAEQiCIIQMgBEL/////D4MgBSABNQIMIgx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIMIgsgBn58IQQgAyAEQiCIfCEDIAIgBD4CDCADQiCIIQQgA0L/////D4MgBSABNQIQIg5+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyALIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIQIg0gBn58IQMgBCADQiCIfCEEIAIgAz4CECAEQiCIIQMgBEL/////D4MgBSABNQIUIhB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIUIg8gBn58IQQgAyAEQiCIfCEDIAIgBD4CFCADQiCIIQQgA0L/////D4MgBSABNQIYIhJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyALIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyANIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIYIhEgBn58IQMgBCADQiCIfCEEIAIgAz4CGCAEQiCIIQMgBEL/////D4MgBSABNQIcIhR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIcIhMgBn58IQQgAyAEQiCIfCEDIAIgBD4CHCADQiCIIQQgA0L/////D4MgBSABNQIgIhZ+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyALIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyANIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIgIhUgBn58IQMgBCADQiCIfCEEIAIgAz4CICAEQiCIIQMgBEL/////D4MgBSABNQIkIhh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIBZ+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIkIhcgBn58IQQgAyAEQiCIfCEDIAIgBD4CJCADQiCIIQQgA0L/////D4MgBSABNQIoIhp+fCEDIAQgA0IgiHwhBCADQv////8PgyAHIBh+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIBZ+fCEDIAQgA0IgiHwhBCADQv////8PgyALIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyANIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyARIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyAVIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyAXIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIoIhkgBn58IQMgBCADQiCIfCEEIAIgAz4CKCAEQiCIIQMgBEL/////D4MgBSABNQIsIhx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAHIBp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAJIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIBZ+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAXIAp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIsIhsgBn58IQQgAyAEQiCIfCEDIAIgBD4CLCADQiCIIQQgA0L/////D4MgByAcfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAafnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAYfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSAWfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgESASfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgFSAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgFyAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgGSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgGyAIfnwhAyAEIANCIIh8IQQgAiADPgIwIARCIIghAyAEQv////8PgyAJIBx+fCEEIAMgBEIgiHwhAyAEQv////8PgyALIBp+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIBZ+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAXIA5+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIAx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAbIAp+fCEEIAMgBEIgiHwhAyACIAQ+AjQgA0IgiCEEIANC/////w+DIAsgHH58IQMgBCADQiCIfCEEIANC/////w+DIA0gGn58IQMgBCADQiCIfCEEIANC/////w+DIA8gGH58IQMgBCADQiCIfCEEIANC/////w+DIBEgFn58IQMgBCADQiCIfCEEIANC/////w+DIBMgFH58IQMgBCADQiCIfCEEIANC/////w+DIBUgEn58IQMgBCADQiCIfCEEIANC/////w+DIBcgEH58IQMgBCADQiCIfCEEIANC/////w+DIBkgDn58IQMgBCADQiCIfCEEIANC/////w+DIBsgDH58IQMgBCADQiCIfCEEIAIgAz4COCAEQiCIIQMgBEL/////D4MgDSAcfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAafnwhBCADIARCIIh8IQMgBEL/////D4MgESAYfnwhBCADIARCIIh8IQMgBEL/////D4MgEyAWfnwhBCADIARCIIh8IQMgBEL/////D4MgFSAUfnwhBCADIARCIIh8IQMgBEL/////D4MgFyASfnwhBCADIARCIIh8IQMgBEL/////D4MgGSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgGyAOfnwhBCADIARCIIh8IQMgAiAEPgI8IANCIIghBCADQv////8PgyAPIBx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIBp+fCEDIAQgA0IgiHwhBCADQv////8PgyATIBh+fCEDIAQgA0IgiHwhBCADQv////8PgyAVIBZ+fCEDIAQgA0IgiHwhBCADQv////8PgyAXIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAZIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAbIBB+fCEDIAQgA0IgiHwhBCACIAM+AkAgBEIgiCEDIARC/////w+DIBEgHH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgGn58IQQgAyAEQiCIfCEDIARC/////w+DIBUgGH58IQQgAyAEQiCIfCEDIARC/////w+DIBcgFn58IQQgAyAEQiCIfCEDIARC/////w+DIBkgFH58IQQgAyAEQiCIfCEDIARC/////w+DIBsgEn58IQQgAyAEQiCIfCEDIAIgBD4CRCADQiCIIQQgA0L/////D4MgEyAcfnwhAyAEIANCIIh8IQQgA0L/////D4MgFSAafnwhAyAEIANCIIh8IQQgA0L/////D4MgFyAYfnwhAyAEIANCIIh8IQQgA0L/////D4MgGSAWfnwhAyAEIANCIIh8IQQgA0L/////D4MgGyAUfnwhAyAEIANCIIh8IQQgAiADPgJIIARCIIghAyAEQv////8PgyAVIBx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAXIBp+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAbIBZ+fCEEIAMgBEIgiHwhAyACIAQ+AkwgA0IgiCEEIANC/////w+DIBcgHH58IQMgBCADQiCIfCEEIANC/////w+DIBkgGn58IQMgBCADQiCIfCEEIANC/////w+DIBsgGH58IQMgBCADQiCIfCEEIAIgAz4CUCAEQiCIIQMgBEL/////D4MgGSAcfnwhBCADIARCIIh8IQMgBEL/////D4MgGyAafnwhBCADIARCIIh8IQMgAiAEPgJUIANCIIghBCADQv////8PgyAbIBx+fCEDIAQgA0IgiHwhBCACIAM+AlggBEIgiCEDIAIgBD4CXAvOIBABfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfkIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAA1AgAiBiAGfnwhAiADIAJCIIh8IQMgASACPgIAIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AgQiB358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCCCIIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgByAHfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CCCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIMIgl+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAh+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIMIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhAiCn58IQIgAyACQiCIfCEDIAJC/////w+DIAcgCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAggCH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCFCILfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAJfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CFCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIYIgx+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAJIAl+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIYIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhwiDX58IQIgAyACQiCIfCEDIAJC/////w+DIAcgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAggC358IQIgAyACQiCIfCEDIAJC/////w+DIAkgCn58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCICIOfnwhAiADIAJCIIh8IQMgAkL/////D4MgByANfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAMfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSALfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgCiAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CICADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIkIg9+fCECIAMgAkIgiHwhAyACQv////8PgyAHIA5+fCECIAMgAkIgiHwhAyACQv////8PgyAIIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAKIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIkIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AigiEH58IQIgAyACQiCIfCEDIAJC/////w+DIAcgD358IQIgAyACQiCIfCEDIAJC/////w+DIAggDn58IQIgAyACQiCIfCEDIAJC/////w+DIAkgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAogDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAsgC358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCLCIRfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiANfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAMfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CLCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgByARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyANfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDCAMfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CMCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCCARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCSAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCANfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CNCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCSARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCAOfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDSANfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4COCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCiARfnwhAiADIAJCIIh8IQMgAkL/////D4MgCyAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAOfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CPCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCyARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDCAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAPfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDiAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CQCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDCARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgDiAPfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CRCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDSARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDiAQfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgDyAPfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CSCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDiARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDyAQfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CTCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDyARfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgECAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CUCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgECARfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CVCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgESARfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CWCADIQQgBEIgiCEFIAEgBD4CXAsKACAAIAAgARAIC5ICAQF+IAA1AAAgAX4hAyACIAM+AAAgADUABCABfiADQiCIfCEDIAIgAz4ABCAANQAIIAF+IANCIIh8IQMgAiADPgAIIAA1AAwgAX4gA0IgiHwhAyACIAM+AAwgADUAECABfiADQiCIfCEDIAIgAz4AECAANQAUIAF+IANCIIh8IQMgAiADPgAUIAA1ABggAX4gA0IgiHwhAyACIAM+ABggADUAHCABfiADQiCIfCEDIAIgAz4AHCAANQAgIAF+IANCIIh8IQMgAiADPgAgIAA1ACQgAX4gA0IgiHwhAyACIAM+ACQgADUAKCABfiADQiCIfCEDIAIgAz4AKCAANQAsIAF+IANCIIh8IQMgAiADPgAsC04CAX4BfyAAIQMgAzUAACABfCECIAMgAj4AACACQiCIIQICQANAIAJQDQEgA0EEaiEDIAM1AAAgAnwhAiADIAI+AAAgAkIgiCECDAALCwurAgcBfwF/AX8BfwF+AX4BfyACBEAgAiEFBUHYACEFCyADBEAgAyEEBUGIASEECyAAIAQQACABQSgQACAFEAFBuAEQAUEvIQZBLyEHAkADQEEoIAdqLQAAIAdBA0ZyDQEgB0EBayEHDAALC0EoIAdqQQNrNQAAQgF8IQggCEIBUQRAQgBCAIAaCwJAA0ACQANAIAQgBmotAAAgBkEHRnINASAGQQFrIQYMAAsLIAQgBmpBB2spAAAhCSAJIAiAIQkgBiAHa0EEayEKAkADQCAJQoCAgIBwg1AgCkEATnENASAJQgiIIQkgCkEBaiEKDAALCyAJUARAIARBKBAFRQ0CQgEhCUEAIQoLQSggCUHoARALIARB6AEgCmsgBBAHGiAFIApqIAkQDAwACwsLtQILAX8BfwF/AX8BfwF/AX8BfwF/AX8Bf0GYAiEDQZgCEAFBACELQcgCIQUgAUHIAhAAQfgCIQRB+AIQA0EAIQxBqAMhCCAAQagDEABB2AMhBkGIBCEHQZgFIQoCQANAIAgQAg0BIAUgCCAGIAcQDSAGIARBuAQQCCALBEAgDARAQbgEIAMQBQRAQbgEIAMgChAHGkEAIQ0FIANBuAQgChAHGkEBIQ0LBUG4BCADIAoQBhpBASENCwUgDARAQbgEIAMgChAGGkEAIQ0FIANBuAQQBQRAIANBuAQgChAHGkEAIQ0FQbgEIAMgChAHGkEBIQ0LCwsgAyEJIAQhAyAKIQQgCSEKIAwhCyANIQwgBSEJIAghBSAHIQggCSEHDAALCyALBEAgASADIAIQBxoFIAMgAhAACwsKACAAQagGEAQPCywAIAAgASACEAYEQCACQcgFIAIQBxoFIAJByAUQBQRAIAJByAUgAhAHGgsLCxcAIAAgASACEAcEQCACQcgFIAIQBhoLCwsAQdgGIAAgARARC/wkAwF+AX4BfkL9//P/DyECQgAhAyAANQIAIAJ+Qv////8PgyEEIAA1AgAgA0IgiHxByAU1AgAgBH58IQMgACADPgIAIAA1AgQgA0IgiHxByAU1AgQgBH58IQMgACADPgIEIAA1AgggA0IgiHxByAU1AgggBH58IQMgACADPgIIIAA1AgwgA0IgiHxByAU1AgwgBH58IQMgACADPgIMIAA1AhAgA0IgiHxByAU1AhAgBH58IQMgACADPgIQIAA1AhQgA0IgiHxByAU1AhQgBH58IQMgACADPgIUIAA1AhggA0IgiHxByAU1AhggBH58IQMgACADPgIYIAA1AhwgA0IgiHxByAU1AhwgBH58IQMgACADPgIcIAA1AiAgA0IgiHxByAU1AiAgBH58IQMgACADPgIgIAA1AiQgA0IgiHxByAU1AiQgBH58IQMgACADPgIkIAA1AiggA0IgiHxByAU1AiggBH58IQMgACADPgIoIAA1AiwgA0IgiHxByAU1AiwgBH58IQMgACADPgIsQfgIIANCIIg+AgBCACEDIAA1AgQgAn5C/////w+DIQQgADUCBCADQiCIfEHIBTUCACAEfnwhAyAAIAM+AgQgADUCCCADQiCIfEHIBTUCBCAEfnwhAyAAIAM+AgggADUCDCADQiCIfEHIBTUCCCAEfnwhAyAAIAM+AgwgADUCECADQiCIfEHIBTUCDCAEfnwhAyAAIAM+AhAgADUCFCADQiCIfEHIBTUCECAEfnwhAyAAIAM+AhQgADUCGCADQiCIfEHIBTUCFCAEfnwhAyAA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DiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCBCEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AgghAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiABNQIMIQMgEyAHIAN+fCEGIAZC/////w+DIRMgBkIgiCEFIBQgCCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIAkgA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAKIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBcgCyADfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAYIAwgA358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGSANIAN+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBogDiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCECEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AhQhAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiABNQIYIQMgEyAHIAN+fCEGIAZC/////w+DIRMgBkIgiCEFIBQgCCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIAkgA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAKIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBcgCyADfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAYIAwgA358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGSANIAN+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBogDiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCHCEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AiAhAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiABNQIkIQMgEyAHIAN+fCEGIAZC/////w+DIRMgBkIgiCEFIBQgCCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIAkgA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAKIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBcgCyADfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAYIAwgA358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGSANIAN+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBogDiADfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAbIA8gA358IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHCAQIAN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB0gESADfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAeIBIgA358IAV8IQYgBkL/////D4MhHiAGQiCIIQUgBSEfIBNC/f/z/w9+Qv////8PgyEEIBMgBEKr1f7/D358IQYgBkIgiCEFIBQgBEL///vPC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQv//z4oLfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC/v+v9QF+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBEKk7MO1D358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgGCAEQqClw7kGfnwgBXwhBiAGQv////8PgyEXIAZCIIghBSAZIARCv6WUnA9+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBogBEKEl92jBn58IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGyAEQtfZrpoEfnwgBXwhBiAGQv////8PgyEaIAZCIIghBSAcIARCts/u2AR+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIB0gBEKazf/LA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHiAEQuqjhNABfnwgBXwhBiAGQv////8PgyEdIAZCIIghBSAfIAV8IR4gATUCKCEDIBMgByADfnwhBiAGQv////8PgyETIAZCIIghBSAUIAggA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSAJIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgCiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAXIAsgA358IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGCAMIAN+fCAFfCEGIAZC/////w+DIRggBkIgiCEFIBkgDSADfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAaIA4gA358IAV8IQYgBkL/////D4MhGiAGQiCIIQUgGyAPIAN+fCAFfCEGIAZC/////w+DIRsgBkIgiCEFIBwgECADfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAdIBEgA358IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHiASIAN+fCAFfCEGIAZC/////w+DIR4gBkIgiCEFIAUhHyATQv3/8/8PfkL/////D4MhBCATIARCq9X+/w9+fCEGIAZCIIghBSAUIARC///7zwt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEL//8+KC358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQv7/r/UBfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIARCpOzDtQ9+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIBggBEKgpcO5Bn58IAV8IQYgBkL/////D4MhFyAGQiCIIQUgGSAEQr+llJwPfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAaIARChJfdowZ+fCAFfCEGIAZC/////w+DIRkgBkIgiCEFIBsgBELX2a6aBH58IAV8IQYgBkL/////D4MhGiAGQiCIIQUgHCAEQrbP7tgEfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAdIARCms3/ywN+fCAFfCEGIAZC/////w+DIRwgBkIgiCEFIB4gBELqo4TQAX58IAV8IQYgBkL/////D4MhHSAGQiCIIQUgHyAFfCEeIAE1AiwhAyATIAcgA358IQYgBkL/////D4MhEyAGQiCIIQUgFCAIIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgCSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIAogA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgFyALIAN+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBggDCADfnwgBXwhBiAGQv////8PgyEYIAZCIIghBSAZIA0gA358IAV8IQYgBkL/////D4MhGSAGQiCIIQUgGiAOIAN+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBsgDyADfnwgBXwhBiAGQv////8PgyEbIAZCIIghBSAcIBAgA358IAV8IQYgBkL/////D4MhHCAGQiCIIQUgHSARIAN+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB4gEiADfnwgBXwhBiAGQv////8PgyEeIAZCIIghBSAFIR8gE0L9//P/D35C/////w+DIQQgEyAEQqvV/v8PfnwhBiAGQiCIIQUgFCAEQv//+88LfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARC///Pigt+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBEL+/6/1AX58IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAEQqTsw7UPfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAYIARCoKXDuQZ+fCAFfCEGIAZC/////w+DIRcgBkIgiCEFIBkgBEK/pZScD358IAV8IQYgBkL/////D4MhGCAGQiCIIQUgGiAEQoSX3aMGfnwgBXwhBiAGQv////8PgyEZIAZCIIghBSAbIARC19mumgR+fCAFfCEGIAZC/////w+DIRogBkIgiCEFIBwgBEK2z+7YBH58IAV8IQYgBkL/////D4MhGyAGQiCIIQUgHSAEQprN/8sDfnwgBXwhBiAGQv////8PgyEcIAZCIIghBSAeIARC6qOE0AF+fCAFfCEGIAZC/////w+DIR0gBkIgiCEFIB8gBXwhHiACIBM+AgAgAiAUPgIEIAIgFT4CCCACIBY+AgwgAiAXPgIQIAIgGD4CFCACIBk+AhggAiAaPgIcIAIgGz4CICACIBw+AiQgAiAdPgIoIAIgHj4CLCACQcgFEAUEQCACQcgFIAIQBxoLC/dNHgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfiAANQIAIQYgADUCBCEHIAA1AgghCCAANQIMIQkgADUCECEKIAA1AhQhCyAANQIYIQwgADUCHCENIAA1AiAhDiAANQIkIQ8gADUCKCEQIAA1AiwhESASIAYgBn58IQQgBEL/////D4MhEiAEQiCIIQMgByAGfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgCCAGfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgCSAGfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgCiAGfiEFIBYgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFiAEQiCIIAVCIIhCAYZ8IQMgCyAGfiEFIBcgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFyAEQiCIIAVCIIhCAYZ8IQMgDCAGfiEFIBggBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGCAEQiCIIAVCIIhCAYZ8IQMgDSAGfiEFIBkgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGSAEQiCIIAVCIIhCAYZ8IQMgDiAGfiEFIBogBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGiAEQiCIIAVCIIhCAYZ8IQMgDyAGfiEFIBsgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGyAEQiCIIAVCIIhCAYZ8IQMgECAGfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAGfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBMgByAHfnwhBCAEQv////8PgyETIARCIIghAyAIIAd+IQUgFCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEUIARCIIggBUIgiEIBhnwhAyAJIAd+IQUgFSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEVIARCIIggBUIgiEIBhnwhAyAKIAd+IQUgFiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEWIARCIIggBUIgiEIBhnwhAyALIAd+IQUgFyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEXIARCIIggBUIgiEIBhnwhAyAMIAd+IQUgGCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEYIARCIIggBUIgiEIBhnwhAyANIAd+IQUgGSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEZIARCIIggBUIgiEIBhnwhAyAOIAd+IQUgGiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEaIARCIIggBUIgiEIBhnwhAyAPIAd+IQUgGyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEbIARCIIggBUIgiEIBhnwhAyAQIAd+IQUgHCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEcIARCIIggBUIgiEIBhnwhAyARIAd+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gFCAIIAh+fCEEIARC/////w+DIRQgBEIgiCEDIAkgCH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIAogCH4hBSAWIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRYgBEIgiCAFQiCIQgGGfCEDIAsgCH4hBSAXIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRcgBEIgiCAFQiCIQgGGfCEDIAwgCH4hBSAYIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRggBEIgiCAFQiCIQgGGfCEDIA0gCH4hBSAZIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRkgBEIgiCAFQiCIQgGGfCEDIA4gCH4hBSAaIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRogBEIgiCAFQiCIQgGGfCEDIA8gCH4hBSAbIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRsgBEIgiCAFQiCIQgGGfCEDIBAgCH4hBSAcIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRwgBEIgiCAFQiCIQgGGfCEDIBEgCH4hBSAdIAVC/////w+DQgGGfCADfCEEIARC/////w+DIR0gBEIgiCAFQiCIQgGGfCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyAVIAkgCX58IQQgBEL/////D4MhFSAEQiCIIQMgCiAJfiEFIBYgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFiAEQiCIIAVCIIhCAYZ8IQMgCyAJfiEFIBcgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFyAEQiCIIAVCIIhCAYZ8IQMgDCAJfiEFIBggBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGCAEQiCIIAVCIIhCAYZ8IQMgDSAJfiEFIBkgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGSAEQiCIIAVCIIhCAYZ8IQMgDiAJfiEFIBogBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGiAEQiCIIAVCIIhCAYZ8IQMgDyAJfiEFIBsgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGyAEQiCIIAVCIIhCAYZ8IQMgECAJfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAJfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBYgCiAKfnwhBCAEQv////8PgyEWIARCIIghAyALIAp+IQUgFyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEXIARCIIggBUIgiEIBhnwhAyAMIAp+IQUgGCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEYIARCIIggBUIgiEIBhnwhAyANIAp+IQUgGSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEZIARCIIggBUIgiEIBhnwhAyAOIAp+IQUgGiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEaIARCIIggBUIgiEIBhnwhAyAPIAp+IQUgGyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEbIARCIIggBUIgiEIBhnwhAyAQIAp+IQUgHCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEcIARCIIggBUIgiEIBhnwhAyARIAp+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gFyALIAt+fCEEIARC/////w+DIRcgBEIgiCEDIAwgC34hBSAYIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRggBEIgiCAFQiCIQgGGfCEDIA0gC34hBSAZIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRkgBEIgiCAFQiCIQgGGfCEDIA4gC34hBSAaIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRogBEIgiCAFQiCIQgGGfCEDIA8gC34hBSAbIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRsgBEIgiCAFQiCIQgGGfCEDIBAgC34hBSAcIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRwgBEIgiCAFQiCIQgGGfCEDIBEgC34hBSAdIAVC/////w+DQgGGfCADfCEEIARC/////w+DIR0gBEIgiCAFQiCIQgGGfCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyAYIAwgDH58IQQgBEL/////D4MhGCAEQiCIIQMgDSAMfiEFIBkgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGSAEQiCIIAVCIIhCAYZ8IQMgDiAMfiEFIBogBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGiAEQiCIIAVCIIhCAYZ8IQMgDyAMfiEFIBsgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhGyAEQiCIIAVCIIhCAYZ8IQMgECAMfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAMfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBkgDSANfnwhBCAEQv////8PgyEZIARCIIghAyAOIA1+IQUgGiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEaIARCIIggBUIgiEIBhnwhAyAPIA1+IQUgGyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEbIARCIIggBUIgiEIBhnwhAyAQIA1+IQUgHCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEcIARCIIggBUIgiEIBhnwhAyARIA1+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gGiAOIA5+fCEEIARC/////w+DIRogBEIgiCEDIA8gDn4hBSAbIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRsgBEIgiCAFQiCIQgGGfCEDIBAgDn4hBSAcIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRwgBEIgiCAFQiCIQgGGfCEDIBEgDn4hBSAdIAVC/////w+DQgGGfCADfCEEIARC/////w+DIR0gBEIgiCAFQiCIQgGGfCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyAbIA8gD358IQQgBEL/////D4MhGyAEQiCIIQMgECAPfiEFIBwgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHCAEQiCIIAVCIIhCAYZ8IQMgESAPfiEFIB0gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhHSAEQiCIIAVCIIhCAYZ8IQMgHiADfCEEIARC/////w+DIR4gHyAEQiCIfCEfIBJC/f/z/w9+Qv////8PgyECIBIgAkKr1f7/D358IQQgBEIgiCEDIBMgAkL///vPC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQv//z4oLfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC/v+v9QF+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgAkKk7MO1D358IAN8IQQgBEL/////D4MhFSAEQiCIIQMgFyACQqClw7kGfnwgA3whBCAEQv////8PgyEWIARCIIghAyAYIAJCv6WUnA9+fCADfCEEIARC/////w+DIRcgBEIgiCEDIBkgAkKEl92jBn58IAN8IQQgBEL/////D4MhGCAEQiCIIQMgGiACQtfZrpoEfnwgA3whBCAEQv////8PgyEZIARCIIghAyAbIAJCts/u2AR+fCADfCEEIARC/////w+DIRogBEIgiCEDIBwgAkKazf/LA358IAN8IQQgBEL/////D4MhGyAEQiCIIQMgHSACQuqjhNABfnwgA3whBCAEQv////8PgyEcIARCIIghAyAeIAN8IQQgBEL/////D4MhHSAfIARCIIh8IR5CACEfIBwgECAQfnwhBCAEQv////8PgyEcIARCIIghAyARIBB+IQUgHSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEdIARCIIggBUIgiEIBhnwhAyAeIAN8IQQgBEL/////D4MhHiAfIARCIIh8IR8gEkL9//P/D35C/////w+DIQIgEiACQqvV/v8PfnwhBCAEQiCIIQMgEyACQv//+88LfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJC///Pigt+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkL+/6/1AX58IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiACQqTsw7UPfnwgA3whBCAEQv////8PgyEVIARCIIghAyAXIAJCoKXDuQZ+fCADfCEEIARC/////w+DIRYgBEIgiCEDIBggAkK/pZScD358IAN8IQQgBEL/////D4MhFyAEQiCIIQMgGSACQoSX3aMGfnwgA3whBCAEQv////8PgyEYIARCIIghAyAaIAJC19mumgR+fCADfCEEIARC/////w+DIRkgBEIgiCEDIBsgAkK2z+7YBH58IAN8IQQgBEL/////D4MhGiAEQiCIIQMgHCACQprN/8sDfnwgA3whBCAEQv////8PgyEbIARCIIghAyAdIAJC6qOE0AF+fCADfCEEIARC/////w+DIRwgBEIgiCEDIB4gA3whBCAEQv////8PgyEdIB8gBEIgiHwhHkIAIR8gHSARIBF+fCEEIARC/////w+DIR0gBEIgiCEDIB4gA3whBCAEQv////8PgyEeIB8gBEIgiHwhHyASQv3/8/8PfkL/////D4MhAiASIAJCq9X+/w9+fCEEIARCIIghAyATIAJC///7zwt+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkL//8+KC358IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQv7/r/UBfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAJCpOzDtQ9+fCADfCEEIARC/////w+DIRUgBEIgiCEDIBcgAkKgpcO5Bn58IAN8IQQgBEL/////D4MhFiAEQiCIIQMgGCACQr+llJwPfnwgA3whBCAEQv////8PgyEXIARCIIghAyAZIAJChJfdowZ+fCADfCEEIARC/////w+DIRggBEIgiCEDIBogAkLX2a6aBH58IAN8IQQgBEL/////D4MhGSAEQiCIIQMgGyACQrbP7tgEfnwgA3whBCAEQv////8PgyEaIARCIIghAyAcIAJCms3/ywN+fCADfCEEIARC/////w+DIRsgBEIgiCEDIB0gAkLqo4TQAX58IAN8IQQgBEL/////D4MhHCAEQiCIIQMgHiADfCEEIARC/////w+DIR0gHyAEQiCIfCEeQgAhHyABIBI+AgAgASATPgIEIAEgFD4CCCABIBU+AgwgASAWPgIQIAEgFz4CFCABIBg+AhggASAZPgIcIAEgGj4CICABIBs+AiQgASAcPgIoIAEgHT4CLCAepwRAIAFByAUgARAHGgUgAUHIBRAFBEAgAUHIBSABEAcaCwsLCgAgACAAIAEQFAsLACAAQfgFIAEQFAsVACAAQfgREABBqBIQAUH4ESABEBMLEQAgAEHYEhAYQdgSQbgHEAULJAAgABACBEBBAA8LIABBiBMQGEGIE0G4BxAFBEBBfw8LQQEPCxcAIAAgARAYIAFByAUgARAOIAEgARAXCwkAQagGIAAQAAvLAQQBfwF/AX8BfyACEAFBMCEFIAAhAwJAA0AgBSABSw0BIAVBMEYEQEG4ExAcBUG4E0H4BUG4ExAUCyADQbgTQegTEBQgAkHoEyAC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AgQgADUCCCABNQIIfCADQiCIfCEDIAIgAz4CCCAANQIMIAE1Agx8IANCIIh8IQMgAiADPgIMIAA1AhAgATUCEHwgA0IgiHwhAyACIAM+AhAgADUCFCABNQIUfCADQiCIfCEDIAIgAz4CFCAANQIYIAE1Ahh8IANCIIh8IQMgAiADPgIYIAA1AhwgATUCHHwgA0IgiHwhAyACIAM+AhwgA0IgiKcLjAIBAX4gADUCACABNQIAfSEDIAIgA0L/////D4M+AgAgADUCBCABNQIEfSADQiCHfCEDIAIgA0L/////D4M+AgQgADUCCCABNQIIfSADQiCHfCEDIAIgA0L/////D4M+AgggADUCDCABNQIMfSADQiCHfCEDIAIgA0L/////D4M+AgwgADUCECABNQIQfSADQiCHfCEDIAIgA0L/////D4M+AhAgADUCFCABNQIUfSADQiCHfCEDIAIgA0L/////D4M+AhQgADUCGCABNQIYfSADQiCHfCEDIAIgA0L/////D4M+AhggADUCHCABNQIcfSADQiCHfCEDIAIgA0L/////D4M+AhwgA0Igh6cLjxASAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+IANC/////w+DIAA1AgAiBSABNQIAIgZ+fCEDIAQgA0IgiHwhBCACIAM+AgAgBEIgiCEDIARC/////w+DIAUgATUCBCIIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCBCIHIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AgQgA0IgiCEEIANC/////w+DIAUgATUCCCIKfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCCCIJIAZ+fCEDIAQgA0IgiHwhBCACIAM+AgggBEIgiCEDIARC/////w+DIAUgATUCDCIMfnwhBCADIARCIIh8IQMgBEL/////D4MgByAKfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCDCILIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AgwgA0IgiCEEIANC/////w+DIAUgATUCECIOfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCECINIAZ+fCEDIAQgA0IgiHwhBCACIAM+AhAgBEIgiCEDIARC/////w+DIAUgATUCFCIQfnwhBCADIARCIIh8IQMgBEL/////D4MgByAOfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAMfnwhBCADIARCIIh8IQMgBEL/////D4MgCyAKfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCFCIPIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AhQgA0IgiCEEIANC/////w+DIAUgATUCGCISfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCGCIRIAZ+fCEDIAQgA0IgiHwhBCACIAM+AhggBEIgiCEDIARC/////w+DIAUgATUCHCIUfnwhBCADIARCIIh8IQMgBEL/////D4MgByASfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgCyAOfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAMfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAKfnwhBCADIARCIIh8IQMgBEL/////D4MgESAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCHCITIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AhwgA0IgiCEEIANC/////w+DIAcgFH58IQMgBCADQiCIfCEEIANC/////w+DIAkgEn58IQMgBCADQiCIfCEEIANC/////w+DIAsgEH58IQMgBCADQiCIfCEEIANC/////w+DIA0gDn58IQMgBCADQiCIfCEEIANC/////w+DIA8gDH58IQMgBCADQiCIfCEEIANC/////w+DIBEgCn58IQMgBCADQiCIfCEEIANC/////w+DIBMgCH58IQMgBCADQiCIfCEEIAIgAz4CICAEQiCIIQMgBEL/////D4MgCSAUfnwhBCADIARCIIh8IQMgBEL/////D4MgCyASfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAOfnwhBCADIARCIIh8IQMgBEL/////D4MgESAMfnwhBCADIARCIIh8IQMgBEL/////D4MgEyAKfnwhBCADIARCIIh8IQMgAiAEPgIkIANCIIghBCADQv////8PgyALIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyANIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyARIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAx+fCEDIAQgA0IgiHwhBCACIAM+AiggBEIgiCEDIARC/////w+DIA0gFH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gEn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgEH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgDn58IQQgAyAEQiCIfCEDIAIgBD4CLCADQiCIIQQgA0L/////D4MgDyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgESASfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAQfnwhAyAEIANCIIh8IQQgAiADPgIwIARCIIghAyAEQv////8PgyARIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIBJ+fCEEIAMgBEIgiHwhAyACIAQ+AjQgA0IgiCEEIANC/////w+DIBMgFH58IQMgBCADQiCIfCEEIAIgAz4COCAEQiCIIQMgAiAEPgI8C4wSDAF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfkIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAA1AgAiBiAGfnwhAiADIAJCIIh8IQMgASACPgIAIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AgQiB358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCCCIIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgByAHfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CCCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIMIgl+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAh+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIMIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhAiCn58IQIgAyACQiCIfCEDIAJC/////w+DIAcgCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAggCH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCFCILfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAJfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CFCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIYIgx+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAJIAl+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIYIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhwiDX58IQIgAyACQiCIfCEDIAJC/////w+DIAcgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAggC358IQIgAyACQiCIfCEDIAJC/////w+DIAkgCn58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAcgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAggDH58IQIgAyACQiCIfCEDIAJC/////w+DIAkgC358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAogCn58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAggDX58IQIgAyACQiCIfCEDIAJC/////w+DIAkgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAogC358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAkgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAogDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAsgC358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAogDX58IQIgAyACQiCIfCEDIAJC/////w+DIAsgDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAsgDX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAwgDH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAwgDX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIA0gDX58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjggAyEEIARCIIghBSABIAQ+AjwLCgAgACAAIAEQMQu2AQEBfiAANQAAIAF+IQMgAiADPgAAIAA1AAQgAX4gA0IgiHwhAyACIAM+AAQgADUACCABfiADQiCIfCEDIAIgAz4ACCAANQAMIAF+IANCIIh8IQMgAiADPgAMIAA1ABAgAX4gA0IgiHwhAyACIAM+ABAgADUAFCABfiADQiCIfCEDIAIgAz4AFCAANQAYIAF+IANCIIh8IQMgAiADPgAYIAA1ABwgAX4gA0IgiHwhAyACIAM+ABwLTgIBfgF/IAAhAyADNQAAIAF8IQIgAyACPgAAIAJCIIghAgJAA0AgAlANASADQQRqIQMgAzUAACACfCECIAMgAj4AACACQiCIIQIMAAsLC7ACBwF/AX8BfwF/AX4BfgF/IAIEQCACIQUFQegXIQULIAMEQCADIQQFQYgYIQQLIAAgBBApIAFByBcQKSAFECpBqBgQKkEfIQZBHyEHAkADQEHIFyAHai0AACAHQQNGcg0BIAdBAWshBwwACwtByBcgB2pBA2s1AABCAXwhCCAIQgFRBEBCAEIAgBoLAkADQAJAA0AgBCAGai0AACAGQQdGcg0BIAZBAWshBgwACwsgBCAGakEHaykAACEJIAkgCIAhCSAGIAdrQQRrIQoCQANAIAlCgICAgHCDUCAKQQBOcQ0BIAlCCIghCSAKQQFqIQoMAAsLIAlQBEAgBEHIFxAuRQ0CQgEhCUEAIQoLQcgXIAlByBgQNCAEQcgYIAprIAQQMBogBSAKaiAJEDUMAAsLC7UC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GCENIAA1AhwhDiABNQIAIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIEIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIIIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIMIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIQIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIUIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIYIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIcIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////D35C/////w+DIQQgDyAEQgF+fCEGIAZCIIghBSAQIARC/////w9+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEL+t/n/D358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQoLI9p0FfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARChbCHzQB+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEKIsOeZA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQsj69cwCfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC0862nwd+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiACIA8+AgAgAiAQPgIEIAIgET4CCCACIBI+AgwgAiATPgIQIAIgFD4CFCACIBU+AhggAiAWPgIcIAJBiBsQLgRAIAJBiBsgAhAwGgsLqyQWAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4gADUCACEGIAA1AgQhByAANQIIIQggADUCDCEJIAA1AhAhCiAANQIUIQsgADUCGCEMIAA1AhwhDSAOIAYgBn58IQQgBEL/////D4MhDiAEQiCIIQMgByAGfiEFIA8gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhDyAEQiCIIAVCIIhCAYZ8IQMgCCAGfiEFIBAgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhECAEQiCIIAVCIIhCAYZ8IQMgCSAGfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAGfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAGfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAGfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAGfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w9+Qv////8PgyECIA4gAkIBfnwhBCAEQiCIIQMgDyACQv////8PfnwgA3whBCAEQv////8PgyEOIARCIIghAyAQIAJC/rf5/w9+fCADfCEEIARC/////w+DIQ8gBEIgiCEDIBEgAkKCyPadBX58IAN8IQQgBEL/////D4MhECAEQiCIIQMgEiACQoWwh80AfnwgA3whBCAEQv////8PgyERIARCIIghAyATIAJCiLDnmQN+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkLI+vXMAn58IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQtPOtp8HfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAN8IQQgBEL/////D4MhFSAXIARCIIh8IRZCACEXIA8gByAHfnwhBCAEQv////8PgyEPIARCIIghAyAIIAd+IQUgECAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEQIARCIIggBUIgiEIBhnwhAyAJIAd+IQUgESAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyERIARCIIggBUIgiEIBhnwhAyAKIAd+IQUgEiAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyESIARCIIggBUIgiEIBhnwhAyALIAd+IQUgEyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyETIARCIIggBUIgiEIBhnwhAyAMIAd+IQUgFCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEUIARCIIggBUIgiEIBhnwhAyANIAd+IQUgFSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEVIARCIIggBUIgiEIBhnwhAyAWIAN8IQQgBEL/////D4MhFiAXIARCIIh8IRcgDkL/////D35C/////w+DIQIgDiACQgF+fCEEIARCIIghAyAPIAJC/////w9+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkL+t/n/D358IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQoLI9p0FfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJChbCHzQB+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkKIsOeZA358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQsj69cwCfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC0862nwd+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgECAIIAh+fCEEIARC/////w+DIRAgBEIgiCEDIAkgCH4hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogCH4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgCH4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCH4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQv////8PfkL/////D4MhAiAOIAJCAX58IQQgBEIgiCEDIA8gAkL/////D358IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQv63+f8PfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCgsj2nQV+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkKFsIfNAH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQoiw55kDfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCyPr1zAJ+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLTzrafB358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyARIAkgCX58IQQgBEL/////D4MhESAEQiCIIQMgCiAJfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAJfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAJfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAJfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w9+Qv////8PgyECIA4gAkIBfnwhBCAEQiCIIQMgDyACQv////8PfnwgA3whBCAEQv////8PgyEOIARCIIghAyAQIAJC/rf5/w9+fCADfCEEIARC/////w+DIQ8gBEIgiCEDIBEgAkKCyPadBX58IAN8IQQgBEL/////D4MhECAEQiCIIQMgEiACQoWwh80AfnwgA3whBCAEQv////8PgyERIARCIIghAyATIAJCiLDnmQN+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkLI+vXMAn58IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQtPOtp8HfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAN8IQQgBEL/////D4MhFSAXIARCIIh8IRZCACEXIBIgCiAKfnwhBCAEQv////8PgyESIARCIIghAyALIAp+IQUgEyAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyETIARCIIggBUIgiEIBhnwhAyAMIAp+IQUgFCAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEUIARCIIggBUIgiEIBhnwhAyANIAp+IQUgFSAFQv////8Pg0IBhnwgA3whBCAEQv////8PgyEVIARCIIggBUIgiEIBhnwhAyAWIAN8IQQgBEL/////D4MhFiAXIARCIIh8IRcgDkL/////D35C/////w+DIQIgDiACQgF+fCEEIARCIIghAyAPIAJC/////w9+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkL+t/n/D358IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQoLI9p0FfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJChbCHzQB+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkKIsOeZA358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQsj69cwCfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC0862nwd+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgEyALIAt+fCEEIARC/////w+DIRMgBEIgiCEDIAwgC34hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gC34hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQv////8PfkL/////D4MhAiAOIAJCAX58IQQgBEIgiCEDIA8gAkL/////D358IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQv63+f8PfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCgsj2nQV+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkKFsIfNAH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQoiw55kDfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCyPr1zAJ+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLTzrafB358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAUIAwgDH58IQQgBEL/////D4MhFCAEQiCIIQMgDSAMfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w9+Qv////8PgyECIA4gAkIBfnwhBCAEQiCIIQMgDyACQv////8PfnwgA3whBCAEQv////8PgyEOIARCIIghAyAQIAJC/rf5/w9+fCADfCEEIARC/////w+DIQ8gBEIgiCEDIBEgAkKCyPadBX58IAN8IQQgBEL/////D4MhECAEQiCIIQMgEiACQoWwh80AfnwgA3whBCAEQv////8PgyERIARCIIghAyATIAJCiLDnmQN+fCADfCEEIARC/////w+DIRIgBEIgiCEDIBQgAkLI+vXMAn58IAN8IQQgBEL/////D4MhEyAEQiCIIQMgFSACQtPOtp8HfnwgA3whBCAEQv////8PgyEUIARCIIghAyAWIAN8IQQgBEL/////D4MhFSAXIARCIIh8IRZCACEXIBUgDSANfnwhBCAEQv////8PgyEVIARCIIghAyAWIAN8IQQgBEL/////D4MhFiAXIARCIIh8IRcgDkL/////D35C/////w+DIQIgDiACQgF+fCEEIARCIIghAyAPIAJC/////w9+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkL+t/n/D358IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQoLI9p0FfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJChbCHzQB+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkKIsOeZA358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQsj69cwCfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC0862nwd+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgASAOPgIAIAEg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KQOIATcDiAEgASAAKQOQATcDkAEgASAAKQOYATcDmAEgASAAKQOgATcDoAEgASAAKQOoATcDqAEgASAAKQOwATcDsAEgASAAKQO4ATcDuAELkgMAIAEgACkDADcDACABIAApAwg3AwggASAAKQMQNwMQIAEgACkDGDcDGCABIAApAyA3AyAgASAAKQMoNwMoIAEgACkDMDcDMCABIAApAzg3AzggASAAKQNANwNAIAEgACkDSDcDSCABIAApA1A3A1AgASAAKQNYNwNYIAEgACkDYDcDYCABIAApA2g3A2ggASAAKQNwNwNwIAEgACkDeDcDeCABIAApA4ABNwOAASABIAApA4gBNwOIASABIAApA5ABNwOQASABIAApA5gBNwOYASABIAApA6ABNwOgASABIAApA6gBNwOoASABIAApA7ABNwOwASABIAApA7gBNwO4ASABIAApA8ABNwPAASABIAApA8gBNwPIASABIAApA9ABNwPQASABIAApA9gBNwPYASABIAApA+ABNwPgASABIAApA+gBNwPoASABIAApA/ABNwPwASABIAApA/gBNwP4ASABIAApA4ACNwOAAiABIAApA4gCNwOIAiABIAApA5ACNwOQAiABIAApA5gCNwOYAgsvACAAELABBEAgARCzAQUgAUHAAWoQnAEgAEHgAGogAUHgAGoQnQEgACABEJ0BCwscAQF/IAAgARCnASAAQeAAaiABQeAAahCnAXEPC4sBAQF/IABBwAFqIQIgABCxAQRAIAEQsAEPCyABELABBEBBAA8LIAIQmgEEQCAAIAEQtwEPCyACQdiHARCgASABQdiHAUG4iAEQngEgAkHYhwFBmIkBEJ4BIAFB4ABqQZiJAUH4iQEQngEgAEG4iAEQpwEEQCAAQeAAakH4iQEQpwEEQEEBDwsLQQAPC9kBAgF/AX8gAEHAAWohAiABQcABaiEDIAAQsQEEQCABELEBDwsgARCxAQRAQQAPCyACEJoBBEAgASAAELgBDwsgAxCaAQRAIAAgARC4AQ8LIAJB2IoBEKABIANBuIsBEKABIABBuIsBQZiMARCeASABQdiKAUH4jAEQngEgAkHYigFB2I0BEJ4BIANBuIsBQbiOARCeASAAQeAAakG4jgFBmI8BEJ4BIAFB4ABqQdiNAUH4jwEQngFBmIwBQfiMARCnAQRA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IABB4ABqIABBwAFqQajhAhChASABQeAAaiABQcABakGI4gIQoQFBiNwCQejcAkHo4gIQoQFBiNwCQcjdAkHI4wIQoQFB6NwCQcjdAkGo5AIQoQFBqOECQYjiAiACEJ4BIAJBqOQCIAIQogEgAiACEIQCQYjcAiACIAIQoQFBqN4CQYjfAiACQeAAahCeASACQeAAakHo4gIgAkHgAGoQogFByN0CQYjlAhCEAiACQeAAakGI5QIgAkHgAGoQoQFB6N8CQcjgAiACQcABahCeASACQcABakHI4wIgAkHAAWoQogEgAkHAAWpB6NwCIAJBwAFqEKEBC4ECACAAQejlAhCgASAAIABB4ABqQcjmAhCeAUHI5gJByOYCQajnAhChASAAIABB4ABqQYjoAhCiAUGI6AIgAEHAAWpBiOgCEKEBQYjoAkGI6AIQoAEgAEHgAGogAEHAAWpB6OgCEJ4BQejoAkHo6AJByOkCEKEBIABBwAFqQajqAhCgAUHI6QIgARCEAkHo5QIgASABEKEBQajqAiABQeAAahCEAkGo5wIgAUHgAGogAUHgAGoQoQFB6OUCQajqAiABQcABahChAUHI6QIgAUHAAWogAUHAAWoQogFBiOgCIAFBwAFqIAFBwAFqEKEBQajnAiABQcABaiABQcABahChAQs1ACAAIAEgAhChASAAQeAAaiABQeAAaiACQeAAahChASAAQcABaiABQcABaiACQcABahChAQs1ACAAIAEgAhCiASAAQeAAaiABQeAAaiACQeAAahCiASAAQcABaiABQcABaiACQcABahCiAQsnACAAIAEQowEgAEHgAGogAUHgAGoQowEgAEHAAWogAUHAAWoQowELMAEBfyAAQcABahCqASEBIAEEQCABDwsgAEHgAGoQqgEhASABBEAgAQ8LIAAQqgEPCycAIAAgARClASAAQeAAaiABQeAAahClASAAQcABaiABQcABahClAQsnACAAIAEQpgEgAEHgAGogAUHgAGoQpgEgAEHAAWogAUHAAWoQpgELKQAgACABEKcBIABB4ABqIAFB4ABqEKcBcSAAQcABaiABQcABahCnAXELqwIAIABBiOsCEKABIABB4ABqQejrAhCgASAAQcABakHI7AIQoAEgACAAQeAAakGo7QIQngEgACAAQcABakGI7gIQngEgAEHgAGogAEHAAWpB6O4CEJ4BQejuAkHI7wIQhAJBiOsCQcjvAkHI7wIQogFByOwCQajwAhCEAkGo8AJBqO0CQajwAhCiAUHo6wJBiO4CQYjxAhCiASAAQcABakGo8AJB6PECEJ4BIABB4ABqQYjxAkHI8gIQngFB6PECQcjyAkHo8QIQoQFB6PECQejxAhCEAiAAQcjvAkHI8gIQngFByPICQejxAkHo8QIQoQFB6PECQejxAhCoAUHo8QJByO8CIAEQngFB6PECQajwAiABQeAAahCeAUHo8QJBiPECIAFBwAFqEJ4BCzMAIAAgASACIAMQqQEgAEHgAGogASACIANB4ABqEKkBIABBwAFqIAEgAiADQcABahCpAQs1ACAAQcABahCZAQRAIABB4ABqEJkBBEAgABCrAQ8FIABB4ABqEKsBDwsLIABBwAFqEKsBDwuPAgQBfwF/AX8Bf0EAKAIAIQVBACAFIAJBAWpBoAJsajYCACAFEIgCIAAhBiAFQaACaiEFQQAhCAJAA0AgCCACRg0BIAYQhQIEQCAFQaACayAFEIkCBSAGIAVBoAJrIAUQigILIAYgAWohBiAFQaACaiEFIAhBAWohCAwACwsgBiABayEGIAVBoAJrIQUgAyACQQFrIARsaiEHIAUgBRCTAgJAA0AgCEUNASAGEIUCBEAgBSAFQaACaxCJAiAHEIcCBSAFQaACa0Go8wIQiQIgBSAGIAVBoAJrEIoCIAVBqPMCIAcQigILIAYgAWshBiAHIARrIQcgBUGgAmshBSAIQQFrIQgMAAsLQQAgBTYCAAvOAgIBfwF/IAJFBEAgAxCIAg8LIABByPUCEIkCIAMQiAIgAiEEAkADQCAEQQFrIQQgASAEai0AACEFIAMgAxCLAiAFQYABTwRAIAVBgAFrIQUgA0HI9QIgAxCKAgsgAyADEIsCIAVBwABPBEAgBUHAAGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEgTwRAIAVBIGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEQTwRAIAVBEGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEITwRAIAVBCGshBSADQcj1AiADEIoCCyADIAMQiwIgBUEETwRAIAVBBGshBSADQcj1AiADEIoCCyADIAMQiwIgBUECTwRAIAVBAmshBSADQcj1AiADEIoCCyADIAMQiwIgBUEBTwRAIAVBAWshBSADQcj1AiADEIoCCyAERQ0BDAALCwsyACAAQej3AhCdASAAQcABaiABEIQCIABB4ABqIAFBwAFqEJ0BQej3AiABQeAAahCdAQsRACAAEIUCIABBoAJqEIUCcQsSACAAEIYCIABBoAJqEIUCcQ8LEAAgABCHAiAAQaACahCHAgsQACAAEIgCIABBoAJqEIcCCxgAIAAgARCJAiAAQaACaiABQaACahCJAguFAQAgACABQcj4AhCKAiAAQaACaiABQaACakHo+gIQigIgACAAQaACakGI/QIQjAIgASABQaACakGo/wIQjAJBiP0CQaj/AkGI/QIQigJB6PoCIAIQmAJByPgCIAIgAhCMAkHI+AJB6PoCIAJBoAJqEIwCQYj9AiACQaACaiACQaACahCNAgscACAAIAEgAhCKAiAAQaACaiABIAJBoAJqEIoCC30AIAAgAEGgAmpByIEDEIoCIAAgAEGgAmpB6IMDEIwCIABBoAJqQYiGAxCYAiAAQYiGA0GIhgMQjAJByIEDQaiIAxCYAkGoiANByIEDQaiIAxCMAkHogwNBiIYDIAEQigIgAUGoiAMgARCNAkHIgQNByIEDIAFBoAJqEIwCCyAAIAAgASACEIwCIABBoAJqIAFBoAJqIAJBoAJqEIwCCyAAIAAgASACEI0CIABBoAJqIAFBoAJqIAJBoAJqEI0CCxgAIAAgARCOAiAAQaACaiABQaACahCOAgsYACAAIAEQiQIgAEGgAmogAUGgAmoQjgILGAAgACABEJACIABBoAJqIAFBoAJqEJACCxgAIAAgARCRAiAAQaACaiABQaACahCRAgsZACAAIAEQkgIgAEGgAmogAUGgAmoQkgJxC2oAIABByIoDEIsCIABBoAJqQeiMAxCLAkHojANBiI8DEJgCQciKA0GIjwNBiI8DEI0CQYiPA0GokQMQkwIgAEGokQMgARCKAiAAQaACakGokQMgAUGgAmoQigIgAUGgAmogAUGgAmoQjgILIAAgACABIAIgAxCUAiAAQaACaiABIAIgA0GgAmoQlAILHQEBfyAAQaACahCPAiEBIAEEQCABDwsgABCPAg8LHgAgAEGgAmoQhQIEQCAAEJUCDwsgAEGgAmoQlQIPC48CBAF/AX8BfwF/QQAoAgAhBUEAIAUgAkEBakHABGxqNgIAIAUQnAIgACEGIAVBwARqIQVBACEIAkADQCAIIAJGDQEgBhCZAgRAIAVBwARrIAUQnQIFIAYgBUHABGsgBRCeAgsgBiABaiEGIAVBwARqIQUgCEEBaiEIDAALCyAGIAFrIQYgBUHABGshBSADIAJBAWsgBGxqIQcgBSAFEKgCAkADQCAIRQ0BIAYQmQIEQCAFIAVBwARrEJ0CIAcQmwIFIAVBwARrQciTAxCdAiAFIAYgBUHABGsQngIgBUHIkwMgBxCeAgsgBiABayEGIAcgBGshByAFQcAEayEFIAhBAWshCAwACwtBACAFNgIAC84CAgF/AX8gAkUEQCADEJwCDwsgAEGImAMQnQIgAxCcAiACIQQCQANAIARBAWshBCABIARqLQAAIQUgAyADEKACIAVBgAFPBEAgBUGAAWshBSADQYiYAyADEJ4CCyADIAMQoAIgBUHAAE8EQCAFQcAAayEFIANBiJgDIAMQngILIAMgAxCgAiAFQSBPBEAgBUEgayEFIANBiJgDIAMQngILIAMgAxCgAiAFQRBPBEAgBUEQayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQhPBEAgBUEIayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQRPBEAgBUEEayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQJPBEAgBUECayEFIANBiJgDIAMQngILIAMgAxCgAiAFQQFPBEAgBUEBayEFIANBiJgDIAMQngILIARFDQEMAAsLC9EBAEHIrgMQnAJByK4DQciuAxCjAiAAQcicA0GgAkGIoQMQrQJBiKEDQcilAxCgAiAAQcilA0HIpQMQngJByKUDQYiqAxCkAkGIqgNByKUDQYiqAxCeAkGIqgNByK4DEKcCBEAAC0GIoQMgAEGIswMQngJByKUDQciuAxCnAgRAQciuAxCHAkHosAMQiAJByK4DQYizAyABEJ4CBUHItwMQnAJByLcDQcilA0HItwMQoQJByLcDQeieA0GgAkHItwMQrQJByLcDQYizAyABEJ4CCwtqAEHoywMQnAJB6MsDQejLAxCjAiAAQYi8A0GgAkGovgMQrQJBqL4DQejCAxCgAiAAQejCA0HowgMQngJB6MIDQajHAxCkAkGoxwNB6MIDQajHAxCeAkGoxwNB6MsDEKcCBEBBAA8LQQEPC3gAIAAgAEHgAGpB6NADEKEBIABB4ABqIABBwAFqQcjRAxChASAAQeAAaiABIAJBwAFqEJ4BQcjRAyABIAIQngEgAiACQcABaiACEKIBIAIgAhCEAkHo0AMgASACQeAAahCeASACQeAAaiACQcABaiACQeAAahCiAQvsAQAgACABQajSAxCeASAAQeAAaiACQYjTAxCeASAAIABB4ABqQejTAxChASAAIABBwAFqQcjUAxChASAAQeAAaiAAQcABaiADEKEBIAMgAiADEJ4BIANBiNMDIAMQogEgAyADEIQCIANBqNIDIAMQoQEgASACIANB4ABqEKEBIANB4ABqQejTAyADQeAAahCeASADQeAAakGo0gMgA0HgAGoQogEgA0HgAGpBiNMDIANB4ABqEKIBQcjUAyABIANBwAFqEJ4BIANBwAFqQajSAyADQcABahCiASADQcABakGI0wMgA0HAAWoQoQELkAEAIAAgASACQajVAxCxAiAAQaACaiADQcjXAxCwAiACIANB6NkDEKEBIABBoAJqIAAgBEGgAmoQjAIgBEGgAmogAUHo2QMgBEGgAmoQsQIgBEGgAmpBqNUDIARBoAJqEI0CIARBoAJqQcjXAyAEQaACahCNAkHI1wMgBBCJAiAEIAQQmAIgBEGo1QMgBBCMAgtQACABIABBMGpByNoDEBQgAUEwaiAAQTBqQfjaAxAUIAFB4ABqIABBqNsDEBQgAUGQAWogAEHY2wMQFCACIAFBwAFqQajbA0HI2gMgAhCyAgtsACAAQYj+BCABEJ4BIABB4ABqQej+BCABQeAAahCeASAAQcABakHI/wQgAUHAAWoQngEgAEGgAmpBqIAFIAFBoAJqEJ4BIABBgANqQYiBBSABQYADahCeASAAQeADakHogQUgAUHgA2oQngELigIAIAAgARAAIABBMGogAUEwahASIAFByIIFIAEQngEgAEHgAGogAUHgAGoQACAAQZABaiABQZABahASIAFB4ABqQaiDBSABQeAAahCeASAAQcABaiABQcABahAAIABB8AFqIAFB8AFqEBIgAUHAAWpBiIQFIAFBwAFqEJ4BIABBoAJqIAFBoAJqEAAgAEHQAmogAUHQAmoQEiABQaACakHohAUgAUGgAmoQngEgAEGAA2ogAUGAA2oQACAAQbADaiABQbADahASIAFBgANqQciFBSABQYADahCeASAAQeADaiABQeADahAAIABBkARqIAFBkARqEBIgAUHgA2pBqIYFIAFB4ANqEJ4BC2wAIABBiIcFIAEQngEgAEHgAGpB6IcFIAFB4ABqEJ4BIABBwAFqQciIBSABQcABahCeASAAQaACakGoiQUgAUGgAmoQngEgAEGAA2pBiIoFIAFBgANqEJ4BIABB4ANqQeiKBSABQeADahCeAQuKAgAgACABEAAgAEEwaiABQTBqEBIgAUHIiwUgARCeASAAQeAAaiABQeAAahAAIABBkAFqIAFBkAFqEBIgAUHgAGpBqIwFIAFB4ABqEJ4BIABBwAFqIAFBwAFqEAAgAEHwAWogAUHwAWoQEiABQcABakGIjQUgAUHAAWoQngEgAEGgAmogAUGgAmoQACAAQdACaiABQdACahASIAFBoAJqQeiNBSABQaACahCeASAAQYADaiABQYADahAAIABBsANqIAFBsANqEBIgAUGAA2pByI4FIAFBgANqEJ4BIABB4ANqIAFB4ANqEAAgAEGQBGogAUGQBGoQEiABQeADakGojwUgAUHgA2oQngELbAAgAEGIkAUgARCeASAAQeAAakHokAUgAUHgAGoQngEgAEHAAWpByJEFIAFBwAFqEJ4BIABBoAJqQaiSBSABQaACahCeASAAQYADakGIkwUgAUGAA2oQngEgAEHgA2pB6JMFIAFB4ANqEJ4BC4oCACAAIAEQACAAQTBqIAFBMGoQEiABQciUBSABEJ4BIABB4ABqIAFB4ABqEAAgAEGQAWogAUGQAWoQEiABQeAAakGolQUgAUHgAGoQngEgAEHAAWogAUHAAWoQACAAQfABaiABQfABahASIAFBwAFqQYiWBSABQcABahCeASAAQaACaiABQaACahAAIABB0AJqIAFB0AJqEBIgAUGgAmpB6JYFIAFBoAJqEJ4BIABBgANqIAFBgANqEAAgAEGwA2ogAUGwA2oQEiABQYADakHIlwUgAUGAA2oQngEgAEHgA2ogAUHgA2oQACAAQZAEaiABQZAEahASIAFB4ANqQaiYBSABQeADahCeAQtsACAAQYiZBSABEJ4BIABB4ABqQeiZBSABQeAAahCeASAAQcABakHImgUgAUHAAWoQngEgAEGgAmpBqJsFIAFBoAJqEJ4BIABBgANqQYicBSABQYADahCeASAAQeADakHonAUgAUHgA2oQngELigIAIAAgARAAIABBMGogAUEwahASIAFByJ0FIAEQngEgAEHgAGogAUHgAGoQACAAQZABaiABQZABahASIAFB4ABqQaieBSABQeAAahCeASAAQcABaiABQcABahAAIABB8AFqIAFB8AFqEBIgAUHAAWpBiJ8FIAFBwAFqEJ4BIABBoAJqIAFBoAJqEAAgAEHQAmogAUHQAmoQEiABQaACakHonwUgAUGgAmoQngEgAEGAA2ogAUGAA2oQACAAQbADaiABQbADahASIAFBgANqQcigBSABQYADahCeASAAQeADaiABQeADahAAIABBkARqIAFBkARqEBIgAUHgA2pBqKEFIAFB4ANqEJ4BC2wAIABBiKIFIAEQngEgAEHgAGpB6KIFIAFB4ABqEJ4BIABBwAFqQcijBSABQcABahCeASAAQaACakGopAUgAUGgAmoQngEgAEGAA2pBiKUFIAFBgANqEJ4BIABB4ANqQeilBSABQeADahCeAQuKAgAgACABEAAgAEEwaiABQTBqEBIgAUHIpgUgARCeASAAQeAAaiABQeAAahAAIABBkAFqIAFBkAFqEBIgAUHgAGpBqKcFIAFB4ABqEJ4BIABBwAFqIAFBwAFqEAAgAEHwAWogAUHwAWoQEiABQcABakGIqAUgAUHAAWoQngEgAEGgAmogAUGgAmoQACAAQdACaiABQdACahASIAFBoAJqQeioBSABQaACahCeASAAQYADaiABQYADahAAIABBsANqIAFBsANqEBIgAUGAA2pByKkFIAFBgANqEJ4BIABB4ANqIAFB4ANqEAAgAEGQBGogAUGQBGoQEiABQeADakGoqgUgAUHgA2oQngELhQEAIAAQVgRAQQEPCyAAEG9FBEBBAA8LIABBiKsFQfirBRAUIABBMGpBqKwFEAAgAEG4qwVBiK0FEBQgAEEwakG4rQUQAEH4qwVB+KsFEGBB+KsFIABB+KsFEGhB+KsFQYitBUH4qwUQaEH4qwVB6KsFQRBB+KsFEIUBQfirBUGIrQUQXg8LEgAgAEHorQUQbkHorQUQvgIPC7QCACAAELABBEBBAQ8LIAAQyQFFBEBBAA8LIABByK4FQfCwBRCeASAAQeAAakHIrgVB0LEFEJ4BQfCwBUGorwVBsLIFEJ8BQdCxBUGQswUQowFB8LAFQfCzBRCjAUHQsQVB2K8FQdC0BRCeAUGwsgVB4LIFQcCwBRARQbCyBUHgsgVB4LIFEBBBwLAFQbCyBRAAQZCzBUHAswVBwLAFEBFBkLMFQcCzBUHAswUQEEHAsAVBkLMFEABB8LMFQaC0BUHAsAUQEEHwswVBoLQFQaC0BRARQcCwBUHwswUQAEGAtQVB0LQFQcCwBRARQdC0BUGAtQVBgLUFEBBBwLAFQdC0BRAAQbC1BRCcAUHwswVBuLAFQQhB8LMFEN8BQfCzBUGwsgVB8LMFEL0BQfCzBSAAELgBDwsTACAAQZC2BRDIAUGQtgUQwAIPC9gEACAAQcABakHQtwUQoAEgAUHgAGpBsLgFEKABQdC3BSABQfC5BRCeASABQeAAaiAAQcABaiACQeAAahChASACQeAAaiACQeAAahCgASACQeAAakGwuAUgAkHgAGoQogEgAkHgAGpB0LcFIAJB4ABqEKIBIAJB4ABqQdC3BSACQeAAahCeAUHwuQUgAEHQugUQogFB0LoFQbC7BRCgAUGwuwVBsLsFQZC8BRChAUGQvAVBkLwFQZC8BRChAUGQvAVB0LoFQfC8BRCeASACQeAAaiAAQeAAakHQvQUQogFB0L0FIABB4ABqQdC9BRCiAUHQvQUgASACQcABahCeAUGQvAUgAEGwvgUQngFB0L0FIAAQoAEgAEHwvAUgABCiASAAQbC+BSAAEKIBIABBsL4FIAAQogEgAEHAAWpB0LoFIABBwAFqEKEBIABBwAFqIABBwAFqEKABIABBwAFqQdC3BSAAQcABahCiASAAQcABakGwuwUgAEHAAWoQogEgAUHgAGogAEHAAWogAhChAUGwvgUgAEGQvwUQogFBkL8FQdC9BUGQvwUQngEgAEHgAGpB8LwFQfC5BRCeAUHwuQVB8LkFQfC5BRChAUGQvwVB8LkFIABB4ABqEKIBIAIgAhCgASACQbC4BSACEKIBIABBwAFqQZC5BRCgASACQZC5BSACEKIBIAJBwAFqIAJBwAFqIAJBwAFqEKEBIAJBwAFqIAIgAkHAAWoQogEgAEHAAWogAEHAAWogAhChAUHQvQVB0L0FEKMBQdC9BUHQvQUgAkHgAGoQoQELsgQAIAAgARCgASAAQeAAakHQwAUQoAFB0MAFQbDBBRCgAUHQwAUgACABQeAAahChASABQeAAaiABQeAAahCgASABQeAAaiABIAFB4ABqEKIBIAFB4ABqQbDBBSABQeAAahCiASABQeAAaiABQeAAaiABQeAAahChASABIAFBkMIFEKEBQZDCBSABQZDCBRChASAAQZDCBSABQcABahChAUGQwgVB8MIFEKABIABBwAFqQfC/BRCgAUHwwgUgAUHgAGogABCiASAAIAFB4ABqIAAQogEgAEHAAWogAEHgAGogAEHAAWoQoQEgAEHAAWogAEHAAWoQoAEgAEHAAWpB0MAFIABBwAFqEKIBIABBwAFqQfC/BSAAQcABahCiASABQeAAaiAAIABB4ABqEKIBIABB4ABqQZDCBSAAQeAAahCeAUGwwQVBsMEFQbDBBRChAUGwwQVBsMEFQbDBBRChAUGwwQVBsMEFQbDBBRChASAAQeAAakGwwQUgAEHgAGoQogFBkMIFQfC/BSABQeAAahCeASABQeAAaiABQeAAaiABQeAAahChASABQeAAaiABQeAAahCjASABQcABaiABQcABahCgASABQcABaiABIAFBwAFqEKIBIAFBwAFqQfDCBSABQcABahCiAUHQwAVB0MAFQdDABRChAUHQwAVB0MAFQdDABRChASABQcABakHQwAUgAUHAAWoQogEgAEHAAWpB8L8FIAEQngEgASABIAEQoQELCAAgACABEHILbQIBfwF/IAAgARDMASABELEBBEAPCyABQdDDBRC1ASABQaACaiECQT4hAwJAA0BB0MMFIAIQwwIgAkGgAmohAiADLACo0AMEQEHQwwUgASACEMICIAJBoAJqIQILIANFDQEgA0EBayEDDAALCwuAAQIBfwF/IAIQnAIgABBXBEAPCyABEFcEQA8LIAFBoAJqIQNBPiEEAkADQCAAIAMgAhCzAiADQaACaiEDIAQsAKjQAwRAIAAgAyACELMCIANBoAJqIQMLIAIgAhCgAiAEQQFGDQEgBEEBayEEDAALCyAAIAMgAhCzAiACIAIQpAILEAAgAEHwxQVBoAQgARCtAgvsBQAgACAAQYADakHQzgUQngEgAEGAA2pBkMoFEIQCIABBkMoFQZDKBRChASAAIABBgANqQbDPBRChAUGwzwVBkMoFQZDKBRCeAUHQzgVBsM8FEIQCQdDOBUGwzwVBsM8FEKEBQZDKBUGwzwVBkMoFEKIBQdDOBUHQzgVB8MoFEKEBIABBoAJqIABBwAFqQdDOBRCeASAAQcABakHQywUQhAIgAEGgAmpB0MsFQdDLBRChASAAQaACaiAAQcABakGwzwUQoQFBsM8FQdDLBUHQywUQngFB0M4FQbDPBRCEAkHQzgVBsM8FQbDPBRChAUHQywVBsM8FQdDLBRCiAUHQzgVB0M4FQbDMBRChASAAQeAAaiAAQeADakHQzgUQngEgAEHgA2pBkM0FEIQCIABB4ABqQZDNBUGQzQUQoQEgAEHgAGogAEHgA2pBsM8FEKEBQbDPBUGQzQVBkM0FEJ4BQdDOBUGwzwUQhAJB0M4FQbDPBUGwzwUQoQFBkM0FQbDPBUGQzQUQogFB0M4FQdDOBUHwzQUQoQFBkMoFIAAgARCiASABIAEgARChAUGQygUgASABEKEBQfDKBSAAQYADaiABQYADahChASABQYADaiABQYADaiABQYADahChAUHwygUgAUGAA2ogAUGAA2oQoQFB8M0FQfjaAkGwzwUQngFBsM8FIABBoAJqIAFBoAJqEKEBIAFBoAJqIAFBoAJqIAFBoAJqEKEBQbDPBSABQaACaiABQaACahChAUGQzQUgAEHAAWogAUHAAWoQogEgAUHAAWogAUHAAWogAUHAAWoQoQFBkM0FIAFBwAFqIAFBwAFqEKEBQdDLBSAAQeAAaiABQeAAahCiASABQeAAaiABQeAAaiABQeAAahChAUHQywUgAUHgAGogAUHgAGoQoQFBsMwFIABB4ANqIAFB4ANqEKEBIAFB4ANqIAFB4ANqIAFB4ANqEKEBQbDMBSABQeADaiABQeADahChAQuNAQIBfwF/IABB2NAFEKQCIAEQnAJBwAAsAJDQBSICBEAgAkEBRgRAIAEgACABEJ4CBSABQdjQBSABEJ4CCwtBPyEDAkADQCABIAEQyAIgAywAkNAFIgIEQCACQQFGBEAgASAAIAEQngIFIAFB2NAFIAEQngILCyADRQ0BIANBAWshAwwACwsgASABEKQCC+sCACAAQZjVBRC6AiAAQdjZBRCoAkGY1QVB2NkFQZjeBRCeAkGY3gVB2NkFEJ0CQZjeBUGY3gUQtgJBmN4FQdjZBUGY3gUQngJBmN4FQdjZBRDIAkHY2QVB2NkFEKQCQZjeBUHY4gUQyQJB2OIFQZjnBRDIAkHY2QVB2OIFQdjrBRCeAkHY6wVB2NkFEMkCQdjZBUGY1QUQyQJBmNUFQZjwBRDJAkGY8AVBmOcFQZjwBRCeAkGY8AVBmOcFEMkCQdjrBUHY6wUQpAJBmOcFQdjrBUGY5wUQngJBmOcFQZjeBUGY5wUQngJBmN4FQdjrBRCkAkHY2QVBmN4FQdjZBRCeAkHY2QVB2NkFELcCQZjwBUHY6wVBmPAFEJ4CQZjwBUGY8AUQtQJB2OIFQZjVBUHY4gUQngJB2OIFQdjiBRC2AkHY4gVB2NkFQdjiBRCeAkHY4gVBmPAFQdjiBRCeAkHY4gVBmOcFIAEQngILaQBB2PQFEJwCIABBiNwDEMQCIAFBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZj5BRDGAkHY9AVBmPkFQdj0BRCeAkHY9AVB2PQFEMoCQdj0BSACEKcCC7UBAEHY/QUQnAIgAEGI3AMQxAIgAUGo3gMQxQJBiNwDEL4CRQRAQQAPC0Go3gMQwAJFBEBBAA8LQYjcA0Go3gNBmIIGEMYCQdj9BUGYggZB2P0FEJ4CIAJBiNwDEMQCIANBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZiCBhDGAkHY/QVBmIIGQdj9BRCeAkHY/QVB2P0FEMoCQdj9BSAEEKcCC4ECAEHYhgYQnAIgAEGI3AMQxAIgAUGo3gMQxQJBiNwDEL4CRQRAQQAPC0Go3gMQwAJFBEBBAA8LQYjcA0Go3gNBmIsGEMYCQdiGBkGYiwZB2IYGEJ4CIAJBiNwDEMQCIANBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZiLBhDGAkHYhgZBmIsGQdiGBhCeAiAEQYjcAxDEAiAFQajeAxDFAkGI3AMQvgJFBEBBAA8LQajeAxDAAkUEQEEADwtBiNwDQajeA0GYiwYQxgJB2IYGQZiLBkHYhgYQngJB2IYGQdiGBhDKAkHYhgYgBhCnAgvNAgBB2I8GEJwCIABBiNwDEMQCIAFBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZiUBhDGAkHYjwZBmJQGQdiPBhCeAiACQYjcAxDEAiADQajeAxDFAkGI3AMQvgJFBEBBAA8LQajeAxDAAkUEQEEADwtBiNwDQajeA0GYlAYQxgJB2I8GQZiUBkHYjwYQngIgBEGI3AMQxAIgBUGo3gMQxQJBiNwDEL4CRQRAQQAPC0Go3gMQwAJFBEBBAA8LQYjcA0Go3gNBmJQGEMYCQdiPBkGYlAZB2I8GEJ4CIAZBiNwDEMQCIAdBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZiUBhDGAkHYjwZBmJQGQdiPBhCeAkHYjwZB2I8GEMoCQdiPBiAIEKcCC5kDAEHYmAYQnAIgAEGI3AMQxAIgAUGo3gMQxQJBiNwDEL4CRQRAQQAPC0Go3gMQwAJFBEBBAA8LQYjcA0Go3gNBmJ0GEMYCQdiYBkGYnQZB2JgGEJ4CIAJBiNwDEMQCIANBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZidBhDGAkHYmAZBmJ0GQdiYBhCeAiAEQYjcAxDEAiAFQajeAxDFAkGI3AMQvgJFBEBBAA8LQajeAxDAAkUEQEEADwtBiNwDQajeA0GYnQYQxgJB2JgGQZidBkHYmAYQngIgBkGI3AMQxAIgB0Go3gMQxQJBiNwDEL4CRQRAQQAPC0Go3gMQwAJFBEBBAA8LQYjcA0Go3gNBmJ0GEMYCQdiYBkGYnQZB2JgGEJ4CIAhBiNwDEMQCIAlBqN4DEMUCQYjcAxC+AkUEQEEADwtBqN4DEMACRQRAQQAPC0GI3ANBqN4DQZidBhDGAkHYmAZBmJ0GQdiYBhCeAkHYmAZB2JgGEMoCQdiYBiAKEKcCCywAIABBiNwDEMQCIAFBqN4DEMUCQYjcA0Go3gNB2KEGEMYCQdihBiACEMoCCwvcwAF7AEEACwQYkwEAAEEICyABAAAA//////5b/v8CpL1TBdihCQjYOTNIfZ0pU6ftcwBByAULMKuq//////65//9Tsf7/qx4k9rD2oNIwZ78ShfOES3dk16xLQ7anG0ua5n856hEBGgBB+AULMEYXNBw0H9/08QTRCabmdgrVtpVMbEfljcCDnZOpiOtnLZUZtYU+eZqq48qS5Y+YEQBBqAYLMP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQBB2AYLMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiAcLMFXV////f//c//+pWP//VQ8Se1h7UGmYs1+JwnnCpTuya9alIdvTjSVN878c9YgADQBBuAcLMFbV////f//c//+pWP//VQ8Se1h7UGmYs1+JwnnCpTuya9alIdvTjSVN878c9YgADQBB6AcLMFXV////f//c//+pWP//VQ8Se1h7UGmYs1+JwnnCpTuya9alIdvTjSVN878c9YgADQBBmAgLMK6q/P////VD/f9H7fL/tzJpnemiSTroB3q7MoMx86jsacD0oB6NFO8GAv8+JrMKBABByAgLMKvq////v3/u//9UrP//qgeJPaw9qDTM2a9E4Tzh0h3ZNevSkO3pxpKm+V+OekSABgBBiBsLIAEAAAD//////lv+/wKkvVMF2KEJCNg5M0h9nSlTp+1zAEGoGwsgbZzy85DpmckjXJKHy+1sK485VHKWFNMFEf9Zn9nZSAcAQcgbCyD+////AQAAAAJIAwD6t4RY9U+87O9PjJlvBcWsWbEkGABB6BsLIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGIHAsgAAAAgP///3//Lf9/AdLeqQLs0AQE7JwZpL7OlKnT9jkAQagcCyABAACA////f/8t/38B0t6pAuzQBATsnBmkvs6UqdP2OQBByBwLIP/////+W/7/AqS9UwXYoQkI2DkzSH2dKVOn7XMAAAAAAEHoHAsgfPQXDFxtq5zlcUv9PenhHAXVHUcwsm0Najs6dJDpDj8AQYgdCyAAAACA/y3/fwHS3qkC7NAEBOycGaS+zpSp0/Y5AAAAAABBqCULMPP/DAAAACeqCgA0/DIAzFN/gApreumPR9ckuua+ftOxL6t4vztzyY5+3oM9UUXWCQBBmMsACyAREREREREREREREBAPDg0NDAsKCQgHBwYFBAMCAQEBAQBB2M0ACyAREREREREREREREBAPDg0NDAsKCQgHBwYFBAMCAQEBAQBB6M8AC6AI/v///wEAAAACSAMA+reEWPVPvOzvT4yZbwXFrFmxJBgDAAAA/f////wT+/8I7Dj7D4jlHBiIrZnYd9h8+fXIW7HPiap0VrDz/rkGYEABLwcmemYlvw2aznSDWS0F5CxNCRC902m2MJGnYaCyf6n75KgmS7PPCETzLHr/BuykNR+JEgoLAqDCJYghCH1/cRyX2MUa2MrcOUfBQePuqXtgTzTRHCOjYGTF7l/yT6kUxJVum1SAUDYdnd0GRZ8JdFIczEAndbCVmx18y+hSJlqwyF0DmUNc4gEPEBc9Z1+bxmNTrSbzvGFjw16agdzwz5mXYxzZq/AEvpUQIvLmySD2SaxCUxFNyMHKciVxFs6FYvzchkdX7NVkeRWWF0iawEJXNPhTdzM1upR3UK4WUMz4STwaJRe28tsF4TjQ3zYb82vnNj3dgLhU/BtJytqIcvL2xVs14prdBLscOJnJCabSJGUWzZySLfXjP0YEq7Fz+r0OeP32FybmMjt3nFAOSG9Xx+H3l+uxvBBf6XHaK2czqidgLC7uToFSRPMXEm+v5TksMx+an9yYZfKo0E7Sx7LDcBZmgRIRBh7iIrqH8N08AjgGTKUv/JdfQ2urlNNbnQiHlnsBrhSF9O+wAJ1gWjg5lKkQ5QiuKtLz8DXDsLiabntgy/msZC221gap4gr11WN0CW5P51QVkF8rQNcKhVH7gc8vrfrgLNn32VWPz1mcDdVgdQG9Y7f2ZDOr557BLxq/5VR2q8PckS8kWXR97c4nKHnkHA983Ap4vnrkJNeSDUwBO8ZnlC7BYuQaQ2/WcUVdX1H6/elgU873DeTMFWGO0w2eBfrCgHNj27niYS1aDRDa3famT6exdoMs1GtbwztaERSK3Af2xpyteMkMCKxWf7LHPsODJ46P8/ldAoSqYF3J07Uhpm8ECQ9Puy6nnA3mgWzlpPziA/jHC0QsAHv1Bkz5abhIr0RCWKZggqULIUFoyL8P6MHmy09PhjRO6mQfj1Etv5KPqaEWZOmqIodJ3ETbqBEG0IFH+X91CAG7gX0gkcqzniQ3fFFVrFcxB0NS9RouHFTeK+zDA2DReZam1ATo8DalVULovAw13pNvcVp5nlty6LsxNkWoK0JuoLuMZlPg9ldIKA+cec2XA0QL/FZ5pt4nMq8Yr0k2+/GyTNHzrHK6pqYJTWf9o7N54h5L8m0pTLUT3KYn2NKVRHlFENY0aoSWtaO4QF9nPIi6LtbQc+B/mV1+IoqN/xnow7xB4E+SrIssGSEaG+r0J0U7jrpkOAAtT57ZGOT0vwZx3+k4lZ77R28jRO3p/d9OLwW8USbQqjZ9wINzsNTwh2cfT28IiSx0YPUXY79oKadYY3z0Fwxcbauc5XFL/T3p4RwF1R1HMLJtDWo7OnSQ6Q4/AEGI2AALoAj+////AQAAAAJIAwD6t4RY9U+87O9PjJlvBcWsWbEkGP////8AAAAAAaQBAP1bQqz6J1729yfGzLeCYtasWBIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQajgAAugCMn///82AAAANzxaAFvDQQLbljruRZaS/nwVKg8iDfEXnPr//2MFAABkFdgI1N+3lUiDjxOsdC/cy6YIq7MD5hJ31vL/iCkNAIntMZh6vxd8G0qF9O+cCVo4yvwk1QXMZo0Y/Isk5wN0wZO820tUSPuWRJUsS29Pr1PwhWd6xXAnjMbBxGSerwOgGQ+JyKbGmBJWwsYgELyMmQXJpsmEdWI6MthzObmpoYFO06hdId0mtXSe28ZKh4DriiZAv5pKNfIa1pTr2RHGezJ0gOGXkOoGH4HCA9m6kJaa7Qi0qNcCRt7ECnpsFU2srBw5Lo9hm969qrF9/i1p/meSI3XiiCO29ns85ZNZ4rZXl8GMDABdzyxXPklC+/wF+zNc619gD+FvhsNEniIWcNak8WivzI4DTfatckhXs7+Gn59XXEQCh6wInKRdaYSNlp5xppukwbfs2bQEKlpM88a35Ek/P1KKWvm//2gr2XqjDoWm8q8QbUnkO4Gs5WQ03XgcsM8nGruzyBLKhH5Jn9yufgAio8WzhbGXz7lXsObB5kBzDxYNPTJB9lZazV9E8xhKDa9HH5FYjGy9veiH3k0rzj3N+2HL4IglqwuyTN+sB1ROTvldtt2PFXpkjWzU2MWDEt0bbRDQwqwx9OCP1kp18mh5QAMVc7CIrQ7It1De89L9zrUxpsQOa64pE33TAjg1CMw7n0Sev2hnuEIqOT1XfVR0ED73bok681X041/w/8Qxv6ykqvcFWKcjxVcBr8w3ENe+c76gP5b3cTXC0IGbi2ZPPCiR4/mSXRnQiwiv8wwuosJXN81s4HEaXTi7G+Iz6wfcRacOqfjYfh/j4+saWO8v3wvZc3Q25pvZJleDY8yJr/74mc3ef6WA/TpT372cOV4ZJb4LbRk/r1PRtbuTPTvKbRkuP4BF95yaNQM/xWBv+WdUxTQQSHPs3lwHSR0EynGaHJLC6h4ZDvMaDk18a+DreGSfG6ThtMoorfQR1VT/YeotltL/26UyaRZM7h2/8GkzWXZxnZhPaA6c3PfFWXpmohM8wRNEA/GQwgkPD5UAOU9OaJ5u9mumrMX5TloUcfSexJzaSpyZsQh0Tf9DyVfrthVxdPDmvh0pD1ZNihAEO4Cjuwvmw3jWGLCSqYQd04e2D3Dqoll/lpxxS+ryt4Ng6yWyHfNjwUra2fUFskytVv1mOTCUH78UqEL4KR8Pl73oocmGGGXrkbQ5KN5Qp3Wj2WCScYvRSYm9GnEULXnT0G7brawSRr54Baq1R43TCncNEQjZjm0+lozn2+OzvP7CYBOkm+Zw7rDHlQT+RYYEEQQ5IvCFwEwVaWV0HYVRPCMOO3RCd7jgJaHspCHov1EpEwY4FgdVKV++CaHB81vOUVAakJi0JrDOY2p1uIKLYTPCXABByOgAC6AIVlVVVf////+pkqmqrMLTN646wVsFkCYiMP5oxoxvnkKENEiDsBM7sY92QBowbwsB41KBdhmbZP2p1r8Q+gHSUuI/BgqcGmVF+/9xgIMqUNiiqKhx7F1dyrSDtHvSCOBkJwOgdavC90ApyAe13Ym/oSjDtRchoFqD8U4oBztbB0szRdczz6/njCJFaMdD0UlbWXc7Ogyyis11tiyRLjD0DcA+KOf8SSzKFKwkPiiyABLDnqrkpodD1lKjIhDnzq4M/U3nxwjGRGViOVgSagRJLN6ujVewx7ShbN1fcmwiWFQXSRdPypXa5qmEiVwNhE3HlJSfW9qK2vuqMSWduH+YO4srRiMpWVSC7jYXzJwJBtmstdpux3n4ATegVN7ZKOoE5kyjybS56EymQTac0jgeNGlHQLLoAafOuXbLNpL+Tjk25VVBxpdlYFikQhe1Le9dKCgmXd7QDInQ4oeqJdzZMJ3t1WvE0xeq/JAWMIVVGGAM2qo3WDr7Yw4D26r1OrVJUAJ5aaVCYEu3fzsB98gDs5nidfSSXc/wYGOvzdYiZQQcuQCQ2+WfK7nyegR8CNXUUdXuJDMb30nVvSY5aL3nBKeEpu38bnlfX8bveFKJ84qg7EO4gJfOiw33n8YqhLQ2gOWxT7oUGw+Hg5RZJdaSUqghHgcfRmKaaxm8AlKi4h5Z3Gnh/DU5Lo4mfU0+JJHadclUhkmLHnAf7+haykT3XK/Q8f0//6kCjyijiZlAccEaLuUavXHSjXvsPsOuc5IshbyWMESTLI8utYZD5Y2QdEPxI363P1E81/pR0ss3/UDpw5CvbfkzlCUuXMwgwUT0/UvzPj4/hXG1Defw0VShFBQRQLOQ0ASASIBwnpXLbNkhqdZuBHs/29byNDLFfwceVzNGAlCUQJVZFhs+Ub8BtE53wpI5gLgMUZcF03zfKGLnkVxztR+vr2fzj/37iuSxbb4QxY2OB6GZqXmRE3A+RMmIfh52UUWBIokLx4106SPSg5E0e+G4N40gNAyMKBIzWJIOw+Ul1T7lF8nKG2j/SKfmyIdIFn9zRBW7wL2Onmo/sH/kdGiBVl6Pgn2472MgId8zTKYcBR4yTzDDhq9dNCCsC2Nd55WR5jtf8fluKgHFdFOowxn9TDub/3xV/n8d8Re0vOhfo3K1XBi5WqS4ef3+++1LBk/7SX7WPI+2sk+EDcfAYcTDbZt1uxSMKjzDqejk7UHVosK+rOeNw7G8brWtAnvgSTjSjNXQWD0teoJe3V9QZKTNcIVCRP9yAfgal+Bt3Tj8LlxJuSvwi5RjHXLkFkbcoJkGA7jXmrgDUjnU/O3JLi8GZlwoB6u67ValZ6LQS1hlHHAyJHNQTLSkAP+d54WFB+/tmO+dxEd3gzjCJ2w2FrMURDNSVNNHQyFeAEHo8AALgAIAgEDAIKBg4BCQUNAwsHDwCIhIyCioaOgYmFjYOLh4+ASERMQkpGTkFJRU1DS0dPQMjEzMLKxs7BycXNw8vHz8AoJCwiKiYuISklLSMrJy8gqKSsoqqmrqGppa2jq6evoGhkbGJqZm5haWVtY2tnb2Do5Ozi6ubu4enl7ePr5+/gGBQcEhoWHhEZFR0TGxcfEJiUnJKalp6RmZWdk5uXn5BYVFxSWlZeUVlVXVNbV19Q2NTc0trW3tHZ1d3T29ff0Dg0PDI6Nj4xOTU9Mzs3PzC4tLyyura+sbm1vbO7t7+weHR8cnp2fnF5dX1ze3d/cPj0/PL69v7x+fX98/v3//AEGo/gALMKrq////v3/u//9UrP//qgeJPaw9qDTM2a9E4Tzh0h3ZNevSkO3pxpKm+V+OekSABgBB2P4ACzBV1f///3//3P//qVj//1UPEntYe1BpmLNficJ5wqU7smvWpSHb040lTfO/HPWIAA0AQciDAQswqur///+/f+7//1Ss//+qB4k9rD2oNMzZr0ThPOHSHdk169KQ7enGkqb5X456RIAGAEH4hgELYPP/DAAAACeqCgA0/DIAzFN/gApreumPR9ckuua+ftOxL6t4vztzyY5+3oM9UUXWCfP/DAAAACeqCgA0/DIAzFN/gApreumPR9ckuua+ftOxL6t4vztzyY5+3oM9UUXWCQBB2NIBCyAREREREREREREREBAPDg0NDAsKCQgHBwYFBAMCAQEBAQBBuNcBCyAREREREREREREREBAPDg0NDAsKCQgHBwYFBAMCAQEBAQBB2NsBC6AI/v///wEAAAACSAMA+reEWPVPvOzvT4yZbwXFrFmxJBgDAAAA/f////wT+/8I7Dj7D4jlHBiIrZnYd9h8+fXIW7HPiap0VrDz/rkGYEABLwcmemYlvw2aznSDWS0F5CxNCRC902m2MJGnYaCyf6n75KgmS7PPCETzLHr/BuykNR+JEgoLAqDCJYghCH1/cRyX2MUa2MrcOUfBQePuqXtgTzTRHCOjYGTF7l/yT6kUxJVum1SAUDYdnd0GRZ8JdFIczEAndbCVmx18y+hSJlqwyF0DmUNc4gEPEBc9Z1+bxmNTrSbzvGFjw16agdzwz5mXYxzZq/AEvpUQIvLmySD2SaxCUxFNyMHKciVxFs6FYvzchkdX7NVkeRWWF0iawEJXNPhTdzM1upR3UK4WUMz4STwaJRe28tsF4TjQ3zYb82vnNj3dgLhU/BtJytqIcvL2xVs14prdBLscOJnJCabSJGUWzZySLfXjP0YEq7Fz+r0OeP32FybmMjt3nFAOSG9Xx+H3l+uxvBBf6XHaK2czqidgLC7uToFSRPMXEm+v5TksMx+an9yYZfKo0E7Sx7LDcBZmgRIRBh7iIrqH8N08AjgGTKUv/JdfQ2urlNNbnQiHlnsBrhSF9O+wAJ1gWjg5lKkQ5QiuKtLz8DXDsLiabntgy/msZC221gap4gr11WN0CW5P51QVkF8rQNcKhVH7gc8vrfrgLNn32VWPz1mcDdVgdQG9Y7f2ZDOr557BLxq/5VR2q8PckS8kWXR97c4nKHnkHA983Ap4vnrkJNeSDUwBO8ZnlC7BYuQaQ2/WcUVdX1H6/elgU873DeTMFWGO0w2eBfrCgHNj27niYS1aDRDa3famT6exdoMs1GtbwztaERSK3Af2xpyteMkMCKxWf7LHPsODJ46P8/ldAoSqYF3J07Uhpm8ECQ9Puy6nnA3mgWzlpPziA/jHC0QsAHv1Bkz5abhIr0RCWKZggqULIUFoyL8P6MHmy09PhjRO6mQfj1Etv5KPqaEWZOmqIodJ3ETbqBEG0IFH+X91CAG7gX0gkcqzniQ3fFFVrFcxB0NS9RouHFTeK+zDA2DReZam1ATo8DalVULovAw13pNvcVp5nlty6LsxNkWoK0JuoLuMZlPg9ldIKA+cec2XA0QL/FZ5pt4nMq8Yr0k2+/GyTNHzrHK6pqYJTWf9o7N54h5L8m0pTLUT3KYn2NKVRHlFENY0aoSWtaO4QF9nPIi6LtbQc+B/mV1+IoqN/xnow7xB4E+SrIssGSEaG+r0J0U7jrpkOAAtT57ZGOT0vwZx3+k4lZ77R28jRO3p/d9OLwW8USbQqjZ9wINzsNTwh2cfT28IiSx0YPUXY79oKadYY3z0Fwxcbauc5XFL/T3p4RwF1R1HMLJtDWo7OnSQ6Q4/AEH44wELoAj+////AQAAAAJIAwD6t4RY9U+87O9PjJlvBcWsWbEkGP////8AAAAAAaQBAP1bQqz6J1729yfGzLeCYtasWBIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQZjsAQugCMn///82AAAANzxaAFvDQQLbljruRZaS/nwVKg8iDfEXnPr//2MFAABkFdgI1N+3lUiDjxOsdC/cy6YIq7MD5hJ31vL/iCkNAIntMZh6vxd8G0qF9O+cCVo4yvwk1QXMZo0Y/Isk5wN0wZO820tUSPuWRJUsS29Pr1PwhWd6xXAnjMbBxGSerwOgGQ+JyKbGmBJWwsYgELyMmQXJpsmEdWI6MthzObmpoYFO06hdId0mtXSe28ZKh4DriiZAv5pKNfIa1pTr2RHGezJ0gOGXkOoGH4HCA9m6kJaa7Qi0qNcCRt7ECnpsFU2srBw5Lo9hm969qrF9/i1p/meSI3XiiCO29ns85ZNZ4rZXl8GMDABdzyxXPklC+/wF+zNc619gD+FvhsNEniIWcNak8WivzI4DTfatckhXs7+Gn59XXEQCh6wInKRdaYSNlp5xppukwbfs2bQEKlpM88a35Ek/P1KKWvm//2gr2XqjDoWm8q8QbUnkO4Gs5WQ03XgcsM8nGruzyBLKhH5Jn9yufgAio8WzhbGXz7lXsObB5kBzDxYNPTJB9lZazV9E8xhKDa9HH5FYjGy9veiH3k0rzj3N+2HL4IglqwuyTN+sB1ROTvldtt2PFXpkjWzU2MWDEt0bbRDQwqwx9OCP1kp18mh5QAMVc7CIrQ7It1De89L9zrUxpsQOa64pE33TAjg1CMw7n0Sev2hnuEIqOT1XfVR0ED73bok681X041/w/8Qxv6ykqvcFWKcjxVcBr8w3ENe+c76gP5b3cTXC0IGbi2ZPPCiR4/mSXRnQiwiv8wwuosJXN81s4HEaXTi7G+Iz6wfcRacOqfjYfh/j4+saWO8v3wvZc3Q25pvZJleDY8yJr/74mc3ef6WA/TpT372cOV4ZJb4LbRk/r1PRtbuTPTvKbRkuP4BF95yaNQM/xWBv+WdUxTQQSHPs3lwHSR0EynGaHJLC6h4ZDvMaDk18a+DreGSfG6ThtMoorfQR1VT/YeotltL/26UyaRZM7h2/8GkzWXZxnZhPaA6c3PfFWXpmohM8wRNEA/GQwgkPD5UAOU9OaJ5u9mumrMX5TloUcfSexJzaSpyZsQh0Tf9DyVfrthVxdPDmvh0pD1ZNihAEO4Cjuwvmw3jWGLCSqYQd04e2D3Dqoll/lpxxS+ryt4Ng6yWyHfNjwUra2fUFskytVv1mOTCUH78UqEL4KR8Pl73oocmGGGXrkbQ5KN5Qp3Wj2WCScYvRSYm9GnEULXnT0G7brawSRr54Baq1R43TCncNEQjZjm0+lozn2+OzvP7CYBOkm+Zw7rDHlQT+RYYEEQQ5IvCFwEwVaWV0HYVRPCMOO3RCd7jgJaHspCHov1EpEwY4FgdVKV++CaHB81vOUVAakJi0JrDOY2p1uIKLYTPCXABBuPQBC6AIVlVVVf////+pkqmqrMLTN646wVsFkCYiMP5oxoxvnkKENEiDsBM7sY92QBowbwsB41KBdhmbZP2p1r8Q+gHSUuI/BgqcGmVF+/9xgIMqUNiiqKhx7F1dyrSDtHvSCOBkJwOgdavC90ApyAe13Ym/oSjDtRchoFqD8U4oBztbB0szRdczz6/njCJFaMdD0UlbWXc7Ogyyis11tiyRLjD0DcA+KOf8SSzKFKwkPiiyABLDnqrkpodD1lKjIhDnzq4M/U3nxwjGRGViOVgSagRJLN6ujVewx7ShbN1fcmwiWFQXSRdPypXa5qmEiVwNhE3HlJSfW9qK2vuqMSWduH+YO4srRiMpWVSC7jYXzJwJBtmstdpux3n4ATegVN7ZKOoE5kyjybS56EymQTac0jgeNGlHQLLoAafOuXbLNpL+Tjk25VVBxpdlYFikQhe1Le9dKCgmXd7QDInQ4oeqJdzZMJ3t1WvE0xeq/JAWMIVVGGAM2qo3WDr7Yw4D26r1OrVJUAJ5aaVCYEu3fzsB98gDs5nidfSSXc/wYGOvzdYiZQQcuQCQ2+WfK7nyegR8CNXUUdXuJDMb30nVvSY5aL3nBKeEpu38bnlfX8bveFKJ84qg7EO4gJfOiw33n8YqhLQ2gOWxT7oUGw+Hg5RZJdaSUqghHgcfRmKaaxm8AlKi4h5Z3Gnh/DU5Lo4mfU0+JJHadclUhkmLHnAf7+haykT3XK/Q8f0//6kCjyijiZlAccEaLuUavXHSjXvsPsOuc5IshbyWMESTLI8utYZD5Y2QdEPxI363P1E81/pR0ss3/UDpw5CvbfkzlCUuXMwgwUT0/UvzPj4/hXG1Defw0VShFBQRQLOQ0ASASIBwnpXLbNkhqdZuBHs/29byNDLFfwceVzNGAlCUQJVZFhs+Ub8BtE53wpI5gLgMUZcF03zfKGLnkVxztR+vr2fzj/37iuSxbb4QxY2OB6GZqXmRE3A+RMmIfh52UUWBIokLx4106SPSg5E0e+G4N40gNAyMKBIzWJIOw+Ul1T7lF8nKG2j/SKfmyIdIFn9zRBW7wL2Onmo/sH/kdGiBVl6Pgn2472MgId8zTKYcBR4yTzDDhq9dNCCsC2Nd55WR5jtf8fluKgHFdFOowxn9TDub/3xV/n8d8Re0vOhfo3K1XBi5WqS4ef3+++1LBk/7SX7WPI+2sk+EDcfAYcTDbZt1uxSMKjzDqejk7UHVosK+rOeNw7G8brWtAnvgSTjSjNXQWD0teoJe3V9QZKTNcIVCRP9yAfgal+Bt3Tj8LlxJuSvwi5RjHXLkFkbcoJkGA7jXmrgDUjnU/O3JLi8GZlwoB6u67ValZ6LQS1hlHHAyJHNQTLSkAP+d54WFB+/tmO+dxEd3gzjCJ2w2FrMURDNSVNNHQyFeAEHY/AELgAIAgEDAIKBg4BCQUNAwsHDwCIhIyCioaOgYmFjYOLh4+ASERMQkpGTkFJRU1DS0dPQMjEzMLKxs7BycXNw8vHz8AoJCwiKiYuISklLSMrJy8gqKSsoqqmrqGppa2jq6evoGhkbGJqZm5haWVtY2tnb2Do5Ozi6ubu4enl7ePr5+/gGBQcEhoWHhEZFR0TGxcfEJiUnJKalp6RmZWdk5uXn5BYVFxSWlZeUVlVXVNbV19Q2NTc0trW3tHZ1d3T29ff0Dg0PDI6Nj4xOTU9Mzs3PzC4tLyyura+sbm1vbO7t7+weHR8cnp2fnF5dX1ze3d/cPj0/PL69v7x+fX98/v3//AEGYjgILoAj+////AQAAAAJIAwD6t4RY9U+87O9PjJlvBcWsWbEkGAMAAAD9/////BP7/wjsOPsPiOUcGIitmdh32Hz59chbsc+JqnRWsPP+uQZgQAEvByZ6ZiW/DZrOdINZLQXkLE0JEL3TabYwkadhoLJ/qfvkqCZLs88IRPMsev8G7KQ1H4kSCgsCoMIliCEIfX9xHJfYxRrYytw5R8FB4+6pe2BPNNEcI6NgZMXuX/JPqRTElW6bVIBQNh2d3QZFnwl0UhzMQCd1sJWbHXzL6FImWrDIXQOZQ1ziAQ8QFz1nX5vGY1OtJvO8YWPDXpqB3PDPmZdjHNmr8AS+lRAi8ubJIPZJrEJTEU3IwcpyJXEWzoVi/NyGR1fs1WR5FZYXSJrAQlc0+FN3MzW6lHdQrhZQzPhJPBolF7by2wXhONDfNhvza+c2Pd2AuFT8G0nK2ohy8vbFWzXimt0Euxw4mckJptIkZRbNnJIt9eM/RgSrsXP6vQ54/fYXJuYyO3ecUA5Ib1fH4feX67G8EF/pcdorZzOqJ2AsLu5OgVJE8xcSb6/lOSwzH5qf3Jhl8qjQTtLHssNwFmaBEhEGHuIiuofw3TwCOAZMpS/8l19Da6uU01udCIeWewGuFIX077AAnWBaODmUqRDlCK4q0vPwNcOwuJpue2DL+axkLbbWBqniCvXVY3QJbk/nVBWQXytA1wqFUfuBzy+t+uAs2ffZVY/PWZwN1WB1Ab1jt/ZkM6vnnsEvGr/lVHarw9yRLyRZdH3tzicoeeQcD3zcCni+euQk15INTAE7xmeULsFi5BpDb9ZxRV1fUfr96WBTzvcN5MwVYY7TDZ4F+sKAc2PbueJhLVoNENrd9qZPp7F2gyzUa1vDO1oRFIrcB/bGnK14yQwIrFZ/ssc+w4Mnjo/z+V0ChKpgXcnTtSGmbwQJD0+7LqecDeaBbOWk/OID+McLRCwAe/UGTPlpuEivREJYpmCCpQshQWjIvw/owebLT0+GNE7qZB+PUS2/ko+poRZk6aoih0ncRNuoEQbQgUf5f3UIAbuBfSCRyrOeJDd8UVWsVzEHQ1L1Gi4cVN4r7MMDYNF5lqbUBOjwNqVVQui8DDXek29xWnmeW3LouzE2RagrQm6gu4xmU+D2V0goD5x5zZcDRAv8Vnmm3icyrxivSTb78bJM0fOscrqmpglNZ/2js3niHkvybSlMtRPcpifY0pVEeUUQ1jRqhJa1o7hAX2c8iLou1tBz4H+ZXX4iio3/GejDvEHgT5KsiywZIRob6vQnRTuOumQ4AC1PntkY5PS/BnHf6TiVnvtHbyNE7en9304vBbxRJtCqNn3Ag3Ow1PCHZx9PbwiJLHRg9Rdjv2gpp1hjfPQXDFxtq5zlcUv9PenhHAXVHUcwsm0Najs6dJDpDj8AQbiWAgugCP7///8BAAAAAkgDAPq3hFj1T7zs70+MmW8FxaxZsSQY/////wAAAAABpAEA/VtCrPonXvb3J8bMt4Ji1qxYEgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAABB2J4CC6AIyf///zYAAAA3PFoAW8NBAtuWOu5FlpL+fBUqDyIN8Rec+v//YwUAAGQV2AjU37eVSIOPE6x0L9zLpgirswPmEnfW8v+IKQ0Aie0xmHq/F3wbSoX075wJWjjK/CTVBcxmjRj8iyTnA3TBk7zbS1RI+5ZElSxLb0+vU/CFZ3rFcCeMxsHEZJ6vA6AZD4nIpsaYElbCxiAQvIyZBcmmyYR1Yjoy2HM5uamhgU7TqF0h3Sa1dJ7bxkqHgOuKJkC/mko18hrWlOvZEcZ7MnSA4ZeQ6gYfgcID2bqQlprtCLSo1wJG3sQKemwVTaysHDkuj2Gb3r2qsX3+LWn+Z5IjdeKII7b2ezzlk1nitleXwYwMAF3PLFc+SUL7/AX7M1zrX2AP4W+Gw0SeIhZw1qTxaK/MjgNN9q1ySFezv4afn1dcRAKHrAicpF1phI2WnnGmm6TBt+zZtAQqWkzzxrfkST8/Uopa+b//aCvZeqMOhabyrxBtSeQ7gazlZDTdeBywzycau7PIEsqEfkmf3K5+ACKjxbOFsZfPuVew5sHmQHMPFg09MkH2VlrNX0TzGEoNr0cfkViMbL296IfeTSvOPc37YcvgiCWrC7JM36wHVE5O+V223Y8VemSNbNTYxYMS3RttENDCrDH04I/WSnXyaHlAAxVzsIitDsi3UN7z0v3OtTGmxA5rrikTfdMCODUIzDufRJ6/aGe4Qio5PVd9VHQQPvduiTrzVfTjX/D/xDG/rKSq9wVYpyPFVwGvzDcQ175zvqA/lvdxNcLQgZuLZk88KJHj+ZJdGdCLCK/zDC6iwlc3zWzgcRpdOLsb4jPrB9xFpw6p+Nh+H+Pj6xpY7y/fC9lzdDbmm9kmV4NjzImv/viZzd5/pYD9OlPfvZw5XhklvgttGT+vU9G1u5M9O8ptGS4/gEX3nJo1Az/FYG/5Z1TFNBBIc+zeXAdJHQTKcZocksLqHhkO8xoOTXxr4Ot4ZJ8bpOG0yiit9BHVVP9h6i2W0v/bpTJpFkzuHb/waTNZdnGdmE9oDpzc98VZemaiEzzBE0QD8ZDCCQ8PlQA5T05onm72a6asxflOWhRx9J7EnNpKnJmxCHRN/0PJV+u2FXF08Oa+HSkPVk2KEAQ7gKO7C+bDeNYYsJKphB3Th7YPcOqiWX+WnHFL6vK3g2DrJbId82PBStrZ9QWyTK1W/WY5MJQfvxSoQvgpHw+XveihyYYYZeuRtDko3lCndaPZYJJxi9FJib0acRQtedPQbtutrBJGvngFqrVHjdMKdw0RCNmObT6WjOfb47O8/sJgE6Sb5nDusMeVBP5FhgQRBDki8IXATBVpZXQdhVE8Iw47dEJ3uOAloeykIei/USkTBjgWB1UpX74JocHzW85RUBqQmLQmsM5janW4gothM8JcAEH4pgILoAhWVVVV/////6mSqaqswtM3rjrBWwWQJiIw/mjGjG+eQoQ0SIOwEzuxj3ZAGjBvCwHjUoF2GZtk/anWvxD6AdJS4j8GCpwaZUX7/3GAgypQ2KKoqHHsXV3KtIO0e9II4GQnA6B1q8L3QCnIB7Xdib+hKMO1FyGgWoPxTigHO1sHSzNF1zPPr+eMIkVox0PRSVtZdzs6DLKKzXW2LJEuMPQNwD4o5/xJLMoUrCQ+KLIAEsOequSmh0PWUqMiEOfOrgz9TefHCMZEZWI5WBJqBEks3q6NV7DHtKFs3V9ybCJYVBdJF0/KldrmqYSJXA2ETceUlJ9b2ora+6oxJZ24f5g7iytGIylZVILuNhfMnAkG2ay12m7HefgBN6BU3tko6gTmTKPJtLnoTKZBNpzSOB40aUdAsugBp865dss2kv5OOTblVUHGl2VgWKRCF7Ut710oKCZd3tAMidDih6ol3Nkwne3Va8TTF6r8kBYwhVUYYAzaqjdYOvtjDgPbqvU6tUlQAnlppUJgS7d/OwH3yAOzmeJ19JJdz/BgY6/N1iJlBBy5AJDb5Z8rufJ6BHwI1dRR1e4kMxvfSdW9JjlovecEp4Sm7fxueV9fxu94UonziqDsQ7iAl86LDfefxiqEtDaA5bFPuhQbD4eDlFkl1pJSqCEeBx9GYpprGbwCUqLiHlncaeH8NTkujiZ9TT4kkdp1yVSGSYsecB/v6FrKRPdcr9Dx/T//qQKPKKOJmUBxwRou5Rq9cdKNe+w+w65zkiyFvJYwRJMsjy61hkPljZB0Q/Ejfrc/UTzX+lHSyzf9QOnDkK9t+TOUJS5czCDBRPT9S/M+Pj+FcbUN5/DRVKEUFBFAs5DQBIBIgHCelcts2SGp1m4Eez/b1vI0MsV/Bx5XM0YCUJRAlVkWGz5RvwG0TnfCkjmAuAxRlwXTfN8oYueRXHO1H6+vZ/OP/fuK5LFtvhDFjY4HoZmpeZETcD5EyYh+HnZRRYEiiQvHjXTpI9KDkTR74bg3jSA0DIwoEjNYkg7D5SXVPuUXycobaP9Ip+bIh0gWf3NEFbvAvY6eaj+wf+R0aIFWXo+CfbjvYyAh3zNMphwFHjJPMMOGr100IKwLY13nlZHmO1/x+W4qAcV0U6jDGf1MO5v/fFX+fx3xF7S86F+jcrVcGLlapLh5/f777UsGT/tJftY8j7ayT4QNx8BhxMNtm3W7FIwqPMOp6OTtQdWiwr6s543Dsbxuta0Ce+BJONKM1dBYPS16gl7dX1BkpM1whUJE/3IB+BqX4G3dOPwuXEm5K/CLlGMdcuQWRtygmQYDuNeauANSOdT87ckuLwZmXCgHq7rtVqVnotBLWGUccDIkc1BMtKQA/53nhYUH7+2Y753ER3eDOMInbDYWsxREM1JU00dDIV4AQZivAguAAgCAQMAgoGDgEJBQ0DCwcPAIiEjIKKho6BiYWNg4uHj4BIRExCSkZOQUlFTUNLR09AyMTMwsrGzsHJxc3Dy8fPwCgkLCIqJi4hKSUtIysnLyCopKyiqqauoamlraOrp6+gaGRsYmpmbmFpZW1ja2dvYOjk7OLq5u7h6eXt4+vn7+AYFBwSGhYeERkVHRMbFx8QmJSckpqWnpGZlZ2Tm5efkFhUXFJaVl5RWVVdU1tXX1DY1NzS2tbe0dnV3dPb19/QODQ8Mjo2PjE5NT0zOzc/MLi0vLK6tr6xubW9s7u3v7B4dHxyenZ+cXl1fXN7d39w+PT88vr2/vH59f3z+/f/8AQdjPAguQARYMU/2Qh7Nc9f92mWf8F3jBoTsUx5VPFUfn0PPNaq7wQPTbIcxuzu11+wueQXcBEnEi5wzVk6y6jv0YeRpjIozOJQdXE19Z3ZRRQFApWKxRwFkArT+MHA5qoghQ/D68C/3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQBB6NACC5ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f8CAAAACXYCAAzECwD067pYx1NXmEhfRVdScFNYzndt7FailxoHXJPkgPrDXvYVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEH40QILoAIQCpQCoo/y9RqWtIcm+/WzgOUqPrWTqKHprjwanZmUmGs2Yxhjt2dv17xQQ5KRgQUG9iOedcCppcNgzbydxaCqBniG4hh+sTtns0GFzLYaG0eFFfIO7bbC8+1gcwkqkhFKTElg+ApzTFqcNl4f+nxZWmMKqmyF5udfSQ1u6bXvu6Il7/B1qdMH5dqAfo79gwBdsGTfkvzArdxhFCsKJ6oYoOvkO2qsrYY6oz3JTlxJee3KPKRQWBfn8hveY6HCKwv9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQZjUAgugAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBuNYCC8AE/f8CAAAACXYCAAzECwD067pYx1NXmEhfRVdScFNYzndt7FailxoHXJPkgPrDXvYVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEH42gILYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172Ff3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQBByJwDC6ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHongMLoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQYi8AwugAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBqNADC0AAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAABAAABAAEBAEGI/gQLYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6P4EC2D9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcj/BAtg/f8CAAAACXYCAAzECwD067pYx1NXmEhfRVdScFNYzndt7FailxoHXJPkgPrDXvYVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGogAULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiIEFC2D9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQeiBBQtg/f8CAAAACXYCAAzECwD067pYx1NXmEhfRVdScFNYzndt7FailxoHXJPkgPrDXvYVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHIggULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBqIMFC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABx8HGG5MkDzdKlzR9GIqtdlRuF069CcFiey7oBvg62jtJQ0INuffkDQYdjVGUg8BgAQYiEBQtgw0V1huTJDYnVpYUyUyLzKix+mzBmCIhQJBCIfowbDaJokNviT/DkFDqFZBU/beUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHohAULYGXUGbNSlQgHE4MKtZJfacaPIhfRzDzol+4p3LLKrlujTc6qXeqT4xzrZvuwDyLyCEbW5Uytavay7HxJ/GugQliU05kl1JVIz9DoqEC6nBvBid6g5csTOC6vf4SI2u8OEQBByIUFC2DaD6NaoqfPe3x+kirB3hfc8b5Oa9iNCC+n1HTahyDK0R28zpZmWaIt0of9u+1+Kw7aD6NaoqfPe3x+kirB3hfc8b5Oa9iNCC+n1HTahyDK0R28zpZmWaIt0of9u+1+Kw4AQaiGBQtgP+S8DfU82IKPAZ3fUz6BooHhZTylyvDGlf5QjVLPJXVrinn0UO2FSr3u+Gz9oB0XbMZC8grDJjdw/rbRqsEqfKIUS7r7B0CgKRQ0ZjJ8Ue9rItJOZbqVAN33hszscOMCAEGIhwULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6IcFC2DoZIp5GzbxMCpazn6r3bjz93cVxjrKqBabAv10+C9qwm4ccGBmtzY2YGEbJKukGwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQciIBQtgcfBxhuTJA83Spc0fRiKrXZUbhdOvQnBYnsu6Ab4Oto7SUNCDbn35A0GHY1RlIPAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGoiQULYDq6jXkbNvvsLFqGkbjdAMGO2isj8Y/ADiFHyvHGPMHVBFx7v0cqIkdZXxzlhPEQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiIoFC2Cuqvz////1Q/3/R+3y/7cyaZ3pokk66Ad6uzKDMfOo7GnA9KAejRTvBgL/PiazCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQeiKBQtgw0V1huTJDYnVpYUyUyLzKix+mzBmCIhQJBCIfowbDaJokNviT/DkFDqFZBU/beUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHIiwULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBqIwFC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAQYiNBQtgrqr8////9UP9/0ft8v+3Mmmd6aJJOugHersygzHzqOxpwPSgHo0U7wYC/z4mswoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHojQULYNGaXKVdWC8+g4HBhj0hlEIyN2KLyEQoOBg+EBn9Kq2SufB8rE9OeR3IXoJ9/JLVC9oPo1qip897fH6SKsHeF9zxvk5r2I0IL6fUdNqHIMrRHbzOlmZZoi3Sh/277X4rDgBByI4FC2DRmlylXVgvPoOBwYY9IZRCMjdii8hEKDgYPhAZ/SqtkrnwfKxPTnkdyF6CffyS1QvRmlylXVgvPoOBwYY9IZRCMjdii8hEKDgYPhAZ/SqtkrnwfKxPTnkdyF6CffyS1QsAQaiPBQtg2g+jWqKnz3t8fpIqwd4X3PG+TmvYjQgvp9R02ocgytEdvM6WZlmiLdKH/bvtfisO0ZpcpV1YLz6DgcGGPSGUQjI3YovIRCg4GD4QGf0qrZK58HysT055Hchegn38ktULAEGIkAULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6JAFC2Bx8HGG5MkDzdKlzR9GIqtdlRuF069CcFiey7oBvg62jtJQ0INuffkDQYdjVGUg8BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQciRBQtg6GSKeRs28TAqWs5+q9248/d3FcY6yqgWmwL9dPgvasJuHHBgZrc2NmBhGySrpBsFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGokgULYOhkinkbNvEwKlrOfqvduPP3dxXGOsqoFpsC/XT4L2rCbhxwYGa3NjZgYRskq6QbBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiJMFC2D9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQeiTBQtgcfBxhuTJA83Spc0fRiKrXZUbhdOvQnBYnsu6Ab4Oto7SUNCDbn35A0GHY1RlIPAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHIlAULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBqJUFC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoZIp5GzbxMCpazn6r3bjz93cVxjrKqBabAv10+C9qwm4ccGBmtzY2YGEbJKukGwUAQYiWBQtgOrqNeRs2++wsWoaRuN0AwY7aKyPxj8AOIUfK8cY8wdUEXHu/RyoiR1lfHOWE8RABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHolgULYGzGQvIKwyY3cP620arBKnyiFEu6+wdAoCkUNGYyfFHvayLSTmW6lQDd94bM7HDjAj/kvA31PNiCjwGd31M+gaKB4WU8pcrwxpX+UI1SzyV1a4p59FDthUq97vhs/aAdFwBByJcFC2DaD6NaoqfPe3x+kirB3hfc8b5Oa9iNCC+n1HTahyDK0R28zpZmWaIt0of9u+1+Kw7aD6NaoqfPe3x+kirB3hfc8b5Oa9iNCC+n1HTahyDK0R28zpZmWaIt0of9u+1+Kw4AQaiYBQtgRtblTK1q9rLsfEn8a6BCWJTTmSXUlUjP0OioQLqcG8GJ3qDlyxM4Lq9/hIja7w4RZdQZs1KVCAcTgwq1kl9pxo8iF9HMPOiX7incssquW6NNzqpd6pPjHOtm+7APIvIIAEGImQULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6JkFC2D9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQciaBQtg/f8CAAAACXYCAAzECwD067pYx1NXmEhfRVdScFNYzndt7FailxoHXJPkgPrDXvYVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGomwULYK6q/P////VD/f9H7fL/tzJpnemiSTroB3q7MoMx86jsacD0oB6NFO8GAv8+JrMKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiJwFC2Cuqvz////1Q/3/R+3y/7cyaZ3pokk66Ad6uzKDMfOo7GnA9KAejRTvBgL/PiazCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQeicBQtgrqr8////9UP9/0ft8v+3Mmmd6aJJOugHersygzHzqOxpwPSgHo0U7wYC/z4mswoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHInQULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBqJ4FC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABx8HGG5MkDzdKlzR9GIqtdlRuF069CcFiey7oBvg62jtJQ0INuffkDQYdjVGUg8BgAQYifBQtgw0V1huTJDYnVpYUyUyLzKix+mzBmCIhQJBCIfowbDaJokNviT/DkFDqFZBU/beUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHonwULYEbW5Uytavay7HxJ/GugQliU05kl1JVIz9DoqEC6nBvBid6g5csTOC6vf4SI2u8OEWXUGbNSlQgHE4MKtZJfacaPIhfRzDzol+4p3LLKrlujTc6qXeqT4xzrZvuwDyLyCABByKAFC2DRmlylXVgvPoOBwYY9IZRCMjdii8hEKDgYPhAZ/SqtkrnwfKxPTnkdyF6CffyS1QvRmlylXVgvPoOBwYY9IZRCMjdii8hEKDgYPhAZ/SqtkrnwfKxPTnkdyF6CffyS1QsAQaihBQtgbMZC8grDJjdw/rbRqsEqfKIUS7r7B0CgKRQ0ZjJ8Ue9rItJOZbqVAN33hszscOMCP+S8DfU82IKPAZ3fUz6BooHhZTylyvDGlf5QjVLPJXVrinn0UO2FSr3u+Gz9oB0XAEGIogULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6KIFC2DoZIp5GzbxMCpazn6r3bjz93cVxjrKqBabAv10+C9qwm4ccGBmtzY2YGEbJKukGwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcijBQtgcfBxhuTJA83Spc0fRiKrXZUbhdOvQnBYnsu6Ab4Oto7SUNCDbn35A0GHY1RlIPAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGopAULYHHwcYbkyQPN0qXNH0Yiq12VG4XTr0JwWJ7LugG+DraO0lDQg259+QNBh2NUZSDwGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiKUFC2D9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQeilBQtg6GSKeRs28TAqWs5+q9248/d3FcY6yqgWmwL9dPgvasJuHHBgZrc2NmBhGySrpBsFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHIpgULYP3/AgAAAAl2AgAMxAsA9Ou6WMdTV5hIX0VXUnBTWM53bexWopcaB1yT5ID6w172FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBqKcFC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/wIAAAAJdgIADMQLAPTruljHU1eYSF9FV1JwU1jOd23sVqKXGgdck+SA+sNe9hUAQYioBQtgrqr8////9UP9/0ft8v+3Mmmd6aJJOugHersygzHzqOxpwPSgHo0U7wYC/z4mswoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHoqAULYNoPo1qip897fH6SKsHeF9zxvk5r2I0IL6fUdNqHIMrRHbzOlmZZoi3Sh/277X4rDtGaXKVdWC8+g4HBhj0hlEIyN2KLyEQoOBg+EBn9Kq2SufB8rE9OeR3IXoJ9/JLVCwBByKkFC2DaD6NaoqfPe3x+kirB3hfc8b5Oa9iNCC+n1HTahyDK0R28zpZmWaIt0of9u+1+Kw7aD6NaoqfPe3x+kirB3hfc8b5Oa9iNCC+n1HTahyDK0R28zpZmWaIt0of9u+1+Kw4AQaiqBQtg0ZpcpV1YLz6DgcGGPSGUQjI3YovIRCg4GD4QGf0qrZK58HysT055Hchegn38ktUL2g+jWqKnz3t8fpIqwd4X3PG+TmvYjQgvp9R02ocgytEdvM6WZlmiLdKH/bvtfisOAEGIqwULMHHwcYbkyQPN0qXNH0Yiq12VG4XTr0JwWJ7LugG+DraO0lDQg259+QNBh2NUZSDwGABBuKsFCzDoZIp5GzbxMCpazn6r3bjz93cVxjrKqBabAv10+C9qwm4ccGBmtzY2YGEbJKukGwUAQeirBQsQVVVVVQAAAABW4VVVAIxsOQBByK4FC2BUVQEAAAAEGAEAsDoFAFCFbyc8JXy1PGMCtesx7NEibqJM0fImYZHTlmUAGle4+xdXVf7////6of7/o3b5/1uZtM500SQd9AO9XZnBmHlU9jRgelCPRop3A4F/H5NZBQIAQaivBQswcfBxhuTJA83Spc0fRiKrXZUbhdOvQnBYnsu6Ab4Oto7SUNCDbn35A0GHY1RlIPAYAEHYrwULYNGaXKVdWC8+g4HBhj0hlEIyN2KLyEQoOBg+EBn9Kq2SufB8rE9OeR3IXoJ9/JLVC9GaXKVdWC8+g4HBhj0hlEIyN2KLyEQoOBg+EBn9Kq2SufB8rE9OeR3IXoJ9/JLVCwBBuLAFCwgAAAEAAAAB0gBB8MUFC6AEEHX1XbW5vMAk+4vmMIb5JYn01fvI+wZEoJEh0ZGEL45pgG8KZXGdPoCrTB0BL2wiGZFIF0d89mfXkoXYG4g/rx0W0u6e5GcaGLKuaXiMt+W8ez8EFJNT9q4acPI3JfZzKi1i6RDJ8a/UqcqSNDGDYhk9qL7CPi8uc6ovsJ/nx6ThG5bXf2NJbEV3gejciugIF5k5Nno/3jU2nHUxfJ8dnLAgqE7CE576fVcDpEdpxT+3zlz83LbBpKa8ZnA2gb0bdSfGC++jGAQQ4PmpcZu/SRcLtn0JkRJRHI8w5cZFg0nC162dsSOIbSyVVtXtTACSlfE+wD7sa0yt5kwEIK0fCo2UFc0JMV3F0As/LMBGTzM5V8A062JaO6V2Fh1BOEVyNDRG0FobehIpAVvIxXSkYV6W74YojvyNQxKfRe8vU5YSBMHNaXHuQCqyS7eOpkCcC01o9JCHESUfwNTIk8JrWRISYSd/g2QQ5N0kvxD7fwfzASvNC1efxJNGN0zyWwwatjrHmzWlDTXdrNfkkw1n0la2Gm64mZDTDSuOl0iBMhmIDms4FPQTsaSaDWPi3KAHGDN1k7vnJ6lvRkmtaKpH4/TqbxDW0AocDw86/4Pucshcg2CmuUNOB5ruz+n136rAqa3ex4yOaTAsPzWrdjcH0UM63LoXhYQXqRSNP6G6Y3PQB0V9P3uX1JMB7okKHGpJwKm94bclyNy1He4CAAAAAABBkNAFC0EAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAABAAABAP8AAQ=="; +export const pq = 712; +export const pr = 3464; +export const pG1gen = 42968; +export const pG1zero = 43112; +export const pG1b = 4776; +export const pG2gen = 43256; +export const pG2zero = 43544; +export const pG2b = 17272; +export const pOneT = 43832; +export const prePSize = 288; +export const preQSize = 20448; +export const n8q = 48; +export const n8r = 32; +export const q = "4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787"; +export const r = "52435875175126190479447740508185965837690552500527637822603658699938581184513"; diff --git a/build/bn128_wasm.js b/build/bn128_wasm.js index 9dcb102..e08686b 100644 --- a/build/bn128_wasm.js +++ b/build/bn128_wasm.js @@ -1,18 +1,16 @@ - - exports.code = "AGFzbQEAAAABlQESYAJ/fwBgAX8AYAF/AX9gAn9/AX9gA39/fwF/YAN/f38AYAN/fn8AYAJ/fgBgBH9/f38AYAV/f39/fwBgBH9/f38Bf2AGf39/f39/AGAIf39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38Bf2AHf39/f39/fwF/YAl/f39/f39/f38Bf2ALf39/f39/f39/f38BfwIPAQNlbnYGbWVtb3J5AgAZA8ECvwIAAQIBAwMEBAUAAAYHCAUCBQUAAAUAAAAAAgIAAQUICQUFBQgICAgAAgIFBQAABQAAAAACAgABBQgJBQUFCAgICAACBQAAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgDAAgIAgAACQsLBQULAAgNCQgCAgEBAAUFAAUFAAAAAAMACAICCQgAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgFAwAICAIAAAkLCwUFCwUDAAgIAgAACQsLBQULBQUJCQkJCQACAgEBAAUABQUAAgAAAwAIAgkIAAICAQEABQUABQUAAAAAAwAIAgIJCAACBQAAAAAICAUAAAAAAAAAAAAAAAAAAAAABA4PEBEFB8UlqwIIaW50X2NvcHkAAAhpbnRfemVybwABB2ludF9vbmUAAwppbnRfaXNaZXJvAAIGaW50X2VxAAQHaW50X2d0ZQAFB2ludF9hZGQABgdpbnRfc3ViAAcHaW50X211bAAICmludF9zcXVhcmUACQ1pbnRfc3F1YXJlT2xkAAoHaW50X2RpdgANDmludF9pbnZlcnNlTW9kAA4IZjFtX2NvcHkAAAhmMW1femVybwABCmYxbV9pc1plcm8AAgZmMW1fZXEABAdmMW1fYWRkABAHZjFtX3N1YgARB2YxbV9uZWcAEg5mMW1faXNOZWdhdGl2ZQAZCWYxbV9pc09uZQAPCGYxbV9zaWduABoLZjFtX21SZWR1Y3QAEwdmMW1fbXVsABQKZjFtX3NxdWFyZQAVDWYxbV9zcXVhcmVPbGQAFhJmMW1fZnJvbU1vbnRnb21lcnkAGBBmMW1fdG9Nb250Z29tZXJ5ABcLZjFtX2ludmVyc2UAGwdmMW1fb25lABwIZjFtX2xvYWQAHQ9mMW1fdGltZXNTY2FsYXIAHgdmMW1fZXhwACYQZjFtX2JhdGNoSW52ZXJzZQAfCGYxbV9zcXJ0ACcMZjFtX2lzU3F1YXJlACgVZjFtX2JhdGNoVG9Nb250Z29tZXJ5ACAXZjFtX2JhdGNoRnJvbU1vbnRnb21lcnkAIQhmcm1fY29weQAACGZybV96ZXJvAAEKZnJtX2lzWmVybwACBmZybV9lcQAEB2ZybV9hZGQAKgdmcm1fc3ViACsHZnJtX25lZwAsDmZybV9pc05lZ2F0aXZlADMJZnJtX2lzT25lACkIZnJtX3NpZ24ANAtmcm1fbVJlZHVjdAAtB2ZybV9tdWwALgpmcm1fc3F1YXJlAC8NZnJtX3NxdWFyZU9sZAAwEmZybV9mcm9tTW9udGdvbWVyeQAyEGZybV90b01vbnRnb21lcnkAMQtmcm1faW52ZXJzZQA1B2ZybV9vbmUANghmcm1fbG9hZAA3D2ZybV90aW1lc1NjYWxhcgA4B2ZybV9leHAAQBBmcm1fYmF0Y2hJbnZlcnNlADkIZnJtX3NxcnQAQQxmcm1faXNTcXVhcmUAQhVmcm1fYmF0Y2hUb01vbnRnb21lcnkAOhdmcm1fYmF0Y2hGcm9tTW9udGdvbWVyeQA7BmZyX2FkZAAqBmZyX3N1YgArBmZyX25lZwAsBmZyX211bABDCWZyX3NxdWFyZQBECmZyX2ludmVyc2UARQ1mcl9pc05lZ2F0aXZlAEYHZnJfY29weQAAB2ZyX3plcm8AAQZmcl9vbmUANglmcl9pc1plcm8AAgVmcl9lcQAEDGcxbV9tdWx0aWV4cABxEmcxbV9tdWx0aWV4cF9jaHVuawBwEmcxbV9tdWx0aWV4cEFmZmluZQB1GGcxbV9tdWx0aWV4cEFmZmluZV9jaHVuawB0CmcxbV9pc1plcm8ASBBnMW1faXNaZXJvQWZmaW5lAEcGZzFtX2VxAFALZzFtX2VxTWl4ZWQATwxnMW1fZXFBZmZpbmUATghnMW1fY29weQBMDmcxbV9jb3B5QWZmaW5lAEsIZzFtX3plcm8ASg5nMW1femVyb0FmZmluZQBJCmcxbV9kb3VibGUAUhBnMW1fZG91YmxlQWZmaW5lAFEHZzFtX2FkZABVDGcxbV9hZGRNaXhlZABUDWcxbV9hZGRBZmZpbmUAUwdnMW1fbmVnAFcNZzFtX25lZ0FmZmluZQBWB2cxbV9zdWIAWgxnMW1fc3ViTWl4ZWQAWQ1nMW1fc3ViQWZmaW5lAFgSZzFtX2Zyb21Nb250Z29tZXJ5AFwYZzFtX2Zyb21Nb250Z29tZXJ5QWZmaW5lAFsQZzFtX3RvTW9udGdvbWVyeQBeFmcxbV90b01vbnRnb21lcnlBZmZpbmUAXQ9nMW1fdGltZXNTY2FsYXIAdhVnMW1fdGltZXNTY2FsYXJBZmZpbmUAdw1nMW1fbm9ybWFsaXplAGMKZzFtX0xFTXRvVQBlCmcxbV9MRU10b0MAZgpnMW1fVXRvTEVNAGcKZzFtX0N0b0xFTQBoD2cxbV9iYXRjaExFTXRvVQBpD2cxbV9iYXRjaExFTXRvQwBqD2cxbV9iYXRjaFV0b0xFTQBrD2cxbV9iYXRjaEN0b0xFTQBsDGcxbV90b0FmZmluZQBfDmcxbV90b0phY29iaWFuAE0RZzFtX2JhdGNoVG9BZmZpbmUAYhNnMW1fYmF0Y2hUb0phY29iaWFuAG0LZzFtX2luQ3VydmUAYRFnMW1faW5DdXJ2ZUFmZmluZQBgF2ZybV9fcmV2ZXJzZVBlcm11dGF0aW9uAHkHZnJtX2ZmdAB9CGZybV9pZmZ0AH4KZnJtX3Jhd2ZmdAB7C2ZybV9mZnRKb2luAH8OZnJtX2ZmdEpvaW5FeHQAgAERZnJtX2ZmdEpvaW5FeHRJbnYAgQEKZnJtX2ZmdE1peACCAQxmcm1fZmZ0RmluYWwAgwEdZnJtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24AhAEIcG9sX3plcm8AhQEPcG9sX2NvbnN0cnVjdExDAIYBDHFhcF9idWlsZEFCQwCHAQtxYXBfam9pbkFCQwCIAQxxYXBfYmF0Y2hBZGQAiQEKZjJtX2lzWmVybwCKAQlmMm1faXNPbmUAiwEIZjJtX3plcm8AjAEHZjJtX29uZQCNAQhmMm1fY29weQCOAQdmMm1fbXVsAI8BCGYybV9tdWwxAJABCmYybV9zcXVhcmUAkQEHZjJtX2FkZACSAQdmMm1fc3ViAJMBB2YybV9uZWcAlAEIZjJtX3NpZ24AmwENZjJtX2Nvbmp1Z2F0ZQCVARJmMm1fZnJvbU1vbnRnb21lcnkAlwEQZjJtX3RvTW9udGdvbWVyeQCWAQZmMm1fZXEAmAELZjJtX2ludmVyc2UAmQEHZjJtX2V4cACeAQ9mMm1fdGltZXNTY2FsYXIAmgEQZjJtX2JhdGNoSW52ZXJzZQCdAQhmMm1fc3FydACfAQxmMm1faXNTcXVhcmUAoAEOZjJtX2lzTmVnYXRpdmUAnAEMZzJtX211bHRpZXhwAMsBEmcybV9tdWx0aWV4cF9jaHVuawDKARJnMm1fbXVsdGlleHBBZmZpbmUAzwEYZzJtX211bHRpZXhwQWZmaW5lX2NodW5rAM4BCmcybV9pc1plcm8AogEQZzJtX2lzWmVyb0FmZmluZQChAQZnMm1fZXEAqgELZzJtX2VxTWl4ZWQAqQEMZzJtX2VxQWZmaW5lAKgBCGcybV9jb3B5AKYBDmcybV9jb3B5QWZmaW5lAKUBCGcybV96ZXJvAKQBDmcybV96ZXJvQWZmaW5lAKMBCmcybV9kb3VibGUArAEQZzJtX2RvdWJsZUFmZmluZQCrAQdnMm1fYWRkAK8BDGcybV9hZGRNaXhlZACuAQ1nMm1fYWRkQWZmaW5lAK0BB2cybV9uZWcAsQENZzJtX25lZ0FmZmluZQCwAQdnMm1fc3ViALQBDGcybV9zdWJNaXhlZACzAQ1nMm1fc3ViQWZmaW5lALIBEmcybV9mcm9tTW9udGdvbWVyeQC2ARhnMm1fZnJvbU1vbnRnb21lcnlBZmZpbmUAtQEQZzJtX3RvTW9udGdvbWVyeQC4ARZnMm1fdG9Nb250Z29tZXJ5QWZmaW5lALcBD2cybV90aW1lc1NjYWxhcgDQARVnMm1fdGltZXNTY2FsYXJBZmZpbmUA0QENZzJtX25vcm1hbGl6ZQC9AQpnMm1fTEVNdG9VAL8BCmcybV9MRU10b0MAwAEKZzJtX1V0b0xFTQDBAQpnMm1fQ3RvTEVNAMIBD2cybV9iYXRjaExFTXRvVQDDAQ9nMm1fYmF0Y2hMRU10b0MAxAEPZzJtX2JhdGNoVXRvTEVNAMUBD2cybV9iYXRjaEN0b0xFTQDGAQxnMm1fdG9BZmZpbmUAuQEOZzJtX3RvSmFjb2JpYW4ApwERZzJtX2JhdGNoVG9BZmZpbmUAvAETZzJtX2JhdGNoVG9KYWNvYmlhbgDHAQtnMm1faW5DdXJ2ZQC7ARFnMm1faW5DdXJ2ZUFmZmluZQC6AQtnMW1fdGltZXNGcgDSARdnMW1fX3JldmVyc2VQZXJtdXRhdGlvbgDUAQdnMW1fZmZ0ANgBCGcxbV9pZmZ0ANkBCmcxbV9yYXdmZnQA1gELZzFtX2ZmdEpvaW4A2gEOZzFtX2ZmdEpvaW5FeHQA2wERZzFtX2ZmdEpvaW5FeHRJbnYA3AEKZzFtX2ZmdE1peADdAQxnMW1fZmZ0RmluYWwA3gEdZzFtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24A3wELZzJtX3RpbWVzRnIA4AEXZzJtX19yZXZlcnNlUGVybXV0YXRpb24A4gEHZzJtX2ZmdADmAQhnMm1faWZmdADnAQpnMm1fcmF3ZmZ0AOQBC2cybV9mZnRKb2luAOgBDmcybV9mZnRKb2luRXh0AOkBEWcybV9mZnRKb2luRXh0SW52AOoBCmcybV9mZnRNaXgA6wEMZzJtX2ZmdEZpbmFsAOwBHWcybV9wcmVwYXJlTGFncmFuZ2VFdmFsdWF0aW9uAO0BEWcxbV90aW1lc0ZyQWZmaW5lAO4BEWcybV90aW1lc0ZyQWZmaW5lAO8BEWZybV9iYXRjaEFwcGx5S2V5APABEWcxbV9iYXRjaEFwcGx5S2V5APEBFmcxbV9iYXRjaEFwcGx5S2V5TWl4ZWQA8gERZzJtX2JhdGNoQXBwbHlLZXkA8wEWZzJtX2JhdGNoQXBwbHlLZXlNaXhlZAD0AQpmNm1faXNaZXJvAPYBCWY2bV9pc09uZQD3AQhmNm1femVybwD4AQdmNm1fb25lAPkBCGY2bV9jb3B5APoBB2Y2bV9tdWwA+wEKZjZtX3NxdWFyZQD8AQdmNm1fYWRkAP0BB2Y2bV9zdWIA/gEHZjZtX25lZwD/AQhmNm1fc2lnbgCAAhJmNm1fZnJvbU1vbnRnb21lcnkAggIQZjZtX3RvTW9udGdvbWVyeQCBAgZmNm1fZXEAgwILZjZtX2ludmVyc2UAhAIHZjZtX2V4cACIAg9mNm1fdGltZXNTY2FsYXIAhQIQZjZtX2JhdGNoSW52ZXJzZQCHAg5mNm1faXNOZWdhdGl2ZQCGAgpmdG1faXNaZXJvAIoCCWZ0bV9pc09uZQCLAghmdG1femVybwCMAgdmdG1fb25lAI0CCGZ0bV9jb3B5AI4CB2Z0bV9tdWwAjwIIZnRtX211bDEAkAIKZnRtX3NxdWFyZQCRAgdmdG1fYWRkAJICB2Z0bV9zdWIAkwIHZnRtX25lZwCUAghmdG1fc2lnbgCbAg1mdG1fY29uanVnYXRlAJUCEmZ0bV9mcm9tTW9udGdvbWVyeQCXAhBmdG1fdG9Nb250Z29tZXJ5AJYCBmZ0bV9lcQCYAgtmdG1faW52ZXJzZQCZAgdmdG1fZXhwAJ4CD2Z0bV90aW1lc1NjYWxhcgCaAhBmdG1fYmF0Y2hJbnZlcnNlAJ0CCGZ0bV9zcXJ0AJ8CDGZ0bV9pc1NxdWFyZQCgAg5mdG1faXNOZWdhdGl2ZQCcAhRibjEyOF9fZnJvYmVuaXVzTWFwMACpAhRibjEyOF9fZnJvYmVuaXVzTWFwMQCqAhRibjEyOF9fZnJvYmVuaXVzTWFwMgCrAhRibjEyOF9fZnJvYmVuaXVzTWFwMwCsAhRibjEyOF9fZnJvYmVuaXVzTWFwNACtAhRibjEyOF9fZnJvYmVuaXVzTWFwNQCuAhRibjEyOF9fZnJvYmVuaXVzTWFwNgCvAhRibjEyOF9fZnJvYmVuaXVzTWFwNwCwAhRibjEyOF9fZnJvYmVuaXVzTWFwOACxAhRibjEyOF9fZnJvYmVuaXVzTWFwOQCyAhBibjEyOF9wYWlyaW5nRXExALkCEGJuMTI4X3BhaXJpbmdFcTIAugIQYm4xMjhfcGFpcmluZ0VxMwC7AhBibjEyOF9wYWlyaW5nRXE0ALwCEGJuMTI4X3BhaXJpbmdFcTUAvQINYm4xMjhfcGFpcmluZwC+Ag9ibjEyOF9wcmVwYXJlRzEAowIPYm4xMjhfcHJlcGFyZUcyAKUCEGJuMTI4X21pbGxlckxvb3AAqAIZYm4xMjhfZmluYWxFeHBvbmVudGlhdGlvbgC4AhxibjEyOF9maW5hbEV4cG9uZW50aWF0aW9uT2xkALMCD2JuMTI4X19tdWxCeTAyNACmAhJibjEyOF9fbXVsQnkwMjRPbGQApwIXYm4xMjhfX2N5Y2xvdG9taWNTcXVhcmUAtQIXYm4xMjhfX2N5Y2xvdG9taWNFeHBfdzAAtgIKgfcDvwIqACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxgLHgAgAEIANwMAIABCADcDCCAAQgA3AxAgAEIANwMYCzMAIAApAxhQBEAgACkDEFAEQCAAKQMIUARAIAApAwBQDwVBAA8LBUEADwsFQQAPC0EADwseACAAQgE3AwAgAEIANwMIIABCADcDECAAQgA3AxgLRwAgACkDGCABKQMYUQRAIAApAxAgASkDEFEEQCAAKQMIIAEpAwhRBEAgACkDACABKQMAUQ8FQQAPCwVBAA8LBUEADwtBAA8LfQAgACkDGCABKQMYVARAQQAPBSAAKQMYIAEpAxhWBEBBAQ8FIAApAxAgASkDEFQEQEEADwUgACkDECABKQMQVgRAQQEPBSAAKQMIIAEpAwhUBEBBAA8FIAApAwggASkDCFYEQEEBDwUgACkDACABKQMAWg8LCwsLCwtBAA8L1AEBAX4gADUCACABNQIAfCEDIAIgAz4CACAANQIEIAE1AgR8IANCIIh8IQMgAiADPgIEIAA1AgggATUCCHwgA0IgiHwhAyACIAM+AgggADUCDCABNQIMfCADQiCIfCEDIAIgAz4CDCAANQIQIAE1AhB8IANCIIh8IQMgAiADPgIQIAA1AhQgATUCFHwgA0IgiHwhAyACIAM+AhQgADUCGCABNQIYfCADQiCIfCEDIAIgAz4CGCAANQIcIAE1Ahx8IANCIIh8IQMgAiADPgIcIANCIIinC4wCAQF+IAA1AgAgATUCAH0hAyACIANC/////w+DPgIAIAA1AgQgATUCBH0gA0Igh3whAyACIANC/////w+DPgIEIAA1AgggATUCCH0gA0Igh3whAyACIANC/////w+DPgIIIAA1AgwgATUCDH0gA0Igh3whAyACIANC/////w+DPgIMIAA1AhAgATUCEH0gA0Igh3whAyACIANC/////w+DPgIQIAA1AhQgATUCFH0gA0Igh3whAyACIANC/////w+DPgIUIAA1AhggATUCGH0gA0Igh3whAyACIANC/////w+DPgIYIAA1AhwgATUCHH0gA0Igh3whAyACIANC/////w+DPgIcIANCIIenC48QEgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfiADQv////8PgyAANQIAIgUgATUCACIGfnwhAyAEIANCIIh8IQQgAiADPgIAIARCIIghAyAEQv////8PgyAFIAE1AgQiCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AgQiByAGfnwhBCADIARCIIh8IQMgAiAEPgIEIANCIIghBCADQv////8PgyAFIAE1AggiCn58IQMgBCADQiCIfCEEIANC/////w+DIAcgCH58IQMgBCADQiCIfCEEIANC/////w+DIAA1AggiCSAGfnwhAyAEIANCIIh8IQQgAiADPgIIIARCIIghAyAEQv////8PgyAFIAE1AgwiDH58IQQgAyAEQiCIfCEDIARC/////w+DIAcgCn58IQQgAyAEQiCIfCEDIARC/////w+DIAkgCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AgwiCyAGfnwhBCADIARCIIh8IQMgAiAEPgIMIANCIIghBCADQv////8PgyAFIAE1AhAiDn58IQMgBCADQiCIfCEEIANC/////w+DIAcgDH58IQMgBCADQiCIfCEEIANC/////w+DIAkgCn58IQMgBCADQiCIfCEEIANC/////w+DIAsgCH58IQMgBCADQiCIfCEEIANC/////w+DIAA1AhAiDSAGfnwhAyAEIANCIIh8IQQgAiADPgIQIARCIIghAyAEQv////8PgyAFIAE1AhQiEH58IQQgAyAEQiCIfCEDIARC/////w+DIAcgDn58IQQgAyAEQiCIfCEDIARC/////w+DIAkgDH58IQQgAyAEQiCIfCEDIARC/////w+DIAsgCn58IQQgAyAEQiCIfCEDIARC/////w+DIA0gCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AhQiDyAGfnwhBCADIARCIIh8IQMgAiAEPgIUIANCIIghBCADQv////8PgyAFIAE1AhgiEn58IQMgBCADQiCIfCEEIANC/////w+DIAcgEH58IQMgBCADQiCIfCEEIANC/////w+DIAkgDn58IQMgBCADQiCIfCEEIANC/////w+DIAsgDH58IQMgBCADQiCIfCEEIANC/////w+DIA0gCn58IQMgBCADQiCIfCEEIANC/////w+DIA8gCH58IQMgBCADQiCIfCEEIANC/////w+DIAA1AhgiESAGfnwhAyAEIANCIIh8IQQgAiADPgIYIARCIIghAyAEQv////8PgyAFIAE1AhwiFH58IQQgAyAEQiCIfCEDIARC/////w+DIAcgEn58IQQgAyAEQiCIfCEDIARC/////w+DIAkgEH58IQQgAyAEQiCIfCEDIARC/////w+DIAsgDn58IQQgAyAEQiCIfCEDIARC/////w+DIA0gDH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gCn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AhwiEyAGfnwhBCADIARCIIh8IQMgAiAEPgIcIANCIIghBCADQv////8PgyAHIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyALIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyANIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAh+fCEDIAQgA0IgiHwhBCACIAM+AiAgBEIgiCEDIARC/////w+DIAkgFH58IQQgAyAEQiCIfCEDIARC/////w+DIAsgEn58IQQgAyAEQiCIfCEDIARC/////w+DIA0gEH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gDn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgDH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgCn58IQQgAyAEQiCIfCEDIAIgBD4CJCADQiCIIQQgA0L/////D4MgCyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSASfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgESAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAMfnwhAyAEIANCIIh8IQQgAiADPgIoIARCIIghAyAEQv////8PgyANIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIA5+fCEEIAMgBEIgiHwhAyACIAQ+AiwgA0IgiCEEIANC/////w+DIA8gFH58IQMgBCADQiCIfCEEIANC/////w+DIBEgEn58IQMgBCADQiCIfCEEIANC/////w+DIBMgEH58IQMgBCADQiCIfCEEIAIgAz4CMCAEQiCIIQMgBEL/////D4MgESAUfnwhBCADIARCIIh8IQMgBEL/////D4MgEyASfnwhBCADIARCIIh8IQMgAiAEPgI0IANCIIghBCADQv////8PgyATIBR+fCEDIAQgA0IgiHwhBCACIAM+AjggBEIgiCEDIAIgBD4CPAuMEgwBfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX5CACECQgAhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAANQIAIgYgBn58IQIgAyACQiCIfCEDIAEgAj4CACADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIEIgd+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIEIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AggiCH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAcgB358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCDCIJfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CDCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIQIgp+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAl+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAIIAh+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIQIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhQiC358IQIgAyACQiCIfCEDIAJC/////w+DIAcgCn58IQIgAyACQiCIfCEDIAJC/////w+DIAggCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCGCIMfnwhAiADIAJCIIh8IQMgAkL/////D4MgByALfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAKfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgCSAJfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CGCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIcIg1+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIcIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAHIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAKIAp+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIgIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAIIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAKIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIkIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAJIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAKIAx+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyALIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIoIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAKIA1+fCECIAMgAkIgiHwhAyACQv////8PgyALIAx+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIsIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyALIA1+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAMIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIwIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAMIA1+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgI0IAMhBCAEQiCIIQVCACECQgAhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyANIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgI4IAMhBCAEQiCIIQUgASAEPgI8CwoAIAAgACABEAgLtgEBAX4gADUAACABfiEDIAIgAz4AACAANQAEIAF+IANCIIh8IQMgAiADPgAEIAA1AAggAX4gA0IgiHwhAyACIAM+AAggADUADCABfiADQiCIfCEDIAIgAz4ADCAANQAQIAF+IANCIIh8IQMgAiADPgAQIAA1ABQgAX4gA0IgiHwhAyACIAM+ABQgADUAGCABfiADQiCIfCEDIAIgAz4AGCAANQAcIAF+IANCIIh8IQMgAiADPgAcC04CAX4BfyAAIQMgAzUAACABfCECIAMgAj4AACACQiCIIQICQANAIAJQDQEgA0EEaiEDIAM1AAAgAnwhAiADIAI+AAAg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BkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0KJx5mkDn5C/////w+DIQQgDyAEQsf688MNfnwhBiAGQiCIIQUgECAEQpaYguEDfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCjZXHwwZ+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBEKR1YW8CX58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCCCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9CiceZpA5+Qv////8PgyEEIA8gBELH+vPDDX58IQYgBkIgiCEFIBAgBEKWmILhA358IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQo2Vx8MGfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCkdWFvAl+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AgwhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQonHmaQOfkL/////D4MhBCAPIARCx/rzww1+fCEGIAZCIIghBSAQIARClpiC4QN+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKNlcfDBn58IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQpHVhbwJfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIQIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0KJx5mkDn5C/////w+DIQQgDyAEQsf688MNfnwhBiAGQiCIIQUgECAEQpaYguEDfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCjZXHwwZ+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBEKR1YW8CX58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCFCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9CiceZpA5+Qv////8PgyEEIA8gBELH+vPDDX58IQYgBkIgiCEFIBAgBEKWmILhA358IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQo2Vx8MGfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCkdWFvAl+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AhghAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQonHmaQOfkL/////D4MhBCAPIARCx/rzww1+fCEGIAZCIIghBSAQIARClpiC4QN+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKNlcfDBn58IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQpHVhbwJfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIcIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0KJx5mkDn5C/////w+DIQQgDyAEQsf688MNfnwhBiAGQiCIIQUgECAEQpaYguEDfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCjZXHwwZ+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBEKR1YW8CX58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgAiAPPgIAIAIgED4CBCACIBE+AgggAiASPgIMIAIgEz4CECACIBQ+AhQgAiAVPgIYIAIgFj4CHCACQegDEAUEQCACQegDIAIQBxoLC8skFgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+IAA1AgAhBiAANQIEIQcgADUCCCEIIAA1AgwhCSAANQIQIQogADUCFCELIAA1AhghDCAANQIcIQ0gDiAGIAZ+fCEEIARC/////w+DIQ4gBEIgiCEDIAcgBn4hBSAPIAVC/////w+DQgGGfCADfCEEIARC/////w+DIQ8gBEIgiCAFQiCIQgGGfCEDIAggBn4hBSAQIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRAgBEIgiCAFQiCIQgGGfCEDIAkgBn4hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogBn4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgBn4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgBn4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gBn4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgDyAHIAd+fCEEIARC/////w+DIQ8gBEIgiCEDIAggB34hBSAQIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRAgBEIgiCAFQiCIQgGGfCEDIAkgB34hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogB34hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgB34hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgB34hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gB34hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgECAIIAh+fCEEIARC/////w+DIRAgBEIgiCEDIAkgCH4hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogCH4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgCH4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCH4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgESAJIAl+fCEEIARC/////w+DIREgBEIgiCEDIAogCX4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgCX4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCX4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCX4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgEiAKIAp+fCEEIARC/////w+DIRIgBEIgiCEDIAsgCn4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCn4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCn4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgEyALIAt+fCEEIARC/////w+DIRMgBEIgiCEDIAwgC34hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gC34hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgFCAMIAx+fCEEIARC/////w+DIRQgBEIgiCEDIA0gDH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgFSANIA1+fCEEIARC/////w+DIRUgBEIgiCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgASAOPgIAIAEgDz4CBCABIBA+AgggASARPgIMIAEgEj4CECABIBM+AhQgASAUPgIYIAEgFT4CHCAWpwRAIAFB6AMgARAHGgUgAUHoAxAFBEAgAUHoAyABEAcaCwsLCgAgACAAIAEQFAsLACAAQYgEIAEQFAsVACAAQYgKEABBqAoQAUGICiABEBMLEQAgAEHIChAYQcgKQYgFEAULJAAgABACBEBBAA8LIABB6AoQGEHoCkGIBRAFBEBBfw8LQQEPCxcAIAAgARAYIAFB6AMgARAOIAEgARAXCwkAQagEIAAQAAvLAQQBfwF/AX8BfyACEAFBICEFIAAhAwJAA0AgBSABSw0BIAVBIEYEQEGICxAcBUGIC0GIBEGICxAUCyADQYgLQagLEBQgAkGoCyACEBAgA0EgaiEDIAVBIGohBQwACwsgAUEgcCEEIARFBEAPC0GoCxABQQAhBgJAA0AgBiAERg0BIAYgAy0AADoAqAsgA0EBaiEDIAZBAWohBgwACwsgBUEgRgRAQYgLEBwFQYgLQYgEQYgLEBQLQagLQYgLQagLEBQgAkGoCyACEBALHAAgASACQcgLEB1ByAtByAsQFyAAQcgLIAMQFAv4AQQBfwF/AX8Bf0EAKAIAIQVBACAFIAJBAWpBIGxqNgIAIAUQHCAAIQYgBUEgaiEFQQAhCAJAA0AgCCACRg0BIAYQAgRA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IIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9C/////w5+Qv////8PgyEEIA8gBEKBgICAD358IQYgBkIgiCEFIBAgBEKT64efBH58IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQpHh5c0HfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCyNDPwQJ+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AgQhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQv////8OfkL/////D4MhBCAPIARCgYCAgA9+fCEGIAZCIIghBSAQIARCk+uHnwR+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKR4eXNB358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQsjQz8ECfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIIIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////Dn5C/////w+DIQQgDyAEQoGAgIAPfnwhBiAGQiCIIQUgECAEQpPrh58EfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCkeHlzQd+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBELI0M/BAn58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCDCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9C/////w5+Qv////8PgyEEIA8gBEKBgICAD358IQYgBkIgiCEFIBAgBEKT64efBH58IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQpHh5c0HfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCyNDPwQJ+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AhAhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQv////8OfkL/////D4MhBCAPIARCgYCAgA9+fCEGIAZCIIghBSAQIARCk+uHnwR+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKR4eXNB358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQsjQz8ECfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIUIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////Dn5C/////w+DIQQgDyAEQoGAgIAPfnwhBiAGQiCIIQUgECAEQpPrh58EfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCkeHlzQd+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBELI0M/BAn58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCGCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9C/////w5+Qv////8PgyEEIA8gBEKBgICAD358IQYgBkIgiCEFIBAgBEKT64efBH58IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQpHh5c0HfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCyNDPwQJ+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AhwhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQv////8OfkL/////D4MhBCAPIARCgYCAgA9+fCEGIAZCIIghBSAQIARCk+uHnwR+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKR4eXNB358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQsjQz8ECfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiACIA8+AgAgAiAQPgIEIAIgET4CCCACIBI+AgwgAiATPgIQIAIgFD4CFCACIBU+AhggAiAWPgIcIAJB6A0QBQRAIAJB6A0gAhAHGgsLyyQWAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4gADUCACEGIAA1AgQhByAANQIIIQggADUCDCEJIAA1AhAhCiAANQIUIQsgADUCGCEMIAA1AhwhDSAOIAYgBn58IQQgBEL/////D4MhDiAEQiCIIQMgByAGfiEFIA8gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhDyAEQiCIIAVCIIhCAYZ8IQMgCCAGfiEFIBAgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhECAEQiCIIAVCIIhCAYZ8IQMgCSAGfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAGfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAGfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAGfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAGfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAPIAcgB358IQQgBEL/////D4MhDyAEQiCIIQMgCCAHfiEFIBAgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhECAEQiCIIAVCIIhCAYZ8IQMgCSAHfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAHfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAHfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAHfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAHfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAQIAggCH58IQQgBEL/////D4MhECAEQiCIIQMgCSAIfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAIfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAIfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAIfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAIfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyARIAkgCX58IQQgBEL/////D4MhESAEQiCIIQMgCiAJfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAJfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAJfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAJfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyASIAogCn58IQQgBEL/////D4MhEiAEQiCIIQMgCyAKfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAKfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAKfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyATIAsgC358IQQgBEL/////D4MhEyAEQiCIIQMgDCALfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSALfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAUIAwgDH58IQQgBEL/////D4MhFCAEQiCIIQMgDSAMfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAVIA0gDX58IQQgBEL/////D4MhFSAEQiCIIQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUg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IABBIGoQAQsVACAAEAEgAEEgahAcIABBwABqEAELUgAgASAAKQMANwMAIAEgACkDCDcDCCABIAApAxA3AxAgASAAKQMYNwMYIAEgACkDIDcDICABIAApAyg3AyggASAAKQMwNwMwIAEgACkDODcDOAt6ACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggASAAKQMgNwMgIAEgACkDKDcDKCABIAApAzA3AzAgASAAKQM4NwM4IAEgACkDQDcDQCABIAApA0g3A0ggASAAKQNQNwNQIAEgACkDWDcDWAsoACAAEEcEQCABEEoFIAFBwABqEBwgAEEgaiABQSBqEAAgACABEAALCxgBAX8gACABEAQgAEEgaiABQSBqEARxDwt1AQF/IABBwABqIQIgABBIBEAgARBHDwsgARBHBEBBAA8LIAIQDwRAIAAgARBODwsgAkGoGBAVIAFBqBhByBgQFCACQagYQegYEBQgAUEgakHoGEGIGRAUIABByBgQBARAIABBIGpBiBkQBARAQQEPCwtBAA8LtAECAX8BfyAAQcAAaiECIAFBwABqIQMgABBIBEAgARBIDwsgARBIBEBBAA8LIAIQDwRAIAEgABBPDwsgAxAPBEAgACABEE8PCyACQagZEBUgA0HIGRAVIABByBlB6BkQFCABQagZQYgaEBQgAkGoGUGoGhAUIANByBlByBoQFCAAQSBqQcgaQegaEBQgAUEgakGoGkGIGxAUQegZQYgaEAQEQEHoGkGIGxAEBEBBAQ8LC0EADwvoAQAgABBHBEAgACABEE0PCyAAQagbEBUgAEEgakHIGxAVQcgbQegbEBUgAEHIG0GIHBAQQYgcQYgcEBVBiBxBqBtBiBwQEUGIHEHoG0GIHBARQYgcQYgcQYgcEBBBqBtBqBtBqBwQEEGoHEGoG0GoHBAQIABBIGogAEEgaiABQcAAahAQQagcIAEQFSABQYgcIAEQESABQYgcIAEQEUHoG0HoG0HIHBAQQcgcQcgcQcgcEBBByBxByBxByBwQEEGIHCABIAFBIGoQESABQSBqQagcIAFBIGoQFCABQSBqQcgcIAFBIGoQEQuJAgAgABBIBEAgACABEEwPCyAAQcAAahAPBEAgACABEFEPDwsgAEHoHBAVIABBIGpBiB0QFUGIHUGoHRAVIABB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TwRAIAVBEGshBSADQcjcACADEI8BCyADIAMQkQEgBUEITwRAIAVBCGshBSADQcjcACADEI8BCyADIAMQkQEgBUEETwRAIAVBBGshBSADQcjcACADEI8BCyADIAMQkQEgBUECTwRAIAVBAmshBSADQcjcACADEI8BCyADIAMQkQEgBUEBTwRAIAVBAWshBSADQcjcACADEI8BCyAERQ0BDAALCwvNAQBBiN8AEI0BQYjfAEGI3wAQlAEgAEGI3QBBIEHI3QAQngFByN0AQYjeABCRASAAQYjeAEGI3gAQjwFBiN4AQcjeABCVAUHI3gBBiN4AQcjeABCPAUHI3gBBiN8AEJgBBEAAC0HI3QAgAEHI3wAQjwFBiN4AQYjfABCYAQRAQYjfABABQajfABAcQYjfAEHI3wAgARCPAQVBiOAAEI0BQYjgAEGI3gBBiOAAEJIBQYjgAEGo3QBBIEGI4AAQngFBiOAAQcjfACABEI8BCwtpAEGo4gAQjQFBqOIAQajiABCUASAAQcjgAEEgQejgABCeAUHo4ABBqOEAEJEBIABBqOEAQajhABCPAUGo4QBB6OEAEJUBQejhAEGo4QBB6OEAEI8BQejhAEGo4gAQmAEEQEEADwtBAQ8LEQAgABCKASAAQcAAahCKAXELCwAgAEGAAWoQigELEAAgABCMASAAQcAAahCMAQsZACAAEIwBIABBwABqEI0BIABBgAFqEIwBC6IBACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggASAAKQMgNwMgIAEgACkDKDcDKCABIAApAzA3AzAgASAAKQM4NwM4IAEgACkDQDcDQCABIAApA0g3A0ggASAAKQNQNwNQIAEgACkDWDcDWCABIAApA2A3A2AgASAAKQNoNwNoIAEgACkDcDcDcCABIAApA3g3A3gLggIAIAEgACkDADcDACABIAApAwg3AwggASAAKQMQNwMQIAEgACkDGDcDGCABIAApAyA3AyAgASAAKQMoNwMoIAEgACkDMDcDMCABIAApAzg3AzggASAAKQNANwNAIAEgACkDSDcDSCABIAApA1A3A1AgASAAKQNYNwNYIAEgACkDYDcDYCABIAApA2g3A2ggASAAKQNwNwNwIAEgACkDeDcDeCABIAApA4ABNwOAASABIAApA4gBNwOI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IAEQjwEgAEHAAGogAUHAAGoQACAAQeAAaiABQeAAahASIAFBwABqQdCIBCABQcAAahCPASAAQYABaiABQYABahAAIABBoAFqIAFBoAFqEBIgAUGAAWpBkIkEIAFBgAFqEI8BIABBwAFqIAFBwAFqEAAgAEHgAWogAUHgAWoQEiABQcABakHQiQQgAUHAAWoQjwEgAEGAAmogAUGAAmoQACAAQaACaiABQaACahASIAFBgAJqQZCKBCABQYACahCPASAAQcACaiABQcACahAAIABB4AJqIAFB4AJqEBIgAUHAAmpB0IoEIAFBwAJqEI8BC2wAIABBkIsEIAEQjwEgAEHAAGpB0IsEIAFBwABqEI8BIABBgAFqQZCMBCABQYABahCPASAAQcABakHQjAQgAUHAAWoQjwEgAEGAAmpBkI0EIAFBgAJqEI8BIABBwAJqQdCNBCABQcACahCPAQuKAgAgACABEAAgAEEgaiABQSBqEBIgAUGQjgQgARCPASAAQcAAaiABQcAAahAAIABB4ABqIAFB4ABqEBIgAUHAAGpB0I4EIAFBwABqEI8BIABBgAFqIAFBgAFqEAAgAEGgAWogAUGgAWoQEiABQYABakGQjwQgAUGAAWoQjwEgAEHAAWogAUHAAWoQACAAQeABaiABQeABahASIAFBwAFqQdCPBCABQcABahCPASAAQYACaiABQYACahAAIABBoAJqIAFBoAJqEBIgAUGAAmpBkJAEIAFBgAJqEI8BIABBwAJqIAFBwAJqEAAgAEHgAmogAUHgAmoQEiABQcACakHQkAQgAUHAAmoQjwELbAAgAEGQkQQgARCPASAAQcAAakHQkQQgAUHAAGoQjwEgAEGAAWpBkJIEIAFBgAFqEI8BIABBwAFqQdCSBCABQcABahCPASAAQYACakGQkwQgAUGAAmoQjwEgAEHAAmpB0JMEIAFBwAJqEI8BC4oCACAAIAEQACAAQSBqIAFBIGoQEiABQZCUBCABEI8BIABBwABqIAFBwABqEAAgAEHgAGogAUHgAGoQEiABQcAAakHQlAQgAUHAAGoQjwEgAEGAAWogAUGAAWoQACAAQaABaiABQaABahASIAFBgAFqQZCVBCABQYABahCPASAAQcABaiABQcABahAAIABB4AFqIAFB4AFqEBIgAUHAAWpB0JUEIAFBwAFqEI8BIABBgAJqIAFBgAJqEAAgAEGgAmogAUGgAmoQEiABQYACakGQlgQgAUGAAmoQjwEgAEHAAmogAUHAAmoQACAAQeACaiABQeACahASIAFBwAJqQdCWBCABQcACahCPAQtsACAAQZCXBCABEI8BIABBwABqQdCXBCABQcAAahCPASAAQYABakGQmAQgAUGAAWoQjwEgAEHAAWpB0JgEIAFBwAFqEI8BIABBgAJqQZCZBCABQYACahCPASAAQcACakHQmQQgAUHAAmoQjwELigIAIAAgARAAIABBIGogAUEgahASIAFBkJoEIAEQjwEgAEHAAGogAUHAAGoQACAAQeAAaiABQeAAahASIAFBwABqQdCaBCABQcAAahCPASAAQYABaiABQYABahAAIABBoAFqIAFBoAFqEBIgAUGAAWpBkJsEIAFBgAFqEI8BIABBwAFqIAFBwAFqEAAgAEHgAWogAUHgAWoQEiABQcABakHQmwQgAUHAAWoQjwEgAEGAAmogAUGAAmoQACAAQaACaiABQaACahASIAFBgAJqQZCcBCABQYACahCPASAAQcACaiABQcACahAAIABB4AJqIAFB4AJqEBIgAUHAAmpB0JwEIAFBwAJqEI8BC2wAIABBkJ0EIAEQjwEgAEHAAGpB0J0EIAFBwABqEI8BIABBgAFqQZCeBCABQYABahCPASAAQcABakHQngQgAUHAAWoQjwEgAEGAAmpBkJ8EIAFBgAJqEI8BIABBwAJqQdCfBCABQcACahCPAQuKAgAgACABEAAgAEEgaiABQSBqEBIgAUGQoAQgARCPASAAQcAAaiABQcAAahAAIABB4ABqIAFB4ABqEBIgAUHAAGpB0KAEIAFBwABqEI8BIABBgAFqIAFBgAFqEAAgAEGgAWogAUGgAWoQEiABQYABakGQoQQgAUGAAWoQjwEgAEHAAWogAUHAAWoQACAAQeABaiABQeABahASIAFBwAFqQdChBCABQcABahCPASAAQYACaiABQYACahAAIABBoAJqIAFBoAJqEBIgAUGAAmpBkKIEIAFBgAJqEI8BIABBwAJqIAFBwAJqEAAgAEHgAmogAUHgAmoQEiABQcACakHQogQgAUHAAmoQjwELEAAgAEGQowRB4AIgARCeAgtIACAAQfClBBD6ASAAQcABakGwpwQQ/wEgAEHwqAQQmQJB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"; - exports.pq = 488; - exports.pr = 1768; - exports.pG1gen = 32008; - exports.pG1zero = 32104; - exports.pG1b = 3080; - exports.pG2gen = 32200; - exports.pG2zero = 32392; - exports.pG2b = 12648; - exports.pOneT = 32584; - exports.prePSize = 192; - exports.preQSize = 19776; - exports.n8q = 32; - exports.n8r = 32; - exports.q = "21888242871839275222246405745257275088696311157297823662689037894645226208583"; - exports.r = "21888242871839275222246405745257275088548364400416034343698204186575808495617"; - \ No newline at end of file +export const code = "AGFzbQEAAAABlQESYAJ/fwBgAX8AYAF/AX9gAn9/AX9gA39/fwF/YAN/f38AYAN/fn8AYAJ/fgBgBH9/f38AYAV/f39/fwBgBH9/f38Bf2AGf39/f39/AGAIf39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38Bf2AHf39/f39/fwF/YAl/f39/f39/f38Bf2ALf39/f39/f39/f38BfwIPAQNlbnYGbWVtb3J5AgAZA8ECvwIAAQIBAwMEBAUAAAYHCAUCBQUAAAUAAAAAAgIAAQUICQUFBQgICAgAAgIFBQAABQAAAAACAgABBQgJBQUFCAgICAACBQAAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgDAAgIAgAACQsLBQULAAgNCQgCAgEBAAUFAAUFAAAAAAMACAICCQgAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoLDAkKCwwJCAgFAwAICAIAAAkLCwUFCwUDAAgIAgAACQsLBQULBQUJCQkJCQACAgEBAAUABQUAAgAAAwAIAgkIAAICAQEABQUABQUAAAAAAwAIAgIJCAACBQAAAAAICAUAAAAAAAAAAAAAAAAAAAAABA4PEBEFB8UlqwIIaW50X2NvcHkAAAhpbnRfemVybwABB2ludF9vbmUAAwppbnRfaXNaZXJvAAIGaW50X2VxAAQHaW50X2d0ZQAFB2ludF9hZGQABgdpbnRfc3ViAAcHaW50X211bAAICmludF9zcXVhcmUACQ1pbnRfc3F1YXJlT2xkAAoHaW50X2RpdgANDmludF9pbnZlcnNlTW9kAA4IZjFtX2NvcHkAAAhmMW1femVybwABCmYxbV9pc1plcm8AAgZmMW1fZXEABAdmMW1fYWRkABAHZjFtX3N1YgARB2YxbV9uZWcAEg5mMW1faXNOZWdhdGl2ZQAZCWYxbV9pc09uZQAPCGYxbV9zaWduABoLZjFtX21SZWR1Y3QAEwdmMW1fbXVsABQKZjFtX3NxdWFyZQAVDWYxbV9zcXVhcmVPbGQAFhJmMW1fZnJvbU1vbnRnb21lcnkAGBBmMW1fdG9Nb250Z29tZXJ5ABcLZjFtX2ludmVyc2UAGwdmMW1fb25lABwIZjFtX2xvYWQAHQ9mMW1fdGltZXNTY2FsYXIAHgdmMW1fZXhwACYQZjFtX2JhdGNoSW52ZXJzZQAfCGYxbV9zcXJ0ACcMZjFtX2lzU3F1YXJlACgVZjFtX2JhdGNoVG9Nb250Z29tZXJ5ACAXZjFtX2JhdGNoRnJvbU1vbnRnb21lcnkAIQhmcm1fY29weQAACGZybV96ZXJvAAEKZnJtX2lzWmVybwACBmZybV9lcQAEB2ZybV9hZGQAKgdmcm1fc3ViACsHZnJtX25lZwAsDmZybV9pc05lZ2F0aXZlADMJZnJtX2lzT25lACkIZnJtX3NpZ24ANAtmcm1fbVJlZHVjdAAtB2ZybV9tdWwALgpmcm1fc3F1YXJlAC8NZnJtX3NxdWFyZU9sZAAwEmZybV9mcm9tTW9udGdvbWVyeQAyEGZybV90b01vbnRnb21lcnkAMQtmcm1faW52ZXJzZQA1B2ZybV9vbmUANghmcm1fbG9hZAA3D2ZybV90aW1lc1NjYWxhcgA4B2ZybV9leHAAQBBmcm1fYmF0Y2hJbnZlcnNlADkIZnJtX3NxcnQAQQxmcm1faXNTcXVhcmUAQhVmcm1fYmF0Y2hUb01vbnRnb21lcnkAOhdmcm1fYmF0Y2hGcm9tTW9udGdvbWVyeQA7BmZyX2FkZAAqBmZyX3N1YgArBmZyX25lZwAsBmZyX211bABDCWZyX3NxdWFyZQBECmZyX2ludmVyc2UARQ1mcl9pc05lZ2F0aXZlAEYHZnJfY29weQAAB2ZyX3plcm8AAQZmcl9vbmUANglmcl9pc1plcm8AAgVmcl9lcQAEDGcxbV9tdWx0aWV4cABxEmcxbV9tdWx0aWV4cF9jaHVuawBwEmcxbV9tdWx0aWV4cEFmZmluZQB1GGcxbV9tdWx0aWV4cEFmZmluZV9jaHVuawB0CmcxbV9pc1plcm8ASBBnMW1faXNaZXJvQWZmaW5lAEcGZzFtX2VxAFALZzFtX2VxTWl4ZWQATwxnMW1fZXFBZmZpbmUATghnMW1fY29weQBMDmcxbV9jb3B5QWZmaW5lAEsIZzFtX3plcm8ASg5nMW1femVyb0FmZmluZQBJCmcxbV9kb3VibGUAUhBnMW1fZG91YmxlQWZmaW5lAFEHZzFtX2FkZABVDGcxbV9hZGRNaXhlZABUDWcxbV9hZGRBZmZpbmUAUwdnMW1fbmVnAFcNZzFtX25lZ0FmZmluZQBWB2cxbV9zdWIAWgxnMW1fc3ViTWl4ZWQAWQ1nMW1fc3ViQWZmaW5lAFgSZzFtX2Zyb21Nb250Z29tZXJ5AFwYZzFtX2Zyb21Nb250Z29tZXJ5QWZmaW5lAFsQZzFtX3RvTW9udGdvbWVyeQBeFmcxbV90b01vbnRnb21lcnlBZmZpbmUAXQ9nMW1fdGltZXNTY2FsYXIAdhVnMW1fdGltZXNTY2FsYXJBZmZpbmUAdw1nMW1fbm9ybWFsaXplAGMKZzFtX0xFTXRvVQBlCmcxbV9MRU10b0MAZgpnMW1fVXRvTEVNAGcKZzFtX0N0b0xFTQBoD2cxbV9iYXRjaExFTXRvVQBpD2cxbV9iYXRjaExFTXRvQwBqD2cxbV9iYXRjaFV0b0xFTQBrD2cxbV9iYXRjaEN0b0xFTQBsDGcxbV90b0FmZmluZQBfDmcxbV90b0phY29iaWFuAE0RZzFtX2JhdGNoVG9BZmZpbmUAYhNnMW1fYmF0Y2hUb0phY29iaWFuAG0LZzFtX2luQ3VydmUAYRFnMW1faW5DdXJ2ZUFmZmluZQBgF2ZybV9fcmV2ZXJzZVBlcm11dGF0aW9uAHkHZnJtX2ZmdAB9CGZybV9pZmZ0AH4KZnJtX3Jhd2ZmdAB7C2ZybV9mZnRKb2luAH8OZnJtX2ZmdEpvaW5FeHQAgAERZnJtX2ZmdEpvaW5FeHRJbnYAgQEKZnJtX2ZmdE1peACCAQxmcm1fZmZ0RmluYWwAgwEdZnJtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24AhAEIcG9sX3plcm8AhQEPcG9sX2NvbnN0cnVjdExDAIYBDHFhcF9idWlsZEFCQwCHAQtxYXBfam9pbkFCQwCIAQxxYXBfYmF0Y2hBZGQAiQEKZjJtX2lzWmVybwCKAQlmMm1faXNPbmUAiwEIZjJtX3plcm8AjAEHZjJtX29uZQCNAQhmMm1fY29weQCOAQdmMm1fbXVsAI8BCGYybV9tdWwxAJABCmYybV9zcXVhcmUAkQEHZjJtX2FkZACSAQdmMm1fc3ViAJMBB2YybV9uZWcAlAEIZjJtX3NpZ24AmwENZjJtX2Nvbmp1Z2F0ZQCVARJmMm1fZnJvbU1vbnRnb21lcnkAlwEQZjJtX3RvTW9udGdvbWVyeQCWAQZmMm1fZXEAmAELZjJtX2ludmVyc2UAmQEHZjJtX2V4cACeAQ9mMm1fdGltZXNTY2FsYXIAmgEQZjJtX2JhdGNoSW52ZXJzZQCdAQhmMm1fc3FydACfAQxmMm1faXNTcXVhcmUAoAEOZjJtX2lzTmVnYXRpdmUAnAEMZzJtX211bHRpZXhwAMsBEmcybV9tdWx0aWV4cF9jaHVuawDKARJnMm1fbXVsdGlleHBBZmZpbmUAzwEYZzJtX211bHRpZXhwQWZmaW5lX2NodW5rAM4BCmcybV9pc1plcm8AogEQZzJtX2lzWmVyb0FmZmluZQChAQZnMm1fZXEAqgELZzJtX2VxTWl4ZWQAqQEMZzJtX2VxQWZmaW5lAKgBCGcybV9jb3B5AKYBDmcybV9jb3B5QWZmaW5lAKUBCGcybV96ZXJvAKQBDmcybV96ZXJvQWZmaW5lAKMBCmcybV9kb3VibGUArAEQZzJtX2RvdWJsZUFmZmluZQCrAQdnMm1fYWRkAK8BDGcybV9hZGRNaXhlZACuAQ1nMm1fYWRkQWZmaW5lAK0BB2cybV9uZWcAsQENZzJtX25lZ0FmZmluZQCwAQdnMm1fc3ViALQBDGcybV9zdWJNaXhlZACzAQ1nMm1fc3ViQWZmaW5lALIBEmcybV9mcm9tTW9udGdvbWVyeQC2ARhnMm1fZnJvbU1vbnRnb21lcnlBZmZpbmUAtQEQZzJtX3RvTW9udGdvbWVyeQC4ARZnMm1fdG9Nb250Z29tZXJ5QWZmaW5lALcBD2cybV90aW1lc1NjYWxhcgDQARVnMm1fdGltZXNTY2FsYXJBZmZpbmUA0QENZzJtX25vcm1hbGl6ZQC9AQpnMm1fTEVNdG9VAL8BCmcybV9MRU10b0MAwAEKZzJtX1V0b0xFTQDBAQpnMm1fQ3RvTEVNAMIBD2cybV9iYXRjaExFTXRvVQDDAQ9nMm1fYmF0Y2hMRU10b0MAxAEPZzJtX2JhdGNoVXRvTEVNAMUBD2cybV9iYXRjaEN0b0xFTQDGAQxnMm1fdG9BZmZpbmUAuQEOZzJtX3RvSmFjb2JpYW4ApwERZzJtX2JhdGNoVG9BZmZpbmUAvAETZzJtX2JhdGNoVG9KYWNvYmlhbgDHAQtnMm1faW5DdXJ2ZQC7ARFnMm1faW5DdXJ2ZUFmZmluZQC6AQtnMW1fdGltZXNGcgDSARdnMW1fX3JldmVyc2VQZXJtdXRhdGlvbgDUAQdnMW1fZmZ0ANgBCGcxbV9pZmZ0ANkBCmcxbV9yYXdmZnQA1gELZzFtX2ZmdEpvaW4A2gEOZzFtX2ZmdEpvaW5FeHQA2wERZzFtX2ZmdEpvaW5FeHRJbnYA3AEKZzFtX2ZmdE1peADdAQxnMW1fZmZ0RmluYWwA3gEdZzFtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24A3wELZzJtX3RpbWVzRnIA4AEXZzJtX19yZXZlcnNlUGVybXV0YXRpb24A4gEHZzJtX2ZmdADmAQhnMm1faWZmdADnAQpnMm1fcmF3ZmZ0AOQBC2cybV9mZnRKb2luAOgBDmcybV9mZnRKb2luRXh0AOkBEWcybV9mZnRKb2luRXh0SW52AOoBCmcybV9mZnRNaXgA6wEMZzJtX2ZmdEZpbmFsAOwBHWcybV9wcmVwYXJlTGFncmFuZ2VFdmFsdWF0aW9uAO0BEWcxbV90aW1lc0ZyQWZmaW5lAO4BEWcybV90aW1lc0ZyQWZmaW5lAO8BEWZybV9iYXRjaEFwcGx5S2V5APABEWcxbV9iYXRjaEFwcGx5S2V5APEBFmcxbV9iYXRjaEFwcGx5S2V5TWl4ZWQA8gERZzJtX2JhdGNoQXBwbHlLZXkA8wEWZzJtX2JhdGNoQXBwbHlLZXlNaXhlZAD0AQpmNm1faXNaZXJvAPYBCWY2bV9pc09uZQD3AQhmNm1femVybwD4AQdmNm1fb25lAPkBCGY2bV9jb3B5APoBB2Y2bV9tdWwA+wEKZjZtX3NxdWFyZQD8AQdmNm1fYWRkAP0BB2Y2bV9zdWIA/gEHZjZtX25lZwD/AQhmNm1fc2lnbgCAAhJmNm1fZnJvbU1vbnRnb21lcnkAggIQZjZtX3RvTW9udGdvbWVyeQCBAgZmNm1fZXEAgwILZjZtX2ludmVyc2UAhAIHZjZtX2V4cACIAg9mNm1fdGltZXNTY2FsYXIAhQIQZjZtX2JhdGNoSW52ZXJzZQCHAg5mNm1faXNOZWdhdGl2ZQCGAgpmdG1faXNaZXJvAIoCCWZ0bV9pc09uZQCLAghmdG1femVybwCMAgdmdG1fb25lAI0CCGZ0bV9jb3B5AI4CB2Z0bV9tdWwAjwIIZnRtX211bDEAkAIKZnRtX3NxdWFyZQCRAgdmdG1fYWRkAJICB2Z0bV9zdWIAkwIHZnRtX25lZwCUAghmdG1fc2lnbgCbAg1mdG1fY29uanVnYXRlAJUCEmZ0bV9mcm9tTW9udGdvbWVyeQCXAhBmdG1fdG9Nb250Z29tZXJ5AJYCBmZ0bV9lcQCYAgtmdG1faW52ZXJzZQCZAgdmdG1fZXhwAJ4CD2Z0bV90aW1lc1NjYWxhcgCaAhBmdG1fYmF0Y2hJbnZlcnNlAJ0CCGZ0bV9zcXJ0AJ8CDGZ0bV9pc1NxdWFyZQCgAg5mdG1faXNOZWdhdGl2ZQCcAhRibjEyOF9fZnJvYmVuaXVzTWFwMACpAhRibjEyOF9fZnJvYmVuaXVzTWFwMQCqAhRibjEyOF9fZnJvYmVuaXVzTWFwMgCrAhRibjEyOF9fZnJvYmVuaXVzTWFwMwCsAhRibjEyOF9fZnJvYmVuaXVzTWFwNACtAhRibjEyOF9fZnJvYmVuaXVzTWFwNQCuAhRibjEyOF9fZnJvYmVuaXVzTWFwNgCvAhRibjEyOF9fZnJvYmVuaXVzTWFwNwCwAhRibjEyOF9fZnJvYmVuaXVzTWFwOACxAhRibjEyOF9fZnJvYmVuaXVzTWFwOQCyAhBibjEyOF9wYWlyaW5nRXExALkCEGJuMTI4X3BhaXJpbmdFcTIAugIQYm4xMjhfcGFpcmluZ0VxMwC7AhBibjEyOF9wYWlyaW5nRXE0ALwCEGJuMTI4X3BhaXJpbmdFcTUAvQINYm4xMjhfcGFpcmluZwC+Ag9ibjEyOF9wcmVwYXJlRzEAowIPYm4xMjhfcHJlcGFyZUcyAKUCEGJuMTI4X21pbGxlckxvb3AAqAIZYm4xMjhfZmluYWxFeHBvbmVudGlhdGlvbgC4AhxibjEyOF9maW5hbEV4cG9uZW50aWF0aW9uT2xkALMCD2JuMTI4X19tdWxCeTAyNACmAhJibjEyOF9fbXVsQnkwMjRPbGQApwIXYm4xMjhfX2N5Y2xvdG9taWNTcXVhcmUAtQIXYm4xMjhfX2N5Y2xvdG9taWNFeHBfdzAAtgIKgfcDvwIqACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxgLHgAgAEIANwMAIABCADcDCCAAQgA3AxAgAEIANwMYCzMAIAApAxhQBEAgACkDEFAEQCAAKQMIUARAIAApAwBQDwVBAA8LBUEADwsFQQAPC0EADwseACAAQgE3AwAgAEIANwMIIABCADcDECAAQgA3AxgLRwAgACkDGCABKQMYUQRAIAApAxAgASkDEFEEQCAAKQMIIAEpAwhRBEAgACkDACABKQMAUQ8FQQAPCwVBAA8LBUEADwtBAA8LfQAgACkDGCABKQMYVARAQQAPBSAAKQMYIAEpAxhWBEBBAQ8FIAApAxAgASkDEFQEQEEADwUgACkDECABKQMQVgRAQQEPBSAAKQMIIAEpAwhUBEBBAA8FIAApAwggASkDCFYEQEEBDwUgACkDACABKQMAWg8LCwsLCwtBAA8L1AEBAX4gADUCACABNQIAfCEDIAIgAz4CACAANQIEIAE1AgR8IANCIIh8IQMgAiADPgIEIAA1AgggATUCCHwgA0IgiHwhAyACIAM+AgggADUCDCABNQIMfCADQiCIfCEDIAIgAz4CDCAANQIQIAE1AhB8IANCIIh8IQMgAiADPgIQIAA1AhQgATUCFHwgA0IgiHwhAyACIAM+AhQgADUCGCABNQIYfCADQiCIfCEDIAIgAz4CGCAANQIcIAE1Ahx8IANCIIh8IQMgAiADPgIcIANCIIinC4wCAQF+IAA1AgAgATUCAH0hAyACIANC/////w+DPgIAIAA1AgQgATUCBH0gA0Igh3whAyACIANC/////w+DPgIEIAA1AgggATUCCH0gA0Igh3whAyACIANC/////w+DPgIIIAA1AgwgATUCDH0gA0Igh3whAyACIANC/////w+DPgIMIAA1AhAgATUCEH0gA0Igh3whAyACIANC/////w+DPgIQIAA1AhQgATUCFH0gA0Igh3whAyACIANC/////w+DPgIUIAA1AhggATUCGH0gA0Igh3whAyACIANC/////w+DPgIYIAA1AhwgATUCHH0gA0Igh3whAyACIANC/////w+DPgIcIANCIIenC48QEgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfiADQv////8PgyAANQIAIgUgATUCACIGfnwhAyAEIANCIIh8IQQgAiADPgIAIARCIIghAyAEQv////8PgyAFIAE1AgQiCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AgQiByAGfnwhBCADIARCIIh8IQMgAiAEPgIEIANCIIghBCADQv////8PgyAFIAE1AggiCn58IQMgBCADQiCIfCEEIANC/////w+DIAcgCH58IQMgBCADQiCIfCEEIANC/////w+DIAA1AggiCSAGfnwhAyAEIANCIIh8IQQgAiADPgIIIARCIIghAyAEQv////8PgyAFIAE1AgwiDH58IQQgAyAEQiCIfCEDIARC/////w+DIAcgCn58IQQgAyAEQiCIfCEDIARC/////w+DIAkgCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AgwiCyAGfnwhBCADIARCIIh8IQMgAiAEPgIMIANCIIghBCADQv////8PgyAFIAE1AhAiDn58IQMgBCADQiCIfCEEIANC/////w+DIAcgDH58IQMgBCADQiCIfCEEIANC/////w+DIAkgCn58IQMgBCADQiCIfCEEIANC/////w+DIAsgCH58IQMgBCADQiCIfCEEIANC/////w+DIAA1AhAiDSAGfnwhAyAEIANCIIh8IQQgAiADPgIQIARCIIghAyAEQv////8PgyAFIAE1AhQiEH58IQQgAyAEQiCIfCEDIARC/////w+DIAcgDn58IQQgAyAEQiCIfCEDIARC/////w+DIAkgDH58IQQgAyAEQiCIfCEDIARC/////w+DIAsgCn58IQQgAyAEQiCIfCEDIARC/////w+DIA0gCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AhQiDyAGfnwhBCADIARCIIh8IQMgAiAEPgIUIANCIIghBCADQv////8PgyAFIAE1AhgiEn58IQMgBCADQiCIfCEEIANC/////w+DIAcgEH58IQMgBCADQiCIfCEEIANC/////w+DIAkgDn58IQMgBCADQiCIfCEEIANC/////w+DIAsgDH58IQMgBCADQiCIfCEEIANC/////w+DIA0gCn58IQMgBCADQiCIfCEEIANC/////w+DIA8gCH58IQMgBCADQiCIfCEEIANC/////w+DIAA1AhgiESAGfnwhAyAEIANCIIh8IQQgAiADPgIYIARCIIghAyAEQv////8PgyAFIAE1AhwiFH58IQQgAyAEQiCIfCEDIARC/////w+DIAcgEn58IQQgAyAEQiCIfCEDIARC/////w+DIAkgEH58IQQgAyAEQiCIfCEDIARC/////w+DIAsgDn58IQQgAyAEQiCIfCEDIARC/////w+DIA0gDH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gCn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgCH58IQQgAyAEQiCIfCEDIARC/////w+DIAA1AhwiEyAGfnwhBCADIARCIIh8IQMgAiAEPgIcIANCIIghBCADQv////8PgyAHIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAJIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyALIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyANIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIAx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIAp+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAh+fCEDIAQgA0IgiHwhBCACIAM+AiAgBEIgiCEDIARC/////w+DIAkgFH58IQQgAyAEQiCIfCEDIARC/////w+DIAsgEn58IQQgAyAEQiCIfCEDIARC/////w+DIA0gEH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gDn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgDH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgCn58IQQgAyAEQiCIfCEDIAIgBD4CJCADQiCIIQQgA0L/////D4MgCyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSASfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgESAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAMfnwhAyAEIANCIIh8IQQgAiADPgIoIARCIIghAyAEQv////8PgyANIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAPIBJ+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIA5+fCEEIAMgBEIgiHwhAyACIAQ+AiwgA0IgiCEEIANC/////w+DIA8gFH58IQMgBCADQiCIfCEEIANC/////w+DIBEgEn58IQMgBCADQiCIfCEEIANC/////w+DIBMgEH58IQMgBCADQiCIfCEEIAIgAz4CMCAEQiCIIQMgBEL/////D4MgESAUfnwhBCADIARCIIh8IQMgBEL/////D4MgEyASfnwhBCADIARCIIh8IQMgAiAEPgI0IANCIIghBCADQv////8PgyATIBR+fCEDIAQgA0IgiHwhBCACIAM+AjggBEIgiCEDIAIgBD4CPAuMEgwBfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX5CACECQgAhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAANQIAIgYgBn58IQIgAyACQiCIfCEDIAEgAj4CACADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIEIgd+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIEIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AggiCH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAcgB358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCDCIJfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CDCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIQIgp+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAl+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAIIAh+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIQIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhQiC358IQIgAyACQiCIfCEDIAJC/////w+DIAcgCn58IQIgAyACQiCIfCEDIAJC/////w+DIAggCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCGCIMfnwhAiADIAJCIIh8IQMgAkL/////D4MgByALfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAKfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgCSAJfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CGCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIcIg1+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIcIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAHIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAKIAp+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIgIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAIIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAJIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAKIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIkIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAJIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAKIAx+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyALIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIoIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAKIA1+fCECIAMgAkIgiHwhAyACQv////8PgyALIAx+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIsIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyALIA1+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAMIAx+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIwIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAMIA1+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgI0IAMhBCAEQiCIIQVCACECQgAhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyANIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgI4IAMhBCAEQiCIIQUgASAEPgI8CwoAIAAgACABEAgLtgEBAX4gADUAACABfiEDIAIgAz4AACAANQAEIAF+IANCIIh8IQMgAiADPgAEIAA1AAggAX4gA0IgiHwhAyACIAM+AAggADUADCABfiADQiCIfCEDIAIgAz4ADCAANQAQIAF+IANCIIh8IQMgAiADPgAQIAA1ABQgAX4gA0IgiHwhAyACIAM+ABQgADUAGCABfiADQiCIfCEDIAIgAz4AGCAANQAcIAF+IANCIIh8IQMgAiADPgAcC04CAX4BfyAAIQMgAzUAACABfCECIAMgAj4AACACQiCIIQICQANAIAJQDQEgA0EEaiEDIAM1AAAgAnwhAiADIAI+AAAg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BkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0KJx5mkDn5C/////w+DIQQgDyAEQsf688MNfnwhBiAGQiCIIQUgECAEQpaYguEDfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCjZXHwwZ+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBEKR1YW8CX58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCCCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9CiceZpA5+Qv////8PgyEEIA8gBELH+vPDDX58IQYgBkIgiCEFIBAgBEKWmILhA358IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQo2Vx8MGfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCkdWFvAl+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AgwhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQonHmaQOfkL/////D4MhBCAPIARCx/rzww1+fCEGIAZCIIghBSAQIARClpiC4QN+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKNlcfDBn58IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQpHVhbwJfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIQIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0KJx5mkDn5C/////w+DIQQgDyAEQsf688MNfnwhBiAGQiCIIQUgECAEQpaYguEDfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCjZXHwwZ+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBEKR1YW8CX58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCFCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9CiceZpA5+Qv////8PgyEEIA8gBELH+vPDDX58IQYgBkIgiCEFIBAgBEKWmILhA358IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQo2Vx8MGfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCkdWFvAl+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AhghAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQonHmaQOfkL/////D4MhBCAPIARCx/rzww1+fCEGIAZCIIghBSAQIARClpiC4QN+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKNlcfDBn58IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQpHVhbwJfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIcIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0KJx5mkDn5C/////w+DIQQgDyAEQsf688MNfnwhBiAGQiCIIQUgECAEQpaYguEDfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCjZXHwwZ+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBEKR1YW8CX58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgAiAPPgIAIAIgED4CBCACIBE+AgggAiASPgIMIAIgEz4CECACIBQ+AhQgAiAVPgIYIAIgFj4CHCACQegDEAUEQCACQegDIAIQBxoLC8skFgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+IAA1AgAhBiAANQIEIQcgADUCCCEIIAA1AgwhCSAANQIQIQogADUCFCELIAA1AhghDCAANQIcIQ0gDiAGIAZ+fCEEIARC/////w+DIQ4gBEIgiCEDIAcgBn4hBSAPIAVC/////w+DQgGGfCADfCEEIARC/////w+DIQ8gBEIgiCAFQiCIQgGGfCEDIAggBn4hBSAQIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRAgBEIgiCAFQiCIQgGGfCEDIAkgBn4hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogBn4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgBn4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgBn4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gBn4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgDyAHIAd+fCEEIARC/////w+DIQ8gBEIgiCEDIAggB34hBSAQIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRAgBEIgiCAFQiCIQgGGfCEDIAkgB34hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogB34hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgB34hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgB34hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gB34hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgECAIIAh+fCEEIARC/////w+DIRAgBEIgiCEDIAkgCH4hBSARIAVC/////w+DQgGGfCADfCEEIARC/////w+DIREgBEIgiCAFQiCIQgGGfCEDIAogCH4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgCH4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCH4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgESAJIAl+fCEEIARC/////w+DIREgBEIgiCEDIAogCX4hBSASIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRIgBEIgiCAFQiCIQgGGfCEDIAsgCX4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCX4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCX4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgEiAKIAp+fCEEIARC/////w+DIRIgBEIgiCEDIAsgCn4hBSATIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRMgBEIgiCAFQiCIQgGGfCEDIAwgCn4hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gCn4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgEyALIAt+fCEEIARC/////w+DIRMgBEIgiCEDIAwgC34hBSAUIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRQgBEIgiCAFQiCIQgGGfCEDIA0gC34hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgFCAMIAx+fCEEIARC/////w+DIRQgBEIgiCEDIA0gDH4hBSAVIAVC/////w+DQgGGfCADfCEEIARC/////w+DIRUgBEIgiCAFQiCIQgGGfCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgFSANIA1+fCEEIARC/////w+DIRUgBEIgiCEDIBYgA3whBCAEQv////8PgyEWIBcgBEIgiHwhFyAOQonHmaQOfkL/////D4MhAiAOIAJCx/rzww1+fCEEIARCIIghAyAPIAJClpiC4QN+fCADfCEEIARC/////w+DIQ4gBEIgiCEDIBAgAkKNlcfDBn58IAN8IQQgBEL/////D4MhDyAEQiCIIQMgESACQpHVhbwJfnwgA3whBCAEQv////8PgyEQIARCIIghAyASIAJC3bCFjAh+fCADfCEEIARC/////w+DIREgBEIgiCEDIBMgAkK2i8HCC358IAN8IQQgBEL/////D4MhEiAEQiCIIQMgFCACQqnAxokOfnwgA3whBCAEQv////8PgyETIARCIIghAyAVIAJC8pyRgwN+fCADfCEEIARC/////w+DIRQgBEIgiCEDIBYgA3whBCAEQv////8PgyEVIBcgBEIgiHwhFkIAIRcgASAOPgIAIAEgDz4CBCABIBA+AgggASARPgIMIAEgEj4CECABIBM+AhQgASAUPgIYIAEgFT4CHCAWpwRAIAFB6AMgARAHGgUgAUHoAxAFBEAgAUHoAyABEAcaCwsLCgAgACAAIAEQFAsLACAAQYgEIAEQFAsVACAAQYgKEABBqAoQAUGICiABEBMLEQAgAEHIChAYQcgKQYgFEAULJAAgABACBEBBAA8LIABB6AoQGEHoCkGIBRAFBEBBfw8LQQEPCxcAIAAgARAYIAFB6AMgARAOIAEgARAXCwkAQagEIAAQAAvLAQQBfwF/AX8BfyACEAFBICEFIAAhAwJAA0AgBSABSw0BIAVBIEYEQEGICxAcBUGIC0GIBEGICxAUCyADQYgLQagLEBQgAkGoCyACEBAgA0EgaiEDIAVBIGohBQwACwsgAUEgcCEEIARFBEAPC0GoCxABQQAhBgJAA0AgBiAERg0BIAYgAy0AADoAqAsgA0EBaiEDIAZBAWohBgwACwsgBUEgRgRAQYgLEBwFQYgLQYgEQYgLEBQLQagLQYgLQagLEBQgAkGoCyACEBALHAAgASACQcgLEB1ByAtByAsQFyAAQcgLIAMQFAv4AQQBfwF/AX8Bf0EAKAIAIQVBACAFIAJBAWpBIGxqNgIAIAUQHCAAIQYgBUEgaiEFQQAhCAJAA0AgCCACRg0BIAYQAgRA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IIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9C/////w5+Qv////8PgyEEIA8gBEKBgICAD358IQYgBkIgiCEFIBAgBEKT64efBH58IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQpHh5c0HfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCyNDPwQJ+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AgQhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQv////8OfkL/////D4MhBCAPIARCgYCAgA9+fCEGIAZCIIghBSAQIARCk+uHnwR+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKR4eXNB358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQsjQz8ECfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIIIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////Dn5C/////w+DIQQgDyAEQoGAgIAPfnwhBiAGQiCIIQUgECAEQpPrh58EfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCkeHlzQd+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBELI0M/BAn58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCDCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9C/////w5+Qv////8PgyEEIA8gBEKBgICAD358IQYgBkIgiCEFIBAgBEKT64efBH58IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQpHh5c0HfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCyNDPwQJ+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AhAhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQv////8OfkL/////D4MhBCAPIARCgYCAgA9+fCEGIAZCIIghBSAQIARCk+uHnwR+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKR4eXNB358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQsjQz8ECfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiABNQIUIQMgDyAHIAN+fCEGIAZC/////w+DIQ8gBkIgiCEFIBAgCCADfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSARIAkgA358IAV8IQYgBkL/////D4MhESAGQiCIIQUgEiAKIAN+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBMgCyADfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAUIAwgA358IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFSANIAN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBYgDiADfnwgBXwhBiAGQv////8PgyEWIAZCIIghBSAFIRcgD0L/////Dn5C/////w+DIQQgDyAEQoGAgIAPfnwhBiAGQiCIIQUgECAEQpPrh58EfnwgBXwhBiAGQv////8PgyEPIAZCIIghBSARIARCkeHlzQd+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBIgBELI0M/BAn58IAV8IQYgBkL/////D4MhESAGQiCIIQUgEyAEQt2whYwIfnwgBXwhBiAGQv////8PgyESIAZCIIghBSAUIARCtovBwgt+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBUgBEKpwMaJDn58IAV8IQYgBkL/////D4MhFCAGQiCIIQUgFiAEQvKckYMDfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAXIAV8IRYgATUCGCEDIA8gByADfnwhBiAGQv////8PgyEPIAZCIIghBSAQIAggA358IAV8IQYgBkL/////D4MhECAGQiCIIQUgESAJIAN+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBIgCiADfnwgBXwhBiAGQv////8PgyESIAZCIIghBSATIAsgA358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFCAMIAN+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBUgDSADfnwgBXwhBiAGQv////8PgyEVIAZCIIghBSAWIA4gA358IAV8IQYgBkL/////D4MhFiAGQiCIIQUgBSEXIA9C/////w5+Qv////8PgyEEIA8gBEKBgICAD358IQYgBkIgiCEFIBAgBEKT64efBH58IAV8IQYgBkL/////D4MhDyAGQiCIIQUgESAEQpHh5c0HfnwgBXwhBiAGQv////8PgyEQIAZCIIghBSASIARCyNDPwQJ+fCAFfCEGIAZC/////w+DIREgBkIgiCEFIBMgBELdsIWMCH58IAV8IQYgBkL/////D4MhEiAGQiCIIQUgFCAEQraLwcILfnwgBXwhBiAGQv////8PgyETIAZCIIghBSAVIARCqcDGiQ5+fCAFfCEGIAZC/////w+DIRQgBkIgiCEFIBYgBELynJGDA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFyAFfCEWIAE1AhwhAyAPIAcgA358IQYgBkL/////D4MhDyAGQiCIIQUgECAIIAN+fCAFfCEGIAZC/////w+DIRAgBkIgiCEFIBEgCSADfnwgBXwhBiAGQv////8PgyERIAZCIIghBSASIAogA358IAV8IQYgBkL/////D4MhEiAGQiCIIQUgEyALIAN+fCAFfCEGIAZC/////w+DIRMgBkIgiCEFIBQgDCADfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAVIA0gA358IAV8IQYgBkL/////D4MhFSAGQiCIIQUgFiAOIAN+fCAFfCEGIAZC/////w+DIRYgBkIgiCEFIAUhFyAPQv////8OfkL/////D4MhBCAPIARCgYCAgA9+fCEGIAZCIIghBSAQIARCk+uHnwR+fCAFfCEGIAZC/////w+DIQ8gBkIgiCEFIBEgBEKR4eXNB358IAV8IQYgBkL/////D4MhECAGQiCIIQUgEiAEQsjQz8ECfnwgBXwhBiAGQv////8PgyERIAZCIIghBSATIARC3bCFjAh+fCAFfCEGIAZC/////w+DIRIgBkIgiCEFIBQgBEK2i8HCC358IAV8IQYgBkL/////D4MhEyAGQiCIIQUgFSAEQqnAxokOfnwgBXwhBiAGQv////8PgyEUIAZCIIghBSAWIARC8pyRgwN+fCAFfCEGIAZC/////w+DIRUgBkIgiCEFIBcgBXwhFiACIA8+AgAgAiAQPgIEIAIgET4CCCACIBI+AgwgAiATPgIQIAIgFD4CFCACIBU+AhggAiAWPgIcIAJB6A0QBQRAIAJB6A0gAhAHGgsLyyQWAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4gADUCACEGIAA1AgQhByAANQIIIQggADUCDCEJIAA1AhAhCiAANQIUIQsgADUCGCEMIAA1AhwhDSAOIAYgBn58IQQgBEL/////D4MhDiAEQiCIIQMgByAGfiEFIA8gBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhDyAEQiCIIAVCIIhCAYZ8IQMgCCAGfiEFIBAgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhECAEQiCIIAVCIIhCAYZ8IQMgCSAGfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAGfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAGfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAGfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAGfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAPIAcgB358IQQgBEL/////D4MhDyAEQiCIIQMgCCAHfiEFIBAgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhECAEQiCIIAVCIIhCAYZ8IQMgCSAHfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAHfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAHfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAHfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAHfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAQIAggCH58IQQgBEL/////D4MhECAEQiCIIQMgCSAIfiEFIBEgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhESAEQiCIIAVCIIhCAYZ8IQMgCiAIfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAIfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAIfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAIfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyARIAkgCX58IQQgBEL/////D4MhESAEQiCIIQMgCiAJfiEFIBIgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEiAEQiCIIAVCIIhCAYZ8IQMgCyAJfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAJfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAJfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyASIAogCn58IQQgBEL/////D4MhEiAEQiCIIQMgCyAKfiEFIBMgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhEyAEQiCIIAVCIIhCAYZ8IQMgDCAKfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSAKfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyATIAsgC358IQQgBEL/////D4MhEyAEQiCIIQMgDCALfiEFIBQgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFCAEQiCIIAVCIIhCAYZ8IQMgDSALfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAUIAwgDH58IQQgBEL/////D4MhFCAEQiCIIQMgDSAMfiEFIBUgBUL/////D4NCAYZ8IAN8IQQgBEL/////D4MhFSAEQiCIIAVCIIhCAYZ8IQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUgFyAEQiCIfCEWQgAhFyAVIA0gDX58IQQgBEL/////D4MhFSAEQiCIIQMgFiADfCEEIARC/////w+DIRYgFyAEQiCIfCEXIA5C/////w5+Qv////8PgyECIA4gAkKBgICAD358IQQgBEIgiCEDIA8gAkKT64efBH58IAN8IQQgBEL/////D4MhDiAEQiCIIQMgECACQpHh5c0HfnwgA3whBCAEQv////8PgyEPIARCIIghAyARIAJCyNDPwQJ+fCADfCEEIARC/////w+DIRAgBEIgiCEDIBIgAkLdsIWMCH58IAN8IQQgBEL/////D4MhESAEQiCIIQMgEyACQraLwcILfnwgA3whBCAEQv////8PgyESIARCIIghAyAUIAJCqcDGiQ5+fCADfCEEIARC/////w+DIRMgBEIgiCEDIBUgAkLynJGDA358IAN8IQQgBEL/////D4MhFCAEQiCIIQMgFiADfCEEIARC/////w+DIRUg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IABBIGoQAQsVACAAEAEgAEEgahAcIABBwABqEAELUgAgASAAKQMANwMAIAEgACkDCDcDCCABIAApAxA3AxAgASAAKQMYNwMYIAEgACkDIDcDICABIAApAyg3AyggASAAKQMwNwMwIAEgACkDODcDOAt6ACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggASAAKQMgNwMgIAEgACkDKDcDKCABIAApAzA3AzAgASAAKQM4NwM4IAEgACkDQDcDQCABIAApA0g3A0ggASAAKQNQNwNQIAEgACkDWDcDWAsoACAAEEcEQCABEEoFIAFBwABqEBwgAEEgaiABQSBqEAAgACABEAALCxgBAX8gACABEAQgAEEgaiABQSBqEARxDwt1AQF/IABBwABqIQIgABBIBEAgARBHDwsgARBHBEBBAA8LIAIQDwRAIAAgARBODwsgAkGoGBAVIAFBqBhByBgQFCACQagYQegYEBQgAUEgakHoGEGIGRAUIABByBgQBARAIABBIGpBiBkQBARAQQEPCwtBAA8LtAECAX8BfyAAQcAAaiECIAFBwABqIQMgABBIBEAgARBIDwsgARBIBEBBAA8LIAIQDwRAIAEgABBPDwsgAxAPBEAgACABEE8PCyACQagZEBUgA0HIGRAVIABByBlB6BkQFCABQagZQYgaEBQgAkGoGUGoGhAUIANByBlByBoQFCAAQSBqQcgaQegaEBQgAUEgakGoGkGIGxAUQegZQYgaEAQEQEHoGkGIGxAEBEBBAQ8LC0EADwvoAQAgABBHBEAgACABEE0PCyAAQagbEBUgAEEgakHIGxAVQcgbQegbEBUgAEHIG0GIHBAQQYgcQYgcEBVBiBxBqBtBiBwQEUGIHEHoG0GIHBARQYgcQYgcQYgcEBBBqBtBqBtBqBwQEEGoHEGoG0GoHBAQIABBIGogAEEgaiABQcAAahAQQagcIAEQFSABQYgcIAEQESABQYgcIAEQEUHoG0HoG0HIHBAQQcgcQcgcQcgcEBBByBxByBxByBwQEEGIHCABIAFBIGoQESABQSBqQagcIAFBIGoQFCABQSBqQcgcIAFBIGoQEQuJAgAgABBIBEAgACABEEwPCyAAQcAAahAPBEAgACABEFEPDwsgAEHoHBAVIABBIGpBiB0QFUGIHUGoHRAVIABB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TwRAIAVBEGshBSADQcjcACADEI8BCyADIAMQkQEgBUEITwRAIAVBCGshBSADQcjcACADEI8BCyADIAMQkQEgBUEETwRAIAVBBGshBSADQcjcACADEI8BCyADIAMQkQEgBUECTwRAIAVBAmshBSADQcjcACADEI8BCyADIAMQkQEgBUEBTwRAIAVBAWshBSADQcjcACADEI8BCyAERQ0BDAALCwvNAQBBiN8AEI0BQYjfAEGI3wAQlAEgAEGI3QBBIEHI3QAQngFByN0AQYjeABCRASAAQYjeAEGI3gAQjwFBiN4AQcjeABCVAUHI3gBBiN4AQcjeABCPAUHI3gBBiN8AEJgBBEAAC0HI3QAgAEHI3wAQjwFBiN4AQYjfABCYAQRAQYjfABABQajfABAcQYjfAEHI3wAgARCPAQVBiOAAEI0BQYjgAEGI3gBBiOAAEJIBQYjgAEGo3QBBIEGI4AAQngFBiOAAQcjfACABEI8BCwtpAEGo4gAQjQFBqOIAQajiABCUASAAQcjgAEEgQejgABCeAUHo4ABBqOEAEJEBIABBqOEAQajhABCPAUGo4QBB6OEAEJUBQejhAEGo4QBB6OEAEI8BQejhAEGo4gAQmAEEQEEADwtBAQ8LEQAgABCKASAAQcAAahCKAXELCwAgAEGAAWoQigELEAAgABCMASAAQcAAahCMAQsZACAAEIwBIABBwABqEI0BIABBgAFqEIwBC6IBACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggASAAKQMgNwMgIAEgACkDKDcDKCABIAApAzA3AzAgASAAKQM4NwM4IAEgACkDQDcDQCABIAApA0g3A0ggASAAKQNQNwNQIAEgACkDWDcDWCABIAApA2A3A2AgASAAKQNoNwNoIAEgACkDcDcDcCABIAApA3g3A3gLggIAIAEgACkDADcDACABIAApAwg3AwggASAAKQMQNwMQIAEgACkDGDcDGCABIAApAyA3AyAgASAAKQMoNwMoIAEgACkDMDcDMCABIAApAzg3AzggASAAKQNANwNAIAEgACkDSDcDSCABIAApA1A3A1AgASAAKQNYNwNYIAEgACkDYDcDYCABIAApA2g3A2ggASAAKQNwNwNwIAEgACkDeDcDeCABIAApA4ABNwOAASABIAApA4gBNwOI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IAEQjwEgAEHAAGogAUHAAGoQACAAQeAAaiABQeAAahASIAFBwABqQdCIBCABQcAAahCPASAAQYABaiABQYABahAAIABBoAFqIAFBoAFqEBIgAUGAAWpBkIkEIAFBgAFqEI8BIABBwAFqIAFBwAFqEAAgAEHgAWogAUHgAWoQEiABQcABakHQiQQgAUHAAWoQjwEgAEGAAmogAUGAAmoQACAAQaACaiABQaACahASIAFBgAJqQZCKBCABQYACahCPASAAQcACaiABQcACahAAIABB4AJqIAFB4AJqEBIgAUHAAmpB0IoEIAFBwAJqEI8BC2wAIABBkIsEIAEQjwEgAEHAAGpB0IsEIAFBwABqEI8BIABBgAFqQZCMBCABQYABahCPASAAQcABakHQjAQgAUHAAWoQjwEgAEGAAmpBkI0EIAFBgAJqEI8BIABBwAJqQdCNBCABQcACahCPAQuKAgAgACABEAAgAEEgaiABQSBqEBIgAUGQjgQgARCPASAAQcAAaiABQcAAahAAIABB4ABqIAFB4ABqEBIgAUHAAGpB0I4EIAFBwABqEI8BIABBgAFqIAFBgAFqEAAgAEGgAWogAUGgAWoQEiABQYABakGQjwQgAUGAAWoQjwEgAEHAAWogAUHAAWoQACAAQeABaiABQeABahASIAFBwAFqQdCPBCABQcABahCPASAAQYACaiABQYACahAAIABBoAJqIAFBoAJqEBIgAUGAAmpBkJAEIAFBgAJqEI8BIABBwAJqIAFBwAJqEAAgAEHgAmogAUHgAmoQEiABQcACakHQkAQgAUHAAmoQjwELbAAgAEGQkQQgARCPASAAQcAAakHQkQQgAUHAAGoQjwEgAEGAAWpBkJIEIAFBgAFqEI8BIABBwAFqQdCSBCABQcABahCPASAAQYACakGQkwQgAUGAAmoQjwEgAEHAAmpB0JMEIAFBwAJqEI8BC4oCACAAIAEQACAAQSBqIAFBIGoQEiABQZCUBCABEI8BIABBwABqIAFBwABqEAAgAEHgAGogAUHgAGoQEiABQcAAakHQlAQgAUHAAGoQjwEgAEGAAWogAUGAAWoQACAAQaABaiABQaABahASIAFBgAFqQZCVBCABQYABahCPASAAQcABaiABQcABahAAIABB4AFqIAFB4AFqEBIgAUHAAWpB0JUEIAFBwAFqEI8BIABBgAJqIAFBgAJqEAAgAEGgAmogAUGgAmoQEiABQYACakGQlgQgAUGAAmoQjwEgAEHAAmogAUHAAmoQACAAQeACaiABQeACahASIAFBwAJqQdCWBCABQcACahCPAQtsACAAQZCXBCABEI8BIABBwABqQdCXBCABQcAAahCPASAAQYABakGQmAQgAUGAAWoQjwEgAEHAAWpB0JgEIAFBwAFqEI8BIABBgAJqQZCZBCABQYACahCPASAAQcACakHQmQQgAUHAAmoQjwELigIAIAAgARAAIABBIGogAUEgahASIAFBkJoEIAEQjwEgAEHAAGogAUHAAGoQACAAQeAAaiABQeAAahASIAFBwABqQdCaBCABQcAAahCPASAAQYABaiABQYABahAAIABBoAFqIAFBoAFqEBIgAUGAAWpBkJsEIAFBgAFqEI8BIABBwAFqIAFBwAFqEAAgAEHgAWogAUHgAWoQEiABQcABakHQmwQgAUHAAWoQjwEgAEGAAmogAUGAAmoQACAAQaACaiABQaACahASIAFBgAJqQZCcBCABQYACahCPASAAQcACaiABQcACahAAIABB4AJqIAFB4AJqEBIgAUHAAmpB0JwEIAFBwAJqEI8BC2wAIABBkJ0EIAEQjwEgAEHAAGpB0J0EIAFBwABqEI8BIABBgAFqQZCeBCABQYABahCPASAAQcABakHQngQgAUHAAWoQjwEgAEGAAmpBkJ8EIAFBgAJqEI8BIABBwAJqQdCfBCABQcACahCPAQuKAgAgACABEAAgAEEgaiABQSBqEBIgAUGQoAQgARCPASAAQcAAaiABQcAAahAAIABB4ABqIAFB4ABqEBIgAUHAAGpB0KAEIAFBwABqEI8BIABBgAFqIAFBgAFqEAAgAEGgAWogAUGgAWoQEiABQYABakGQoQQgAUGAAWoQjwEgAEHAAWogAUHAAWoQACAAQeABaiABQeABahASIAFBwAFqQdChBCABQcABahCPASAAQYACaiABQYACahAAIABBoAJqIAFBoAJqEBIgAUGAAmpBkKIEIAFBgAJqEI8BIABBwAJqIAFBwAJqEAAgAEHgAmogAUHgAmoQEiABQcACakHQogQgAUHAAmoQjwELEAAgAEGQowRB4AIgARCeAgtIACAAQfClBBD6ASAAQcABakGwpwQQ/wEgAEHwqAQQmQJB8KUEQfCoBEHwqwQQjwJB8KsEQfCuBBCrAkHwqwRB8K4EIAEQjwILhAYAIAAgAEGAAmpB8LQEEI8BIABBgAJqQciBAkHwsQQQjwEgAEHwsQRB8LEEEJIBIAAgAEGAAmpBsLUEEJIBQbC1BEHwsQRB8LEEEI8BQciBAkHwtARBsLUEEI8BQfC0BEGwtQRBsLUEEJIBQfCxBEGwtQRB8LEEEJMBQfC0BEHwtARBsLIEEJIBIABBwAFqIABBgAFqQfC0BBCPASAAQYABakHIgQJB8LIEEI8BIABBwAFqQfCyBEHwsgQQkgEgAEHAAWogAEGAAWpBsLUEEJIBQbC1BEHwsgRB8LIEEI8BQciBAkHwtARBsLUEEI8BQfC0BEGwtQRBsLUEEJIBQfCyBEGwtQRB8LIEEJMBQfC0BEHwtARBsLMEEJIBIABBwABqIABBwAJqQfC0BBCPASAAQcACakHIgQJB8LMEEI8BIABBwABqQfCzBEHwswQQkgEgAEHAAGogAEHAAmpBsLUEEJIBQbC1BEHwswRB8LMEEI8BQciBAkHwtARBsLUEEI8BQfC0BEGwtQRBsLUEEJIBQfCzBEGwtQRB8LMEEJMBQfC0BEHwtARBsLQEEJIBQfCxBCAAIAEQkwEgASABIAEQkgFB8LEEIAEgARCSAUGwsgQgAEGAAmogAUGAAmoQkgEgAUGAAmogAUGAAmogAUGAAmoQkgFBsLIEIAFBgAJqIAFBgAJqEJIBQbC0BEHIgQJBsLUEEI8BQbC1BCAAQcABaiABQcABahCSASABQcABaiABQcABaiABQcABahCSAUGwtQQgAUHAAWogAUHAAWoQkgFB8LMEIABBgAFqIAFBgAFqEJMBIAFBgAFqIAFBgAFqIAFBgAFqEJIBQfCzBCABQYABaiABQYABahCSAUHwsgQgAEHAAGogAUHAAGoQkwEgAUHAAGogAUHAAGogAUHAAGoQkgFB8LIEIAFBwABqIAFBwABqEJIBQbCzBCAAQcACaiABQcACahCSASABQcACaiABQcACaiABQcACahCSAUGwswQgAUHAAmogAUHAAmoQkgELhQECAX8BfyAAQbC2BBCVAiABEI0CQT4sAPC1BCICBEAgAkEBRgRAIAEgACABEI8CBSABQbC2BCABEI8CCwtBPSEDAkADQCABIAEQtQIgAywA8LUEIgIEQCACQQFGBEAgASAAIAEQjwIFIAFBsLYEIAEQjwILCyADRQ0BIANBAWshAwwACwsLtQIAIABBsLkEELYCQbC5BEGwuQQQlQJBsLkEQbC8BBC1AkGwvARBsL8EELUCQbC/BEGwvARBsMIEEI8CQbDCBEGwxQQQtgJBsMUEQbDFBBCVAkGwxQRBsMgEELUCQbDIBEGwywQQtgJBsMsEQbDLBBCVAkGwwgRBsM4EEJUCQbDLBEGw0QQQlQJBsNEEQbDFBEGw1AQQjwJBsNQEQbDOBEGw1wQQjwJBsNcEQbC8BEGw2gQQjwJBsNcEQbDFBEGw3QQQjwJBsN0EIABBsOAEEI8CQbDaBEGw4wQQqgJBsOMEQbDgBEGw5gQQjwJBsNcEQbDpBBCrAkGw6QRBsOYEQbDsBBCPAiAAQbDvBBCVAkGw7wRBsNoEQbDyBBCPAkGw8gRBsPUEEKwCQbD1BEGw7AQgARCPAgsUACAAQbD4BBC0AkGw+AQgARC3AgtNAEGw+wQQjQIgAEHQ0AIQowIgAUGQ0gIQpQJB0NACQZDSAkGw/gQQqAJBsPsEQbD+BEGw+wQQjwJBsPsEQbD7BBC4AkGw+wQgAhCYAgt9AEGwgQUQjQIgAEHQ0AIQowIgAUGQ0gIQpQJB0NACQZDSAkGwhAUQqAJBsIEFQbCEBUGwgQUQjwIgAkHQ0AIQowIgA0GQ0gIQpQJB0NACQZDSAkGwhAUQqAJBsIEFQbCEBUGwgQUQjwJBsIEFQbCBBRC4AkGwgQUgBBCYAgutAQBBsIcFEI0CIABB0NACEKMCIAFBkNICEKUCQdDQAkGQ0gJBsIoFEKgCQbCHBUGwigVBsIcFEI8CIAJB0NACEKMCIANBkNICEKUCQdDQAkGQ0gJBsIoFEKgCQbCHBUGwigVBsIcFEI8CIARB0NACEKMCIAVBkNICEKUCQdDQAkGQ0gJBsIoFEKgCQbCHBUGwigVBsIcFEI8CQbCHBUGwhwUQuAJBsIcFIAYQmAIL3QEAQbCNBRCNAiAAQdDQAhCjAiABQZDSAhClAkHQ0AJBkNICQbCQBRCoAkGwjQVBsJAFQbCNBRCPAiACQdDQAhCjAiADQZDSAhClAkHQ0AJBkNICQbCQBRCoAkGwjQVBsJAFQbCNBRCPAiAEQdDQAhCjAiAFQZDSAhClAkHQ0AJBkNICQbCQBRCoAkGwjQVBsJAFQbCNBRCPAiAGQdDQAhCjAiAHQZDSAhClAkHQ0AJBkNICQbCQBRCoAkGwjQVBsJAFQbCNBRCPAkGwjQVBsI0FELgCQbCNBSAIEJgCC40CAEGwkwUQjQIgAEHQ0AIQowIgAUGQ0gIQpQJB0NACQZDSAkGwlgUQqAJBsJMFQbCWBUGwkwUQjwIgAkHQ0AIQowIgA0GQ0gIQpQJB0NACQZDSAkGwlgUQqAJBsJMFQbCWBUGwkwUQjwIgBEHQ0AIQowIgBUGQ0gIQpQJB0NACQZDSAkGwlgUQqAJBsJMFQbCWBUGwkwUQjwIgBkHQ0AIQowIgB0GQ0gIQpQJB0NACQZDSAkGwlgUQqAJBsJMFQbCWBUGwkwUQjwIgCEHQ0AIQowIgCUGQ0gIQpQJB0NACQZDSAkGwlgUQqAJBsJMFQbCWBUGwkwUQjwJBsJMFQbCTBRC4AkGwkwUgChCYAgssACAAQdDQAhCjAiABQZDSAhClAkHQ0AJBkNICQbCZBRCoAkGwmQUgAhC4AgsLiJsBeABBAAsEME4BAABBCAsgAQAA8JP14UORcLl5SOgzKF1YgYG2RVC4KaAx4XJOZDAAQegDCyBH/XzYFowgPI3KcWiRaoGXXViBgbZFULgpoDHhck5kMABBiAQLIIn6ilNb/Czz+wFF1BEZ57X2f0EK/x6rRx81uMpxn9gGAEGoBAsgnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AQcgECyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6AQLIKN+PmwLRhCeRuU4tEi1wMsurMBA2yIo3BTQmHA5JzIYAEGIBQsgpH4+bAtGEJ5G5Ti0SLXAyy6swEDbIijcFNCYcDknMhgAQagFCyCjfj5sC0YQnkblOLRItcDLLqzAQNsiKNwU0JhwOScyGABByAULIKrv7RKJSMNoT7+qcmh/CI0xEggJR6LhUfrAKUex1lkiAEHoBQsgUj8ftgUjCE+jchxapFrgZRdWYKBtERRuCmhMuJwTGQwAQegNCyABAADwk/XhQ5FwuXlI6DMoXViBgbZFULgpoDHhck5kMABBiA4LIKdtIa5F5rgb41lc47E6/lOFgLtTPYNJjKVETn+x0BYCAEGoDgsg+///Txw0lqwpzWCflXb8Ni5GeXhvo25mL98HmsF3Cg4AQcgOCyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6A4LIAAAAPjJ+vChSLjcPCT0GZQurMBA2yIo3BTQmHA5JzIYAEGIDwsgAQAA+Mn68KFIuNw8JPQZlC6swEDbIijcFNCYcDknMhgAQagPCyA/WR8+FAmXm4eEPoPShRUYaFsEhZsCGhMu50QGAwAAAABByA8LIJw90YBVc25j1v9FJHTzK6LYA7IewCpFVuf5YymU72AYAEHoDwsgoKwPH4qEy81DQp9B6cIKDLQtgsJNAY0Jl3MigwEAAAAAQYgYCyDXKK1QqcoXerkhVeF6wWofhNJraU7qSzOOnRfORGcfKgBBqDELIBEREREREREREREQEA8ODQ0MCwoJCAcHBgUEAwIBAQEBAEGIMwsgERERERERERERERAQDw4NDQwLCgkIBwcGBQQDAgEBAQEAQcg0C6AH+///Txw0lqwpzWCflXb8Ni5GeXhvo25mL98HmsF3Cg4GAACgd8FLl2ejWNqycTfxLhIICUei4VH6wClHsdZZIovv3J6XPXV/IJFHsSwXP19ubAl0eWKxjc8IwTk1ezcrP3ytteJKrfi+hcuD/8ZgLfcplF0r/XbZqdmaP+d8QCQDjy90fH229Mxo0GPcLRtoalf7G++85Yz+PLbSUSl8FmRMV7+x9xQi8n0x9y8j+SjNda2wqIR15QNtF9xZ+4Erv2GPgeUDkI7C/vibNL+bjE5TAT/N7txTPKop5WuWkCaxe4EmMMR5CvB9U5l8zLJ73uZBAtUnyrZM8DI2P7N6AMxKooM/uK+iblNdUtlV8pIZ3YYCCGZ1XkklLcWmsXsY3iOkIuc7U5wNbt98Ep0qZAXAmkBGdbwNglA9so1M8ACEEQwotLP0HiwqXq7C1HrPGGWjxWw7BriMwN9lucRII7LPT66JIedIB1r4jTz7AwoKLpvqNYpN/3cdnM0ujKko09vssy9S1B2t81XQkyoiaOhV1bNmfZy+RviUYbj2khvWTqB5vtxMiYcH00Rq3myVX8Hb1yu2oVlOb4CaEOTrErjqBU3HoBO6FjGrEWNdAS5aoKWMLJIDtdqU4/7XFb4GVLj9WwX3ToDy6s5AcWunesuJ/rJoWsn8xwbE8TUcRh0zdDk5WeezR9EkHA2SOjptQ1/3dFESNKFW1WruAR+CG3zcBBLYuAXaQY0wBuYqMkgsiZ6EJ441NZLVLdb7yg8EhAtwCS/GZiVghr+gdjoYM/FYUFdZjznZNM3ROc4ubQU2eqLmt6OeBLzbPgUD5uvv1J7OOlq0JIReeYimkIN8KBqTjapl1DLanI+AYYX2aSaFsMjkRqt7JBoC1oGHZjsNPC8y9ZIh6ien6Y9l6YQYsWnAU6C8I4Y6pjnhJfDzjxLyGu+8biKOm2BrQN+r8UWePbun1VfSjVO8o4J4A5M4CgCRnsAEJEhusiUAWceRdQ0Rvl46eScCpKhMqcHDpmQBMNBP2Gm9IscsFlLPJkoOYOmn80XXfnL7XCf7abKnUhbiB1xX//oOQMWaj0tJcyNVN63nge2reao5Lk0IuOXGGv4giskilKKgnVyTZcpi1HP3gkXUbkq64baCOgzAFPwoZwKJgBRkWYdJA8DktXg6Sn6xplLdTwBJEurmZd0XRSicPdGAVXNuY9b/RSR08yui2AOyHsAqRVbn+WMplO9gGABB6DsLoAf7//9PHDSWrCnNYJ+Vdvw2LkZ5eG+jbmYv3weawXcKDv7//x/YFDx43R6NDG8vmK9FT/38knRfj6y/nD0aYzcf////D2wKHrxuj0aGtxfM16Knfn5Juq9H1l/OHo2xmw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAEGIwwALoAd8//8/uF99/xj1YTyhOjxF929OOeUNnPZ8amniw4xHDBbz/5+Gl/JbCUw4CwxIqtH23KCPG7lbwzmlIdVv6KIQ4Hfg/wGmYLxqiW2j0bhVRbaYm2W5pdTfJX+oF//k3yl/k10eePb6euvtLduxi++0ojDUMFCcP7t6kN9Sc8lpAuX9ADoUkIfMg4uwcmqsLfs2ZOoJ/rlGOtueXadZYb0UApC8r1YG3fUlzwQjKZzlH39mY9RA2l6Jy40uCtQGhy4P2G/XjHk9hhDmJersykq/VQ7YQmBQaLFTZ8lWywdMIO9TFx0rr60A9RfF36VjRM0evDNL4pBdv+8aYaft3OchVQT/zNJQ169i+6c30PtwxCAuEfeiGL0u1jFll70GhRt74i6m991aLMdV5S/rpPd2f+3y08JnhLt4hIQxC8yxCfV4gssbGWbzFJ4Jc9g1U7zcBdl3WoKDyWuFYt+ybEkCi8ftQ4AExeektdwglAU9r16vJ8hU8JVZ4WDazTbPJw4cQJT/iVj33he7PLkRX7pBJuQhSPRVvfLEGzXLeIT9KvdTXEnC3F/TXGX9RTt88qybi0HJwj8BafSFqC0IapEE4jfby8qGl/ErW0Eke9+bNzFGMSjPW2VaGNoWk59AKhz5rg3Xs73ylJpF8oQsZ/D2CSyrJDS0DntldYs35sf7IfPMx24We09v2mp4ABOt/bylR7Km2MpueLT0f89ykBAwtOCe0wK9eQOI0HiV3jH3y34SO0k27b61Y6T0Q+FmiCkJgl7jIRSPWCwYSLLL8kPYCpbzTOMW8Lvjw7Bfr/HeDwkS2oamsw1SLkoHRly2E785CUHODjC6jugMsnZcUXgsY6nIFU4V+xz/ezpPwlpvoGP0wKyWZC9LuncUiuKYlCZ2blMw66C/T6flhQxh1zf7CxV3I/A1RncZoG1rO6o1DmIrITBkA5yoo8MYeK8i9CjvWKr52caYOcqrOTapoN8rd1KAW4V7ROdFzMjPdKaG4ZyN3EAQ53MCemo/K8oBNgkshcgdXKdeNZ1sHfPsuFL+HS4kDLsT0bLpJzn4sVmlA3f/83pG4Pp3tdpBaU9cKj7UHMoTsUrJ1i0L6Zj1j0EX/oOrfGeRlFPNQ0HAq4RO/jB2BXQjFSATuxDtg5o3gwBg3g7dzyoTsUJEJQHVK0u7MXokuhmZVbOMBrHI4t96GsQwmohmv1hkb5d1W8m/p5Af8IIelMMLSTqNpMNUVxskAEGoygALoAdWVVX1t6OWggtLJlEw8HfF6DpWViTZiiVxFSGWTDSYFZdv+SbCaN4OWWVGedph07hXPchlgX77HtOAssqMn9QAUA+6KAFYAtgmh7nvyGHknl3PLVtID+p3o4senzq8RijOt+UHyy/mwS0WYndhibtm7iPoXufCHUxI8B89EijfArXyzm7/MWtG1MReJJXNbxNPbpOk7NWdFzdGTJqXELIaDn35QJkIySfGbRF/rKkNm58KRgU1jZbORJ0e5Uv8rQE/JSOftVQfriKlp+WozBVxGyNT/5PBWmAZ93YzU1KQAbR/GpCtDFBurjAVg/J4nPWjVRrfNLptUPCcTtmod0stPH/96Qu1O34xfE0Gk28W/ceVZfxbeT+0yLJyKGPbSShUB5lZb4e4EHdv7WJ66olRzzCwjieig6mANccyol7+GMwnSyXqM8l8P6MP1IShWm2cUAedvU4UBYWsPoANAAsdxuX6fsL0ufw0FM39WVTiWQSNvifAlomm/avLxDKszBqvFGZYwv8aQj5QLpy2DQF1A8AIjDsUNku4J/H+qAzWF4ktY503CEmyeq8R33NrUhqaqFwDOjSx3O5ye2ihSbEDc/vHI57Ht41wDZ7+LKPNiwkbmXpl1ZA8iLHHQNb4AASQ53gByt8+cwbMF+/gsAsOzOP2z73NontqEcB2fXVvLWl8J781Ew2vnBH/+iTyMfl/UNLTStCsYq+daUXxAZsBaImuHh09kXEDBBj3IS8WAygiIQiivfjOmy0GvuC0QhBtyU+/fzWav1DAJkJ+9iPOKJmeAdoH4w2rmB/T2hpHA80jcrmGifR0ZCcmY373gqQ+rLw5p4HN7B7Zl2lNfjEw2oAMntNe4RWnLZjniWjsduD7TO1I0ktRQxBgi1REpAfual88utZ3wxmiC3el+L7KuInNtJ9j8H2egMoczxJFBX72HW4Qf0XTsn8TVvFmsbaGy4uPWjNDKYS+DOtJKXYaNAHjxEjtoHcSdhQrJoKzlFHBxwbdmJPH86sbL6Z8NxzW2B0BTSArTCbjUfjKcK9TcCYqn0o//fvhDw8ghDfxDKeSq6HWxe23HbUB/qc2OYpjRsKE9sjdbS8yiwplR0sSn/FTmrGUmwOfshG/+FX7Duz/vHVnxBOzCnmVq2Xz/SnT6/4hkbASkTWNdqnlpN1UfHlok1FrbeFw/x+BWwojH9Xtgp/RsGaeUMGmdA8yDO0JNbHV061kGGKcHhvjPmcVAEHI0QALgAIAgEDAIKBg4BCQUNAwsHDwCIhIyCioaOgYmFjYOLh4+ASERMQkpGTkFJRU1DS0dPQMjEzMLKxs7BycXNw8vHz8AoJCwiKiYuISklLSMrJy8gqKSsoqqmrqGppa2jq6evoGhkbGJqZm5haWVtY2tnb2Do5Ozi6ubu4enl7ePr5+/gGBQcEhoWHhEZFR0TGxcfEJiUnJKalp6RmZWdk5uXn5BYVFxSWlZeUVlVXVNbV19Q2NTc0trW3tHZ1d3T29ff0Dg0PDI6Nj4xOTU9Mzs3PzC4tLyyura+sbm1vbO7t7+weHR8cnp2fnF5dX1ze3d/cPj0/PL69v7x+fX98/v3//AEGI3QALIFE/H7YFIwhPo3IcWqRa4GUXVmCgbREUbgpoTLicExkMAEGo3QALIKN+PmwLRhCeRuU4tEi1wMsurMBA2yIo3BTQmHA5JzIYAEHI4AALIFE/H7YFIwhPo3IcWqRa4GUXVmCgbREUbgpoTLicExkMAEHo4gALQKgCuHfjOPk7XVMzNicbCwJgUnVJ8O23Jm2ohEMyxhQlZ//c0czs5zg+Dc6TfbPwZaoArCLd0EnXTY1oSs65QQEAQaiVAQsgERERERERERERERAQDw4NDQwLCgkIBwcGBQQDAgEBAQEAQciYAQsgERERERERERERERAQDw4NDQwLCgkIBwcGBQQDAgEBAQEAQcibAQugB/v//08cNJasKc1gn5V2/DYuRnl4b6NuZi/fB5rBdwoOBgAAoHfBS5dno1jasnE38S4SCAlHouFR+sApR7HWWSKL79yelz11fyCRR7EsFz9fbmwJdHlisY3PCME5NXs3Kz98rbXiSq34voXLg//GYC33KZRdK/122anZmj/nfEAkA48vdHx9tvTMaNBj3C0baGpX+xvvvOWM/jy20lEpfBZkTFe/sfcUIvJ9MfcvI/kozXWtsKiEdeUDbRfcWfuBK79hj4HlA5COwv74mzS/m4xOUwE/ze7cUzyqKeVrlpAmsXuBJjDEeQrwfVOZfMyye97mQQLVJ8q2TPAyNj+zegDMSqKDP7ivom5TXVLZVfKSGd2GAghmdV5JJS3FprF7GN4jpCLnO1OcDW7ffBKdKmQFwJpARnW8DYJQPbKNTPAAhBEMKLSz9B4sKl6uwtR6zxhlo8VsOwa4jMDfZbnESCOyz0+uiSHnSAda+I08+wMKCi6b6jWKTf93HZzNLoypKNPb7LMvUtQdrfNV0JMqImjoVdWzZn2cvkb4lGG49pIb1k6geb7cTImHB9NEat5slV/B29crtqFZTm+AmhDk6xK46gVNx6ATuhYxqxFjXQEuWqCljCySA7XalOP+1xW+BlS4/VsF906A8urOQHFrp3rLif6yaFrJ/McGxPE1HEYdM3Q5OVnns0fRJBwNkjo6bUNf93RREjShVtVq7gEfght83AQS2LgF2kGNMAbmKjJILImehCeONTWS1S3W+8oPBIQLcAkvxmYlYIa/oHY6GDPxWFBXWY852TTN0TnOLm0FNnqi5rejngS82z4FA+br79SezjpatCSEXnmIppCDfCgak42qZdQy2pyPgGGF9mkmhbDI5EareyQaAtaBh2Y7DTwvMvWSIeonp+mPZemEGLFpwFOgvCOGOqY54SXw848S8hrvvG4ijptga0Dfq/FFnj27p9VX0o1TvKOCeAOTOAoAkZ7ABCRIbrIlAFnHkXUNEb5eOnknAqSoTKnBw6ZkATDQT9hpvSLHLBZSzyZKDmDpp/NF135y+1wn+2myp1IW4gdcV//6DkDFmo9LSXMjVTet54Htq3mqOS5NCLjlxhr+IIrJIpSioJ1ck2XKYtRz94JF1G5KuuG2gjoMwBT8KGcCiYAUZFmHSQPA5LV4Okp+saZS3U8ASRLq5mXdF0UonD3RgFVzbmPW/0UkdPMrotgDsh7AKkVW5/ljKZTvYBgAQeiiAQugB/v//08cNJasKc1gn5V2/DYuRnl4b6NuZi/fB5rBdwoO/v//H9gUPHjdHo0Mby+Yr0VP/fySdF+PrL+cPRpjNx////8PbAoevG6PRoa3F8zXoqd+fkm6r0fWX84ejbGbDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAQYiqAQugB3z//z+4X33/GPVhPKE6PEX3b0455Q2c9nxqaeLDjEcMFvP/n4aX8lsJTDgLDEiq0fbcoI8buVvDOaUh1W/oohDgd+D/AaZgvGqJbaPRuFVFtpibZbml1N8lf6gX/+TfKX+TXR549vp66+0t27GL77SiMNQwUJw/u3qQ31JzyWkC5f0AOhSQh8yDi7Byaqwt+zZk6gn+uUY6255dp1lhvRQCkLyvVgbd9SXPBCMpnOUff2Zj1EDaXonLjS4K1AaHLg/Yb9eMeT2GEOYl6uzKSr9VDthCYFBosVNnyVbLB0wg71MXHSuvrQD1F8XfpWNEzR68M0vikF2/7xphp+3c5yFVBP/M0lDXr2L7pzfQ+3DEIC4R96IYvS7WMWWXvQaFG3viLqb33Vosx1XlL+uk93Z/7fLTwmeEu3iEhDELzLEJ9XiCyxsZZvMUnglz2DVTvNwF2XdagoPJa4Vi37JsSQKLx+1DgATF56S13CCUBT2vXq8nyFTwlVnhYNrNNs8nDhxAlP+JWPfeF7s8uRFfukEm5CFI9FW98sQbNct4hP0q91NcScLcX9NcZf1FO3zyrJuLQcnCPwFp9IWoLQhqkQTiN9vLyoaX8StbQSR735s3MUYxKM9bZVoY2haTn0AqHPmuDdezvfKUmkXyhCxn8PYJLKskNLQOe2V1izfmx/sh88zHbhZ7T2/aangAE639vKVHsqbYym54tPR/z3KQEDC04J7TAr15A4jQeJXeMffLfhI7STbtvrVjpPRD4WaIKQmCXuMhFI9YLBhIssvyQ9gKlvNM4xbwu+PDsF+v8d4PCRLahqazDVIuSgdGXLYTvzkJQc4OMLqO6AyydlxReCxjqcgVThX7HP97Ok/CWm+gY/TArJZkL0u6dxSK4piUJnZuUzDroL9Pp+WFDGHXN/sLFXcj8DVGdxmgbWs7qjUOYishMGQDnKijwxh4ryL0KO9YqvnZxpg5yqs5Nqmg3yt3UoBbhXtE50XMyM90pobhnI3cQBDncwJ6aj8rygE2CSyFyB1cp141nWwd8+y4Uv4dLiQMuxPRsuknOfixWaUDd//zekbg+ne12kFpT1wqPtQcyhOxSsnWLQvpmPWPQRf+g6t8Z5GUU81DQcCrhE7+MHYFdCMVIBO7EO2DmjeDAGDeDt3PKhOxQkQlAdUrS7sxeiS6GZlVs4wGscji33oaxDCaiGa/WGRvl3Vbyb+nkB/wgh6UwwtJOo2kw1RXGyQAQaixAQugB1ZVVfW3o5aCC0smUTDwd8XoOlZWJNmKJXEVIZZMNJgVl2/5JsJo3g5ZZUZ52mHTuFc9yGWBfvse04Cyyoyf1ABQD7ooAVgC2CaHue/IYeSeXc8tW0gP6nejix6fOrxGKM635QfLL+bBLRZid2GJu2buI+he58IdTEjwHz0SKN8CtfLObv8xa0bUxF4klc1vE09uk6Ts1Z0XN0ZMmpcQshoOfflAmQjJJ8ZtEX+sqQ2bnwpGBTWNls5EnR7lS/ytAT8lI5+1VB+uIqWn5ajMFXEbI1P/k8FaYBn3djNTUpABtH8akK0MUG6uMBWD8nic9aNVGt80um1Q8JxO2ah3Sy08f/3pC7U7fjF8TQaTbxb9x5Vl/Ft5P7TIsnIoY9tJKFQHmVlvh7gQd2/tYnrqiVHPMLCOJ6KDqYA1xzKiXv4YzCdLJeozyXw/ow/UhKFabZxQB529ThQFhaw+gA0ACx3G5fp+wvS5/DQUzf1ZVOJZBI2+J8CWiab9q8vEMqzMGq8UZljC/xpCPlAunLYNAXUDwAiMOxQ2S7gn8f6oDNYXiS1jnTcISbJ6rxHfc2tSGpqoXAM6NLHc7nJ7aKFJsQNz+8cjnse3jXANnv4so82LCRuZemXVkDyIscdA1vgABJDneAHK3z5zBswX7+CwCw7M4/bPvc2ie2oRwHZ9dW8taXwnvzUTDa+cEf/6JPIx+X9Q0tNK0Kxir51pRfEBmwFoia4eHT2RcQMEGPchLxYDKCIhCKK9+M6bLQa+4LRCEG3JT79/NZq/UMAmQn72I84omZ4B2gfjDauYH9PaGkcDzSNyuYaJ9HRkJyZjfveCpD6svDmngc3sHtmXaU1+MTDagAye017hFactmOeJaOx24PtM7UjSS1FDEGCLVESkB+5qXzy61nfDGaILd6X4vsq4ic20n2PwfZ6AyhzPEkUFfvYdbhB/RdOyfxNW8WaxtobLi49aM0MphL4M60kpdho0AePESO2gdxJ2FCsmgrOUUcHHBt2Yk8fzqxsvpnw3HNbYHQFNICtMJuNR+Mpwr1NwJiqfSj/9++EPDyCEN/EMp5KrodbF7bcdtQH+pzY5imNGwoT2yN1tLzKLCmVHSxKf8VOasZSbA5+yEb/4VfsO7P+8dWfEE7MKeZWrZfP9KdPr/iGRsBKRNY12qeWk3VR8eWiTUWtt4XD/H4FbCiMf1e2Cn9GwZp5QwaZ0DzIM7Qk1sdXTrWQYYpweG+M+ZxUAQci4AQuAAgCAQMAgoGDgEJBQ0DCwcPAIiEjIKKho6BiYWNg4uHj4BIRExCSkZOQUlFTUNLR09AyMTMwsrGzsHJxc3Dy8fPwCgkLCIqJi4hKSUtIysnLyCopKyiqqauoamlraOrp6+gaGRsYmpmbmFpZW1ja2dvYOjk7OLq5u7h6eXt4+vn7+AYFBwSGhYeERkVHRMbFx8QmJSckpqWnpGZlZ2Tm5efkFhUXFJaVl5RWVVdU1tXX1DY1NzS2tbe0dnV3dPb19/QODQ8Mjo2PjE5NT0zOzc/MLi0vLK6tr6xubW9s7u3v7B4dHxyenZ+cXl1fXN7d39w+PT88vr2/vH59f3z+/f/8AQcjFAQugB/v//08cNJasKc1gn5V2/DYuRnl4b6NuZi/fB5rBdwoOBgAAoHfBS5dno1jasnE38S4SCAlHouFR+sApR7HWWSKL79yelz11fyCRR7EsFz9fbmwJdHlisY3PCME5NXs3Kz98rbXiSq34voXLg//GYC33KZRdK/122anZmj/nfEAkA48vdHx9tvTMaNBj3C0baGpX+xvvvOWM/jy20lEpfBZkTFe/sfcUIvJ9MfcvI/kozXWtsKiEdeUDbRfcWfuBK79hj4HlA5COwv74mzS/m4xOUwE/ze7cUzyqKeVrlpAmsXuBJjDEeQrwfVOZfMyye97mQQLVJ8q2TPAyNj+zegDMSqKDP7ivom5TXVLZVfKSGd2GAghmdV5JJS3FprF7GN4jpCLnO1OcDW7ffBKdKmQFwJpARnW8DYJQPbKNTPAAhBEMKLSz9B4sKl6uwtR6zxhlo8VsOwa4jMDfZbnESCOyz0+uiSHnSAda+I08+wMKCi6b6jWKTf93HZzNLoypKNPb7LMvUtQdrfNV0JMqImjoVdWzZn2cvkb4lGG49pIb1k6geb7cTImHB9NEat5slV/B29crtqFZTm+AmhDk6xK46gVNx6ATuhYxqxFjXQEuWqCljCySA7XalOP+1xW+BlS4/VsF906A8urOQHFrp3rLif6yaFrJ/McGxPE1HEYdM3Q5OVnns0fRJBwNkjo6bUNf93RREjShVtVq7gEfght83AQS2LgF2kGNMAbmKjJILImehCeONTWS1S3W+8oPBIQLcAkvxmYlYIa/oHY6GDPxWFBXWY852TTN0TnOLm0FNnqi5rejngS82z4FA+br79SezjpatCSEXnmIppCDfCgak42qZdQy2pyPgGGF9mkmhbDI5EareyQaAtaBh2Y7DTwvMvWSIeonp+mPZemEGLFpwFOgvCOGOqY54SXw848S8hrvvG4ijptga0Dfq/FFnj27p9VX0o1TvKOCeAOTOAoAkZ7ABCRIbrIlAFnHkXUNEb5eOnknAqSoTKnBw6ZkATDQT9hpvSLHLBZSzyZKDmDpp/NF135y+1wn+2myp1IW4gdcV//6DkDFmo9LSXMjVTet54Htq3mqOS5NCLjlxhr+IIrJIpSioJ1ck2XKYtRz94JF1G5KuuG2gjoMwBT8KGcCiYAUZFmHSQPA5LV4Okp+saZS3U8ASRLq5mXdF0UonD3RgFVzbmPW/0UkdPMrotgDsh7AKkVW5/ljKZTvYBgAQejMAQugB/v//08cNJasKc1gn5V2/DYuRnl4b6NuZi/fB5rBdwoO/v//H9gUPHjdHo0Mby+Yr0VP/fySdF+PrL+cPRpjNx////8PbAoevG6PRoa3F8zXoqd+fkm6r0fWX84ejbGbDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAQYjUAQugB3z//z+4X33/GPVhPKE6PEX3b0455Q2c9nxqaeLDjEcMFvP/n4aX8lsJTDgLDEiq0fbcoI8buVvDOaUh1W/oohDgd+D/AaZgvGqJbaPRuFVFtpibZbml1N8lf6gX/+TfKX+TXR549vp66+0t27GL77SiMNQwUJw/u3qQ31JzyWkC5f0AOhSQh8yDi7Byaqwt+zZk6gn+uUY6255dp1lhvRQCkLyvVgbd9SXPBCMpnOUff2Zj1EDaXonLjS4K1AaHLg/Yb9eMeT2GEOYl6uzKSr9VDthCYFBosVNnyVbLB0wg71MXHSuvrQD1F8XfpWNEzR68M0vikF2/7xphp+3c5yFVBP/M0lDXr2L7pzfQ+3DEIC4R96IYvS7WMWWXvQaFG3viLqb33Vosx1XlL+uk93Z/7fLTwmeEu3iEhDELzLEJ9XiCyxsZZvMUnglz2DVTvNwF2XdagoPJa4Vi37JsSQKLx+1DgATF56S13CCUBT2vXq8nyFTwlVnhYNrNNs8nDhxAlP+JWPfeF7s8uRFfukEm5CFI9FW98sQbNct4hP0q91NcScLcX9NcZf1FO3zyrJuLQcnCPwFp9IWoLQhqkQTiN9vLyoaX8StbQSR735s3MUYxKM9bZVoY2haTn0AqHPmuDdezvfKUmkXyhCxn8PYJLKskNLQOe2V1izfmx/sh88zHbhZ7T2/aangAE639vKVHsqbYym54tPR/z3KQEDC04J7TAr15A4jQeJXeMffLfhI7STbtvrVjpPRD4WaIKQmCXuMhFI9YLBhIssvyQ9gKlvNM4xbwu+PDsF+v8d4PCRLahqazDVIuSgdGXLYTvzkJQc4OMLqO6AyydlxReCxjqcgVThX7HP97Ok/CWm+gY/TArJZkL0u6dxSK4piUJnZuUzDroL9Pp+WFDGHXN/sLFXcj8DVGdxmgbWs7qjUOYishMGQDnKijwxh4ryL0KO9YqvnZxpg5yqs5Nqmg3yt3UoBbhXtE50XMyM90pobhnI3cQBDncwJ6aj8rygE2CSyFyB1cp141nWwd8+y4Uv4dLiQMuxPRsuknOfixWaUDd//zekbg+ne12kFpT1wqPtQcyhOxSsnWLQvpmPWPQRf+g6t8Z5GUU81DQcCrhE7+MHYFdCMVIBO7EO2DmjeDAGDeDt3PKhOxQkQlAdUrS7sxeiS6GZlVs4wGscji33oaxDCaiGa/WGRvl3Vbyb+nkB/wgh6UwwtJOo2kw1RXGyQAQajbAQugB1ZVVfW3o5aCC0smUTDwd8XoOlZWJNmKJXEVIZZMNJgVl2/5JsJo3g5ZZUZ52mHTuFc9yGWBfvse04Cyyoyf1ABQD7ooAVgC2CaHue/IYeSeXc8tW0gP6nejix6fOrxGKM635QfLL+bBLRZid2GJu2buI+he58IdTEjwHz0SKN8CtfLObv8xa0bUxF4klc1vE09uk6Ts1Z0XN0ZMmpcQshoOfflAmQjJJ8ZtEX+sqQ2bnwpGBTWNls5EnR7lS/ytAT8lI5+1VB+uIqWn5ajMFXEbI1P/k8FaYBn3djNTUpABtH8akK0MUG6uMBWD8nic9aNVGt80um1Q8JxO2ah3Sy08f/3pC7U7fjF8TQaTbxb9x5Vl/Ft5P7TIsnIoY9tJKFQHmVlvh7gQd2/tYnrqiVHPMLCOJ6KDqYA1xzKiXv4YzCdLJeozyXw/ow/UhKFabZxQB529ThQFhaw+gA0ACx3G5fp+wvS5/DQUzf1ZVOJZBI2+J8CWiab9q8vEMqzMGq8UZljC/xpCPlAunLYNAXUDwAiMOxQ2S7gn8f6oDNYXiS1jnTcISbJ6rxHfc2tSGpqoXAM6NLHc7nJ7aKFJsQNz+8cjnse3jXANnv4so82LCRuZemXVkDyIscdA1vgABJDneAHK3z5zBswX7+CwCw7M4/bPvc2ie2oRwHZ9dW8taXwnvzUTDa+cEf/6JPIx+X9Q0tNK0Kxir51pRfEBmwFoia4eHT2RcQMEGPchLxYDKCIhCKK9+M6bLQa+4LRCEG3JT79/NZq/UMAmQn72I84omZ4B2gfjDauYH9PaGkcDzSNyuYaJ9HRkJyZjfveCpD6svDmngc3sHtmXaU1+MTDagAye017hFactmOeJaOx24PtM7UjSS1FDEGCLVESkB+5qXzy61nfDGaILd6X4vsq4ic20n2PwfZ6AyhzPEkUFfvYdbhB/RdOyfxNW8WaxtobLi49aM0MphL4M60kpdho0AePESO2gdxJ2FCsmgrOUUcHHBt2Yk8fzqxsvpnw3HNbYHQFNICtMJuNR+Mpwr1NwJiqfSj/9++EPDyCEN/EMp5KrodbF7bcdtQH+pzY5imNGwoT2yN1tLzKLCmVHSxKf8VOasZSbA5+yEb/4VfsO7P+8dWfEE7MKeZWrZfP9KdPr/iGRsBKRNY12qeWk3VR8eWiTUWtt4XD/H4FbCiMf1e2Cn9GwZp5QwaZ0DzIM7Qk1sdXTrWQYYpweG+M+ZxUAQcjiAQuAAgCAQMAgoGDgEJBQ0DCwcPAIiEjIKKho6BiYWNg4uHj4BIRExCSkZOQUlFTUNLR09AyMTMwsrGzsHJxc3Dy8fPwCgkLCIqJi4hKSUtIysnLyCopKyiqqauoamlraOrp6+gaGRsYmpmbmFpZW1ja2dvYOjk7OLq5u7h6eXt4+vn7+AYFBwSGhYeERkVHRMbFx8QmJSckpqWnpGZlZ2Tm5efkFhUXFJaVl5RWVVdU1tXX1DY1NzS2tbe0dnV3dPb19/QODQ8Mjo2PjE5NT0zOzc/MLi0vLK6tr6xubW9s7u3v7B4dHxyenZ+cXl1fXN7d39w+PT88vr2/vH59f3z+/f/8AQYj6AQtgnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg46Gx6LG4e6pnsWjutR1vEUWIzy8N5G3cxevg80g+8UHJ0Nj8WNQ13TPQvH9SjreAosRnl4b6NuZi/fB5rBdwoOAEHo+gELYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABByPsBC8ABJiC8AtG1g45yAXtJNRnr3N8agZdHJrj7O1CWr0E4VxlAYUyofXO0r8TYAlha3UNghi+gUvxQ6Qlre+o6g/D+FPbpa4id+p1heJue9ZfSf/7+fRsjYhqe/wZCnq7rfv0o7lYYx1ZbCWS7PH0yIvlX3HYQNTO+NflVgmT9k+agpA2dDY/FjUNd0z0Lx/Uo63gKLEZ5eG+jbmYv3weawXcKDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGI/QELwAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcj+AQuAA50Nj8WNQ13TPQvH9SjreAosRnl4b6NuZi/fB5rBdwoOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABByIECC0D3fw1BzkcG9hHQG9NNbz0v0cZAOX4zQylXmOOn6JiVHZ0Nj8WNQ13TPQvH9SjreAosRnl4b6NuZi/fB5rBdwoOAEGIggILQHIFBk/S576H5WocL90q/dBET/38knRfj6y/nD0aYzcfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQciCAgtAqAK4d+M4+TtdUzM2JxsLAmBSdUnw7bcmbaiEQzLGFCVn/9zRzOznOD4NzpN9s/BlqgCsIt3QSddNjWhKzrlBAQBByK0CC8ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGIrwILwAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcjCAgvAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBiNACC0EAAAABAAEAAQEBAAEBAQAAAAEBAAEBAQAAAQEBAQEAAQEAAAEBAQAAAAAAAAEBAQABAAABAQEBAAEAAQEBAAABAQBBkPYDC0Awq2NFEDt3tVRkqqnIkX80kQkuJCdxAHrsFIIR2LxWGVdHqqAen4RuQZH4iW17HKo6yuD6zRPntsPrgk67T2kmAEHQ9gMLQCm2NikM3bvky7oz4WLxMLtmU2T5ttGpMd34AKW+cDUlx3f+X+R816Hb0SZ4Ef2vB2vcfrsnvRZtzP7ehQIghywAQZCFBAtAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB0IUEC0CdDY/FjUNd0z0Lx/Uo63gKLEZ5eG+jbmYv3weawXcKDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGQhgQLQJ0Nj8WNQ13TPQvH9SjreAosRnl4b6NuZi/fB5rBdwoOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQdCGBAtAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBkIcEC0CdDY/FjUNd0z0Lx/Uo63gKLEZ5eG+jbmYv3weawXcKDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHQhwQLQJ0Nj8WNQ13TPQvH9SjreAosRnl4b6NuZi/fB5rBdwoOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQZCIBAtAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB0IgEC0Awq2NFEDt3tVRkqqnIkX80kQkuJCdxAHrsFIIR2LxWGVdHqqAen4RuQZH4iW17HKo6yuD6zRPntsPrgk67T2kmAEGQiQQLQJK+OoR/12Fz+xE0J9Mru6WZIz5LMR+UnOzTn7vdnN8VScnYSxX93V1gW0SkpSnLYrnSfQwKh7w3/fBxMZ0KgyQAQdCJBAtAB0kUM5amm6+Kt6+Hcx1ryocgivBe7b0RfDofGnVN8wJyLUlMI64iolvhXVakAg/QJsnfU6LzL9xRlYmzFlenEABBkIoEC0AptjYpDN275Mu6M+Fi8TC7ZlNk+bbRqTHd+AClvnA1Jcd3/l/kfNeh29EmeBH9rwdr3H67J70Wbcz+3oUCIIcsAEHQigQLQOcPaUEvaXDJC0tpJyE0QOLoWcSDa+a+MkGIsArtvKoSqb+uQCNdSA1XzC+rGDQZBfUQSYoLpLDTWpLSNbXrIS8AQZCLBAtAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB0IsEC0CcC+gTjshQM7lWXtt8Vc59SlYVtri0AWDgFwICF+aCJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGQjAQLQFXhgtcRDJNxIzO+/3yUu6ZEFHTURDMwqkNJWSYNPzssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQdCMBAtA8hv6AAWAjcppl7NoFNbF8BhEDa1xEiAO5lbYumUPKQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBkI0EC0Cq7+0SiUjDaE+/qnJofwiNMRIICUei4VH6wClHsdZZIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHQjQQLQKvxlMSIw88I1HMTjRQVsxkTAmzL/ZBOWEmIL99baOEJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQZCOBAtAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB0I4EC0Cta60W9yKvybJipkoqeBGz9MdI4mSv7hmCn0Pjdz4nIKyTzvdgKMCsTGune4HVMzlnhGxEixjmaVXMF0RtA0YKAEGQjwQLQN9iZ3ulk4pE3+r9KPUt1r961JsO0PVY2FjsdjRNPbAG0TbJvPTaGSufKfRWek6lofGu3lrg7jO1sqDdhCuBDBcAQdCPBAtAfdlGThgWUzafbcnUnhL3CrUJEMovp51lIw2ig4ltEQg5GZzD90rfsX+/c4qHAp894AqvjJIgIpumVPDvFUVoJgBBkJAEC0AeR0avCq9kV8EPPocueVDc9gQdiP9zpoZMpzA8tN0uC4CFfngyD0masfhK8H9t0Y/yewLGjog5S12hUltwLt0DAEHQkAQLQJ9Vz3UiS7zgD+ZUwUW5OMJefZqSpYI5gH6j5PctBc4Vp5k3v73vKC1zB9YaPH4Jm1tTSq8TQS2YY2AF45GJ4SQAQZCRBAtAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB0JEEC0BV4YLXEQyTcSMzvv98lLumRBR01EQzMKpDSVkmDT87LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGQkgQLQJwL6BOOyFAzuVZe23xVzn1KVhW2uLQBYOAXAgIX5oImAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQdCSBAtAnAvoE47IUDO5Vl7bfFXOfUpWFba4tAFg4BcCAhfmgiYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBkJMEC0CdDY/FjUNd0z0Lx/Uo63gKLEZ5eG+jbmYv3weawXcKDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHQkwQLQFXhgtcRDJNxIzO+/3yUu6ZEFHTURDMwqkNJWSYNPzssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQZCUBAtAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB0JQEC0Cx4+hUJroa+RLOktwvy3FHNd+L/OBqsdzki53NlaFKJ4sfgRiuUPxcjJhDyzOEsksZYrXDE1/TTzqIyC+9SRkwAEGQlQQLQNbb2tjxIDSEss0/GMkQ8DFJYKcntTBjQ+TfGvFHdNQTdPpXqCNASe8aEKvVAl2SKhAvppuCFbCDo64TDB0ROSUAQdCVBAtAdpAyG4Jvt4YUthlNK/WLQC3phdnQud9Tp9KCaRQgHgXH61J31Jy8DyTeFTTj/49tuUHPOPAs8r5Uv2Y8/+3AFQBBkJYEC0AptjYpDN275Mu6M+Fi8TC7ZlNk+bbRqTHd+AClvnA1Jcd3/l/kfNeh29EmeBH9rwdr3H67J70Wbcz+3oUCIIcsAEHQlgQLQLhFZjTz4UsXBJvrmSSF+N91I9YOOpx6TT0bNO1ASCMDRdcFV7EeAVypBRjYtLRxLcSagqa+4sx8Mm5kjk/sIyYAQZCXBAtAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB0JcEC0CdDY/FjUNd0z0Lx/Uo63gKLEZ5eG+jbmYv3weawXcKDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGQmAQLQJ0Nj8WNQ13TPQvH9SjreAosRnl4b6NuZi/fB5rBdwoOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQdCYBAtAqu/tEolIw2hPv6pyaH8IjTESCAlHouFR+sApR7HWWSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBkJkEC0Cq7+0SiUjDaE+/qnJofwiNMRIICUei4VH6wClHsdZZIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHQmQQLQKrv7RKJSMNoT7+qcmh/CI0xEggJR6LhUfrAKUex1lkiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQZCaBAtAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB0JoEC0Awq2NFEDt3tVRkqqnIkX80kQkuJCdxAHrsFIIR2LxWGVdHqqAen4RuQZH4iW17HKo6yuD6zRPntsPrgk67T2kmAEGQmwQLQJK+OoR/12Fz+xE0J9Mru6WZIz5LMR+UnOzTn7vdnN8VScnYSxX93V1gW0SkpSnLYrnSfQwKh7w3/fBxMZ0KgyQAQdCbBAtAQLRopYDlhIwCE8LgHU0WzdU395BXWJKmrWUSx/0AcS3VzzOM8939mTHpExLtZ3LHNo+hLRRSINzXCqgtXPe8HwBBkJwEC0AeR0avCq9kV8EPPocueVDc9gQdiP9zpoZMpzA8tN0uC4CFfngyD0masfhK8H9t0Y/yewLGjog5S12hUltwLt0DAEHQnAQLQGDtE5fnIrBygX8IQXA2QbV0/rz9Sl+RhegXgdaFkbkdnj3Ol/Mu2C42/kG9eDZokmhHOPeqoZ/kzg1fq71iQgEAQZCdBAtAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB0J0EC0CcC+gTjshQM7lWXtt8Vc59SlYVtri0AWDgFwICF+aCJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGQngQLQFXhgtcRDJNxIzO+/3yUu6ZEFHTURDMwqkNJWSYNPzssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQdCeBAtAVeGC1xEMk3EjM77/fJS7pkQUdNREMzCqQ0lZJg0/OywAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBkJ8EC0CdDY/FjUNd0z0Lx/Uo63gKLEZ5eG+jbmYv3weawXcKDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHQnwQLQJwL6BOOyFAzuVZe23xVzn1KVhW2uLQBYOAXAgIX5oImAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQZCgBAtAnQ2PxY1DXdM9C8f1KOt4CixGeXhvo25mL98HmsF3Cg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB0KAEC0Cta60W9yKvybJipkoqeBGz9MdI4mSv7hmCn0Pjdz4nIKyTzvdgKMCsTGune4HVMzlnhGxEixjmaVXMF0RtA0YKAEGQoQQLQN9iZ3ulk4pE3+r9KPUt1r961JsO0PVY2FjsdjRNPbAG0TbJvPTaGSufKfRWek6lofGu3lrg7jO1sqDdhCuBDBcAQdChBAtAyiM2iv51zQXuXKiT8leKjKhOcbeGnrJSBpOPXengUigO5OAUH0FBig0L/t0JaOJZfU3S9CMlLh2DS0HxXAn8CQBBkKIEC0AptjYpDN275Mu6M+Fi8TC7ZlNk+bbRqTHd+AClvnA1Jcd3/l/kfNeh29EmeBH9rwdr3H67J70Wbcz+3oUCIIcsAEHQogQLQKinrWL0QGRbfeQcp0uxSNX+2ubuEMMWOKv8TOlESZYaoGNFGVmc9w4aw5tNVex3/AEFN9KiBCMgxj8s/uDEggsAQZCjBAvgAiDxhspkS5aGpCNF5bfvpEC7SuiWeKl/gxi5srm2AhE22pJW896B3sBgx8Om6McEvn+7cNXJ+WbXQRhWg02XMMKjab7DaBa6W5RiUhDEETh/HKfd2n3uuikAqV0UjTuBvyyaP0LfuhtkXszqROq0C6h84/0USGZlzdKRAli5ZANK3fAmCLHfk+4kR1HFjdtCa4U3DwtDzxC7FkKAb0BOSUD7qvOsB+HPVYeu6+CA7IggoDejEdA+aoSVUToeSlqkSBYOxd9oRWbl68QMTClBaqvax2jSAtbQgorEPO2aRGhm/F0Bsg/NYlDRs92xqEApf0hkIio6tvV3rkPkYRN48P7IxtWIDod3+aprZx+mZAN5o96tzi7nh1hwG5qgY+V3E7LD2Bvu71QM99gk1VrRwz5dOjiyZlTx2sD+lLtzCuPh4ns/XwFxHGr/sWljv0MthLwgfRDf2v0gcMltSy8AAAAAQfC1BAs/AQAAAP8AAAAAAQABAAAAAAEAAAEA/wABAAEAAQAAAQAAAAEA/wD/AP8AAQABAAD/AAEAAQD/AAABAAEAAAAB"; +export const pq = 488; +export const pr = 1768; +export const pG1gen = 32008; +export const pG1zero = 32104; +export const pG1b = 3080; +export const pG2gen = 32200; +export const pG2zero = 32392; +export const pG2b = 12648; +export const pOneT = 32584; +export const prePSize = 192; +export const preQSize = 19776; +export const n8q = 32; +export const n8r = 32; +export const q = "21888242871839275222246405745257275088696311157297823662689037894645226208583"; +export const r = "21888242871839275222246405745257275088548364400416034343698204186575808495617"; diff --git a/build/bn128_wasm_gzip.js b/build/bn128_wasm_gzip.js new file mode 100644 index 0000000..5a96a16 --- /dev/null +++ b/build/bn128_wasm_gzip.js @@ -0,0 +1,16 @@ +export const gzipCode = "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Hi13TLzsPDqgTv3pkemPtI1der7za2vnLZKXrovZdrXLjagzhVuG9f4sbn3kqPmr0y/erPbN77dss/NjZzeaOfztUyuOPj5mVJ+5j/YbcGJQYYVxz0RWrPDt2fFLv87vtaTTJyuHRte3nI1otPbbb97rmfTi4vJlf3qwdwKizq+RmiOhnLTtZFm341pep3118wcVmO2tnKmOPq6khU8dumfzyKvKxIc/q7Si58/x8x4/0HDD0D8tM9rtqflu/zPJi589cv+WMX9J45vtSFn+4snYOY/tr78u60LktDa7qr+T8VuZ17oebvrhS9eNk1v+u8rKXr+UeuWJg403Db8cNavDl7Xfz/yj/JLnf3xw69hbeBz9xPZG9xMxsx/9ut7awecjprb+otrbfX8t/erT39/7wahrhkktPq/8VvqphPldvm20cdgl68z2e2u9N+BsudefO/rAxy/flCc0/7Timz1+ipvb+ZsG64dcVKe33V1jdb/fyy565of7Php9wzTlkZ1VV/U+nbjgye+a/GvElejcjl/VWTPwXIWlLxx7aFt2IfuqIJU8WuShjAPYinEOdLxY0lwnkZrmkDaP+Omea/c917lB46plVanbY8NaF5z9V5UBjonN6/87vnLvwiNf7zlz+p4HrV/OfXl9Qfo76N2Uo/taf9d+Zp82X35AMaKO+bhYBxELi8e2CJccWJQcWJQcWPzTDyyWF2eelpxYhPspeWQP+1NiftifYp5YvINLTixKTixKTiz+6ScWa3HJiUXJiUXJicU//cRiMy45sShE8AF3Jc/pJc/pJc/p//Tn9D0lz+n/K57UwvyUmB/257/BfPgM1JLn9JLn9JLn9H/6c/oPJc/pJc/pJc/p//jn9JMlz+kssuA6VrsVldLStGz56WWnfLhydKlZvz968Hz8UzMuFPzY8uie57dGN5xwLj656JQYFzRTxI0OKlJMUT/UeQOr23EVskX6euOEWVl4dOtGpX8/cqzMuAWPVNl8475Or6yh9zxZOq17O8fLQzas+eyQ9FTXo827Ta6z7LG/Ov0a0W/0b00nFNyKv/xrP/vr11/vPnLRkksL9mffuvVy2YovlllSaGy25P3fx95M/eOJpJ1PPBPR86P7X66fcu3JI8O1Rg22NrrWZXzPm3N/WbbC+vftsN8EO4rk+5/259/9oc5bWM2R/+N6/F//gcRsNe1KtpV++Yjxcsy+st+0H/hAna//nXbv2AbNqz258KdVroXzyxU9i+3jJTUty2DsuP/01imnMpLrHK1+c9/DfmcBxdAGxPz9wCLne9JdmCT/8R/4AMf/CjucO/477LDvk1TKnvsxgpgz+ENIBzDmOCTwiAOCgtxcCD7sT02ru7pHC+2+ERsf7/nO287Z2Q1nR9SuVHUweulM/PiYQ1ueKP3kI+8sK790YiadfXXqgNHJ7zTddfz63rjTmz79fXyHjzr2rYLgkwHVtGqbGlezHP3o590fNjjx4vm6H/Xq3PPapq/frnf0Knpr66BGlXeOuPXCz2O+e+OHr6uMjLm5xtTvyNiPqn5casCeWz9OksiUmuzDtdS0v78z7bs7YvIm3x1t7o6YvCl3R5u7IybPfne0ATF/f/jlTVXUtDlbm07M/q77kBsxDat+U+Ojt16t+GDbehXmLT7zzdKPji4+ltD6i0NtE24efa7bMw+veKva7hc/2P+yJXLKliY3CwbXez1yQiUEH2mmpplaxzd4ZeWiNdP+tWbKkHL9dk0h0wqeP/txzJimFcoMa39RyqrVul3F91OWP3PiuSdWSNH7qnxxrPPyi3WOPDp/6vpST67SEHzU2d2YDPtAzOnovrRO30FfqG37VrU1TDvpevqzCf1+2Vqf2vMjz255J/btbe+nVXyulfXJPXVWJzUsbbiktZ6mrsj/puuc/Y02/m6rwz437a70FIhZrLriZjk7Nfjgied/GNPly5fbPJGwafMG3O14oiQl/jK+SjHGzQxFTetyYvx3MZa5gys22Fo4Zt5HKx+OH3rg4QZ132ne+ukq1ofuq1kMbUDMhbLXkSFn5q6+C9b3iT/4eUHSw9b3BseSqF+eOPRhenS1oo5UQZuZippWZLZ50dqAmNXn531m//Qr84EhcTPjE9aXjpP6776Z1+Gp1vY6x57pcyKiGNrMujs9BWLe6/deqSspa75Y9+LKNtVHxqz/c2erkz3X/FF6/NLmP414sCp5d+6XV7qlbn+3Xb9Vo8d92+De3hP7Pzw96Ze+XfYkPjxAbhmJ4FPp1LRjL/Ye/dbcaQ8f++1m6qVaB7e9dGBR1L5LTx166szwhu0fyDd+3fiLLX8eLl1jabU/n3ipw1tvnH//x67H/2iwcd2yoxNrjLMkIvi0OjXt5e9bdkgq1bnx0gFfHFgSeyVyY4S2q86q19MrWpdPmDogxnxv6cWfXmlzbG32tiHTpkhLHzgeuWbGHJKyaOXjBecSWvSBGZ6nqGnlH2m5JnJNzyc/iX5wSu1RnY5cVsrZC4es/H9r81luYLPlrh53Q2tdhRG/56yNP7w+1Ode7P9UzXSsr8PSO3ZhUHSB3l1mBtDpdtwO80PPlyp573nA/yzkoOtOi0NxtbMmLW2ybKhb/OS7Lus50eUzzffvfa+hW8x+TcqmjnN2dLDXemFH3RnJCayPJ3Y+VAEfiUeVmJpIlcwwYRJVsuYF6hgzYTJ1wmYydcJmCnVcAzJm4+MXIWq7pH4KnZt0R/90obvp/e4/D7I23nnSPffs1IVe6t3yjRLrAv7E9MxwPm3csslbMmnrYeH4y/5WHSf093pKGjCADhzkdrh2+9aNjwomLZvO2kucFPhg6JmwXH2rQbLzk/tSH91LrgiX/Apfoezg+V5KYPVVpthJWgL6y2Y3iW5oXrxOmEdW0FKVAXQQIbdD2QQj6ab87W0i2yR9tb92O+i+bL15Yef94OWXmjJFFORYj78OKr8yZw+/yj1Rk8f/+3N3Op63+KDzaV/I/jSb/28PiDKADiikSj0FMmaHa5rJ54fe4iyzX89Uaf1xv1T5Gp/VnCpfW2mTtw4eysyu11nDN8oxxqxklbixZUuh7pFZTcv2PTpTY5SX0uf/RlkNfNohVWKKOsZMmEEd18ygSgUzYSZ16inqGDNhFnXCZhZ12n6zqdP2AxnjsCVjacPTlh4m4UMPZH3Fzl41/z4hPGLSsrWpQsf/MhTqXj1v3PP57t+Zhi+Fhd6mFx0361+oKxKkcOc61wrdmO975BlAZ09SpZ4CGZPwVnj6c6UNRY31HI4FZo5bS/7t+esVP7H1hXjjtdaJO2Xn2Z6b/lnvhp7ZP8e9FWYZkzLcLb6vWjj/yTne+NV7k5wYwQdZUiWm5lKnZphHnbYfdYyZMJ86YTOfOmGzgDquWUCdtt9C6rT9QMacUjbr+ld6lvVdzIrJn8K7elb4FW5vm7cpiG1yf+zLB0EafE8eiMg7Onbxcv+7y5nxKLLW99IXZVU92WZvx48xnH84GUDHilKlngIZs2L52qQvDinRtU9klntv9Lj679azdwKHxSxW//F56eI5TWpBsqtk5JzvfFKHZ/uGvin/w8hqfmkRi7LCMXudfw+ONHGDzyjlfsCk8LHtVIr3tLYlyq5Pt79f4rDb68W0ipX1zRI7N+3cxiRodmtS2Od7jfcOJBw/vOzFcZZ99bsLrp78mXbdUSKs2Xe6waHFmfsOZ4jtip6SFCRwRNCiXmb53Vu173ZpMqyMFem1btyvM8ve6f4u6ZS4M69cXm3hXlHz+K+IR1rq2UsTmSJ2pjB73f2gxrHx/uR3Ku6BR3tvO2W3mvNzO58X2C3m1JDv4Ofp8HvV5zXsD8+Htq97/aDhTYfCAvPFghfsslqmBlrJeUUt8RDjO3o/wzXt6esjPD6ajlmrbx3PuMR07UJT1xGbt7NcMtL+xDJu4j+bFHBx892NKxw06z1SlLSstn0tX+f8JFG44sO/E8eudvC1l/9clZ0uvyyFuXLxvbXn9J63RxRIz1qQ/LRceNPhG9Lv3ofwfL+hcjXq4mG7WCuLTWkhH28d+DdldzHX44ePqu3jGQtlsv5vzEze76zbskehVuD+rb8KBSdzvfXBSfnDVhZue9Dg1X8G6DgXZJkLI8N/yKgXZNELiPsfKgSl/sOUMwIAadaEBs5dAQA="; +export const pq = 488; +export const pr = 1768; +export const pG1gen = 32008; +export const pG1zero = 32104; +export const pG1b = 3080; +export const pG2gen = 32200; +export const pG2zero = 32392; +export const pG2b = 12648; +export const pOneT = 32584; +export const prePSize = 192; +export const preQSize = 19776; +export const n8q = 32; +export const n8r = 32; +export const q = "21888242871839275222246405745257275088696311157297823662689037894645226208583"; +export const r = "21888242871839275222246405745257275088548364400416034343698204186575808495617"; diff --git a/build/main.cjs b/build/main.cjs new file mode 100644 index 0000000..2e6f3b4 --- /dev/null +++ b/build/main.cjs @@ -0,0 +1,3962 @@ +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +//#region src/utils.js +function bigInt2BytesLE(_a, len) { + const b = Array(len); + let v = BigInt(_a); + for (let i = 0; i < len; i++) { + b[i] = Number(v & 255n); + v = v >> 8n; + } + return b; +} +//#endregion +//#region src/build_int.js +function buildInt(module, n64, _prefix) { + const prefix = _prefix || "int"; + if (module.modules[prefix]) return prefix; + module.modules[prefix] = {}; + const n32 = n64 * 2; + const n8 = n64 * 8; + function buildCopy() { + const f = module.addFunction(prefix + "_copy"); + f.addParam("px", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + for (let i = 0; i < n64; i++) f.addCode(c.i64_store(c.getLocal("pr"), i * 8, c.i64_load(c.getLocal("px"), i * 8))); + } + function buildZero() { + const f = module.addFunction(prefix + "_zero"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + for (let i = 0; i < n64; i++) f.addCode(c.i64_store(c.getLocal("pr"), i * 8, c.i64_const(0))); + } + function buildOne() { + const f = module.addFunction(prefix + "_one"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.i64_store(c.getLocal("pr"), 0, c.i64_const(1))); + for (let i = 1; i < n64; i++) f.addCode(c.i64_store(c.getLocal("pr"), i * 8, c.i64_const(0))); + } + function buildIsZero() { + const f = module.addFunction(prefix + "_isZero"); + f.addParam("px", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + function getCompCode(n) { + if (n == 0) return c.ret(c.i64_eqz(c.i64_load(c.getLocal("px")))); + return c.if(c.i64_eqz(c.i64_load(c.getLocal("px"), n * 8)), getCompCode(n - 1), c.ret(c.i32_const(0))); + } + f.addCode(getCompCode(n64 - 1)); + f.addCode(c.ret(c.i32_const(0))); + } + function buildEq() { + const f = module.addFunction(prefix + "_eq"); + f.addParam("px", "i32"); + f.addParam("py", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + function getCompCode(n) { + if (n == 0) return c.ret(c.i64_eq(c.i64_load(c.getLocal("px")), c.i64_load(c.getLocal("py")))); + return c.if(c.i64_eq(c.i64_load(c.getLocal("px"), n * 8), c.i64_load(c.getLocal("py"), n * 8)), getCompCode(n - 1), c.ret(c.i32_const(0))); + } + f.addCode(getCompCode(n64 - 1)); + f.addCode(c.ret(c.i32_const(0))); + } + function buildGte() { + const f = module.addFunction(prefix + "_gte"); + f.addParam("px", "i32"); + f.addParam("py", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + function getCompCode(n) { + if (n == 0) return c.ret(c.i64_ge_u(c.i64_load(c.getLocal("px")), c.i64_load(c.getLocal("py")))); + return c.if(c.i64_lt_u(c.i64_load(c.getLocal("px"), n * 8), c.i64_load(c.getLocal("py"), n * 8)), c.ret(c.i32_const(0)), c.if(c.i64_gt_u(c.i64_load(c.getLocal("px"), n * 8), c.i64_load(c.getLocal("py"), n * 8)), c.ret(c.i32_const(1)), getCompCode(n - 1))); + } + f.addCode(getCompCode(n64 - 1)); + f.addCode(c.ret(c.i32_const(0))); + } + function buildAdd() { + const f = module.addFunction(prefix + "_add"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + f.setReturnType("i32"); + f.addLocal("c", "i64"); + const c = f.getCodeBuilder(); + f.addCode(c.setLocal("c", c.i64_add(c.i64_load32_u(c.getLocal("x")), c.i64_load32_u(c.getLocal("y"))))); + f.addCode(c.i64_store32(c.getLocal("r"), c.getLocal("c"))); + for (let i = 1; i < n32; i++) { + f.addCode(c.setLocal("c", c.i64_add(c.i64_add(c.i64_load32_u(c.getLocal("x"), 4 * i), c.i64_load32_u(c.getLocal("y"), 4 * i)), c.i64_shr_u(c.getLocal("c"), c.i64_const(32))))); + f.addCode(c.i64_store32(c.getLocal("r"), i * 4, c.getLocal("c"))); + } + f.addCode(c.i32_wrap_i64(c.i64_shr_u(c.getLocal("c"), c.i64_const(32)))); + } + function buildSub() { + const f = module.addFunction(prefix + "_sub"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + f.setReturnType("i32"); + f.addLocal("c", "i64"); + const c = f.getCodeBuilder(); + f.addCode(c.setLocal("c", c.i64_sub(c.i64_load32_u(c.getLocal("x")), c.i64_load32_u(c.getLocal("y"))))); + f.addCode(c.i64_store32(c.getLocal("r"), c.i64_and(c.getLocal("c"), c.i64_const("0xFFFFFFFF")))); + for (let i = 1; i < n32; i++) { + f.addCode(c.setLocal("c", c.i64_add(c.i64_sub(c.i64_load32_u(c.getLocal("x"), 4 * i), c.i64_load32_u(c.getLocal("y"), 4 * i)), c.i64_shr_s(c.getLocal("c"), c.i64_const(32))))); + f.addCode(c.i64_store32(c.getLocal("r"), i * 4, c.i64_and(c.getLocal("c"), c.i64_const("0xFFFFFFFF")))); + } + f.addCode(c.i32_wrap_i64(c.i64_shr_s(c.getLocal("c"), c.i64_const(32)))); + } + function buildMul() { + const f = module.addFunction(prefix + "_mul"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + f.addLocal("c0", "i64"); + f.addLocal("c1", "i64"); + for (let i = 0; i < n32; i++) { + f.addLocal("x" + i, "i64"); + f.addLocal("y" + i, "i64"); + } + const c = f.getCodeBuilder(); + const loadX = []; + const loadY = []; + function mulij(i, j) { + let X, Y; + if (!loadX[i]) { + X = c.teeLocal("x" + i, c.i64_load32_u(c.getLocal("x"), i * 4)); + loadX[i] = true; + } else X = c.getLocal("x" + i); + if (!loadY[j]) { + Y = c.teeLocal("y" + j, c.i64_load32_u(c.getLocal("y"), j * 4)); + loadY[j] = true; + } else Y = c.getLocal("y" + j); + return c.i64_mul(X, Y); + } + let c0 = "c0"; + let c1 = "c1"; + for (let k = 0; k < n32 * 2 - 1; k++) { + for (let i = Math.max(0, k - n32 + 1); i <= k && i < n32; i++) { + const j = k - i; + f.addCode(c.setLocal(c0, c.i64_add(c.i64_and(c.getLocal(c0), c.i64_const(4294967295)), mulij(i, j)))); + f.addCode(c.setLocal(c1, c.i64_add(c.getLocal(c1), c.i64_shr_u(c.getLocal(c0), c.i64_const(32))))); + } + f.addCode(c.i64_store32(c.getLocal("r"), k * 4, c.getLocal(c0))); + [c0, c1] = [c1, c0]; + f.addCode(c.setLocal(c1, c.i64_shr_u(c.getLocal(c0), c.i64_const(32)))); + } + f.addCode(c.i64_store32(c.getLocal("r"), n32 * 4 * 2 - 4, c.getLocal(c0))); + } + function buildSquare() { + const f = module.addFunction(prefix + "_square"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + f.addLocal("c0", "i64"); + f.addLocal("c1", "i64"); + f.addLocal("c0_old", "i64"); + f.addLocal("c1_old", "i64"); + for (let i = 0; i < n32; i++) f.addLocal("x" + i, "i64"); + const c = f.getCodeBuilder(); + const loadX = []; + function mulij(i, j) { + let X, Y; + if (!loadX[i]) { + X = c.teeLocal("x" + i, c.i64_load32_u(c.getLocal("x"), i * 4)); + loadX[i] = true; + } else X = c.getLocal("x" + i); + if (!loadX[j]) { + Y = c.teeLocal("x" + j, c.i64_load32_u(c.getLocal("x"), j * 4)); + loadX[j] = true; + } else Y = c.getLocal("x" + j); + return c.i64_mul(X, Y); + } + let c0 = "c0"; + let c1 = "c1"; + let c0_old = "c0_old"; + let c1_old = "c1_old"; + for (let k = 0; k < n32 * 2 - 1; k++) { + f.addCode(c.setLocal(c0, c.i64_const(0)), c.setLocal(c1, c.i64_const(0))); + for (let i = Math.max(0, k - n32 + 1); i < k + 1 >> 1 && i < n32; i++) { + const j = k - i; + f.addCode(c.setLocal(c0, c.i64_add(c.i64_and(c.getLocal(c0), c.i64_const(4294967295)), mulij(i, j)))); + f.addCode(c.setLocal(c1, c.i64_add(c.getLocal(c1), c.i64_shr_u(c.getLocal(c0), c.i64_const(32))))); + } + f.addCode(c.setLocal(c0, c.i64_shl(c.i64_and(c.getLocal(c0), c.i64_const(4294967295)), c.i64_const(1)))); + f.addCode(c.setLocal(c1, c.i64_add(c.i64_shl(c.getLocal(c1), c.i64_const(1)), c.i64_shr_u(c.getLocal(c0), c.i64_const(32))))); + if (k % 2 == 0) { + f.addCode(c.setLocal(c0, c.i64_add(c.i64_and(c.getLocal(c0), c.i64_const(4294967295)), mulij(k >> 1, k >> 1)))); + f.addCode(c.setLocal(c1, c.i64_add(c.getLocal(c1), c.i64_shr_u(c.getLocal(c0), c.i64_const(32))))); + } + if (k > 0) { + f.addCode(c.setLocal(c0, c.i64_add(c.i64_and(c.getLocal(c0), c.i64_const(4294967295)), c.i64_and(c.getLocal(c0_old), c.i64_const(4294967295))))); + f.addCode(c.setLocal(c1, c.i64_add(c.i64_add(c.getLocal(c1), c.i64_shr_u(c.getLocal(c0), c.i64_const(32))), c.getLocal(c1_old)))); + } + f.addCode(c.i64_store32(c.getLocal("r"), k * 4, c.getLocal(c0))); + f.addCode(c.setLocal(c0_old, c.getLocal(c1)), c.setLocal(c1_old, c.i64_shr_u(c.getLocal(c0_old), c.i64_const(32)))); + } + f.addCode(c.i64_store32(c.getLocal("r"), n32 * 4 * 2 - 4, c.getLocal(c0_old))); + } + function buildSquareOld() { + const f = module.addFunction(prefix + "_squareOld"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.getLocal("x"), c.getLocal("r"))); + } + function _buildMul1() { + const f = module.addFunction(prefix + "__mul1"); + f.addParam("px", "i32"); + f.addParam("y", "i64"); + f.addParam("pr", "i32"); + f.addLocal("c", "i64"); + const c = f.getCodeBuilder(); + f.addCode(c.setLocal("c", c.i64_mul(c.i64_load32_u(c.getLocal("px"), 0, 0), c.getLocal("y")))); + f.addCode(c.i64_store32(c.getLocal("pr"), 0, 0, c.getLocal("c"))); + for (let i = 1; i < n32; i++) { + f.addCode(c.setLocal("c", c.i64_add(c.i64_mul(c.i64_load32_u(c.getLocal("px"), 4 * i, 0), c.getLocal("y")), c.i64_shr_u(c.getLocal("c"), c.i64_const(32))))); + f.addCode(c.i64_store32(c.getLocal("pr"), i * 4, 0, c.getLocal("c"))); + } + } + function _buildAdd1() { + const f = module.addFunction(prefix + "__add1"); + f.addParam("x", "i32"); + f.addParam("y", "i64"); + f.addLocal("c", "i64"); + f.addLocal("px", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.setLocal("px", c.getLocal("x"))); + f.addCode(c.setLocal("c", c.i64_add(c.i64_load32_u(c.getLocal("px"), 0, 0), c.getLocal("y")))); + f.addCode(c.i64_store32(c.getLocal("px"), 0, 0, c.getLocal("c"))); + f.addCode(c.setLocal("c", c.i64_shr_u(c.getLocal("c"), c.i64_const(32)))); + f.addCode(c.block(c.loop(c.br_if(1, c.i64_eqz(c.getLocal("c"))), c.setLocal("px", c.i32_add(c.getLocal("px"), c.i32_const(4))), c.setLocal("c", c.i64_add(c.i64_load32_u(c.getLocal("px"), 0, 0), c.getLocal("c"))), c.i64_store32(c.getLocal("px"), 0, 0, c.getLocal("c")), c.setLocal("c", c.i64_shr_u(c.getLocal("c"), c.i64_const(32))), c.br(0)))); + } + function buildDiv() { + _buildMul1(); + _buildAdd1(); + const f = module.addFunction(prefix + "_div"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("c", "i32"); + f.addParam("r", "i32"); + f.addLocal("rr", "i32"); + f.addLocal("cc", "i32"); + f.addLocal("eX", "i32"); + f.addLocal("eY", "i32"); + f.addLocal("sy", "i64"); + f.addLocal("sx", "i64"); + f.addLocal("ec", "i32"); + const c = f.getCodeBuilder(); + const Y = c.i32_const(module.alloc(n8)); + const Caux = c.i32_const(module.alloc(n8)); + const Raux = c.i32_const(module.alloc(n8)); + const C = c.getLocal("cc"); + const R = c.getLocal("rr"); + const pr1 = module.alloc(n8 * 2); + const R1 = c.i32_const(pr1); + const R2 = c.i32_const(pr1 + n8); + f.addCode(c.if(c.getLocal("c"), c.setLocal("cc", c.getLocal("c")), c.setLocal("cc", Caux))); + f.addCode(c.if(c.getLocal("r"), c.setLocal("rr", c.getLocal("r")), c.setLocal("rr", Raux))); + f.addCode(c.call(prefix + "_copy", c.getLocal("x"), R)); + f.addCode(c.call(prefix + "_copy", c.getLocal("y"), Y)); + f.addCode(c.call(prefix + "_zero", C)); + f.addCode(c.call(prefix + "_zero", R1)); + f.addCode(c.setLocal("eX", c.i32_const(n8 - 1))); + f.addCode(c.setLocal("eY", c.i32_const(n8 - 1))); + f.addCode(c.block(c.loop(c.br_if(1, c.i32_or(c.i32_load8_u(c.i32_add(Y, c.getLocal("eY")), 0, 0), c.i32_eq(c.getLocal("eY"), c.i32_const(3)))), c.setLocal("eY", c.i32_sub(c.getLocal("eY"), c.i32_const(1))), c.br(0)))); + f.addCode(c.setLocal("sy", c.i64_add(c.i64_load32_u(c.i32_sub(c.i32_add(Y, c.getLocal("eY")), c.i32_const(3)), 0, 0), c.i64_const(1)))); + f.addCode(c.if(c.i64_eq(c.getLocal("sy"), c.i64_const(1)), c.drop(c.i64_div_u(c.i64_const(0), c.i64_const(0))))); + f.addCode(c.block(c.loop(c.block(c.loop(c.br_if(1, c.i32_or(c.i32_load8_u(c.i32_add(R, c.getLocal("eX")), 0, 0), c.i32_eq(c.getLocal("eX"), c.i32_const(7)))), c.setLocal("eX", c.i32_sub(c.getLocal("eX"), c.i32_const(1))), c.br(0))), c.setLocal("sx", c.i64_load(c.i32_sub(c.i32_add(R, c.getLocal("eX")), c.i32_const(7)), 0, 0)), c.setLocal("sx", c.i64_div_u(c.getLocal("sx"), c.getLocal("sy"))), c.setLocal("ec", c.i32_sub(c.i32_sub(c.getLocal("eX"), c.getLocal("eY")), c.i32_const(4))), c.block(c.loop(c.br_if(1, c.i32_and(c.i64_eqz(c.i64_and(c.getLocal("sx"), c.i64_const("0xFFFFFFFF00000000"))), c.i32_ge_s(c.getLocal("ec"), c.i32_const(0)))), c.setLocal("sx", c.i64_shr_u(c.getLocal("sx"), c.i64_const(8))), c.setLocal("ec", c.i32_add(c.getLocal("ec"), c.i32_const(1))), c.br(0))), c.if(c.i64_eqz(c.getLocal("sx")), [ + ...c.br_if(2, c.i32_eqz(c.call(prefix + "_gte", R, Y))), + ...c.setLocal("sx", c.i64_const(1)), + ...c.setLocal("ec", c.i32_const(0)) + ]), c.call(prefix + "__mul1", Y, c.getLocal("sx"), R2), c.drop(c.call(prefix + "_sub", R, c.i32_sub(R2, c.getLocal("ec")), R)), c.call(prefix + "__add1", c.i32_add(C, c.getLocal("ec")), c.getLocal("sx")), c.br(0)))); + } + function buildInverseMod() { + const f = module.addFunction(prefix + "_inverseMod"); + f.addParam("px", "i32"); + f.addParam("pm", "i32"); + f.addParam("pr", "i32"); + f.addLocal("t", "i32"); + f.addLocal("newt", "i32"); + f.addLocal("r", "i32"); + f.addLocal("qq", "i32"); + f.addLocal("qr", "i32"); + f.addLocal("newr", "i32"); + f.addLocal("swp", "i32"); + f.addLocal("x", "i32"); + f.addLocal("signt", "i32"); + f.addLocal("signnewt", "i32"); + f.addLocal("signx", "i32"); + const c = f.getCodeBuilder(); + const aux1 = c.i32_const(module.alloc(n8)); + const aux2 = c.i32_const(module.alloc(n8)); + const aux3 = c.i32_const(module.alloc(n8)); + const aux4 = c.i32_const(module.alloc(n8)); + const aux5 = c.i32_const(module.alloc(n8)); + const aux6 = c.i32_const(module.alloc(n8)); + const mulBuff = c.i32_const(module.alloc(n8 * 2)); + const aux7 = c.i32_const(module.alloc(n8)); + f.addCode(c.setLocal("t", aux1), c.call(prefix + "_zero", aux1), c.setLocal("signt", c.i32_const(0))); + f.addCode(c.setLocal("r", aux2), c.call(prefix + "_copy", c.getLocal("pm"), aux2)); + f.addCode(c.setLocal("newt", aux3), c.call(prefix + "_one", aux3), c.setLocal("signnewt", c.i32_const(0))); + f.addCode(c.setLocal("newr", aux4), c.call(prefix + "_copy", c.getLocal("px"), aux4)); + f.addCode(c.setLocal("qq", aux5)); + f.addCode(c.setLocal("qr", aux6)); + f.addCode(c.setLocal("x", aux7)); + f.addCode(c.block(c.loop(c.br_if(1, c.call(prefix + "_isZero", c.getLocal("newr"))), c.call(prefix + "_div", c.getLocal("r"), c.getLocal("newr"), c.getLocal("qq"), c.getLocal("qr")), c.call(prefix + "_mul", c.getLocal("qq"), c.getLocal("newt"), mulBuff), c.if(c.getLocal("signt"), c.if(c.getLocal("signnewt"), c.if(c.call(prefix + "_gte", mulBuff, c.getLocal("t")), [...c.drop(c.call(prefix + "_sub", mulBuff, c.getLocal("t"), c.getLocal("x"))), ...c.setLocal("signx", c.i32_const(0))], [...c.drop(c.call(prefix + "_sub", c.getLocal("t"), mulBuff, c.getLocal("x"))), ...c.setLocal("signx", c.i32_const(1))]), [...c.drop(c.call(prefix + "_add", mulBuff, c.getLocal("t"), c.getLocal("x"))), ...c.setLocal("signx", c.i32_const(1))]), c.if(c.getLocal("signnewt"), [...c.drop(c.call(prefix + "_add", mulBuff, c.getLocal("t"), c.getLocal("x"))), ...c.setLocal("signx", c.i32_const(0))], c.if(c.call(prefix + "_gte", c.getLocal("t"), mulBuff), [...c.drop(c.call(prefix + "_sub", c.getLocal("t"), mulBuff, c.getLocal("x"))), ...c.setLocal("signx", c.i32_const(0))], [...c.drop(c.call(prefix + "_sub", mulBuff, c.getLocal("t"), c.getLocal("x"))), ...c.setLocal("signx", c.i32_const(1))]))), c.setLocal("swp", c.getLocal("t")), c.setLocal("t", c.getLocal("newt")), c.setLocal("newt", c.getLocal("x")), c.setLocal("x", c.getLocal("swp")), c.setLocal("signt", c.getLocal("signnewt")), c.setLocal("signnewt", c.getLocal("signx")), c.setLocal("swp", c.getLocal("r")), c.setLocal("r", c.getLocal("newr")), c.setLocal("newr", c.getLocal("qr")), c.setLocal("qr", c.getLocal("swp")), c.br(0)))); + f.addCode(c.if(c.getLocal("signt"), c.drop(c.call(prefix + "_sub", c.getLocal("pm"), c.getLocal("t"), c.getLocal("pr"))), c.call(prefix + "_copy", c.getLocal("t"), c.getLocal("pr")))); + } + buildCopy(); + buildZero(); + buildIsZero(); + buildOne(); + buildEq(); + buildGte(); + buildAdd(); + buildSub(); + buildMul(); + buildSquare(); + buildSquareOld(); + buildDiv(); + buildInverseMod(); + module.exportFunction(prefix + "_copy"); + module.exportFunction(prefix + "_zero"); + module.exportFunction(prefix + "_one"); + module.exportFunction(prefix + "_isZero"); + module.exportFunction(prefix + "_eq"); + module.exportFunction(prefix + "_gte"); + module.exportFunction(prefix + "_add"); + module.exportFunction(prefix + "_sub"); + module.exportFunction(prefix + "_mul"); + module.exportFunction(prefix + "_square"); + module.exportFunction(prefix + "_squareOld"); + module.exportFunction(prefix + "_div"); + module.exportFunction(prefix + "_inverseMod"); + return prefix; +} +//#endregion +//#region src/build_timesscalar.js +function buildTimesScalar(module, fnName, elementLen, opAB, opAA, opCopy, opInit) { + const f = module.addFunction(fnName); + f.addParam("base", "i32"); + f.addParam("scalar", "i32"); + f.addParam("scalarLength", "i32"); + f.addParam("r", "i32"); + f.addLocal("i", "i32"); + f.addLocal("b", "i32"); + const c = f.getCodeBuilder(); + const aux = c.i32_const(module.alloc(elementLen)); + f.addCode(c.if(c.i32_eqz(c.getLocal("scalarLength")), [...c.call(opInit, c.getLocal("r")), ...c.ret([])])); + f.addCode(c.call(opCopy, c.getLocal("base"), aux)); + f.addCode(c.call(opInit, c.getLocal("r"))); + f.addCode(c.setLocal("i", c.getLocal("scalarLength"))); + f.addCode(c.block(c.loop(c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.setLocal("b", c.i32_load8_u(c.i32_add(c.getLocal("scalar"), c.getLocal("i")))), ...innerLoop(), c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.br(0)))); + function innerLoop() { + const code = []; + for (let i = 0; i < 8; i++) code.push(...c.call(opAA, c.getLocal("r"), c.getLocal("r")), ...c.if(c.i32_ge_u(c.getLocal("b"), c.i32_const(128 >> i)), [...c.setLocal("b", c.i32_sub(c.getLocal("b"), c.i32_const(128 >> i))), ...c.call(opAB, c.getLocal("r"), aux, c.getLocal("r"))])); + return code; + } +} +//#endregion +//#region src/build_batchinverse.js +var build_batchinverse_default = buildBatchInverse; +function buildBatchInverse(module, prefix) { + const n8 = module.modules[prefix].n64 * 8; + const f = module.addFunction(prefix + "_batchInverse"); + f.addParam("pIn", "i32"); + f.addParam("inStep", "i32"); + f.addParam("n", "i32"); + f.addParam("pOut", "i32"); + f.addParam("outStep", "i32"); + f.addLocal("itAux", "i32"); + f.addLocal("itIn", "i32"); + f.addLocal("itOut", "i32"); + f.addLocal("i", "i32"); + const c = f.getCodeBuilder(); + const AUX = c.i32_const(module.alloc(n8)); + f.addCode(c.setLocal("itAux", c.i32_load(c.i32_const(0))), c.i32_store(c.i32_const(0), c.i32_add(c.getLocal("itAux"), c.i32_mul(c.i32_add(c.getLocal("n"), c.i32_const(1)), c.i32_const(n8))))); + f.addCode(c.call(prefix + "_one", c.getLocal("itAux")), c.setLocal("itIn", c.getLocal("pIn")), c.setLocal("itAux", c.i32_add(c.getLocal("itAux"), c.i32_const(n8))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.if(c.call(prefix + "_isZero", c.getLocal("itIn")), c.call(prefix + "_copy", c.i32_sub(c.getLocal("itAux"), c.i32_const(n8)), c.getLocal("itAux")), c.call(prefix + "_mul", c.getLocal("itIn"), c.i32_sub(c.getLocal("itAux"), c.i32_const(n8)), c.getLocal("itAux"))), c.setLocal("itIn", c.i32_add(c.getLocal("itIn"), c.getLocal("inStep"))), c.setLocal("itAux", c.i32_add(c.getLocal("itAux"), c.i32_const(n8))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.setLocal("itIn", c.i32_sub(c.getLocal("itIn"), c.getLocal("inStep"))), c.setLocal("itAux", c.i32_sub(c.getLocal("itAux"), c.i32_const(n8))), c.setLocal("itOut", c.i32_add(c.getLocal("pOut"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.getLocal("outStep")))), c.call(prefix + "_inverse", c.getLocal("itAux"), c.getLocal("itAux")), c.block(c.loop(c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.if(c.call(prefix + "_isZero", c.getLocal("itIn")), [...c.call(prefix + "_copy", c.getLocal("itAux"), c.i32_sub(c.getLocal("itAux"), c.i32_const(n8))), ...c.call(prefix + "_zero", c.getLocal("itOut"))], [ + ...c.call(prefix + "_copy", c.i32_sub(c.getLocal("itAux"), c.i32_const(n8)), AUX), + ...c.call(prefix + "_mul", c.getLocal("itAux"), c.getLocal("itIn"), c.i32_sub(c.getLocal("itAux"), c.i32_const(n8))), + ...c.call(prefix + "_mul", c.getLocal("itAux"), AUX, c.getLocal("itOut")) + ]), c.setLocal("itIn", c.i32_sub(c.getLocal("itIn"), c.getLocal("inStep"))), c.setLocal("itOut", c.i32_sub(c.getLocal("itOut"), c.getLocal("outStep"))), c.setLocal("itAux", c.i32_sub(c.getLocal("itAux"), c.i32_const(n8))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + f.addCode(c.i32_store(c.i32_const(0), c.getLocal("itAux"))); +} +//#endregion +//#region src/build_batchconvertion.js +var build_batchconvertion_default = buildBatchConvertion$1; +function buildBatchConvertion$1(module, fnName, internalFnName, sizeIn, sizeOut, reverse) { + if (typeof reverse === "undefined") if (sizeIn < sizeOut) reverse = true; + else reverse = false; + const f = module.addFunction(fnName); + f.addParam("pIn", "i32"); + f.addParam("n", "i32"); + f.addParam("pOut", "i32"); + f.addLocal("i", "i32"); + f.addLocal("itIn", "i32"); + f.addLocal("itOut", "i32"); + const c = f.getCodeBuilder(); + if (reverse) f.addCode(c.setLocal("itIn", c.i32_add(c.getLocal("pIn"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.i32_const(sizeIn)))), c.setLocal("itOut", c.i32_add(c.getLocal("pOut"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.i32_const(sizeOut)))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.call(internalFnName, c.getLocal("itIn"), c.getLocal("itOut")), c.setLocal("itIn", c.i32_sub(c.getLocal("itIn"), c.i32_const(sizeIn))), c.setLocal("itOut", c.i32_sub(c.getLocal("itOut"), c.i32_const(sizeOut))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + else f.addCode(c.setLocal("itIn", c.getLocal("pIn")), c.setLocal("itOut", c.getLocal("pOut")), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.call(internalFnName, c.getLocal("itIn"), c.getLocal("itOut")), c.setLocal("itIn", c.i32_add(c.getLocal("itIn"), c.i32_const(sizeIn))), c.setLocal("itOut", c.i32_add(c.getLocal("itOut"), c.i32_const(sizeOut))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); +} +//#endregion +//#region src/build_batchop.js +var build_batchop_default = buildBatchConvertion; +function buildBatchConvertion(module, fnName, internalFnName, sizeIn, sizeOut, reverse) { + if (typeof reverse === "undefined") if (sizeIn < sizeOut) reverse = true; + else reverse = false; + const f = module.addFunction(fnName); + f.addParam("pIn1", "i32"); + f.addParam("pIn2", "i32"); + f.addParam("n", "i32"); + f.addParam("pOut", "i32"); + f.addLocal("i", "i32"); + f.addLocal("itIn1", "i32"); + f.addLocal("itIn2", "i32"); + f.addLocal("itOut", "i32"); + const c = f.getCodeBuilder(); + if (reverse) f.addCode(c.setLocal("itIn1", c.i32_add(c.getLocal("pIn1"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.i32_const(sizeIn)))), c.setLocal("itIn2", c.i32_add(c.getLocal("pIn2"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.i32_const(sizeIn)))), c.setLocal("itOut", c.i32_add(c.getLocal("pOut"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.i32_const(sizeOut)))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.call(internalFnName, c.getLocal("itIn1"), c.getLocal("itIn2"), c.getLocal("itOut")), c.setLocal("itIn1", c.i32_sub(c.getLocal("itIn1"), c.i32_const(sizeIn))), c.setLocal("itIn2", c.i32_sub(c.getLocal("itIn2"), c.i32_const(sizeIn))), c.setLocal("itOut", c.i32_sub(c.getLocal("itOut"), c.i32_const(sizeOut))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + else f.addCode(c.setLocal("itIn1", c.getLocal("pIn1")), c.setLocal("itIn2", c.getLocal("pIn2")), c.setLocal("itOut", c.getLocal("pOut")), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.call(internalFnName, c.getLocal("itIn1"), c.getLocal("itIn2"), c.getLocal("itOut")), c.setLocal("itIn1", c.i32_add(c.getLocal("itIn1"), c.i32_const(sizeIn))), c.setLocal("itIn2", c.i32_add(c.getLocal("itIn2"), c.i32_const(sizeIn))), c.setLocal("itOut", c.i32_add(c.getLocal("itOut"), c.i32_const(sizeOut))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); +} +//#endregion +//#region src/bigint.js +function compare(a, b) { + return a === b ? 0 : a > b ? 1 : -1; +} +function square(n) { + return n * n; +} +function isOdd(n) { + return n % 2n !== 0n; +} +function isEven(n) { + return n % 2n === 0n; +} +function isNegative(n) { + return n < 0n; +} +function isPositive(n) { + return n > 0n; +} +function bitLength(n) { + if (isNegative(n)) return n.toString(2).length - 1; + else return n.toString(2).length; +} +function abs(n) { + return n < 0n ? -n : n; +} +function isUnit(n) { + return abs(n) === 1n; +} +function modInv(a, n) { + var t = 0n, newT = 1n, r = n, newR = abs(a), q, lastT, lastR; + while (newR !== 0n) { + q = r / newR; + lastT = t; + lastR = r; + t = newT; + r = newR; + newT = lastT - q * newT; + newR = lastR - q * newR; + } + if (!isUnit(r)) throw new Error(a.toString() + " and " + n.toString() + " are not co-prime"); + if (compare(t, 0n) === -1) t = t + n; + if (isNegative(a)) return -t; + return t; +} +function modPow(n, exp, mod) { + if (mod === 0n) throw new Error("Cannot take modPow with modulus 0"); + var r = 1n, base = n % mod; + if (isNegative(exp)) { + exp = exp * -1n; + base = modInv(base, mod); + } + while (isPositive(exp)) { + if (base === 0n) return 0n; + if (isOdd(exp)) r = r * base % mod; + exp = exp / 2n; + base = square(base) % mod; + } + return r; +} +function compareAbs(a, b) { + a = a >= 0n ? a : -a; + b = b >= 0n ? b : -b; + return a === b ? 0 : a > b ? 1 : -1; +} +function isDivisibleBy(a, n) { + if (n === 0n) return false; + if (isUnit(n)) return true; + if (compareAbs(n, 2n) === 0) return isEven(a); + return a % n === 0n; +} +function isBasicPrime(v) { + var n = abs(v); + if (isUnit(n)) return false; + if (n === 2n || n === 3n || n === 5n) return true; + if (isEven(n) || isDivisibleBy(n, 3n) || isDivisibleBy(n, 5n)) return false; + if (n < 49n) return true; +} +function prev(n) { + return n - 1n; +} +function isKnownPrime(v) { + switch (abs(v)) { + case 21888242871839275222246405745257275088696311157297823662689037894645226208583n: + case 21888242871839275222246405745257275088548364400416034343698204186575808495617n: + case 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787n: + case 52435875175126190479447740508185965837690552500527637822603658699938581184513n: + case 41898490967918953402344214791240637128170709919953949071783502921025352812571106773058893763790338921418070971888458477323173057491593855069696241854796396165721416325350064441470418137846398469611935719059908164220784476160001n: return true; + } + return false; +} +function millerRabinTest(n, a) { + var nPrev = prev(n), b = nPrev, r = 0, d, i, x; + while (isEven(b)) b = b / 2n, r++; + next: for (i = 0; i < a.length; i++) { + if (n < a[i]) continue; + x = modPow(BigInt(a[i]), b, n); + if (isUnit(x) || x === nPrev) continue; + for (d = r - 1; d != 0; d--) { + x = square(x) % n; + if (isUnit(x)) return false; + if (x === nPrev) continue next; + } + return false; + } + return true; +} +function isPrime(p) { + let isPrime; + isPrime = isKnownPrime(p); + if (isPrime !== void 0) return isPrime; + isPrime = isBasicPrime(p); + if (isPrime !== void 0) return isPrime; + var n = abs(p); + var bits = bitLength(n); + if (bits <= 64) return millerRabinTest(n, [ + 2, + 3, + 5, + 7, + 11, + 13, + 17, + 19, + 23, + 29, + 31, + 37 + ]); + var logN = Math.log(2) * Number(bits); + var t = Math.ceil(logN); + for (var a = [], i = 0; i < t; i++) a.push(BigInt(i + 2)); + return millerRabinTest(n, a); +} +//#endregion +//#region src/build_f1m.js +function buildF1m(module, _q, _prefix, _intPrefix) { + const q = BigInt(_q); + const n64 = Math.floor((bitLength(q - 1n) - 1) / 64) + 1; + const n32 = n64 * 2; + const n8 = n64 * 8; + const prefix = _prefix || "f1m"; + if (module.modules[prefix]) return prefix; + const intPrefix = buildInt(module, n64, _intPrefix); + const pq = module.alloc(n8, bigInt2BytesLE(q, n8)); + const pR2 = module.alloc(bigInt2BytesLE(square(1n << BigInt(n64 * 64)) % q, n8)); + const pOne = module.alloc(bigInt2BytesLE((1n << BigInt(n64 * 64)) % q, n8)); + const pZero = module.alloc(bigInt2BytesLE(0n, n8)); + const _minusOne = q - 1n; + const _e = _minusOne >> 1n; + const pe = module.alloc(n8, bigInt2BytesLE(_e, n8)); + const _ePlusOne = _e + 1n; + const pePlusOne = module.alloc(n8, bigInt2BytesLE(_ePlusOne, n8)); + module.modules[prefix] = { + pq, + pR2, + n64, + q, + pOne, + pZero, + pePlusOne + }; + function buildOne() { + const f = module.addFunction(prefix + "_one"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(intPrefix + "_copy", c.i32_const(pOne), c.getLocal("pr"))); + } + function buildAdd() { + const f = module.addFunction(prefix + "_add"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.if(c.call(intPrefix + "_add", c.getLocal("x"), c.getLocal("y"), c.getLocal("r")), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))), c.if(c.call(intPrefix + "_gte", c.getLocal("r"), c.i32_const(pq)), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r")))))); + } + function buildSub() { + const f = module.addFunction(prefix + "_sub"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.if(c.call(intPrefix + "_sub", c.getLocal("x"), c.getLocal("y"), c.getLocal("r")), c.drop(c.call(intPrefix + "_add", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))))); + } + function buildNeg() { + const f = module.addFunction(prefix + "_neg"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefix + "_sub", c.i32_const(pZero), c.getLocal("x"), c.getLocal("r"))); + } + function buildIsNegative() { + const f = module.addFunction(prefix + "_isNegative"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const AUX = c.i32_const(module.alloc(n8)); + f.addCode(c.call(prefix + "_fromMontgomery", c.getLocal("x"), AUX), c.call(intPrefix + "_gte", AUX, c.i32_const(pePlusOne))); + } + function buildSign() { + const f = module.addFunction(prefix + "_sign"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const AUX = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(intPrefix + "_isZero", c.getLocal("x")), c.ret(c.i32_const(0))), c.call(prefix + "_fromMontgomery", c.getLocal("x"), AUX), c.if(c.call(intPrefix + "_gte", AUX, c.i32_const(pePlusOne)), c.ret(c.i32_const(-1))), c.ret(c.i32_const(1))); + } + function buildMReduct() { + const carries = module.alloc(n32 * n32 * 8); + const f = module.addFunction(prefix + "_mReduct"); + f.addParam("t", "i32"); + f.addParam("r", "i32"); + f.addLocal("np32", "i64"); + f.addLocal("c", "i64"); + f.addLocal("m", "i64"); + const c = f.getCodeBuilder(); + const np32 = Number(4294967296n - modInv(q, 4294967296n)); + f.addCode(c.setLocal("np32", c.i64_const(np32))); + for (let i = 0; i < n32; i++) { + f.addCode(c.setLocal("c", c.i64_const(0))); + f.addCode(c.setLocal("m", c.i64_and(c.i64_mul(c.i64_load32_u(c.getLocal("t"), i * 4), c.getLocal("np32")), c.i64_const("0xFFFFFFFF")))); + for (let j = 0; j < n32; j++) { + f.addCode(c.setLocal("c", c.i64_add(c.i64_add(c.i64_load32_u(c.getLocal("t"), (i + j) * 4), c.i64_shr_u(c.getLocal("c"), c.i64_const(32))), c.i64_mul(c.i64_load32_u(c.i32_const(pq), j * 4), c.getLocal("m"))))); + f.addCode(c.i64_store32(c.getLocal("t"), (i + j) * 4, c.getLocal("c"))); + } + f.addCode(c.i64_store32(c.i32_const(carries), i * 4, c.i64_shr_u(c.getLocal("c"), c.i64_const(32)))); + } + f.addCode(c.call(prefix + "_add", c.i32_const(carries), c.i32_add(c.getLocal("t"), c.i32_const(n32 * 4)), c.getLocal("r"))); + } + function buildMul() { + const f = module.addFunction(prefix + "_mul"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + f.addLocal("yi", "i64"); + f.addLocal("m", "i64"); + f.addLocal("cc", "i64"); + f.addLocal("s", "i64"); + for (let i = 0; i < n32; i++) f.addLocal("x" + i, "i64"); + for (let j = 0; j <= n32 + 1; j++) f.addLocal("t" + j, "i64"); + const c = f.getCodeBuilder(); + const np32 = Number(4294967296n - modInv(q, 4294967296n)); + const qLimbs = []; + for (let j = 0; j < n32; j++) qLimbs.push(Number(q >> BigInt(32 * j) & 4294967295n)); + const MASK32 = 4294967295; + const noCarry = q < 1n << BigInt(32 * n32 - 1); + for (let i = 0; i < n32; i++) f.addCode(c.setLocal("x" + i, c.i64_load32_u(c.getLocal("x"), i * 4))); + for (let i = 0; i < n32; i++) { + f.addCode(c.setLocal("yi", c.i64_load32_u(c.getLocal("y"), i * 4))); + f.addCode(c.setLocal("s", c.i64_add(c.getLocal("t0"), c.i64_mul(c.getLocal("x0"), c.getLocal("yi")))), c.setLocal("t0", c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))); + for (let j = 1; j < n32; j++) f.addCode(c.setLocal("s", c.i64_add(c.i64_add(c.getLocal("t" + j), c.i64_mul(c.getLocal("x" + j), c.getLocal("yi"))), c.getLocal("cc"))), c.setLocal("t" + j, c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))); + if (noCarry) f.addCode(c.setLocal("t" + n32, c.getLocal("cc"))); + else f.addCode(c.setLocal("s", c.i64_add(c.getLocal("t" + n32), c.getLocal("cc"))), c.setLocal("t" + n32, c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("t" + (n32 + 1), c.i64_add(c.getLocal("t" + (n32 + 1)), c.i64_shr_u(c.getLocal("s"), c.i64_const(32))))); + f.addCode(c.setLocal("m", c.i64_and(c.i64_mul(c.getLocal("t0"), c.i64_const(np32)), c.i64_const(MASK32))), c.setLocal("s", c.i64_add(c.getLocal("t0"), c.i64_mul(c.getLocal("m"), c.i64_const(qLimbs[0])))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))); + for (let j = 1; j < n32; j++) f.addCode(c.setLocal("s", c.i64_add(c.i64_add(c.getLocal("t" + j), c.i64_mul(c.getLocal("m"), c.i64_const(qLimbs[j]))), c.getLocal("cc"))), c.setLocal("t" + (j - 1), c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))); + if (noCarry) f.addCode(c.setLocal("t" + (n32 - 1), c.i64_add(c.getLocal("t" + n32), c.getLocal("cc")))); + else f.addCode(c.setLocal("s", c.i64_add(c.getLocal("t" + n32), c.getLocal("cc"))), c.setLocal("t" + (n32 - 1), c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("t" + n32, c.i64_add(c.getLocal("t" + (n32 + 1)), c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))), c.setLocal("t" + (n32 + 1), c.i64_const(0))); + } + for (let j = 0; j < n32; j++) f.addCode(c.i64_store32(c.getLocal("r"), j * 4, c.getLocal("t" + j))); + if (noCarry) f.addCode(c.if(c.call(intPrefix + "_gte", c.getLocal("r"), c.i32_const(pq)), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))))); + else f.addCode(c.if(c.i32_wrap_i64(c.getLocal("t" + n32)), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))), c.if(c.call(intPrefix + "_gte", c.getLocal("r"), c.i32_const(pq)), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r")))))); + } + function buildSquare() { + const f = module.addFunction(prefix + "_square"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + f.addLocal("m", "i64"); + f.addLocal("cc", "i64"); + f.addLocal("s", "i64"); + f.addLocal("p", "i64"); + for (let i = 0; i < n32; i++) f.addLocal("x" + i, "i64"); + for (let j = 0; j <= n32 + 1; j++) f.addLocal("t" + j, "i64"); + const c = f.getCodeBuilder(); + const np32 = Number(4294967296n - modInv(q, 4294967296n)); + const qLimbs = []; + for (let j = 0; j < n32; j++) qLimbs.push(Number(q >> BigInt(32 * j) & 4294967295n)); + const MASK32 = 4294967295; + for (let i = 0; i < n32; i++) f.addCode(c.setLocal("x" + i, c.i64_load32_u(c.getLocal("x"), i * 4))); + for (let i = 0; i < n32; i++) { + f.addCode(c.setLocal("s", c.i64_add(c.getLocal("t" + i), c.i64_mul(c.getLocal("x" + i), c.getLocal("x" + i)))), c.setLocal("t" + i, c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))); + for (let j = i + 1; j < n32; j++) f.addCode(c.setLocal("p", c.i64_mul(c.getLocal("x" + j), c.getLocal("x" + i))), c.setLocal("s", c.i64_add(c.i64_add(c.getLocal("t" + j), c.i64_shl(c.i64_and(c.getLocal("p"), c.i64_const(MASK32)), c.i64_const(1))), c.getLocal("cc"))), c.setLocal("t" + j, c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("cc", c.i64_add(c.i64_shr_u(c.getLocal("s"), c.i64_const(32)), c.i64_shl(c.i64_shr_u(c.getLocal("p"), c.i64_const(32)), c.i64_const(1))))); + f.addCode(c.setLocal("s", c.i64_add(c.getLocal("t" + n32), c.getLocal("cc"))), c.setLocal("t" + n32, c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("t" + (n32 + 1), c.i64_add(c.getLocal("t" + (n32 + 1)), c.i64_shr_u(c.getLocal("s"), c.i64_const(32))))); + f.addCode(c.setLocal("m", c.i64_and(c.i64_mul(c.getLocal("t0"), c.i64_const(np32)), c.i64_const(MASK32))), c.setLocal("s", c.i64_add(c.getLocal("t0"), c.i64_mul(c.getLocal("m"), c.i64_const(qLimbs[0])))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))); + for (let j = 1; j < n32; j++) f.addCode(c.setLocal("s", c.i64_add(c.i64_add(c.getLocal("t" + j), c.i64_mul(c.getLocal("m"), c.i64_const(qLimbs[j]))), c.getLocal("cc"))), c.setLocal("t" + (j - 1), c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("cc", c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))); + f.addCode(c.setLocal("s", c.i64_add(c.getLocal("t" + n32), c.getLocal("cc"))), c.setLocal("t" + (n32 - 1), c.i64_and(c.getLocal("s"), c.i64_const(MASK32))), c.setLocal("t" + n32, c.i64_add(c.getLocal("t" + (n32 + 1)), c.i64_shr_u(c.getLocal("s"), c.i64_const(32)))), c.setLocal("t" + (n32 + 1), c.i64_const(0))); + } + for (let j = 0; j < n32; j++) f.addCode(c.i64_store32(c.getLocal("r"), j * 4, c.getLocal("t" + j))); + f.addCode(c.if(c.i32_wrap_i64(c.getLocal("t" + n32)), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))), c.if(c.call(intPrefix + "_gte", c.getLocal("r"), c.i32_const(pq)), c.drop(c.call(intPrefix + "_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r")))))); + } + function buildSquareOld() { + const f = module.addFunction(prefix + "_squareOld"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.getLocal("x"), c.getLocal("r"))); + } + function buildToMontgomery() { + const f = module.addFunction(prefix + "_toMontgomery"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.i32_const(pR2), c.getLocal("r"))); + } + function buildFromMontgomery() { + const pAux2 = module.alloc(n8 * 2); + const f = module.addFunction(prefix + "_fromMontgomery"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(intPrefix + "_copy", c.getLocal("x"), c.i32_const(pAux2))); + f.addCode(c.call(intPrefix + "_zero", c.i32_const(pAux2 + n8))); + f.addCode(c.call(prefix + "_mReduct", c.i32_const(pAux2), c.getLocal("r"))); + } + function buildInverse() { + const f = module.addFunction(prefix + "_inverse"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefix + "_fromMontgomery", c.getLocal("x"), c.getLocal("r"))); + f.addCode(c.call(intPrefix + "_inverseMod", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))); + f.addCode(c.call(prefix + "_toMontgomery", c.getLocal("r"), c.getLocal("r"))); + } + let _nqr = 2n; + if (isPrime(q)) while (modPow(_nqr, _e, q) !== _minusOne) _nqr = _nqr + 1n; + let s2 = 0; + let _t = _minusOne; + while (!isOdd(_t) && _t !== 0n) { + s2++; + _t = _t >> 1n; + } + const pt = module.alloc(n8, bigInt2BytesLE(_t, n8)); + const _nqrToT = modPow(_nqr, _t, q); + const pNqrToT = module.alloc(bigInt2BytesLE((_nqrToT << BigInt(n64 * 64)) % q, n8)); + const _tPlusOneOver2 = _t + 1n >> 1n; + const ptPlusOneOver2 = module.alloc(n8, bigInt2BytesLE(_tPlusOneOver2, n8)); + function buildSqrt() { + const f = module.addFunction(prefix + "_sqrt"); + f.addParam("n", "i32"); + f.addParam("r", "i32"); + f.addLocal("m", "i32"); + f.addLocal("i", "i32"); + f.addLocal("j", "i32"); + const c = f.getCodeBuilder(); + const ONE = c.i32_const(pOne); + const C = c.i32_const(module.alloc(n8)); + const T = c.i32_const(module.alloc(n8)); + const R = c.i32_const(module.alloc(n8)); + const SQ = c.i32_const(module.alloc(n8)); + const B = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("n")), c.ret(c.call(prefix + "_zero", c.getLocal("r")))), c.setLocal("m", c.i32_const(s2)), c.call(prefix + "_copy", c.i32_const(pNqrToT), C), c.call(prefix + "_exp", c.getLocal("n"), c.i32_const(pt), c.i32_const(n8), T), c.call(prefix + "_exp", c.getLocal("n"), c.i32_const(ptPlusOneOver2), c.i32_const(n8), R), c.block(c.loop(c.br_if(1, c.call(prefix + "_eq", T, ONE)), c.call(prefix + "_square", T, SQ), c.setLocal("i", c.i32_const(1)), c.block(c.loop(c.br_if(1, c.call(prefix + "_eq", SQ, ONE)), c.call(prefix + "_square", SQ, SQ), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.call(prefix + "_copy", C, B), c.setLocal("j", c.i32_sub(c.i32_sub(c.getLocal("m"), c.getLocal("i")), c.i32_const(1))), c.block(c.loop(c.br_if(1, c.i32_eqz(c.getLocal("j"))), c.call(prefix + "_square", B, B), c.setLocal("j", c.i32_sub(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.setLocal("m", c.getLocal("i")), c.call(prefix + "_square", B, C), c.call(prefix + "_mul", T, C, T), c.call(prefix + "_mul", R, B, R), c.br(0))), c.if(c.call(prefix + "_isNegative", R), c.call(prefix + "_neg", R, c.getLocal("r")), c.call(prefix + "_copy", R, c.getLocal("r")))); + } + function buildIsSquare() { + const f = module.addFunction(prefix + "_isSquare"); + f.addParam("n", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const ONE = c.i32_const(pOne); + const AUX = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("n")), c.ret(c.i32_const(1))), c.call(prefix + "_exp", c.getLocal("n"), c.i32_const(pe), c.i32_const(n8), AUX), c.call(prefix + "_eq", AUX, ONE)); + } + function buildLoad() { + const f = module.addFunction(prefix + "_load"); + f.addParam("scalar", "i32"); + f.addParam("scalarLen", "i32"); + f.addParam("r", "i32"); + f.addLocal("p", "i32"); + f.addLocal("l", "i32"); + f.addLocal("i", "i32"); + f.addLocal("j", "i32"); + const c = f.getCodeBuilder(); + const R = c.i32_const(module.alloc(n8)); + const pAux = module.alloc(n8); + const AUX = c.i32_const(pAux); + f.addCode(c.call(intPrefix + "_zero", c.getLocal("r")), c.setLocal("i", c.i32_const(n8)), c.setLocal("p", c.getLocal("scalar")), c.block(c.loop(c.br_if(1, c.i32_gt_u(c.getLocal("i"), c.getLocal("scalarLen"))), c.if(c.i32_eq(c.getLocal("i"), c.i32_const(n8)), c.call(prefix + "_one", R), c.call(prefix + "_mul", R, c.i32_const(pR2), R)), c.call(prefix + "_mul", c.getLocal("p"), R, AUX), c.call(prefix + "_add", c.getLocal("r"), AUX, c.getLocal("r")), c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(n8))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(n8))), c.br(0))), c.setLocal("l", c.i32_rem_u(c.getLocal("scalarLen"), c.i32_const(n8))), c.if(c.i32_eqz(c.getLocal("l")), c.ret([])), c.call(intPrefix + "_zero", AUX), c.setLocal("j", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("l"))), c.i32_store8(c.getLocal("j"), pAux, c.i32_load8_u(c.getLocal("p"))), c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(1))), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.if(c.i32_eq(c.getLocal("i"), c.i32_const(n8)), c.call(prefix + "_one", R), c.call(prefix + "_mul", R, c.i32_const(pR2), R)), c.call(prefix + "_mul", AUX, R, AUX), c.call(prefix + "_add", c.getLocal("r"), AUX, c.getLocal("r"))); + } + function buildTimesScalar$3() { + const f = module.addFunction(prefix + "_timesScalar"); + f.addParam("x", "i32"); + f.addParam("scalar", "i32"); + f.addParam("scalarLen", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const AUX = c.i32_const(module.alloc(n8)); + f.addCode(c.call(prefix + "_load", c.getLocal("scalar"), c.getLocal("scalarLen"), AUX), c.call(prefix + "_toMontgomery", AUX, AUX), c.call(prefix + "_mul", c.getLocal("x"), AUX, c.getLocal("r"))); + } + function buildIsOne() { + const f = module.addFunction(prefix + "_isOne"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + f.addCode(c.ret(c.call(intPrefix + "_eq", c.getLocal("x"), c.i32_const(pOne)))); + } + module.exportFunction(intPrefix + "_copy", prefix + "_copy"); + module.exportFunction(intPrefix + "_zero", prefix + "_zero"); + module.exportFunction(intPrefix + "_isZero", prefix + "_isZero"); + module.exportFunction(intPrefix + "_eq", prefix + "_eq"); + buildIsOne(); + buildAdd(); + buildSub(); + buildNeg(); + buildMReduct(); + buildMul(); + buildSquare(); + buildSquareOld(); + buildToMontgomery(); + buildFromMontgomery(); + buildIsNegative(); + buildSign(); + buildInverse(); + buildOne(); + buildLoad(); + buildTimesScalar$3(); + build_batchinverse_default(module, prefix); + build_batchconvertion_default(module, prefix + "_batchToMontgomery", prefix + "_toMontgomery", n8, n8); + build_batchconvertion_default(module, prefix + "_batchFromMontgomery", prefix + "_fromMontgomery", n8, n8); + build_batchconvertion_default(module, prefix + "_batchNeg", prefix + "_neg", n8, n8); + build_batchop_default(module, prefix + "_batchAdd", prefix + "_add", n8, n8); + build_batchop_default(module, prefix + "_batchSub", prefix + "_sub", n8, n8); + build_batchop_default(module, prefix + "_batchMul", prefix + "_mul", n8, n8); + module.exportFunction(prefix + "_add"); + module.exportFunction(prefix + "_sub"); + module.exportFunction(prefix + "_neg"); + module.exportFunction(prefix + "_isNegative"); + module.exportFunction(prefix + "_isOne"); + module.exportFunction(prefix + "_sign"); + module.exportFunction(prefix + "_mReduct"); + module.exportFunction(prefix + "_mul"); + module.exportFunction(prefix + "_square"); + module.exportFunction(prefix + "_squareOld"); + module.exportFunction(prefix + "_fromMontgomery"); + module.exportFunction(prefix + "_toMontgomery"); + module.exportFunction(prefix + "_inverse"); + module.exportFunction(prefix + "_one"); + module.exportFunction(prefix + "_load"); + module.exportFunction(prefix + "_timesScalar"); + buildTimesScalar(module, prefix + "_exp", n8, prefix + "_mul", prefix + "_square", intPrefix + "_copy", prefix + "_one"); + module.exportFunction(prefix + "_exp"); + module.exportFunction(prefix + "_batchInverse"); + if (isPrime(q)) { + buildSqrt(); + buildIsSquare(); + module.exportFunction(prefix + "_sqrt"); + module.exportFunction(prefix + "_isSquare"); + } + module.exportFunction(prefix + "_batchToMontgomery"); + module.exportFunction(prefix + "_batchFromMontgomery"); + return prefix; +} +//#endregion +//#region src/build_f1.js +function buildF1(module, _q, _prefix, _f1mPrefix, _intPrefix) { + const q = BigInt(_q); + const n64 = Math.floor((bitLength(q - 1n) - 1) / 64) + 1; + const n8 = n64 * 8; + const prefix = _prefix || "f1"; + if (module.modules[prefix]) return prefix; + module.modules[prefix] = { n64 }; + const intPrefix = _intPrefix || "int"; + const f1mPrefix = buildF1m(module, q, _f1mPrefix, intPrefix); + const pR2 = module.modules[f1mPrefix].pR2; + const pq = module.modules[f1mPrefix].pq; + const pePlusOne = module.modules[f1mPrefix].pePlusOne; + function buildMul() { + const pAux1 = module.alloc(n8); + const f = module.addFunction(prefix + "_mul"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(f1mPrefix + "_mul", c.getLocal("x"), c.getLocal("y"), c.i32_const(pAux1))); + f.addCode(c.call(f1mPrefix + "_mul", c.i32_const(pAux1), c.i32_const(pR2), c.getLocal("r"))); + } + function buildSquare() { + const f = module.addFunction(prefix + "_square"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.getLocal("x"), c.getLocal("r"))); + } + function buildInverse() { + const f = module.addFunction(prefix + "_inverse"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(intPrefix + "_inverseMod", c.getLocal("x"), c.i32_const(pq), c.getLocal("r"))); + } + function buildIsNegative() { + const f = module.addFunction(prefix + "_isNegative"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(intPrefix + "_gte", c.getLocal("x"), c.i32_const(pePlusOne))); + } + buildMul(); + buildSquare(); + buildInverse(); + buildIsNegative(); + module.exportFunction(f1mPrefix + "_add", prefix + "_add"); + module.exportFunction(f1mPrefix + "_sub", prefix + "_sub"); + module.exportFunction(f1mPrefix + "_neg", prefix + "_neg"); + module.exportFunction(prefix + "_mul"); + module.exportFunction(prefix + "_square"); + module.exportFunction(prefix + "_inverse"); + module.exportFunction(prefix + "_isNegative"); + module.exportFunction(f1mPrefix + "_copy", prefix + "_copy"); + module.exportFunction(f1mPrefix + "_zero", prefix + "_zero"); + module.exportFunction(f1mPrefix + "_one", prefix + "_one"); + module.exportFunction(f1mPrefix + "_isZero", prefix + "_isZero"); + module.exportFunction(f1mPrefix + "_eq", prefix + "_eq"); + return prefix; +} +//#endregion +//#region src/build_f2m.js +function buildF2m(module, mulNonResidueFn, prefix, f1mPrefix) { + if (module.modules[prefix]) return prefix; + const f1n8 = module.modules[f1mPrefix].n64 * 8; + const q = module.modules[f1mPrefix].q; + module.modules[prefix] = { n64: module.modules[f1mPrefix].n64 * 2 }; + function buildAdd() { + const f = module.addFunction(prefix + "_add"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + f.addCode(c.call(f1mPrefix + "_add", x0, y0, r0), c.call(f1mPrefix + "_add", x1, y1, r1)); + } + function buildTimesScalar$2() { + const f = module.addFunction(prefix + "_timesScalar"); + f.addParam("x", "i32"); + f.addParam("scalar", "i32"); + f.addParam("scalarLen", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + f.addCode(c.call(f1mPrefix + "_timesScalar", x0, c.getLocal("scalar"), c.getLocal("scalarLen"), r0), c.call(f1mPrefix + "_timesScalar", x1, c.getLocal("scalar"), c.getLocal("scalarLen"), r1)); + } + function buildSub() { + const f = module.addFunction(prefix + "_sub"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + f.addCode(c.call(f1mPrefix + "_sub", x0, y0, r0), c.call(f1mPrefix + "_sub", x1, y1, r1)); + } + function buildNeg() { + const f = module.addFunction(prefix + "_neg"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + f.addCode(c.call(f1mPrefix + "_neg", x0, r0), c.call(f1mPrefix + "_neg", x1, r1)); + } + function buildConjugate() { + const f = module.addFunction(prefix + "_conjugate"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + f.addCode(c.call(f1mPrefix + "_copy", x0, r0), c.call(f1mPrefix + "_neg", x1, r1)); + } + function buildIsNegative() { + const f = module.addFunction(prefix + "_isNegative"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + f.addCode(c.if(c.call(f1mPrefix + "_isZero", x1), c.ret(c.call(f1mPrefix + "_isNegative", x0))), c.ret(c.call(f1mPrefix + "_isNegative", x1))); + } + function buildMul() { + const f = module.addFunction(prefix + "_mul"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const A = c.i32_const(module.alloc(f1n8)); + const B = c.i32_const(module.alloc(f1n8)); + const C = c.i32_const(module.alloc(f1n8)); + const D = c.i32_const(module.alloc(f1n8)); + f.addCode(c.call(f1mPrefix + "_mul", x0, y0, A), c.call(f1mPrefix + "_mul", x1, y1, B), c.call(f1mPrefix + "_add", x0, x1, C), c.call(f1mPrefix + "_add", y0, y1, D), c.call(f1mPrefix + "_mul", C, D, C), c.call(mulNonResidueFn, B, r0), c.call(f1mPrefix + "_add", A, r0, r0), c.call(f1mPrefix + "_add", A, B, r1), c.call(f1mPrefix + "_sub", C, r1, r1)); + } + function buildMul1() { + const f = module.addFunction(prefix + "_mul1"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const y = c.getLocal("y"); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + f.addCode(c.call(f1mPrefix + "_mul", x0, y, r0), c.call(f1mPrefix + "_mul", x1, y, r1)); + } + function buildSquare() { + const f = module.addFunction(prefix + "_square"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const AB = c.i32_const(module.alloc(f1n8)); + const APB = c.i32_const(module.alloc(f1n8)); + const APNB = c.i32_const(module.alloc(f1n8)); + const ABPNAB = c.i32_const(module.alloc(f1n8)); + f.addCode(c.call(f1mPrefix + "_mul", x0, x1, AB), c.call(f1mPrefix + "_add", x0, x1, APB), c.call(mulNonResidueFn, x1, APNB), c.call(f1mPrefix + "_add", x0, APNB, APNB), c.call(mulNonResidueFn, AB, ABPNAB), c.call(f1mPrefix + "_add", ABPNAB, AB, ABPNAB), c.call(f1mPrefix + "_mul", APB, APNB, r0), c.call(f1mPrefix + "_sub", r0, ABPNAB, r0), c.call(f1mPrefix + "_add", AB, AB, r1)); + } + function buildToMontgomery() { + const f = module.addFunction(prefix + "_toMontgomery"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + f.addCode(c.call(f1mPrefix + "_toMontgomery", x0, r0), c.call(f1mPrefix + "_toMontgomery", x1, r1)); + } + function buildFromMontgomery() { + const f = module.addFunction(prefix + "_fromMontgomery"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + f.addCode(c.call(f1mPrefix + "_fromMontgomery", x0, r0), c.call(f1mPrefix + "_fromMontgomery", x1, r1)); + } + function buildCopy() { + const f = module.addFunction(prefix + "_copy"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + f.addCode(c.call(f1mPrefix + "_copy", x0, r0), c.call(f1mPrefix + "_copy", x1, r1)); + } + function buildZero() { + const f = module.addFunction(prefix + "_zero"); + f.addParam("x", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + f.addCode(c.call(f1mPrefix + "_zero", x0), c.call(f1mPrefix + "_zero", x1)); + } + function buildOne() { + const f = module.addFunction(prefix + "_one"); + f.addParam("x", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + f.addCode(c.call(f1mPrefix + "_one", x0), c.call(f1mPrefix + "_zero", x1)); + } + function buildEq() { + const f = module.addFunction(prefix + "_eq"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + f.addCode(c.i32_and(c.call(f1mPrefix + "_eq", x0, y0), c.call(f1mPrefix + "_eq", x1, y1))); + } + function buildIsZero() { + const f = module.addFunction(prefix + "_isZero"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + f.addCode(c.i32_and(c.call(f1mPrefix + "_isZero", x0), c.call(f1mPrefix + "_isZero", x1))); + } + function buildInverse() { + const f = module.addFunction(prefix + "_inverse"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const t0 = c.i32_const(module.alloc(f1n8)); + const t1 = c.i32_const(module.alloc(f1n8)); + const t2 = c.i32_const(module.alloc(f1n8)); + const t3 = c.i32_const(module.alloc(f1n8)); + f.addCode(c.call(f1mPrefix + "_square", x0, t0), c.call(f1mPrefix + "_square", x1, t1), c.call(mulNonResidueFn, t1, t2), c.call(f1mPrefix + "_sub", t0, t2, t2), c.call(f1mPrefix + "_inverse", t2, t3), c.call(f1mPrefix + "_mul", x0, t3, r0), c.call(f1mPrefix + "_mul", x1, t3, r1), c.call(f1mPrefix + "_neg", r1, r1)); + } + function buildSign() { + const f = module.addFunction(prefix + "_sign"); + f.addParam("x", "i32"); + f.addLocal("s", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + f.addCode(c.setLocal("s", c.call(f1mPrefix + "_sign", x1)), c.if(c.getLocal("s"), c.ret(c.getLocal("s"))), c.ret(c.call(f1mPrefix + "_sign", x0))); + } + function buildIsOne() { + const f = module.addFunction(prefix + "_isOne"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + f.addCode(c.ret(c.i32_and(c.call(f1mPrefix + "_isOne", x0), c.call(f1mPrefix + "_isZero", x1)))); + } + function buildSqrt() { + const f = module.addFunction(prefix + "_sqrt"); + f.addParam("a", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const e34 = c.i32_const(module.alloc(bigInt2BytesLE((BigInt(q || 0) - 3n) / 4n, f1n8))); + const e12 = c.i32_const(module.alloc(bigInt2BytesLE((BigInt(q || 0) - 1n) / 2n, f1n8))); + const a = c.getLocal("a"); + const a1 = c.i32_const(module.alloc(f1n8 * 2)); + const alpha = c.i32_const(module.alloc(f1n8 * 2)); + const a0 = c.i32_const(module.alloc(f1n8 * 2)); + const pn1 = module.alloc(f1n8 * 2); + const n1 = c.i32_const(pn1); + const n1a = c.i32_const(pn1); + const n1b = c.i32_const(pn1 + f1n8); + const x0 = c.i32_const(module.alloc(f1n8 * 2)); + const b = c.i32_const(module.alloc(f1n8 * 2)); + f.addCode(c.call(prefix + "_one", n1), c.call(prefix + "_neg", n1, n1), c.call(prefix + "_exp", a, e34, c.i32_const(f1n8), a1), c.call(prefix + "_square", a1, alpha), c.call(prefix + "_mul", a, alpha, alpha), c.call(prefix + "_conjugate", alpha, a0), c.call(prefix + "_mul", a0, alpha, a0), c.if(c.call(prefix + "_eq", a0, n1), c.unreachable()), c.call(prefix + "_mul", a1, a, x0), c.if(c.call(prefix + "_eq", alpha, n1), [ + ...c.call(f1mPrefix + "_zero", n1a), + ...c.call(f1mPrefix + "_one", n1b), + ...c.call(prefix + "_mul", n1, x0, c.getLocal("pr")) + ], [ + ...c.call(prefix + "_one", b), + ...c.call(prefix + "_add", b, alpha, b), + ...c.call(prefix + "_exp", b, e12, c.i32_const(f1n8), b), + ...c.call(prefix + "_mul", b, x0, c.getLocal("pr")) + ])); + } + function buildIsSquare() { + const f = module.addFunction(prefix + "_isSquare"); + f.addParam("a", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const e34 = c.i32_const(module.alloc(bigInt2BytesLE((BigInt(q || 0) - 3n) / 4n, f1n8))); + const a = c.getLocal("a"); + const a1 = c.i32_const(module.alloc(f1n8 * 2)); + const alpha = c.i32_const(module.alloc(f1n8 * 2)); + const a0 = c.i32_const(module.alloc(f1n8 * 2)); + const pn1 = module.alloc(f1n8 * 2); + const n1 = c.i32_const(pn1); + f.addCode(c.call(prefix + "_one", n1), c.call(prefix + "_neg", n1, n1), c.call(prefix + "_exp", a, e34, c.i32_const(f1n8), a1), c.call(prefix + "_square", a1, alpha), c.call(prefix + "_mul", a, alpha, alpha), c.call(prefix + "_conjugate", alpha, a0), c.call(prefix + "_mul", a0, alpha, a0), c.if(c.call(prefix + "_eq", a0, n1), c.ret(c.i32_const(0))), c.ret(c.i32_const(1))); + } + buildIsZero(); + buildIsOne(); + buildZero(); + buildOne(); + buildCopy(); + buildMul(); + buildMul1(); + buildSquare(); + buildAdd(); + buildSub(); + buildNeg(); + buildConjugate(); + buildToMontgomery(); + buildFromMontgomery(); + buildEq(); + buildInverse(); + buildTimesScalar$2(); + buildSign(); + buildIsNegative(); + module.exportFunction(prefix + "_isZero"); + module.exportFunction(prefix + "_isOne"); + module.exportFunction(prefix + "_zero"); + module.exportFunction(prefix + "_one"); + module.exportFunction(prefix + "_copy"); + module.exportFunction(prefix + "_mul"); + module.exportFunction(prefix + "_mul1"); + module.exportFunction(prefix + "_square"); + module.exportFunction(prefix + "_add"); + module.exportFunction(prefix + "_sub"); + module.exportFunction(prefix + "_neg"); + module.exportFunction(prefix + "_sign"); + module.exportFunction(prefix + "_conjugate"); + module.exportFunction(prefix + "_fromMontgomery"); + module.exportFunction(prefix + "_toMontgomery"); + module.exportFunction(prefix + "_eq"); + module.exportFunction(prefix + "_inverse"); + build_batchinverse_default(module, prefix); + buildTimesScalar(module, prefix + "_exp", f1n8 * 2, prefix + "_mul", prefix + "_square", prefix + "_copy", prefix + "_one"); + buildSqrt(); + buildIsSquare(); + module.exportFunction(prefix + "_exp"); + module.exportFunction(prefix + "_timesScalar"); + module.exportFunction(prefix + "_batchInverse"); + module.exportFunction(prefix + "_sqrt"); + module.exportFunction(prefix + "_isSquare"); + module.exportFunction(prefix + "_isNegative"); + return prefix; +} +//#endregion +//#region src/build_f3m.js +function buildF3m(module, mulNonResidueFn, prefix, f1mPrefix) { + if (module.modules[prefix]) return prefix; + const f1n8 = module.modules[f1mPrefix].n64 * 8; + module.modules[prefix] = { n64: module.modules[f1mPrefix].n64 * 3 }; + function buildAdd() { + const f = module.addFunction(prefix + "_add"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + const y2 = c.i32_add(c.getLocal("y"), c.i32_const(2 * f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8)); + f.addCode(c.call(f1mPrefix + "_add", x0, y0, r0), c.call(f1mPrefix + "_add", x1, y1, r1), c.call(f1mPrefix + "_add", x2, y2, r2)); + } + function buildTimesScalar$1() { + const f = module.addFunction(prefix + "_timesScalar"); + f.addParam("x", "i32"); + f.addParam("scalar", "i32"); + f.addParam("scalarLen", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8)); + f.addCode(c.call(f1mPrefix + "_timesScalar", x0, c.getLocal("scalar"), c.getLocal("scalarLen"), r0), c.call(f1mPrefix + "_timesScalar", x1, c.getLocal("scalar"), c.getLocal("scalarLen"), r1), c.call(f1mPrefix + "_timesScalar", x2, c.getLocal("scalar"), c.getLocal("scalarLen"), r2)); + } + function buildSub() { + const f = module.addFunction(prefix + "_sub"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + const y2 = c.i32_add(c.getLocal("y"), c.i32_const(2 * f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8)); + f.addCode(c.call(f1mPrefix + "_sub", x0, y0, r0), c.call(f1mPrefix + "_sub", x1, y1, r1), c.call(f1mPrefix + "_sub", x2, y2, r2)); + } + function buildNeg() { + const f = module.addFunction(prefix + "_neg"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8)); + f.addCode(c.call(f1mPrefix + "_neg", x0, r0), c.call(f1mPrefix + "_neg", x1, r1), c.call(f1mPrefix + "_neg", x2, r2)); + } + function buildIsNegative() { + const f = module.addFunction(prefix + "_isNegative"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + f.addCode(c.if(c.call(f1mPrefix + "_isZero", x2), c.if(c.call(f1mPrefix + "_isZero", x1), c.ret(c.call(f1mPrefix + "_isNegative", x0)), c.ret(c.call(f1mPrefix + "_isNegative", x1)))), c.ret(c.call(f1mPrefix + "_isNegative", x2))); + } + function buildMul() { + const f = module.addFunction(prefix + "_mul"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + const cd = f.getCodeBuilder(); + const a = cd.getLocal("x"); + const b = cd.i32_add(cd.getLocal("x"), cd.i32_const(f1n8)); + const c = cd.i32_add(cd.getLocal("x"), cd.i32_const(2 * f1n8)); + const A = cd.getLocal("y"); + const B = cd.i32_add(cd.getLocal("y"), cd.i32_const(f1n8)); + const C = cd.i32_add(cd.getLocal("y"), cd.i32_const(2 * f1n8)); + const r0 = cd.getLocal("r"); + const r1 = cd.i32_add(cd.getLocal("r"), cd.i32_const(f1n8)); + const r2 = cd.i32_add(cd.getLocal("r"), cd.i32_const(2 * f1n8)); + const aA = cd.i32_const(module.alloc(f1n8)); + const bB = cd.i32_const(module.alloc(f1n8)); + const cC = cd.i32_const(module.alloc(f1n8)); + const a_b = cd.i32_const(module.alloc(f1n8)); + const A_B = cd.i32_const(module.alloc(f1n8)); + const a_c = cd.i32_const(module.alloc(f1n8)); + const A_C = cd.i32_const(module.alloc(f1n8)); + const b_c = cd.i32_const(module.alloc(f1n8)); + const B_C = cd.i32_const(module.alloc(f1n8)); + const aA_bB = cd.i32_const(module.alloc(f1n8)); + const aA_cC = cd.i32_const(module.alloc(f1n8)); + const bB_cC = cd.i32_const(module.alloc(f1n8)); + const AUX = cd.i32_const(module.alloc(f1n8)); + f.addCode(cd.call(f1mPrefix + "_mul", a, A, aA), cd.call(f1mPrefix + "_mul", b, B, bB), cd.call(f1mPrefix + "_mul", c, C, cC), cd.call(f1mPrefix + "_add", a, b, a_b), cd.call(f1mPrefix + "_add", A, B, A_B), cd.call(f1mPrefix + "_add", a, c, a_c), cd.call(f1mPrefix + "_add", A, C, A_C), cd.call(f1mPrefix + "_add", b, c, b_c), cd.call(f1mPrefix + "_add", B, C, B_C), cd.call(f1mPrefix + "_add", aA, bB, aA_bB), cd.call(f1mPrefix + "_add", aA, cC, aA_cC), cd.call(f1mPrefix + "_add", bB, cC, bB_cC), cd.call(f1mPrefix + "_mul", b_c, B_C, r0), cd.call(f1mPrefix + "_sub", r0, bB_cC, r0), cd.call(mulNonResidueFn, r0, r0), cd.call(f1mPrefix + "_add", aA, r0, r0), cd.call(f1mPrefix + "_mul", a_b, A_B, r1), cd.call(f1mPrefix + "_sub", r1, aA_bB, r1), cd.call(mulNonResidueFn, cC, AUX), cd.call(f1mPrefix + "_add", r1, AUX, r1), cd.call(f1mPrefix + "_mul", a_c, A_C, r2), cd.call(f1mPrefix + "_sub", r2, aA_cC, r2), cd.call(f1mPrefix + "_add", r2, bB, r2)); + } + function buildSquare() { + const f = module.addFunction(prefix + "_square"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const A = c.getLocal("x"); + const B = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const C = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8)); + const s0 = c.i32_const(module.alloc(f1n8)); + const ab = c.i32_const(module.alloc(f1n8)); + const s1 = c.i32_const(module.alloc(f1n8)); + const s2 = c.i32_const(module.alloc(f1n8)); + const bc = c.i32_const(module.alloc(f1n8)); + const s3 = c.i32_const(module.alloc(f1n8)); + const s4 = c.i32_const(module.alloc(f1n8)); + f.addCode(c.call(f1mPrefix + "_square", A, s0), c.call(f1mPrefix + "_mul", A, B, ab), c.call(f1mPrefix + "_add", ab, ab, s1), c.call(f1mPrefix + "_sub", A, B, s2), c.call(f1mPrefix + "_add", s2, C, s2), c.call(f1mPrefix + "_square", s2, s2), c.call(f1mPrefix + "_mul", B, C, bc), c.call(f1mPrefix + "_add", bc, bc, s3), c.call(f1mPrefix + "_square", C, s4), c.call(mulNonResidueFn, s3, r0), c.call(f1mPrefix + "_add", s0, r0, r0), c.call(mulNonResidueFn, s4, r1), c.call(f1mPrefix + "_add", s1, r1, r1), c.call(f1mPrefix + "_add", s0, s4, r2), c.call(f1mPrefix + "_sub", s3, r2, r2), c.call(f1mPrefix + "_add", s2, r2, r2), c.call(f1mPrefix + "_add", s1, r2, r2)); + } + function buildToMontgomery() { + const f = module.addFunction(prefix + "_toMontgomery"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8)); + f.addCode(c.call(f1mPrefix + "_toMontgomery", x0, r0), c.call(f1mPrefix + "_toMontgomery", x1, r1), c.call(f1mPrefix + "_toMontgomery", x2, r2)); + } + function buildFromMontgomery() { + const f = module.addFunction(prefix + "_fromMontgomery"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8)); + f.addCode(c.call(f1mPrefix + "_fromMontgomery", x0, r0), c.call(f1mPrefix + "_fromMontgomery", x1, r1), c.call(f1mPrefix + "_fromMontgomery", x2, r2)); + } + function buildCopy() { + const f = module.addFunction(prefix + "_copy"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8)); + f.addCode(c.call(f1mPrefix + "_copy", x0, r0), c.call(f1mPrefix + "_copy", x1, r1), c.call(f1mPrefix + "_copy", x2, r2)); + } + function buildZero() { + const f = module.addFunction(prefix + "_zero"); + f.addParam("x", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + f.addCode(c.call(f1mPrefix + "_zero", x0), c.call(f1mPrefix + "_zero", x1), c.call(f1mPrefix + "_zero", x2)); + } + function buildOne() { + const f = module.addFunction(prefix + "_one"); + f.addParam("x", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + f.addCode(c.call(f1mPrefix + "_one", x0), c.call(f1mPrefix + "_zero", x1), c.call(f1mPrefix + "_zero", x2)); + } + function buildEq() { + const f = module.addFunction(prefix + "_eq"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + const y2 = c.i32_add(c.getLocal("y"), c.i32_const(2 * f1n8)); + f.addCode(c.i32_and(c.i32_and(c.call(f1mPrefix + "_eq", x0, y0), c.call(f1mPrefix + "_eq", x1, y1)), c.call(f1mPrefix + "_eq", x2, y2))); + } + function buildIsZero() { + const f = module.addFunction(prefix + "_isZero"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + f.addCode(c.i32_and(c.i32_and(c.call(f1mPrefix + "_isZero", x0), c.call(f1mPrefix + "_isZero", x1)), c.call(f1mPrefix + "_isZero", x2))); + } + function buildInverse() { + const f = module.addFunction(prefix + "_inverse"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f1n8)); + const t0 = c.i32_const(module.alloc(f1n8)); + const t1 = c.i32_const(module.alloc(f1n8)); + const t2 = c.i32_const(module.alloc(f1n8)); + const t3 = c.i32_const(module.alloc(f1n8)); + const t4 = c.i32_const(module.alloc(f1n8)); + const t5 = c.i32_const(module.alloc(f1n8)); + const c0 = c.i32_const(module.alloc(f1n8)); + const c1 = c.i32_const(module.alloc(f1n8)); + const c2 = c.i32_const(module.alloc(f1n8)); + const t6 = c.i32_const(module.alloc(f1n8)); + const AUX = c.i32_const(module.alloc(f1n8)); + f.addCode(c.call(f1mPrefix + "_square", x0, t0), c.call(f1mPrefix + "_square", x1, t1), c.call(f1mPrefix + "_square", x2, t2), c.call(f1mPrefix + "_mul", x0, x1, t3), c.call(f1mPrefix + "_mul", x0, x2, t4), c.call(f1mPrefix + "_mul", x1, x2, t5), c.call(mulNonResidueFn, t5, c0), c.call(f1mPrefix + "_sub", t0, c0, c0), c.call(mulNonResidueFn, t2, c1), c.call(f1mPrefix + "_sub", c1, t3, c1), c.call(f1mPrefix + "_sub", t1, t4, c2), c.call(f1mPrefix + "_mul", x2, c1, t6), c.call(f1mPrefix + "_mul", x1, c2, AUX), c.call(f1mPrefix + "_add", t6, AUX, t6), c.call(mulNonResidueFn, t6, t6), c.call(f1mPrefix + "_mul", x0, c0, AUX), c.call(f1mPrefix + "_add", AUX, t6, t6), c.call(f1mPrefix + "_inverse", t6, t6), c.call(f1mPrefix + "_mul", t6, c0, r0), c.call(f1mPrefix + "_mul", t6, c1, r1), c.call(f1mPrefix + "_mul", t6, c2, r2)); + } + function buildSign() { + const f = module.addFunction(prefix + "_sign"); + f.addParam("x", "i32"); + f.addLocal("s", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f1n8)); + f.addCode(c.setLocal("s", c.call(f1mPrefix + "_sign", x2)), c.if(c.getLocal("s"), c.ret(c.getLocal("s"))), c.setLocal("s", c.call(f1mPrefix + "_sign", x1)), c.if(c.getLocal("s"), c.ret(c.getLocal("s"))), c.ret(c.call(f1mPrefix + "_sign", x0))); + } + function buildIsOne() { + const f = module.addFunction(prefix + "_isOne"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8 * 2)); + f.addCode(c.ret(c.i32_and(c.i32_and(c.call(f1mPrefix + "_isOne", x0), c.call(f1mPrefix + "_isZero", x1)), c.call(f1mPrefix + "_isZero", x2)))); + } + buildIsZero(); + buildIsOne(); + buildZero(); + buildOne(); + buildCopy(); + buildMul(); + buildSquare(); + buildAdd(); + buildSub(); + buildNeg(); + buildSign(); + buildToMontgomery(); + buildFromMontgomery(); + buildEq(); + buildInverse(); + buildTimesScalar$1(); + buildIsNegative(); + module.exportFunction(prefix + "_isZero"); + module.exportFunction(prefix + "_isOne"); + module.exportFunction(prefix + "_zero"); + module.exportFunction(prefix + "_one"); + module.exportFunction(prefix + "_copy"); + module.exportFunction(prefix + "_mul"); + module.exportFunction(prefix + "_square"); + module.exportFunction(prefix + "_add"); + module.exportFunction(prefix + "_sub"); + module.exportFunction(prefix + "_neg"); + module.exportFunction(prefix + "_sign"); + module.exportFunction(prefix + "_fromMontgomery"); + module.exportFunction(prefix + "_toMontgomery"); + module.exportFunction(prefix + "_eq"); + module.exportFunction(prefix + "_inverse"); + build_batchinverse_default(module, prefix); + buildTimesScalar(module, prefix + "_exp", f1n8 * 3, prefix + "_mul", prefix + "_square", prefix + "_copy", prefix + "_one"); + module.exportFunction(prefix + "_exp"); + module.exportFunction(prefix + "_timesScalar"); + module.exportFunction(prefix + "_batchInverse"); + module.exportFunction(prefix + "_isNegative"); + return prefix; +} +//#endregion +//#region src/build_timesscalarnaf.js +function buildTimesScalarNAF(module, fnName, elementLen, opAB, opAA, opAmB, opCopy, opInit) { + const f = module.addFunction(fnName); + f.addParam("base", "i32"); + f.addParam("scalar", "i32"); + f.addParam("scalarLength", "i32"); + f.addParam("r", "i32"); + f.addLocal("old0", "i32"); + f.addLocal("nbits", "i32"); + f.addLocal("i", "i32"); + f.addLocal("last", "i32"); + f.addLocal("cur", "i32"); + f.addLocal("carry", "i32"); + f.addLocal("p", "i32"); + const c = f.getCodeBuilder(); + const aux = c.i32_const(module.alloc(elementLen)); + function getBit(IDX) { + return c.i32_and(c.i32_shr_u(c.i32_load(c.i32_add(c.getLocal("scalar"), c.i32_and(c.i32_shr_u(IDX, c.i32_const(3)), c.i32_const(4294967292)))), c.i32_and(IDX, c.i32_const(31))), c.i32_const(1)); + } + function pushBit(b) { + return [...c.i32_store8(c.getLocal("p"), c.i32_const(b)), ...c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(1)))]; + } + f.addCode(c.if(c.i32_eqz(c.getLocal("scalarLength")), [...c.call(opInit, c.getLocal("r")), ...c.ret([])]), c.setLocal("nbits", c.i32_shl(c.getLocal("scalarLength"), c.i32_const(3))), c.setLocal("old0", c.i32_load(c.i32_const(0))), c.setLocal("p", c.getLocal("old0")), c.i32_store(c.i32_const(0), c.i32_and(c.i32_add(c.i32_add(c.getLocal("old0"), c.i32_const(32)), c.getLocal("nbits")), c.i32_const(4294967288))), c.setLocal("i", c.i32_const(1)), c.setLocal("last", getBit(c.i32_const(0))), c.setLocal("carry", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("nbits"))), c.setLocal("cur", getBit(c.getLocal("i"))), c.if(c.getLocal("last"), c.if(c.getLocal("cur"), c.if(c.getLocal("carry"), [ + ...c.setLocal("last", c.i32_const(0)), + ...c.setLocal("carry", c.i32_const(1)), + ...pushBit(1) + ], [ + ...c.setLocal("last", c.i32_const(0)), + ...c.setLocal("carry", c.i32_const(1)), + ...pushBit(255) + ]), c.if(c.getLocal("carry"), [ + ...c.setLocal("last", c.i32_const(0)), + ...c.setLocal("carry", c.i32_const(1)), + ...pushBit(255) + ], [ + ...c.setLocal("last", c.i32_const(0)), + ...c.setLocal("carry", c.i32_const(0)), + ...pushBit(1) + ])), c.if(c.getLocal("cur"), c.if(c.getLocal("carry"), [ + ...c.setLocal("last", c.i32_const(0)), + ...c.setLocal("carry", c.i32_const(1)), + ...pushBit(0) + ], [ + ...c.setLocal("last", c.i32_const(1)), + ...c.setLocal("carry", c.i32_const(0)), + ...pushBit(0) + ]), c.if(c.getLocal("carry"), [ + ...c.setLocal("last", c.i32_const(1)), + ...c.setLocal("carry", c.i32_const(0)), + ...pushBit(0) + ], [ + ...c.setLocal("last", c.i32_const(0)), + ...c.setLocal("carry", c.i32_const(0)), + ...pushBit(0) + ]))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.if(c.getLocal("last"), c.if(c.getLocal("carry"), [ + ...pushBit(255), + ...pushBit(0), + ...pushBit(1) + ], [...pushBit(1)]), c.if(c.getLocal("carry"), [...pushBit(0), ...pushBit(1)])), c.setLocal("p", c.i32_sub(c.getLocal("p"), c.i32_const(1))), c.call(opCopy, c.getLocal("base"), aux), c.call(opInit, c.getLocal("r")), c.block(c.loop(c.call(opAA, c.getLocal("r"), c.getLocal("r")), c.setLocal("cur", c.i32_load8_u(c.getLocal("p"))), c.if(c.getLocal("cur"), c.if(c.i32_eq(c.getLocal("cur"), c.i32_const(1)), c.call(opAB, c.getLocal("r"), aux, c.getLocal("r")), c.call(opAmB, c.getLocal("r"), aux, c.getLocal("r")))), c.br_if(1, c.i32_eq(c.getLocal("old0"), c.getLocal("p"))), c.setLocal("p", c.i32_sub(c.getLocal("p"), c.i32_const(1))), c.br(0))), c.i32_store(c.i32_const(0), c.getLocal("old0"))); +} +//#endregion +//#region src/build_multiexp.js +function buildMultiexp(module, prefix, fnName, opAdd, opSub, n8b) { + const n8g = module.modules[prefix].n64 * 8; + const accReduce = module.alloc(n8g); + const aux = module.alloc(n8g); + function buildGetChunk() { + const f = module.addFunction(fnName + "_getChunk"); + f.addParam("pScalar", "i32"); + f.addParam("scalarSize", "i32"); + f.addParam("startBit", "i32"); + f.addParam("chunkSize", "i32"); + f.addLocal("bitsToEnd", "i32"); + f.addLocal("mask", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + f.addCode(c.setLocal("bitsToEnd", c.i32_sub(c.i32_mul(c.getLocal("scalarSize"), c.i32_const(8)), c.getLocal("startBit"))), c.if(c.i32_gt_s(c.getLocal("chunkSize"), c.getLocal("bitsToEnd")), c.setLocal("mask", c.i32_sub(c.i32_shl(c.i32_const(1), c.getLocal("bitsToEnd")), c.i32_const(1))), c.setLocal("mask", c.i32_sub(c.i32_shl(c.i32_const(1), c.getLocal("chunkSize")), c.i32_const(1)))), c.i32_and(c.i32_shr_u(c.i32_load(c.i32_add(c.getLocal("pScalar"), c.i32_shr_u(c.getLocal("startBit"), c.i32_const(3))), 0, 0), c.i32_and(c.getLocal("startBit"), c.i32_const(7))), c.getLocal("mask"))); + } + function buildRecode() { + const f = module.addFunction(fnName + "_recode"); + f.addParam("pScalars", "i32"); + f.addParam("scalarSize", "i32"); + f.addParam("n", "i32"); + f.addParam("chunkSize", "i32"); + f.addParam("nChunks", "i32"); + f.addParam("pCarry", "i32"); + f.addLocal("i", "i32"); + f.addLocal("j", "i32"); + f.addLocal("nWin", "i32"); + f.addLocal("itScalar", "i32"); + f.addLocal("carry", "i32"); + f.addLocal("raw", "i32"); + f.addLocal("half", "i32"); + f.addLocal("scalarBits", "i32"); + f.addLocal("startBit", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.setLocal("half", c.i32_shl(c.i32_const(1), c.i32_sub(c.getLocal("chunkSize"), c.i32_const(1)))), c.setLocal("scalarBits", c.i32_shl(c.getLocal("scalarSize"), c.i32_const(3))), c.setLocal("nWin", c.i32_add(c.getLocal("nChunks"), c.i32_const(1))), c.setLocal("itScalar", c.getLocal("pScalars")), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.setLocal("carry", c.i32_const(0)), c.setLocal("j", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("nWin"))), c.i32_store8(c.i32_add(c.getLocal("pCarry"), c.i32_add(c.i32_mul(c.getLocal("j"), c.getLocal("n")), c.getLocal("i"))), c.getLocal("carry")), c.setLocal("startBit", c.i32_mul(c.getLocal("j"), c.getLocal("chunkSize"))), c.if(c.i32_lt_s(c.getLocal("startBit"), c.getLocal("scalarBits")), c.setLocal("raw", c.call(fnName + "_getChunk", c.getLocal("itScalar"), c.getLocal("scalarSize"), c.getLocal("startBit"), c.getLocal("chunkSize"))), c.setLocal("raw", c.i32_const(0))), c.if(c.i32_ge_s(c.i32_add(c.getLocal("raw"), c.getLocal("carry")), c.getLocal("half")), c.setLocal("carry", c.i32_const(1)), c.setLocal("carry", c.i32_const(0))), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.setLocal("itScalar", c.i32_add(c.getLocal("itScalar"), c.getLocal("scalarSize"))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + } + function buildMutiexpChunk() { + const f = module.addFunction(fnName + "_chunk"); + f.addParam("pBases", "i32"); + f.addParam("pScalars", "i32"); + f.addParam("scalarSize", "i32"); + f.addParam("pCarry", "i32"); + f.addParam("n", "i32"); + f.addParam("windowIdx", "i32"); + f.addParam("chunkSize", "i32"); + f.addParam("pr", "i32"); + f.addLocal("itBase", "i32"); + f.addLocal("itScalar", "i32"); + f.addLocal("itCarry", "i32"); + f.addLocal("i", "i32"); + f.addLocal("j", "i32"); + f.addLocal("nTable", "i32"); + f.addLocal("full", "i32"); + f.addLocal("scalarBits", "i32"); + f.addLocal("startBit", "i32"); + f.addLocal("pTable", "i32"); + f.addLocal("raw", "i32"); + f.addLocal("d", "i32"); + f.addLocal("pIdxTable", "i32"); + f.addLocal("itB", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.if(c.i32_eqz(c.getLocal("n")), [...c.call(prefix + "_zero", c.getLocal("pr")), ...c.ret([])]), c.setLocal("nTable", c.i32_shl(c.i32_const(1), c.i32_sub(c.getLocal("chunkSize"), c.i32_const(1)))), c.setLocal("full", c.i32_shl(c.i32_const(1), c.getLocal("chunkSize"))), c.setLocal("scalarBits", c.i32_shl(c.getLocal("scalarSize"), c.i32_const(3))), c.setLocal("startBit", c.i32_mul(c.getLocal("windowIdx"), c.getLocal("chunkSize"))), c.setLocal("pTable", c.i32_load(c.i32_const(0))), c.i32_store(c.i32_const(0), c.i32_add(c.getLocal("pTable"), c.i32_mul(c.getLocal("nTable"), c.i32_const(n8g)))), c.setLocal("j", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("nTable"))), c.call(prefix + "_zero", c.i32_add(c.getLocal("pTable"), c.i32_mul(c.getLocal("j"), c.i32_const(n8g)))), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.setLocal("itBase", c.getLocal("pBases")), c.setLocal("itScalar", c.getLocal("pScalars")), c.setLocal("itCarry", c.i32_add(c.getLocal("pCarry"), c.i32_mul(c.getLocal("windowIdx"), c.getLocal("n")))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.if(c.i32_lt_s(c.getLocal("startBit"), c.getLocal("scalarBits")), c.setLocal("raw", c.call(fnName + "_getChunk", c.getLocal("itScalar"), c.getLocal("scalarSize"), c.getLocal("startBit"), c.getLocal("chunkSize"))), c.setLocal("raw", c.i32_const(0))), c.setLocal("d", c.i32_add(c.getLocal("raw"), c.i32_load8_u(c.getLocal("itCarry")))), c.if(c.i32_ge_s(c.getLocal("d"), c.getLocal("nTable")), c.setLocal("d", c.i32_sub(c.getLocal("d"), c.getLocal("full")))), c.if(c.i32_gt_s(c.getLocal("d"), c.i32_const(0)), [...c.setLocal("pIdxTable", c.i32_add(c.getLocal("pTable"), c.i32_mul(c.i32_sub(c.getLocal("d"), c.i32_const(1)), c.i32_const(n8g)))), ...c.call(opAdd, c.getLocal("pIdxTable"), c.getLocal("itBase"), c.getLocal("pIdxTable"))], c.if(c.i32_lt_s(c.getLocal("d"), c.i32_const(0)), [...c.setLocal("pIdxTable", c.i32_add(c.getLocal("pTable"), c.i32_mul(c.i32_sub(c.i32_const(-1), c.getLocal("d")), c.i32_const(n8g)))), ...c.call(opSub, c.getLocal("pIdxTable"), c.getLocal("itBase"), c.getLocal("pIdxTable"))])), c.setLocal("itScalar", c.i32_add(c.getLocal("itScalar"), c.getLocal("scalarSize"))), c.setLocal("itCarry", c.i32_add(c.getLocal("itCarry"), c.i32_const(1))), c.setLocal("itBase", c.i32_add(c.getLocal("itBase"), c.i32_const(n8b))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.setLocal("itB", c.i32_add(c.getLocal("pTable"), c.i32_mul(c.i32_sub(c.getLocal("nTable"), c.i32_const(1)), c.i32_const(n8g)))), c.call(prefix + "_copy", c.getLocal("itB"), c.getLocal("pr")), c.call(prefix + "_copy", c.getLocal("itB"), c.i32_const(accReduce)), c.setLocal("itB", c.i32_sub(c.getLocal("itB"), c.i32_const(n8g))), c.block(c.loop(c.br_if(1, c.i32_lt_u(c.getLocal("itB"), c.getLocal("pTable"))), c.call(prefix + "_add", c.i32_const(accReduce), c.getLocal("itB"), c.i32_const(accReduce)), c.call(prefix + "_add", c.getLocal("pr"), c.i32_const(accReduce), c.getLocal("pr")), c.setLocal("itB", c.i32_sub(c.getLocal("itB"), c.i32_const(n8g))), c.br(0))), c.i32_store(c.i32_const(0), c.getLocal("pTable"))); + } + function buildMultiexp() { + const f = module.addFunction(fnName); + f.addParam("pBases", "i32"); + f.addParam("pScalars", "i32"); + f.addParam("scalarSize", "i32"); + f.addParam("n", "i32"); + f.addParam("pr", "i32"); + f.addLocal("chunkSize", "i32"); + f.addLocal("nChunks", "i32"); + f.addLocal("nWin", "i32"); + f.addLocal("pCarry", "i32"); + f.addLocal("savedFree", "i32"); + f.addLocal("windowIdx", "i32"); + f.addLocal("j", "i32"); + const c = f.getCodeBuilder(); + const pTSizes = module.alloc([ + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 16, + 16, + 15, + 14, + 13, + 13, + 12, + 11, + 10, + 9, + 8, + 7, + 7, + 6, + 5, + 4, + 3, + 2, + 1, + 1, + 1, + 1 + ]); + f.addCode(c.call(prefix + "_zero", c.getLocal("pr")), c.if(c.i32_eqz(c.getLocal("n")), c.ret([])), c.setLocal("chunkSize", c.i32_load8_u(c.i32_clz(c.getLocal("n")), pTSizes)), c.if(c.i32_lt_s(c.getLocal("chunkSize"), c.i32_const(2)), c.setLocal("chunkSize", c.i32_const(2))), c.setLocal("nChunks", c.i32_add(c.i32_div_u(c.i32_sub(c.i32_shl(c.getLocal("scalarSize"), c.i32_const(3)), c.i32_const(1)), c.getLocal("chunkSize")), c.i32_const(1))), c.setLocal("nWin", c.i32_add(c.getLocal("nChunks"), c.i32_const(1))), c.setLocal("savedFree", c.i32_load(c.i32_const(0))), c.setLocal("pCarry", c.getLocal("savedFree")), c.i32_store(c.i32_const(0), c.i32_and(c.i32_add(c.i32_add(c.getLocal("savedFree"), c.i32_mul(c.getLocal("nWin"), c.getLocal("n"))), c.i32_const(3)), c.i32_const(-4))), c.call(fnName + "_recode", c.getLocal("pScalars"), c.getLocal("scalarSize"), c.getLocal("n"), c.getLocal("chunkSize"), c.getLocal("nChunks"), c.getLocal("pCarry")), c.setLocal("windowIdx", c.getLocal("nChunks")), c.block(c.loop(c.br_if(1, c.i32_lt_s(c.getLocal("windowIdx"), c.i32_const(0))), c.if(c.i32_eqz(c.call(prefix + "_isZero", c.getLocal("pr"))), [...c.setLocal("j", c.i32_const(0)), ...c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("chunkSize"))), c.call(prefix + "_double", c.getLocal("pr"), c.getLocal("pr")), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0)))]), c.call(fnName + "_chunk", c.getLocal("pBases"), c.getLocal("pScalars"), c.getLocal("scalarSize"), c.getLocal("pCarry"), c.getLocal("n"), c.getLocal("windowIdx"), c.getLocal("chunkSize"), c.i32_const(aux)), c.call(prefix + "_add", c.getLocal("pr"), c.i32_const(aux), c.getLocal("pr")), c.setLocal("windowIdx", c.i32_sub(c.getLocal("windowIdx"), c.i32_const(1))), c.br(0))), c.i32_store(c.i32_const(0), c.getLocal("savedFree"))); + } + buildGetChunk(); + buildRecode(); + buildMutiexpChunk(); + buildMultiexp(); + module.exportFunction(fnName); + module.exportFunction(fnName + "_chunk"); +} +//#endregion +//#region src/build_curve_jacobian_a0.js +function buildCurve(module, prefix, prefixField, pB) { + const n64 = module.modules[prefixField].n64; + const n8 = n64 * 8; + if (module.modules[prefix]) return prefix; + module.modules[prefix] = { n64: n64 * 3 }; + function buildIsZero() { + const f = module.addFunction(prefix + "_isZero"); + f.addParam("p1", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefixField + "_isZero", c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2)))); + } + function buildIsZeroAffine() { + const f = module.addFunction(prefix + "_isZeroAffine"); + f.addParam("p1", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + f.addCode(c.i32_and(c.call(prefixField + "_isZero", c.getLocal("p1")), c.call(prefixField + "_isZero", c.i32_add(c.getLocal("p1"), c.i32_const(n8))))); + } + function buildCopy() { + const f = module.addFunction(prefix + "_copy"); + f.addParam("ps", "i32"); + f.addParam("pd", "i32"); + const c = f.getCodeBuilder(); + for (let i = 0; i < n64 * 3; i++) f.addCode(c.i64_store(c.getLocal("pd"), i * 8, c.i64_load(c.getLocal("ps"), i * 8))); + } + function buildCopyAffine() { + const f = module.addFunction(prefix + "_copyAffine"); + f.addParam("ps", "i32"); + f.addParam("pd", "i32"); + const c = f.getCodeBuilder(); + for (let i = 0; i < n64 * 2; i++) f.addCode(c.i64_store(c.getLocal("pd"), i * 8, c.i64_load(c.getLocal("ps"), i * 8))); + } + function buildZero() { + const f = module.addFunction(prefix + "_zero"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefixField + "_zero", c.getLocal("pr"))); + f.addCode(c.call(prefixField + "_one", c.i32_add(c.getLocal("pr"), c.i32_const(n8)))); + f.addCode(c.call(prefixField + "_zero", c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2)))); + } + function buildZeroAffine() { + const f = module.addFunction(prefix + "_zeroAffine"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefixField + "_zero", c.getLocal("pr"))); + f.addCode(c.call(prefixField + "_zero", c.i32_add(c.getLocal("pr"), c.i32_const(n8)))); + } + function buildEq() { + const f = module.addFunction(prefix + "_eq"); + f.addParam("p1", "i32"); + f.addParam("p2", "i32"); + f.setReturnType("i32"); + f.addLocal("z1", "i32"); + f.addLocal("z2", "i32"); + const c = f.getCodeBuilder(); + const x1 = c.getLocal("p1"); + const y1 = c.i32_add(c.getLocal("p1"), c.i32_const(n8)); + f.addCode(c.setLocal("z1", c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2)))); + const z1 = c.getLocal("z1"); + const x2 = c.getLocal("p2"); + const y2 = c.i32_add(c.getLocal("p2"), c.i32_const(n8)); + f.addCode(c.setLocal("z2", c.i32_add(c.getLocal("p2"), c.i32_const(n8 * 2)))); + const z2 = c.getLocal("z2"); + const Z1Z1 = c.i32_const(module.alloc(n8)); + const Z2Z2 = c.i32_const(module.alloc(n8)); + const U1 = c.i32_const(module.alloc(n8)); + const U2 = c.i32_const(module.alloc(n8)); + const Z1_cubed = c.i32_const(module.alloc(n8)); + const Z2_cubed = c.i32_const(module.alloc(n8)); + const S1 = c.i32_const(module.alloc(n8)); + const S2 = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), c.ret(c.call(prefix + "_isZero", c.getLocal("p2")))), c.if(c.call(prefix + "_isZero", c.getLocal("p2")), c.ret(c.i32_const(0))), c.if(c.call(prefixField + "_isOne", z1), c.ret(c.call(prefix + "_eqMixed", c.getLocal("p2"), c.getLocal("p1")))), c.if(c.call(prefixField + "_isOne", z2), c.ret(c.call(prefix + "_eqMixed", c.getLocal("p1"), c.getLocal("p2")))), c.call(prefixField + "_square", z1, Z1Z1), c.call(prefixField + "_square", z2, Z2Z2), c.call(prefixField + "_mul", x1, Z2Z2, U1), c.call(prefixField + "_mul", x2, Z1Z1, U2), c.call(prefixField + "_mul", z1, Z1Z1, Z1_cubed), c.call(prefixField + "_mul", z2, Z2Z2, Z2_cubed), c.call(prefixField + "_mul", y1, Z2_cubed, S1), c.call(prefixField + "_mul", y2, Z1_cubed, S2), c.if(c.call(prefixField + "_eq", U1, U2), c.if(c.call(prefixField + "_eq", S1, S2), c.ret(c.i32_const(1)))), c.ret(c.i32_const(0))); + } + function buildEqMixed() { + const f = module.addFunction(prefix + "_eqMixed"); + f.addParam("p1", "i32"); + f.addParam("p2", "i32"); + f.setReturnType("i32"); + f.addLocal("z1", "i32"); + const c = f.getCodeBuilder(); + const x1 = c.getLocal("p1"); + const y1 = c.i32_add(c.getLocal("p1"), c.i32_const(n8)); + f.addCode(c.setLocal("z1", c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2)))); + const z1 = c.getLocal("z1"); + const x2 = c.getLocal("p2"); + const y2 = c.i32_add(c.getLocal("p2"), c.i32_const(n8)); + const Z1Z1 = c.i32_const(module.alloc(n8)); + const U2 = c.i32_const(module.alloc(n8)); + const Z1_cubed = c.i32_const(module.alloc(n8)); + const S2 = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), c.ret(c.call(prefix + "_isZeroAffine", c.getLocal("p2")))), c.if(c.call(prefix + "_isZeroAffine", c.getLocal("p2")), c.ret(c.i32_const(0))), c.if(c.call(prefixField + "_isOne", z1), c.ret(c.call(prefix + "_eqAffine", c.getLocal("p1"), c.getLocal("p2")))), c.call(prefixField + "_square", z1, Z1Z1), c.call(prefixField + "_mul", x2, Z1Z1, U2), c.call(prefixField + "_mul", z1, Z1Z1, Z1_cubed), c.call(prefixField + "_mul", y2, Z1_cubed, S2), c.if(c.call(prefixField + "_eq", x1, U2), c.if(c.call(prefixField + "_eq", y1, S2), c.ret(c.i32_const(1)))), c.ret(c.i32_const(0))); + } + function buildDouble() { + const f = module.addFunction(prefix + "_double"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const x = c.getLocal("p1"); + const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8)); + const z = c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2)); + const x3 = c.getLocal("pr"); + const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8)); + const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2)); + const A = c.i32_const(module.alloc(n8)); + const B = c.i32_const(module.alloc(n8)); + const C = c.i32_const(module.alloc(n8)); + const D = c.i32_const(module.alloc(n8)); + const E = c.i32_const(module.alloc(n8)); + const F = c.i32_const(module.alloc(n8)); + const G = c.i32_const(module.alloc(n8)); + const eightC = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), [...c.call(prefix + "_copy", c.getLocal("p1"), c.getLocal("pr")), ...c.ret([])]), c.if(c.call(prefixField + "_isOne", z), [...c.ret(c.call(prefix + "_doubleAffine", c.getLocal("p1"), c.getLocal("pr"))), ...c.ret([])]), c.call(prefixField + "_square", x, A), c.call(prefixField + "_square", y, B), c.call(prefixField + "_square", B, C), c.call(prefixField + "_add", x, B, D), c.call(prefixField + "_square", D, D), c.call(prefixField + "_sub", D, A, D), c.call(prefixField + "_sub", D, C, D), c.call(prefixField + "_add", D, D, D), c.call(prefixField + "_add", A, A, E), c.call(prefixField + "_add", E, A, E), c.call(prefixField + "_square", E, F), c.call(prefixField + "_mul", y, z, G), c.call(prefixField + "_add", D, D, x3), c.call(prefixField + "_sub", F, x3, x3), c.call(prefixField + "_add", C, C, eightC), c.call(prefixField + "_add", eightC, eightC, eightC), c.call(prefixField + "_add", eightC, eightC, eightC), c.call(prefixField + "_sub", D, x3, y3), c.call(prefixField + "_mul", y3, E, y3), c.call(prefixField + "_sub", y3, eightC, y3), c.call(prefixField + "_add", G, G, z3)); + } + function buildDoubleAffine() { + const f = module.addFunction(prefix + "_doubleAffine"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const x = c.getLocal("p1"); + const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8)); + const x3 = c.getLocal("pr"); + const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8)); + const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2)); + const XX = c.i32_const(module.alloc(n8)); + const YY = c.i32_const(module.alloc(n8)); + const YYYY = c.i32_const(module.alloc(n8)); + const S = c.i32_const(module.alloc(n8)); + const M = c.i32_const(module.alloc(n8)); + const eightYYYY = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(prefix + "_isZeroAffine", c.getLocal("p1")), [...c.call(prefix + "_toJacobian", c.getLocal("p1"), c.getLocal("pr")), ...c.ret([])]), c.call(prefixField + "_square", x, XX), c.call(prefixField + "_square", y, YY), c.call(prefixField + "_square", YY, YYYY), c.call(prefixField + "_add", x, YY, S), c.call(prefixField + "_square", S, S), c.call(prefixField + "_sub", S, XX, S), c.call(prefixField + "_sub", S, YYYY, S), c.call(prefixField + "_add", S, S, S), c.call(prefixField + "_add", XX, XX, M), c.call(prefixField + "_add", M, XX, M), c.call(prefixField + "_add", y, y, z3), c.call(prefixField + "_square", M, x3), c.call(prefixField + "_sub", x3, S, x3), c.call(prefixField + "_sub", x3, S, x3), c.call(prefixField + "_add", YYYY, YYYY, eightYYYY), c.call(prefixField + "_add", eightYYYY, eightYYYY, eightYYYY), c.call(prefixField + "_add", eightYYYY, eightYYYY, eightYYYY), c.call(prefixField + "_sub", S, x3, y3), c.call(prefixField + "_mul", y3, M, y3), c.call(prefixField + "_sub", y3, eightYYYY, y3)); + } + function buildEqAffine() { + const f = module.addFunction(prefix + "_eqAffine"); + f.addParam("p1", "i32"); + f.addParam("p2", "i32"); + f.setReturnType("i32"); + f.addLocal("z1", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.ret(c.i32_and(c.call(prefixField + "_eq", c.getLocal("p1"), c.getLocal("p2")), c.call(prefixField + "_eq", c.i32_add(c.getLocal("p1"), c.i32_const(n8)), c.i32_add(c.getLocal("p2"), c.i32_const(n8)))))); + } + function buildToMontgomery() { + const f = module.addFunction(prefix + "_toMontgomery"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefixField + "_toMontgomery", c.getLocal("p1"), c.getLocal("pr"))); + for (let i = 1; i < 3; i++) f.addCode(c.call(prefixField + "_toMontgomery", c.i32_add(c.getLocal("p1"), c.i32_const(i * n8)), c.i32_add(c.getLocal("pr"), c.i32_const(i * n8)))); + } + function buildToMontgomeryAffine() { + const f = module.addFunction(prefix + "_toMontgomeryAffine"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefixField + "_toMontgomery", c.getLocal("p1"), c.getLocal("pr"))); + for (let i = 1; i < 2; i++) f.addCode(c.call(prefixField + "_toMontgomery", c.i32_add(c.getLocal("p1"), c.i32_const(i * n8)), c.i32_add(c.getLocal("pr"), c.i32_const(i * n8)))); + } + function buildFromMontgomery() { + const f = module.addFunction(prefix + "_fromMontgomery"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefixField + "_fromMontgomery", c.getLocal("p1"), c.getLocal("pr"))); + for (let i = 1; i < 3; i++) f.addCode(c.call(prefixField + "_fromMontgomery", c.i32_add(c.getLocal("p1"), c.i32_const(i * n8)), c.i32_add(c.getLocal("pr"), c.i32_const(i * n8)))); + } + function buildFromMontgomeryAffine() { + const f = module.addFunction(prefix + "_fromMontgomeryAffine"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(prefixField + "_fromMontgomery", c.getLocal("p1"), c.getLocal("pr"))); + for (let i = 1; i < 2; i++) f.addCode(c.call(prefixField + "_fromMontgomery", c.i32_add(c.getLocal("p1"), c.i32_const(i * n8)), c.i32_add(c.getLocal("pr"), c.i32_const(i * n8)))); + } + function buildAdd() { + const f = module.addFunction(prefix + "_add"); + f.addParam("p1", "i32"); + f.addParam("p2", "i32"); + f.addParam("pr", "i32"); + f.addLocal("z1", "i32"); + f.addLocal("z2", "i32"); + const c = f.getCodeBuilder(); + const x1 = c.getLocal("p1"); + const y1 = c.i32_add(c.getLocal("p1"), c.i32_const(n8)); + f.addCode(c.setLocal("z1", c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2)))); + const z1 = c.getLocal("z1"); + const x2 = c.getLocal("p2"); + const y2 = c.i32_add(c.getLocal("p2"), c.i32_const(n8)); + f.addCode(c.setLocal("z2", c.i32_add(c.getLocal("p2"), c.i32_const(n8 * 2)))); + const z2 = c.getLocal("z2"); + const x3 = c.getLocal("pr"); + const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8)); + const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2)); + const Z1Z1 = c.i32_const(module.alloc(n8)); + const Z2Z2 = c.i32_const(module.alloc(n8)); + const U1 = c.i32_const(module.alloc(n8)); + const U2 = c.i32_const(module.alloc(n8)); + const Z1_cubed = c.i32_const(module.alloc(n8)); + const Z2_cubed = c.i32_const(module.alloc(n8)); + const S1 = c.i32_const(module.alloc(n8)); + const S2 = c.i32_const(module.alloc(n8)); + const H = c.i32_const(module.alloc(n8)); + const S2_minus_S1 = c.i32_const(module.alloc(n8)); + const I = c.i32_const(module.alloc(n8)); + const J = c.i32_const(module.alloc(n8)); + const r = c.i32_const(module.alloc(n8)); + const r2 = c.i32_const(module.alloc(n8)); + const V = c.i32_const(module.alloc(n8)); + const V2 = c.i32_const(module.alloc(n8)); + const S1_J2 = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), [...c.call(prefix + "_copy", c.getLocal("p2"), c.getLocal("pr")), ...c.ret([])]), c.if(c.call(prefix + "_isZero", c.getLocal("p2")), [...c.call(prefix + "_copy", c.getLocal("p1"), c.getLocal("pr")), ...c.ret([])]), c.if(c.call(prefixField + "_isOne", z1), [...c.call(prefix + "_addMixed", x2, x1, x3), ...c.ret([])]), c.if(c.call(prefixField + "_isOne", z2), [...c.call(prefix + "_addMixed", x1, x2, x3), ...c.ret([])]), c.call(prefixField + "_square", z1, Z1Z1), c.call(prefixField + "_square", z2, Z2Z2), c.call(prefixField + "_mul", x1, Z2Z2, U1), c.call(prefixField + "_mul", x2, Z1Z1, U2), c.call(prefixField + "_mul", z1, Z1Z1, Z1_cubed), c.call(prefixField + "_mul", z2, Z2Z2, Z2_cubed), c.call(prefixField + "_mul", y1, Z2_cubed, S1), c.call(prefixField + "_mul", y2, Z1_cubed, S2), c.if(c.call(prefixField + "_eq", U1, U2), c.if(c.call(prefixField + "_eq", S1, S2), [...c.call(prefix + "_double", c.getLocal("p1"), c.getLocal("pr")), ...c.ret([])])), c.call(prefixField + "_sub", U2, U1, H), c.call(prefixField + "_sub", S2, S1, S2_minus_S1), c.call(prefixField + "_add", H, H, I), c.call(prefixField + "_square", I, I), c.call(prefixField + "_mul", H, I, J), c.call(prefixField + "_add", S2_minus_S1, S2_minus_S1, r), c.call(prefixField + "_mul", U1, I, V), c.call(prefixField + "_square", r, r2), c.call(prefixField + "_add", V, V, V2), c.call(prefixField + "_sub", r2, J, x3), c.call(prefixField + "_sub", x3, V2, x3), c.call(prefixField + "_mul", S1, J, S1_J2), c.call(prefixField + "_add", S1_J2, S1_J2, S1_J2), c.call(prefixField + "_sub", V, x3, y3), c.call(prefixField + "_mul", y3, r, y3), c.call(prefixField + "_sub", y3, S1_J2, y3), c.call(prefixField + "_add", z1, z2, z3), c.call(prefixField + "_square", z3, z3), c.call(prefixField + "_sub", z3, Z1Z1, z3), c.call(prefixField + "_sub", z3, Z2Z2, z3), c.call(prefixField + "_mul", z3, H, z3)); + } + function buildAddMixed() { + const f = module.addFunction(prefix + "_addMixed"); + f.addParam("p1", "i32"); + f.addParam("p2", "i32"); + f.addParam("pr", "i32"); + f.addLocal("z1", "i32"); + const c = f.getCodeBuilder(); + const x1 = c.getLocal("p1"); + const y1 = c.i32_add(c.getLocal("p1"), c.i32_const(n8)); + f.addCode(c.setLocal("z1", c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2)))); + const z1 = c.getLocal("z1"); + const x2 = c.getLocal("p2"); + const y2 = c.i32_add(c.getLocal("p2"), c.i32_const(n8)); + const x3 = c.getLocal("pr"); + const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8)); + const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2)); + const Z1Z1 = c.i32_const(module.alloc(n8)); + const U2 = c.i32_const(module.alloc(n8)); + const Z1_cubed = c.i32_const(module.alloc(n8)); + const S2 = c.i32_const(module.alloc(n8)); + const H = c.i32_const(module.alloc(n8)); + const HH = c.i32_const(module.alloc(n8)); + const S2_minus_y1 = c.i32_const(module.alloc(n8)); + const I = c.i32_const(module.alloc(n8)); + const J = c.i32_const(module.alloc(n8)); + const r = c.i32_const(module.alloc(n8)); + const r2 = c.i32_const(module.alloc(n8)); + const V = c.i32_const(module.alloc(n8)); + const V2 = c.i32_const(module.alloc(n8)); + const y1_J2 = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), [ + ...c.call(prefix + "_copyAffine", c.getLocal("p2"), c.getLocal("pr")), + ...c.call(prefixField + "_one", c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2))), + ...c.ret([]) + ]), c.if(c.call(prefix + "_isZeroAffine", c.getLocal("p2")), [...c.call(prefix + "_copy", c.getLocal("p1"), c.getLocal("pr")), ...c.ret([])]), c.if(c.call(prefixField + "_isOne", z1), [...c.call(prefix + "_addAffine", x1, x2, x3), ...c.ret([])]), c.call(prefixField + "_square", z1, Z1Z1), c.call(prefixField + "_mul", x2, Z1Z1, U2), c.call(prefixField + "_mul", z1, Z1Z1, Z1_cubed), c.call(prefixField + "_mul", y2, Z1_cubed, S2), c.if(c.call(prefixField + "_eq", x1, U2), c.if(c.call(prefixField + "_eq", y1, S2), [...c.call(prefix + "_doubleAffine", c.getLocal("p2"), c.getLocal("pr")), ...c.ret([])])), c.call(prefixField + "_sub", U2, x1, H), c.call(prefixField + "_sub", S2, y1, S2_minus_y1), c.call(prefixField + "_square", H, HH), c.call(prefixField + "_add", HH, HH, I), c.call(prefixField + "_add", I, I, I), c.call(prefixField + "_mul", H, I, J), c.call(prefixField + "_add", S2_minus_y1, S2_minus_y1, r), c.call(prefixField + "_mul", x1, I, V), c.call(prefixField + "_square", r, r2), c.call(prefixField + "_add", V, V, V2), c.call(prefixField + "_sub", r2, J, x3), c.call(prefixField + "_sub", x3, V2, x3), c.call(prefixField + "_mul", y1, J, y1_J2), c.call(prefixField + "_add", y1_J2, y1_J2, y1_J2), c.call(prefixField + "_sub", V, x3, y3), c.call(prefixField + "_mul", y3, r, y3), c.call(prefixField + "_sub", y3, y1_J2, y3), c.call(prefixField + "_add", z1, H, z3), c.call(prefixField + "_square", z3, z3), c.call(prefixField + "_sub", z3, Z1Z1, z3), c.call(prefixField + "_sub", z3, HH, z3)); + } + function buildAddAffine() { + const f = module.addFunction(prefix + "_addAffine"); + f.addParam("p1", "i32"); + f.addParam("p2", "i32"); + f.addParam("pr", "i32"); + f.addLocal("z1", "i32"); + const c = f.getCodeBuilder(); + const x1 = c.getLocal("p1"); + const y1 = c.i32_add(c.getLocal("p1"), c.i32_const(n8)); + f.addCode(c.setLocal("z1", c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2)))); + const x2 = c.getLocal("p2"); + const y2 = c.i32_add(c.getLocal("p2"), c.i32_const(n8)); + const x3 = c.getLocal("pr"); + const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8)); + const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2)); + const H = c.i32_const(module.alloc(n8)); + const HH = c.i32_const(module.alloc(n8)); + const y2_minus_y1 = c.i32_const(module.alloc(n8)); + const I = c.i32_const(module.alloc(n8)); + const J = c.i32_const(module.alloc(n8)); + const r = c.i32_const(module.alloc(n8)); + const r2 = c.i32_const(module.alloc(n8)); + const V = c.i32_const(module.alloc(n8)); + const V2 = c.i32_const(module.alloc(n8)); + const y1_J2 = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(prefix + "_isZeroAffine", c.getLocal("p1")), [ + ...c.call(prefix + "_copyAffine", c.getLocal("p2"), c.getLocal("pr")), + ...c.call(prefixField + "_one", c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2))), + ...c.ret([]) + ]), c.if(c.call(prefix + "_isZeroAffine", c.getLocal("p2")), [ + ...c.call(prefix + "_copyAffine", c.getLocal("p1"), c.getLocal("pr")), + ...c.call(prefixField + "_one", c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2))), + ...c.ret([]) + ]), c.if(c.call(prefixField + "_eq", x1, x2), c.if(c.call(prefixField + "_eq", y1, y2), [...c.call(prefix + "_doubleAffine", c.getLocal("p2"), c.getLocal("pr")), ...c.ret([])])), c.call(prefixField + "_sub", x2, x1, H), c.call(prefixField + "_sub", y2, y1, y2_minus_y1), c.call(prefixField + "_square", H, HH), c.call(prefixField + "_add", HH, HH, I), c.call(prefixField + "_add", I, I, I), c.call(prefixField + "_mul", H, I, J), c.call(prefixField + "_add", y2_minus_y1, y2_minus_y1, r), c.call(prefixField + "_mul", x1, I, V), c.call(prefixField + "_square", r, r2), c.call(prefixField + "_add", V, V, V2), c.call(prefixField + "_sub", r2, J, x3), c.call(prefixField + "_sub", x3, V2, x3), c.call(prefixField + "_mul", y1, J, y1_J2), c.call(prefixField + "_add", y1_J2, y1_J2, y1_J2), c.call(prefixField + "_sub", V, x3, y3), c.call(prefixField + "_mul", y3, r, y3), c.call(prefixField + "_sub", y3, y1_J2, y3), c.call(prefixField + "_add", H, H, z3)); + } + function buildNeg() { + const f = module.addFunction(prefix + "_neg"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const x = c.getLocal("p1"); + const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8)); + const z = c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2)); + const x3 = c.getLocal("pr"); + const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8)); + const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2)); + f.addCode(c.call(prefixField + "_copy", x, x3), c.call(prefixField + "_neg", y, y3), c.call(prefixField + "_copy", z, z3)); + } + function buildNegAffine() { + const f = module.addFunction(prefix + "_negAffine"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const x = c.getLocal("p1"); + const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8)); + const x3 = c.getLocal("pr"); + const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8)); + f.addCode(c.call(prefixField + "_copy", x, x3), c.call(prefixField + "_neg", y, y3)); + } + function buildSub() { + const f = module.addFunction(prefix + "_sub"); + f.addParam("p1", "i32"); + f.addParam("p2", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const AUX = c.i32_const(module.alloc(n8 * 3)); + f.addCode(c.call(prefix + "_neg", c.getLocal("p2"), AUX), c.call(prefix + "_add", c.getLocal("p1"), AUX, c.getLocal("pr"))); + } + function buildSubMixed() { + const f = module.addFunction(prefix + "_subMixed"); + f.addParam("p1", "i32"); + f.addParam("p2", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const AUX = c.i32_const(module.alloc(n8 * 3)); + f.addCode(c.call(prefix + "_negAffine", c.getLocal("p2"), AUX), c.call(prefix + "_addMixed", c.getLocal("p1"), AUX, c.getLocal("pr"))); + } + function buildSubAffine() { + const f = module.addFunction(prefix + "_subAffine"); + f.addParam("p1", "i32"); + f.addParam("p2", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const AUX = c.i32_const(module.alloc(n8 * 3)); + f.addCode(c.call(prefix + "_negAffine", c.getLocal("p2"), AUX), c.call(prefix + "_addAffine", c.getLocal("p1"), AUX, c.getLocal("pr"))); + } + function buildNormalize() { + const f = module.addFunction(prefix + "_normalize"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const x = c.getLocal("p1"); + const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8)); + const z = c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2)); + const x3 = c.getLocal("pr"); + const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8)); + const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2)); + const Z_inv = c.i32_const(module.alloc(n8)); + const Z2_inv = c.i32_const(module.alloc(n8)); + const Z3_inv = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), c.call(prefix + "_zero", c.getLocal("pr")), [ + ...c.call(prefixField + "_inverse", z, Z_inv), + ...c.call(prefixField + "_square", Z_inv, Z2_inv), + ...c.call(prefixField + "_mul", Z_inv, Z2_inv, Z3_inv), + ...c.call(prefixField + "_mul", x, Z2_inv, x3), + ...c.call(prefixField + "_mul", y, Z3_inv, y3), + ...c.call(prefixField + "_one", z3) + ])); + } + function buildToAffine() { + const f = module.addFunction(prefix + "_toAffine"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const x = c.getLocal("p1"); + const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8)); + const z = c.i32_add(c.getLocal("p1"), c.i32_const(n8 * 2)); + const x3 = c.getLocal("pr"); + const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8)); + const Z_inv = c.i32_const(module.alloc(n8)); + const Z2_inv = c.i32_const(module.alloc(n8)); + const Z3_inv = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(prefix + "_isZero", c.getLocal("p1")), [...c.call(prefixField + "_zero", x3), ...c.call(prefixField + "_zero", y3)], [ + ...c.call(prefixField + "_inverse", z, Z_inv), + ...c.call(prefixField + "_square", Z_inv, Z2_inv), + ...c.call(prefixField + "_mul", Z_inv, Z2_inv, Z3_inv), + ...c.call(prefixField + "_mul", x, Z2_inv, x3), + ...c.call(prefixField + "_mul", y, Z3_inv, y3) + ])); + } + function buildToJacobian() { + const f = module.addFunction(prefix + "_toJacobian"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const x = c.getLocal("p1"); + const y = c.i32_add(c.getLocal("p1"), c.i32_const(n8)); + const x3 = c.getLocal("pr"); + const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8)); + const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2)); + f.addCode(c.if(c.call(prefix + "_isZeroAffine", c.getLocal("p1")), c.call(prefix + "_zero", c.getLocal("pr")), [ + ...c.call(prefixField + "_one", z3), + ...c.call(prefixField + "_copy", y, y3), + ...c.call(prefixField + "_copy", x, x3) + ])); + } + function buildBatchToAffine() { + const f = module.addFunction(prefix + "_batchToAffine"); + f.addParam("pIn", "i32"); + f.addParam("n", "i32"); + f.addParam("pOut", "i32"); + f.addLocal("pAux", "i32"); + f.addLocal("itIn", "i32"); + f.addLocal("itAux", "i32"); + f.addLocal("itOut", "i32"); + f.addLocal("i", "i32"); + const c = f.getCodeBuilder(); + const tmp = c.i32_const(module.alloc(n8)); + f.addCode(c.setLocal("pAux", c.i32_load(c.i32_const(0))), c.i32_store(c.i32_const(0), c.i32_add(c.getLocal("pAux"), c.i32_mul(c.getLocal("n"), c.i32_const(n8)))), c.call(prefixField + "_batchInverse", c.i32_add(c.getLocal("pIn"), c.i32_const(n8 * 2)), c.i32_const(n8 * 3), c.getLocal("n"), c.getLocal("pAux"), c.i32_const(n8)), c.setLocal("itIn", c.getLocal("pIn")), c.setLocal("itAux", c.getLocal("pAux")), c.setLocal("itOut", c.getLocal("pOut")), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.if(c.call(prefixField + "_isZero", c.getLocal("itAux")), [...c.call(prefixField + "_zero", c.getLocal("itOut")), ...c.call(prefixField + "_zero", c.i32_add(c.getLocal("itOut"), c.i32_const(n8)))], [ + ...c.call(prefixField + "_mul", c.getLocal("itAux"), c.i32_add(c.getLocal("itIn"), c.i32_const(n8)), tmp), + ...c.call(prefixField + "_square", c.getLocal("itAux"), c.getLocal("itAux")), + ...c.call(prefixField + "_mul", c.getLocal("itAux"), c.getLocal("itIn"), c.getLocal("itOut")), + ...c.call(prefixField + "_mul", c.getLocal("itAux"), tmp, c.i32_add(c.getLocal("itOut"), c.i32_const(n8))) + ]), c.setLocal("itIn", c.i32_add(c.getLocal("itIn"), c.i32_const(n8 * 3))), c.setLocal("itOut", c.i32_add(c.getLocal("itOut"), c.i32_const(n8 * 2))), c.setLocal("itAux", c.i32_add(c.getLocal("itAux"), c.i32_const(n8))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.i32_store(c.i32_const(0), c.getLocal("pAux"))); + } + function buildReverseBytes() { + const f = module.addFunction(prefix + "__reverseBytes"); + f.addParam("pIn", "i32"); + f.addParam("n", "i32"); + f.addParam("pOut", "i32"); + f.addLocal("itOut", "i32"); + f.addLocal("itIn", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.setLocal("itOut", c.i32_sub(c.i32_add(c.getLocal("pOut"), c.getLocal("n")), c.i32_const(1))), c.setLocal("itIn", c.getLocal("pIn")), c.block(c.loop(c.br_if(1, c.i32_lt_s(c.getLocal("itOut"), c.getLocal("pOut"))), c.i32_store8(c.getLocal("itOut"), c.i32_load8_u(c.getLocal("itIn"))), c.setLocal("itOut", c.i32_sub(c.getLocal("itOut"), c.i32_const(1))), c.setLocal("itIn", c.i32_add(c.getLocal("itIn"), c.i32_const(1))), c.br(0)))); + } + function buildLEMtoC() { + const f = module.addFunction(prefix + "_LEMtoC"); + f.addParam("pIn", "i32"); + f.addParam("pOut", "i32"); + const c = f.getCodeBuilder(); + const tmp = c.i32_const(module.alloc(n8)); + f.addCode(c.if(c.call(prefix + "_isZeroAffine", c.getLocal("pIn")), [ + ...c.call(prefixField + "_zero", c.getLocal("pOut")), + ...c.i32_store8(c.getLocal("pOut"), c.i32_const(64)), + ...c.ret([]) + ]), c.call(prefixField + "_fromMontgomery", c.getLocal("pIn"), tmp), c.call(prefix + "__reverseBytes", tmp, c.i32_const(n8), c.getLocal("pOut")), c.if(c.i32_eq(c.call(prefixField + "_sign", c.i32_add(c.getLocal("pIn"), c.i32_const(n8))), c.i32_const(-1)), c.i32_store8(c.getLocal("pOut"), c.i32_or(c.i32_load8_u(c.getLocal("pOut")), c.i32_const(128))))); + } + function buildLEMtoU() { + const f = module.addFunction(prefix + "_LEMtoU"); + f.addParam("pIn", "i32"); + f.addParam("pOut", "i32"); + const c = f.getCodeBuilder(); + const pTmp = module.alloc(n8 * 2); + const tmp = c.i32_const(pTmp); + const tmpX = c.i32_const(pTmp); + const tmpY = c.i32_const(pTmp + n8); + f.addCode(c.if(c.call(prefix + "_isZeroAffine", c.getLocal("pIn")), [...c.call(prefix + "_zeroAffine", c.getLocal("pOut")), ...c.ret([])]), c.call(prefix + "_fromMontgomeryAffine", c.getLocal("pIn"), tmp), c.call(prefix + "__reverseBytes", tmpX, c.i32_const(n8), c.getLocal("pOut")), c.call(prefix + "__reverseBytes", tmpY, c.i32_const(n8), c.i32_add(c.getLocal("pOut"), c.i32_const(n8)))); + } + function buildUtoLEM() { + const f = module.addFunction(prefix + "_UtoLEM"); + f.addParam("pIn", "i32"); + f.addParam("pOut", "i32"); + const c = f.getCodeBuilder(); + const pTmp = module.alloc(n8 * 2); + const tmp = c.i32_const(pTmp); + const tmpX = c.i32_const(pTmp); + const tmpY = c.i32_const(pTmp + n8); + f.addCode(c.if(c.i32_and(c.i32_load8_u(c.getLocal("pIn")), c.i32_const(64)), [...c.call(prefix + "_zeroAffine", c.getLocal("pOut")), ...c.ret([])]), c.call(prefix + "__reverseBytes", c.getLocal("pIn"), c.i32_const(n8), tmpX), c.call(prefix + "__reverseBytes", c.i32_add(c.getLocal("pIn"), c.i32_const(n8)), c.i32_const(n8), tmpY), c.call(prefix + "_toMontgomeryAffine", tmp, c.getLocal("pOut"))); + } + function buildCtoLEM() { + const f = module.addFunction(prefix + "_CtoLEM"); + f.addParam("pIn", "i32"); + f.addParam("pOut", "i32"); + f.addLocal("firstByte", "i32"); + f.addLocal("greatest", "i32"); + const c = f.getCodeBuilder(); + const pTmp = module.alloc(n8 * 2); + const tmpX = c.i32_const(pTmp); + const tmpY = c.i32_const(pTmp + n8); + f.addCode(c.setLocal("firstByte", c.i32_load8_u(c.getLocal("pIn"))), c.if(c.i32_and(c.getLocal("firstByte"), c.i32_const(64)), [...c.call(prefix + "_zeroAffine", c.getLocal("pOut")), ...c.ret([])]), c.setLocal("greatest", c.i32_and(c.getLocal("firstByte"), c.i32_const(128))), c.call(prefixField + "_copy", c.getLocal("pIn"), tmpY), c.i32_store8(tmpY, c.i32_and(c.getLocal("firstByte"), c.i32_const(63))), c.call(prefix + "__reverseBytes", tmpY, c.i32_const(n8), tmpX), c.call(prefixField + "_toMontgomery", tmpX, c.getLocal("pOut")), c.call(prefixField + "_square", c.getLocal("pOut"), tmpY), c.call(prefixField + "_mul", c.getLocal("pOut"), tmpY, tmpY), c.call(prefixField + "_add", tmpY, c.i32_const(pB), tmpY), c.call(prefixField + "_sqrt", tmpY, tmpY), c.call(prefixField + "_neg", tmpY, tmpX), c.if(c.i32_eq(c.call(prefixField + "_sign", tmpY), c.i32_const(-1)), c.if(c.getLocal("greatest"), c.call(prefixField + "_copy", tmpY, c.i32_add(c.getLocal("pOut"), c.i32_const(n8))), c.call(prefixField + "_neg", tmpY, c.i32_add(c.getLocal("pOut"), c.i32_const(n8)))), c.if(c.getLocal("greatest"), c.call(prefixField + "_neg", tmpY, c.i32_add(c.getLocal("pOut"), c.i32_const(n8))), c.call(prefixField + "_copy", tmpY, c.i32_add(c.getLocal("pOut"), c.i32_const(n8)))))); + } + function buildInCurveAffine() { + const f = module.addFunction(prefix + "_inCurveAffine"); + f.addParam("pIn", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const x = c.getLocal("pIn"); + const y = c.i32_add(c.getLocal("pIn"), c.i32_const(n8)); + const y2 = c.i32_const(module.alloc(n8)); + const x3b = c.i32_const(module.alloc(n8)); + f.addCode(c.call(prefixField + "_square", y, y2), c.call(prefixField + "_square", x, x3b), c.call(prefixField + "_mul", x, x3b, x3b), c.call(prefixField + "_add", x3b, c.i32_const(pB), x3b), c.ret(c.call(prefixField + "_eq", y2, x3b))); + } + function buildInCurve() { + const f = module.addFunction(prefix + "_inCurve"); + f.addParam("pIn", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const aux = c.i32_const(module.alloc(n8 * 2)); + f.addCode(c.call(prefix + "_toAffine", c.getLocal("pIn"), aux), c.ret(c.call(prefix + "_inCurveAffine", aux))); + } + buildIsZeroAffine(); + buildIsZero(); + buildZeroAffine(); + buildZero(); + buildCopyAffine(); + buildCopy(); + buildToJacobian(); + buildEqAffine(); + buildEqMixed(); + buildEq(); + buildDoubleAffine(); + buildDouble(); + buildAddAffine(); + buildAddMixed(); + buildAdd(); + buildNegAffine(); + buildNeg(); + buildSubAffine(); + buildSubMixed(); + buildSub(); + buildFromMontgomeryAffine(); + buildFromMontgomery(); + buildToMontgomeryAffine(); + buildToMontgomery(); + buildToAffine(); + buildInCurveAffine(); + buildInCurve(); + buildBatchToAffine(); + buildNormalize(); + buildReverseBytes(); + buildLEMtoU(); + buildLEMtoC(); + buildUtoLEM(); + buildCtoLEM(); + build_batchconvertion_default(module, prefix + "_batchLEMtoU", prefix + "_LEMtoU", n8 * 2, n8 * 2); + build_batchconvertion_default(module, prefix + "_batchLEMtoC", prefix + "_LEMtoC", n8 * 2, n8); + build_batchconvertion_default(module, prefix + "_batchUtoLEM", prefix + "_UtoLEM", n8 * 2, n8 * 2); + build_batchconvertion_default(module, prefix + "_batchCtoLEM", prefix + "_CtoLEM", n8, n8 * 2, true); + build_batchconvertion_default(module, prefix + "_batchToJacobian", prefix + "_toJacobian", n8 * 2, n8 * 3, true); + buildMultiexp(module, prefix, prefix + "_multiexp", prefix + "_add", prefix + "_sub", n8 * 3); + buildMultiexp(module, prefix, prefix + "_multiexpAffine", prefix + "_addMixed", prefix + "_subMixed", n8 * 2); + buildTimesScalarNAF(module, prefix + "_timesScalar", n8 * 3, prefix + "_add", prefix + "_double", prefix + "_sub", prefix + "_copy", prefix + "_zero"); + buildTimesScalarNAF(module, prefix + "_timesScalarAffine", n8 * 2, prefix + "_addMixed", prefix + "_double", prefix + "_subMixed", prefix + "_copyAffine", prefix + "_zero"); + module.exportFunction(prefix + "_isZero"); + module.exportFunction(prefix + "_isZeroAffine"); + module.exportFunction(prefix + "_eq"); + module.exportFunction(prefix + "_eqMixed"); + module.exportFunction(prefix + "_eqAffine"); + module.exportFunction(prefix + "_copy"); + module.exportFunction(prefix + "_copyAffine"); + module.exportFunction(prefix + "_zero"); + module.exportFunction(prefix + "_zeroAffine"); + module.exportFunction(prefix + "_double"); + module.exportFunction(prefix + "_doubleAffine"); + module.exportFunction(prefix + "_add"); + module.exportFunction(prefix + "_addMixed"); + module.exportFunction(prefix + "_addAffine"); + module.exportFunction(prefix + "_neg"); + module.exportFunction(prefix + "_negAffine"); + module.exportFunction(prefix + "_sub"); + module.exportFunction(prefix + "_subMixed"); + module.exportFunction(prefix + "_subAffine"); + module.exportFunction(prefix + "_fromMontgomery"); + module.exportFunction(prefix + "_fromMontgomeryAffine"); + module.exportFunction(prefix + "_toMontgomery"); + module.exportFunction(prefix + "_toMontgomeryAffine"); + module.exportFunction(prefix + "_timesScalar"); + module.exportFunction(prefix + "_timesScalarAffine"); + module.exportFunction(prefix + "_normalize"); + module.exportFunction(prefix + "_LEMtoU"); + module.exportFunction(prefix + "_LEMtoC"); + module.exportFunction(prefix + "_UtoLEM"); + module.exportFunction(prefix + "_CtoLEM"); + module.exportFunction(prefix + "_batchLEMtoU"); + module.exportFunction(prefix + "_batchLEMtoC"); + module.exportFunction(prefix + "_batchUtoLEM"); + module.exportFunction(prefix + "_batchCtoLEM"); + module.exportFunction(prefix + "_toAffine"); + module.exportFunction(prefix + "_toJacobian"); + module.exportFunction(prefix + "_batchToAffine"); + module.exportFunction(prefix + "_batchToJacobian"); + module.exportFunction(prefix + "_inCurve"); + module.exportFunction(prefix + "_inCurveAffine"); + return prefix; +} +//#endregion +//#region src/build_fft.js +function buildFFT(module, prefix, gPrefix, fPrefix, opGtimesF) { + const n8f = module.modules[fPrefix].n64 * 8; + const n8g = module.modules[gPrefix].n64 * 8; + const q = module.modules[fPrefix].q; + let rem = q - 1n; + let maxBits = 0; + while (!isOdd(rem)) { + maxBits++; + rem = rem >> 1n; + } + let nr = 2n; + while (modPow(nr, q >> 1n, q) === 1n) nr = nr + 1n; + const w = new Array(maxBits + 1); + w[maxBits] = modPow(nr, rem, q); + let n = maxBits - 1; + while (n >= 0) { + w[n] = modPow(w[n + 1], 2n, q); + n--; + } + const bytes = []; + const R = (1n << BigInt(n8f * 8)) % q; + for (let i = 0; i < w.length; i++) { + const m = w[i] * R % q; + bytes.push(...bigInt2BytesLE(m, n8f)); + } + const ROOTs = module.alloc(bytes); + const i2 = new Array(maxBits + 1); + i2[0] = 1n; + for (let i = 1; i <= maxBits; i++) i2[i] = i2[i - 1] * 2n; + const bytesi2 = []; + for (let i = 0; i <= maxBits; i++) { + const m = modInv(i2[i], q) * R % q; + bytesi2.push(...bigInt2BytesLE(m, n8f)); + } + const INV2 = module.alloc(bytesi2); + const shift = modPow(nr, 2n, q); + const bytesShiftToSmallM = []; + const bytesSConst = []; + for (let i = 0; i <= maxBits; i++) { + const shiftToSmallM = modPow(shift, 2n ** BigInt(i), q); + const sConst = modInv(q + 1n - shiftToSmallM, q); + bytesShiftToSmallM.push(...bigInt2BytesLE(shiftToSmallM * R % q, n8f)); + bytesSConst.push(...bigInt2BytesLE(sConst * R % q, n8f)); + } + const SHIFT_TO_M = module.alloc(bytesShiftToSmallM); + const SCONST = module.alloc(bytesSConst); + function rev(x) { + let r = 0; + for (let i = 0; i < 8; i++) if (x & 1 << i) r = r | 128 >> i; + return r; + } + const rtable = Array(256); + for (let i = 0; i < 256; i++) rtable[i] = rev(i); + const REVTABLE = module.alloc(rtable); + function buildLog2() { + const f = module.addFunction(prefix + "__log2"); + f.addParam("n", "i32"); + f.setReturnType("i32"); + f.addLocal("bits", "i32"); + f.addLocal("aux", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.setLocal("aux", c.i32_shr_u(c.getLocal("n"), c.i32_const(1)))); + f.addCode(c.setLocal("bits", c.i32_const(0))); + f.addCode(c.block(c.loop(c.br_if(1, c.i32_eqz(c.getLocal("aux"))), c.setLocal("aux", c.i32_shr_u(c.getLocal("aux"), c.i32_const(1))), c.setLocal("bits", c.i32_add(c.getLocal("bits"), c.i32_const(1))), c.br(0)))); + f.addCode(c.if(c.i32_ne(c.getLocal("n"), c.i32_shl(c.i32_const(1), c.getLocal("bits"))), c.unreachable())); + f.addCode(c.if(c.i32_gt_u(c.getLocal("bits"), c.i32_const(maxBits)), c.unreachable())); + f.addCode(c.getLocal("bits")); + } + function buildFFT() { + const f = module.addFunction(prefix + "_fft"); + f.addParam("px", "i32"); + f.addParam("n", "i32"); + f.addLocal("bits", "i32"); + const c = f.getCodeBuilder(); + const One = c.i32_const(module.alloc(n8f)); + f.addCode(c.setLocal("bits", c.call(prefix + "__log2", c.getLocal("n"))), c.call(fPrefix + "_one", One), c.call(prefix + "_rawfft", c.getLocal("px"), c.getLocal("bits"), c.i32_const(0), One)); + } + function buildIFFT() { + const f = module.addFunction(prefix + "_ifft"); + f.addParam("px", "i32"); + f.addParam("n", "i32"); + f.addLocal("bits", "i32"); + f.addLocal("pInv2", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.setLocal("bits", c.call(prefix + "__log2", c.getLocal("n"))), c.setLocal("pInv2", c.i32_add(c.i32_const(INV2), c.i32_mul(c.getLocal("bits"), c.i32_const(n8f)))), c.call(prefix + "_rawfft", c.getLocal("px"), c.getLocal("bits"), c.i32_const(1), c.getLocal("pInv2"))); + } + function buildRawFFT() { + const f = module.addFunction(prefix + "_rawfft"); + f.addParam("px", "i32"); + f.addParam("bits", "i32"); + f.addParam("reverse", "i32"); + f.addParam("mulFactor", "i32"); + f.addLocal("s", "i32"); + f.addLocal("k", "i32"); + f.addLocal("j", "i32"); + f.addLocal("m", "i32"); + f.addLocal("mdiv2", "i32"); + f.addLocal("n", "i32"); + f.addLocal("pwm", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + const c = f.getCodeBuilder(); + const W = c.i32_const(module.alloc(n8f)); + const T = c.i32_const(module.alloc(n8g)); + const U = c.i32_const(module.alloc(n8g)); + f.addCode(c.call(prefix + "__reversePermutation", c.getLocal("px"), c.getLocal("bits")), c.setLocal("n", c.i32_shl(c.i32_const(1), c.getLocal("bits"))), c.setLocal("s", c.i32_const(1)), c.block(c.loop(c.br_if(1, c.i32_gt_u(c.getLocal("s"), c.getLocal("bits"))), c.setLocal("m", c.i32_shl(c.i32_const(1), c.getLocal("s"))), c.setLocal("pwm", c.i32_add(c.i32_const(ROOTs), c.i32_mul(c.getLocal("s"), c.i32_const(n8f)))), c.setLocal("k", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_ge_u(c.getLocal("k"), c.getLocal("n"))), c.call(fPrefix + "_one", W), c.setLocal("mdiv2", c.i32_shr_u(c.getLocal("m"), c.i32_const(1))), c.setLocal("j", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_ge_u(c.getLocal("j"), c.getLocal("mdiv2"))), c.setLocal("idx1", c.i32_add(c.getLocal("px"), c.i32_mul(c.i32_add(c.getLocal("k"), c.getLocal("j")), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("idx1"), c.i32_mul(c.getLocal("mdiv2"), c.i32_const(n8g)))), c.call(opGtimesF, c.getLocal("idx2"), W, T), c.call(gPrefix + "_copy", c.getLocal("idx1"), U), c.call(gPrefix + "_add", U, T, c.getLocal("idx1")), c.call(gPrefix + "_sub", U, T, c.getLocal("idx2")), c.call(fPrefix + "_mul", W, c.getLocal("pwm"), W), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.setLocal("k", c.i32_add(c.getLocal("k"), c.getLocal("m"))), c.br(0))), c.setLocal("s", c.i32_add(c.getLocal("s"), c.i32_const(1))), c.br(0))), c.call(prefix + "__fftFinal", c.getLocal("px"), c.getLocal("bits"), c.getLocal("reverse"), c.getLocal("mulFactor"))); + } + function buildFinalInverse() { + const f = module.addFunction(prefix + "__fftFinal"); + f.addParam("px", "i32"); + f.addParam("bits", "i32"); + f.addParam("reverse", "i32"); + f.addParam("mulFactor", "i32"); + f.addLocal("n", "i32"); + f.addLocal("ndiv2", "i32"); + f.addLocal("pInv2", "i32"); + f.addLocal("i", "i32"); + f.addLocal("mask", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + const c = f.getCodeBuilder(); + const T = c.i32_const(module.alloc(n8g)); + f.addCode(c.if(c.i32_and(c.i32_eqz(c.getLocal("reverse")), c.call(fPrefix + "_isOne", c.getLocal("mulFactor"))), c.ret([])), c.setLocal("n", c.i32_shl(c.i32_const(1), c.getLocal("bits"))), c.setLocal("mask", c.i32_sub(c.getLocal("n"), c.i32_const(1))), c.setLocal("i", c.i32_const(1)), c.setLocal("ndiv2", c.i32_shr_u(c.getLocal("n"), c.i32_const(1))), c.block(c.loop(c.br_if(1, c.i32_ge_u(c.getLocal("i"), c.getLocal("ndiv2"))), c.setLocal("idx1", c.i32_add(c.getLocal("px"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("px"), c.i32_mul(c.i32_sub(c.getLocal("n"), c.getLocal("i")), c.i32_const(n8g)))), c.if(c.getLocal("reverse"), c.if(c.call(fPrefix + "_isOne", c.getLocal("mulFactor")), [ + ...c.call(gPrefix + "_copy", c.getLocal("idx1"), T), + ...c.call(gPrefix + "_copy", c.getLocal("idx2"), c.getLocal("idx1")), + ...c.call(gPrefix + "_copy", T, c.getLocal("idx2")) + ], [ + ...c.call(gPrefix + "_copy", c.getLocal("idx1"), T), + ...c.call(opGtimesF, c.getLocal("idx2"), c.getLocal("mulFactor"), c.getLocal("idx1")), + ...c.call(opGtimesF, T, c.getLocal("mulFactor"), c.getLocal("idx2")) + ]), c.if(c.call(fPrefix + "_isOne", c.getLocal("mulFactor")), [], [...c.call(opGtimesF, c.getLocal("idx1"), c.getLocal("mulFactor"), c.getLocal("idx1")), ...c.call(opGtimesF, c.getLocal("idx2"), c.getLocal("mulFactor"), c.getLocal("idx2"))])), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.if(c.call(fPrefix + "_isOne", c.getLocal("mulFactor")), [], [ + ...c.call(opGtimesF, c.getLocal("px"), c.getLocal("mulFactor"), c.getLocal("px")), + ...c.setLocal("idx2", c.i32_add(c.getLocal("px"), c.i32_mul(c.getLocal("ndiv2"), c.i32_const(n8g)))), + ...c.call(opGtimesF, c.getLocal("idx2"), c.getLocal("mulFactor"), c.getLocal("idx2")) + ])); + } + function buildReversePermutation() { + const f = module.addFunction(prefix + "__reversePermutation"); + f.addParam("px", "i32"); + f.addParam("bits", "i32"); + f.addLocal("n", "i32"); + f.addLocal("i", "i32"); + f.addLocal("ri", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + const c = f.getCodeBuilder(); + const T = c.i32_const(module.alloc(n8g)); + f.addCode(c.setLocal("n", c.i32_shl(c.i32_const(1), c.getLocal("bits"))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.setLocal("idx1", c.i32_add(c.getLocal("px"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("ri", c.call(prefix + "__rev", c.getLocal("i"), c.getLocal("bits"))), c.setLocal("idx2", c.i32_add(c.getLocal("px"), c.i32_mul(c.getLocal("ri"), c.i32_const(n8g)))), c.if(c.i32_lt_u(c.getLocal("i"), c.getLocal("ri")), [ + ...c.call(gPrefix + "_copy", c.getLocal("idx1"), T), + ...c.call(gPrefix + "_copy", c.getLocal("idx2"), c.getLocal("idx1")), + ...c.call(gPrefix + "_copy", T, c.getLocal("idx2")) + ]), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + } + function buildRev() { + const f = module.addFunction(prefix + "__rev"); + f.addParam("x", "i32"); + f.addParam("bits", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + f.addCode(c.i32_rotl(c.i32_add(c.i32_add(c.i32_shl(c.i32_load8_u(c.i32_and(c.getLocal("x"), c.i32_const(255)), REVTABLE, 0), c.i32_const(24)), c.i32_shl(c.i32_load8_u(c.i32_and(c.i32_shr_u(c.getLocal("x"), c.i32_const(8)), c.i32_const(255)), REVTABLE, 0), c.i32_const(16))), c.i32_add(c.i32_shl(c.i32_load8_u(c.i32_and(c.i32_shr_u(c.getLocal("x"), c.i32_const(16)), c.i32_const(255)), REVTABLE, 0), c.i32_const(8)), c.i32_load8_u(c.i32_and(c.i32_shr_u(c.getLocal("x"), c.i32_const(24)), c.i32_const(255)), REVTABLE, 0))), c.getLocal("bits"))); + } + function buildFFTJoin() { + const f = module.addFunction(prefix + "_fftJoin"); + f.addParam("pBuff1", "i32"); + f.addParam("pBuff2", "i32"); + f.addParam("n", "i32"); + f.addParam("first", "i32"); + f.addParam("inc", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + f.addLocal("i", "i32"); + const c = f.getCodeBuilder(); + const W = c.i32_const(module.alloc(n8f)); + const T = c.i32_const(module.alloc(n8g)); + const U = c.i32_const(module.alloc(n8g)); + f.addCode(c.call(fPrefix + "_copy", c.getLocal("first"), W), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.setLocal("idx1", c.i32_add(c.getLocal("pBuff1"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("pBuff2"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.call(opGtimesF, c.getLocal("idx2"), W, T), c.call(gPrefix + "_copy", c.getLocal("idx1"), U), c.call(gPrefix + "_add", U, T, c.getLocal("idx1")), c.call(gPrefix + "_sub", U, T, c.getLocal("idx2")), c.call(fPrefix + "_mul", W, c.getLocal("inc"), W), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + } + function buildFFTJoinExt() { + const f = module.addFunction(prefix + "_fftJoinExt"); + f.addParam("pBuff1", "i32"); + f.addParam("pBuff2", "i32"); + f.addParam("n", "i32"); + f.addParam("first", "i32"); + f.addParam("inc", "i32"); + f.addParam("totalBits", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + f.addLocal("i", "i32"); + f.addLocal("pShiftToM", "i32"); + const c = f.getCodeBuilder(); + const W = c.i32_const(module.alloc(n8f)); + const U = c.i32_const(module.alloc(n8g)); + f.addCode(c.setLocal("pShiftToM", c.i32_add(c.i32_const(SHIFT_TO_M), c.i32_mul(c.getLocal("totalBits"), c.i32_const(n8f)))), c.call(fPrefix + "_copy", c.getLocal("first"), W), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.setLocal("idx1", c.i32_add(c.getLocal("pBuff1"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("pBuff2"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.call(gPrefix + "_add", c.getLocal("idx1"), c.getLocal("idx2"), U), c.call(opGtimesF, c.getLocal("idx2"), c.getLocal("pShiftToM"), c.getLocal("idx2")), c.call(gPrefix + "_add", c.getLocal("idx1"), c.getLocal("idx2"), c.getLocal("idx2")), c.call(opGtimesF, c.getLocal("idx2"), W, c.getLocal("idx2")), c.call(gPrefix + "_copy", U, c.getLocal("idx1")), c.call(fPrefix + "_mul", W, c.getLocal("inc"), W), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + } + function buildFFTJoinExtInv() { + const f = module.addFunction(prefix + "_fftJoinExtInv"); + f.addParam("pBuff1", "i32"); + f.addParam("pBuff2", "i32"); + f.addParam("n", "i32"); + f.addParam("first", "i32"); + f.addParam("inc", "i32"); + f.addParam("totalBits", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + f.addLocal("i", "i32"); + f.addLocal("pShiftToM", "i32"); + f.addLocal("pSConst", "i32"); + const c = f.getCodeBuilder(); + const W = c.i32_const(module.alloc(n8f)); + const U = c.i32_const(module.alloc(n8g)); + f.addCode(c.setLocal("pShiftToM", c.i32_add(c.i32_const(SHIFT_TO_M), c.i32_mul(c.getLocal("totalBits"), c.i32_const(n8f)))), c.setLocal("pSConst", c.i32_add(c.i32_const(SCONST), c.i32_mul(c.getLocal("totalBits"), c.i32_const(n8f)))), c.call(fPrefix + "_copy", c.getLocal("first"), W), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.setLocal("idx1", c.i32_add(c.getLocal("pBuff1"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("pBuff2"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.call(opGtimesF, c.getLocal("idx2"), W, U), c.call(gPrefix + "_sub", c.getLocal("idx1"), U, c.getLocal("idx2")), c.call(opGtimesF, c.getLocal("idx2"), c.getLocal("pSConst"), c.getLocal("idx2")), c.call(opGtimesF, c.getLocal("idx1"), c.getLocal("pShiftToM"), c.getLocal("idx1")), c.call(gPrefix + "_sub", U, c.getLocal("idx1"), c.getLocal("idx1")), c.call(opGtimesF, c.getLocal("idx1"), c.getLocal("pSConst"), c.getLocal("idx1")), c.call(fPrefix + "_mul", W, c.getLocal("inc"), W), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + } + function buildPrepareLagrangeEvaluation() { + const f = module.addFunction(prefix + "_prepareLagrangeEvaluation"); + f.addParam("pBuff1", "i32"); + f.addParam("pBuff2", "i32"); + f.addParam("n", "i32"); + f.addParam("first", "i32"); + f.addParam("inc", "i32"); + f.addParam("totalBits", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + f.addLocal("i", "i32"); + f.addLocal("pShiftToM", "i32"); + f.addLocal("pSConst", "i32"); + const c = f.getCodeBuilder(); + const W = c.i32_const(module.alloc(n8f)); + const U = c.i32_const(module.alloc(n8g)); + f.addCode(c.setLocal("pShiftToM", c.i32_add(c.i32_const(SHIFT_TO_M), c.i32_mul(c.getLocal("totalBits"), c.i32_const(n8f)))), c.setLocal("pSConst", c.i32_add(c.i32_const(SCONST), c.i32_mul(c.getLocal("totalBits"), c.i32_const(n8f)))), c.call(fPrefix + "_copy", c.getLocal("first"), W), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.setLocal("idx1", c.i32_add(c.getLocal("pBuff1"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("pBuff2"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.call(opGtimesF, c.getLocal("idx1"), c.getLocal("pShiftToM"), U), c.call(gPrefix + "_sub", c.getLocal("idx2"), U, U), c.call(gPrefix + "_sub", c.getLocal("idx1"), c.getLocal("idx2"), c.getLocal("idx2")), c.call(opGtimesF, U, c.getLocal("pSConst"), c.getLocal("idx1")), c.call(opGtimesF, c.getLocal("idx2"), W, c.getLocal("idx2")), c.call(fPrefix + "_mul", W, c.getLocal("inc"), W), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + } + function buildFFTMix() { + const f = module.addFunction(prefix + "_fftMix"); + f.addParam("pBuff", "i32"); + f.addParam("n", "i32"); + f.addParam("exp", "i32"); + f.addLocal("nGroups", "i32"); + f.addLocal("nPerGroup", "i32"); + f.addLocal("nPerGroupDiv2", "i32"); + f.addLocal("pairOffset", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + f.addLocal("i", "i32"); + f.addLocal("j", "i32"); + f.addLocal("pwm", "i32"); + const c = f.getCodeBuilder(); + const W = c.i32_const(module.alloc(n8f)); + const T = c.i32_const(module.alloc(n8g)); + const U = c.i32_const(module.alloc(n8g)); + f.addCode(c.setLocal("nPerGroup", c.i32_shl(c.i32_const(1), c.getLocal("exp"))), c.setLocal("nPerGroupDiv2", c.i32_shr_u(c.getLocal("nPerGroup"), c.i32_const(1))), c.setLocal("nGroups", c.i32_shr_u(c.getLocal("n"), c.getLocal("exp"))), c.setLocal("pairOffset", c.i32_mul(c.getLocal("nPerGroupDiv2"), c.i32_const(n8g))), c.setLocal("pwm", c.i32_add(c.i32_const(ROOTs), c.i32_mul(c.getLocal("exp"), c.i32_const(n8f)))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("nGroups"))), c.call(fPrefix + "_one", W), c.setLocal("j", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("nPerGroupDiv2"))), c.setLocal("idx1", c.i32_add(c.getLocal("pBuff"), c.i32_mul(c.i32_add(c.i32_mul(c.getLocal("i"), c.getLocal("nPerGroup")), c.getLocal("j")), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("idx1"), c.getLocal("pairOffset"))), c.call(opGtimesF, c.getLocal("idx2"), W, T), c.call(gPrefix + "_copy", c.getLocal("idx1"), U), c.call(gPrefix + "_add", U, T, c.getLocal("idx1")), c.call(gPrefix + "_sub", U, T, c.getLocal("idx2")), c.call(fPrefix + "_mul", W, c.getLocal("pwm"), W), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + } + function buildFFTFinal() { + const f = module.addFunction(prefix + "_fftFinal"); + f.addParam("pBuff", "i32"); + f.addParam("n", "i32"); + f.addParam("factor", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + f.addLocal("i", "i32"); + f.addLocal("ndiv2", "i32"); + const c = f.getCodeBuilder(); + const T = c.i32_const(module.alloc(n8g)); + f.addCode(c.setLocal("ndiv2", c.i32_shr_u(c.getLocal("n"), c.i32_const(1))), c.if(c.i32_and(c.getLocal("n"), c.i32_const(1)), c.call(opGtimesF, c.i32_add(c.getLocal("pBuff"), c.i32_mul(c.getLocal("ndiv2"), c.i32_const(n8g))), c.getLocal("factor"), c.i32_add(c.getLocal("pBuff"), c.i32_mul(c.getLocal("ndiv2"), c.i32_const(n8g))))), c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_ge_u(c.getLocal("i"), c.getLocal("ndiv2"))), c.setLocal("idx1", c.i32_add(c.getLocal("pBuff"), c.i32_mul(c.getLocal("i"), c.i32_const(n8g)))), c.setLocal("idx2", c.i32_add(c.getLocal("pBuff"), c.i32_mul(c.i32_sub(c.i32_sub(c.getLocal("n"), c.i32_const(1)), c.getLocal("i")), c.i32_const(n8g)))), c.call(opGtimesF, c.getLocal("idx2"), c.getLocal("factor"), T), c.call(opGtimesF, c.getLocal("idx1"), c.getLocal("factor"), c.getLocal("idx2")), c.call(gPrefix + "_copy", T, c.getLocal("idx1")), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + } + buildRev(); + buildReversePermutation(); + buildFinalInverse(); + buildRawFFT(); + buildLog2(); + buildFFT(); + buildIFFT(); + buildFFTJoin(); + buildFFTJoinExt(); + buildFFTJoinExtInv(); + buildFFTMix(); + buildFFTFinal(); + buildPrepareLagrangeEvaluation(); + module.exportFunction(prefix + "__reversePermutation"); + module.exportFunction(prefix + "_fft"); + module.exportFunction(prefix + "_ifft"); + module.exportFunction(prefix + "_rawfft"); + module.exportFunction(prefix + "_fftJoin"); + module.exportFunction(prefix + "_fftJoinExt"); + module.exportFunction(prefix + "_fftJoinExtInv"); + module.exportFunction(prefix + "_fftMix"); + module.exportFunction(prefix + "_fftFinal"); + module.exportFunction(prefix + "_prepareLagrangeEvaluation"); +} +//#endregion +//#region src/build_pol.js +function buildPol(module, prefix, prefixField) { + const n8 = module.modules[prefixField].n64 * 8; + function buildZero() { + const f = module.addFunction(prefix + "_zero"); + f.addParam("px", "i32"); + f.addParam("n", "i32"); + f.addLocal("lastp", "i32"); + f.addLocal("p", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.setLocal("p", c.getLocal("px")), c.setLocal("lastp", c.i32_add(c.getLocal("px"), c.i32_mul(c.getLocal("n"), c.i32_const(n8)))), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("p"), c.getLocal("lastp"))), c.call(prefixField + "_zero", c.getLocal("p")), c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(n8))), c.br(0)))); + } + function buildConstructLC() { + const f = module.addFunction(prefix + "_constructLC"); + f.addParam("ppolynomials", "i32"); + f.addParam("psignals", "i32"); + f.addParam("nSignals", "i32"); + f.addParam("pres", "i32"); + f.addLocal("i", "i32"); + f.addLocal("j", "i32"); + f.addLocal("pp", "i32"); + f.addLocal("ps", "i32"); + f.addLocal("pd", "i32"); + f.addLocal("ncoefs", "i32"); + const c = f.getCodeBuilder(); + const aux = c.i32_const(module.alloc(n8)); + f.addCode(c.setLocal("i", c.i32_const(0)), c.setLocal("pp", c.getLocal("ppolynomials")), c.setLocal("ps", c.getLocal("psignals")), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("nSignals"))), c.setLocal("ncoefs", c.i32_load(c.getLocal("pp"))), c.setLocal("pp", c.i32_add(c.getLocal("pp"), c.i32_const(4))), c.setLocal("j", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("ncoefs"))), c.setLocal("pd", c.i32_add(c.getLocal("pres"), c.i32_mul(c.i32_load(c.getLocal("pp")), c.i32_const(n8)))), c.setLocal("pp", c.i32_add(c.getLocal("pp"), c.i32_const(4))), c.call(prefixField + "_mul", c.getLocal("ps"), c.getLocal("pp"), aux), c.call(prefixField + "_add", aux, c.getLocal("pd"), c.getLocal("pd")), c.setLocal("pp", c.i32_add(c.getLocal("pp"), c.i32_const(n8))), c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), c.br(0))), c.setLocal("ps", c.i32_add(c.getLocal("ps"), c.i32_const(n8))), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + } + buildZero(); + buildConstructLC(); + module.exportFunction(prefix + "_zero"); + module.exportFunction(prefix + "_constructLC"); + return prefix; +} +//#endregion +//#region src/build_qap.js +function buildQAP(module, prefix, prefixField) { + const n8 = module.modules[prefixField].n64 * 8; + function buildBuildABC() { + const f = module.addFunction(prefix + "_buildABC"); + f.addParam("pCoefs", "i32"); + f.addParam("nCoefs", "i32"); + f.addParam("pWitness", "i32"); + f.addParam("pA", "i32"); + f.addParam("pB", "i32"); + f.addParam("pC", "i32"); + f.addParam("offsetOut", "i32"); + f.addParam("nOut", "i32"); + f.addParam("offsetWitness", "i32"); + f.addParam("nWitness", "i32"); + f.addLocal("it", "i32"); + f.addLocal("ita", "i32"); + f.addLocal("itb", "i32"); + f.addLocal("last", "i32"); + f.addLocal("m", "i32"); + f.addLocal("c", "i32"); + f.addLocal("s", "i32"); + f.addLocal("pOut", "i32"); + const c = f.getCodeBuilder(); + const aux = c.i32_const(module.alloc(n8)); + f.addCode(c.setLocal("ita", c.getLocal("pA")), c.setLocal("itb", c.getLocal("pB")), c.setLocal("last", c.i32_add(c.getLocal("pA"), c.i32_mul(c.getLocal("nOut"), c.i32_const(n8)))), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("ita"), c.getLocal("last"))), c.call(prefixField + "_zero", c.getLocal("ita")), c.call(prefixField + "_zero", c.getLocal("itb")), c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))), c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))), c.br(0))), c.setLocal("it", c.getLocal("pCoefs")), c.setLocal("last", c.i32_add(c.getLocal("pCoefs"), c.i32_mul(c.getLocal("nCoefs"), c.i32_const(n8 + 12)))), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("it"), c.getLocal("last"))), c.setLocal("s", c.i32_load(c.getLocal("it"), 8)), c.if(c.i32_or(c.i32_lt_u(c.getLocal("s"), c.getLocal("offsetWitness")), c.i32_ge_u(c.getLocal("s"), c.i32_add(c.getLocal("offsetWitness"), c.getLocal("nWitness")))), [...c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8 + 12))), ...c.br(1)]), c.setLocal("m", c.i32_load(c.getLocal("it"))), c.if(c.i32_eq(c.getLocal("m"), c.i32_const(0)), c.setLocal("pOut", c.getLocal("pA")), c.if(c.i32_eq(c.getLocal("m"), c.i32_const(1)), c.setLocal("pOut", c.getLocal("pB")), [...c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8 + 12))), ...c.br(1)])), c.setLocal("c", c.i32_load(c.getLocal("it"), 4)), c.if(c.i32_or(c.i32_lt_u(c.getLocal("c"), c.getLocal("offsetOut")), c.i32_ge_u(c.getLocal("c"), c.i32_add(c.getLocal("offsetOut"), c.getLocal("nOut")))), [...c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8 + 12))), ...c.br(1)]), c.setLocal("pOut", c.i32_add(c.getLocal("pOut"), c.i32_mul(c.i32_sub(c.getLocal("c"), c.getLocal("offsetOut")), c.i32_const(n8)))), c.call(prefixField + "_mul", c.i32_add(c.getLocal("pWitness"), c.i32_mul(c.i32_sub(c.getLocal("s"), c.getLocal("offsetWitness")), c.i32_const(n8))), c.i32_add(c.getLocal("it"), c.i32_const(12)), aux), c.call(prefixField + "_add", c.getLocal("pOut"), aux, c.getLocal("pOut")), c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8 + 12))), c.br(0))), c.setLocal("ita", c.getLocal("pA")), c.setLocal("itb", c.getLocal("pB")), c.setLocal("it", c.getLocal("pC")), c.setLocal("last", c.i32_add(c.getLocal("pA"), c.i32_mul(c.getLocal("nOut"), c.i32_const(n8)))), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("ita"), c.getLocal("last"))), c.call(prefixField + "_mul", c.getLocal("ita"), c.getLocal("itb"), c.getLocal("it")), c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))), c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))), c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8))), c.br(0)))); + } + function buildJoinABC() { + const f = module.addFunction(prefix + "_joinABC"); + f.addParam("pA", "i32"); + f.addParam("pB", "i32"); + f.addParam("pC", "i32"); + f.addParam("n", "i32"); + f.addParam("pP", "i32"); + f.addLocal("ita", "i32"); + f.addLocal("itb", "i32"); + f.addLocal("itc", "i32"); + f.addLocal("itp", "i32"); + f.addLocal("last", "i32"); + const c = f.getCodeBuilder(); + const aux = c.i32_const(module.alloc(n8)); + f.addCode(c.setLocal("ita", c.getLocal("pA")), c.setLocal("itb", c.getLocal("pB")), c.setLocal("itc", c.getLocal("pC")), c.setLocal("itp", c.getLocal("pP")), c.setLocal("last", c.i32_add(c.getLocal("pA"), c.i32_mul(c.getLocal("n"), c.i32_const(n8)))), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("ita"), c.getLocal("last"))), c.call(prefixField + "_mul", c.getLocal("ita"), c.getLocal("itb"), aux), c.call(prefixField + "_sub", aux, c.getLocal("itc"), c.getLocal("itp")), c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))), c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))), c.setLocal("itc", c.i32_add(c.getLocal("itc"), c.i32_const(n8))), c.setLocal("itp", c.i32_add(c.getLocal("itp"), c.i32_const(n8))), c.br(0)))); + } + function buildBatchAdd() { + const f = module.addFunction(prefix + "_batchAdd"); + f.addParam("pa", "i32"); + f.addParam("pb", "i32"); + f.addParam("n", "i32"); + f.addParam("pr", "i32"); + f.addLocal("ita", "i32"); + f.addLocal("itb", "i32"); + f.addLocal("itr", "i32"); + f.addLocal("last", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.setLocal("ita", c.getLocal("pa")), c.setLocal("itb", c.getLocal("pb")), c.setLocal("itr", c.getLocal("pr")), c.setLocal("last", c.i32_add(c.getLocal("pa"), c.i32_mul(c.getLocal("n"), c.i32_const(n8)))), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("ita"), c.getLocal("last"))), c.call(prefixField + "_add", c.getLocal("ita"), c.getLocal("itb"), c.getLocal("itr")), c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))), c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))), c.setLocal("itr", c.i32_add(c.getLocal("itr"), c.i32_const(n8))), c.br(0)))); + } + buildBuildABC(); + buildJoinABC(); + buildBatchAdd(); + module.exportFunction(prefix + "_buildABC"); + module.exportFunction(prefix + "_joinABC"); + module.exportFunction(prefix + "_batchAdd"); + return prefix; +} +//#endregion +//#region src/build_applykey.js +function buildApplyKey(module, fnName, gPrefix, frPrefix, sizeGIn, sizeGOut, sizeF, opGtimesF) { + const f = module.addFunction(fnName); + f.addParam("pIn", "i32"); + f.addParam("n", "i32"); + f.addParam("pFirst", "i32"); + f.addParam("pInc", "i32"); + f.addParam("pOut", "i32"); + f.addLocal("pOldFree", "i32"); + f.addLocal("i", "i32"); + f.addLocal("pFrom", "i32"); + f.addLocal("pTo", "i32"); + const c = f.getCodeBuilder(); + const t = c.i32_const(module.alloc(sizeF)); + f.addCode(c.setLocal("pFrom", c.getLocal("pIn")), c.setLocal("pTo", c.getLocal("pOut"))); + f.addCode(c.call(frPrefix + "_copy", c.getLocal("pFirst"), t)); + f.addCode(c.setLocal("i", c.i32_const(0)), c.block(c.loop(c.br_if(1, c.i32_eq(c.getLocal("i"), c.getLocal("n"))), c.call(opGtimesF, c.getLocal("pFrom"), t, c.getLocal("pTo")), c.setLocal("pFrom", c.i32_add(c.getLocal("pFrom"), c.i32_const(sizeGIn))), c.setLocal("pTo", c.i32_add(c.getLocal("pTo"), c.i32_const(sizeGOut))), c.call(frPrefix + "_mul", t, c.getLocal("pInc"), t), c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + module.exportFunction(fnName); +} +//#endregion +//#region src/bn128/build_bn128.js +function buildBN128(module, _prefix) { + const prefix = _prefix || "bn128"; + if (module.modules[prefix]) return prefix; + const q = 21888242871839275222246405745257275088696311157297823662689037894645226208583n; + const r = 21888242871839275222246405745257275088548364400416034343698204186575808495617n; + const n64 = Math.floor((bitLength(q - 1n) - 1) / 64) + 1; + const n8 = n64 * 8; + const frsize = n8; + const f1size = n8; + const f2size = f1size * 2; + const ftsize = f1size * 12; + const pr = module.alloc(bigInt2BytesLE(r, frsize)); + const f1mPrefix = buildF1m(module, q, "f1m"); + buildF1(module, r, "fr", "frm"); + const pG1b = module.alloc(bigInt2BytesLE(toMontgomery(3n), f1size)); + const g1mPrefix = buildCurve(module, "g1m", "f1m", pG1b); + buildFFT(module, "frm", "frm", "frm", "frm_mul"); + buildPol(module, "pol", "frm"); + buildQAP(module, "qap", "frm"); + const f2mPrefix = buildF2m(module, "f1m_neg", "f2m", "f1m"); + const pG2b = module.alloc([...bigInt2BytesLE(toMontgomery(19485874751759354771024239261021720505790618469301721065564631296452457478373n), f1size), ...bigInt2BytesLE(toMontgomery(266929791119991161246907387137283842545076965332900288569378510910307636690n), f1size)]); + const g2mPrefix = buildCurve(module, "g2m", "f2m", pG2b); + function buildGTimesFr(fnName, opMul) { + const f = module.addFunction(fnName); + f.addParam("pG", "i32"); + f.addParam("pFr", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const AUX = c.i32_const(module.alloc(n8)); + f.addCode(c.call("frm_fromMontgomery", c.getLocal("pFr"), AUX), c.call(opMul, c.getLocal("pG"), AUX, c.i32_const(n8), c.getLocal("pr"))); + module.exportFunction(fnName); + } + buildGTimesFr("g1m_timesFr", "g1m_timesScalar"); + buildFFT(module, "g1m", "g1m", "frm", "g1m_timesFr"); + buildGTimesFr("g2m_timesFr", "g2m_timesScalar"); + buildFFT(module, "g2m", "g2m", "frm", "g2m_timesFr"); + buildGTimesFr("g1m_timesFrAffine", "g1m_timesScalarAffine"); + buildGTimesFr("g2m_timesFrAffine", "g2m_timesScalarAffine"); + buildApplyKey(module, "frm_batchApplyKey", "fmr", "frm", n8, n8, n8, "frm_mul"); + buildApplyKey(module, "g1m_batchApplyKey", "g1m", "frm", n8 * 3, n8 * 3, n8, "g1m_timesFr"); + buildApplyKey(module, "g1m_batchApplyKeyMixed", "g1m", "frm", n8 * 2, n8 * 3, n8, "g1m_timesFrAffine"); + buildApplyKey(module, "g2m_batchApplyKey", "g2m", "frm", n8 * 2 * 3, n8 * 3 * 2, n8, "g2m_timesFr"); + buildApplyKey(module, "g2m_batchApplyKeyMixed", "g2m", "frm", n8 * 2 * 2, n8 * 3 * 2, n8, "g2m_timesFrAffine"); + function toMontgomery(a) { + return BigInt(a) * (1n << BigInt(f1size * 8)) % q; + } + const G1gen = [ + 1n, + 2n, + 1n + ]; + const pG1gen = module.alloc([ + ...bigInt2BytesLE(toMontgomery(G1gen[0]), f1size), + ...bigInt2BytesLE(toMontgomery(G1gen[1]), f1size), + ...bigInt2BytesLE(toMontgomery(G1gen[2]), f1size) + ]); + const G1zero = [ + 0n, + 1n, + 0n + ]; + const pG1zero = module.alloc([ + ...bigInt2BytesLE(toMontgomery(G1zero[0]), f1size), + ...bigInt2BytesLE(toMontgomery(G1zero[1]), f1size), + ...bigInt2BytesLE(toMontgomery(G1zero[2]), f1size) + ]); + const G2gen = [ + [10857046999023057135944570762232829481370756359578518086990519993285655852781n, 11559732032986387107991004021392285783925812861821192530917403151452391805634n], + [8495653923123431417604973247489272438418190587263600148770280649306958101930n, 4082367875863433681332203403145435568316851327593401208105741076214120093531n], + [1n, 0n] + ]; + const pG2gen = module.alloc([ + ...bigInt2BytesLE(toMontgomery(G2gen[0][0]), f1size), + ...bigInt2BytesLE(toMontgomery(G2gen[0][1]), f1size), + ...bigInt2BytesLE(toMontgomery(G2gen[1][0]), f1size), + ...bigInt2BytesLE(toMontgomery(G2gen[1][1]), f1size), + ...bigInt2BytesLE(toMontgomery(G2gen[2][0]), f1size), + ...bigInt2BytesLE(toMontgomery(G2gen[2][1]), f1size) + ]); + const G2zero = [ + [0n, 0n], + [1n, 0n], + [0n, 0n] + ]; + const pG2zero = module.alloc([ + ...bigInt2BytesLE(toMontgomery(G2zero[0][0]), f1size), + ...bigInt2BytesLE(toMontgomery(G2zero[0][1]), f1size), + ...bigInt2BytesLE(toMontgomery(G2zero[1][0]), f1size), + ...bigInt2BytesLE(toMontgomery(G2zero[1][1]), f1size), + ...bigInt2BytesLE(toMontgomery(G2zero[2][0]), f1size), + ...bigInt2BytesLE(toMontgomery(G2zero[2][1]), f1size) + ]); + const pOneT = module.alloc([ + ...bigInt2BytesLE(toMontgomery(1), f1size), + ...bigInt2BytesLE(toMontgomery(0), f1size), + ...bigInt2BytesLE(toMontgomery(0), f1size), + ...bigInt2BytesLE(toMontgomery(0), f1size), + ...bigInt2BytesLE(toMontgomery(0), f1size), + ...bigInt2BytesLE(toMontgomery(0), f1size), + ...bigInt2BytesLE(toMontgomery(0), f1size), + ...bigInt2BytesLE(toMontgomery(0), f1size), + ...bigInt2BytesLE(toMontgomery(0), f1size), + ...bigInt2BytesLE(toMontgomery(0), f1size), + ...bigInt2BytesLE(toMontgomery(0), f1size), + ...bigInt2BytesLE(toMontgomery(0), f1size) + ]); + const pNonResidueF6 = module.alloc([...bigInt2BytesLE(toMontgomery(9), f1size), ...bigInt2BytesLE(toMontgomery(1), f1size)]); + const pTwoInv = module.alloc([...bigInt2BytesLE(toMontgomery(modInv(2n, q)), f1size), ...bigInt2BytesLE(0n, f1size)]); + const pAltBn128Twist = pNonResidueF6; + const pTwistCoefB = module.alloc([...bigInt2BytesLE(toMontgomery(19485874751759354771024239261021720505790618469301721065564631296452457478373n), f1size), ...bigInt2BytesLE(toMontgomery(266929791119991161246907387137283842545076965332900288569378510910307636690n), f1size)]); + function build_mulNR6() { + const f = module.addFunction(prefix + "_mulNR6"); + f.addParam("x", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), c.getLocal("x"), c.getLocal("pr"))); + } + build_mulNR6(); + const f6mPrefix = buildF3m(module, prefix + "_mulNR6", "f6m", "f2m"); + function build_mulNR12() { + const f = module.addFunction(prefix + "_mulNR12"); + f.addParam("x", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), c.i32_add(c.getLocal("x"), c.i32_const(n8 * 4)), c.getLocal("pr")), c.call(f2mPrefix + "_copy", c.getLocal("x"), c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 2))), c.call(f2mPrefix + "_copy", c.i32_add(c.getLocal("x"), c.i32_const(n8 * 2)), c.i32_add(c.getLocal("pr"), c.i32_const(n8 * 4)))); + } + build_mulNR12(); + const ftmPrefix = buildF2m(module, prefix + "_mulNR12", "ftm", f6mPrefix); + const ateLoopBitBytes = bits(29793968203157093288n); + const pAteLoopBitBytes = module.alloc(ateLoopBitBytes); + const ateCoefSize = 3 * f2size; + const ateNDblCoefs = ateLoopBitBytes.length - 1; + const ateNCoefs = ateLoopBitBytes.reduce((acc, b) => acc + (b != 0 ? 1 : 0), 0) + ateNDblCoefs + 1; + const prePSize = 6 * n8; + const preQSize = 3 * n8 * 2 + ateNCoefs * ateCoefSize; + module.modules[prefix] = { + n64, + pG1gen, + pG1zero, + pG1b, + pG2gen, + pG2zero, + pG2b, + pq: module.modules["f1m"].pq, + pr, + pOneT, + prePSize, + preQSize, + r: r.toString(), + q: q.toString() + }; + const finalExpZ = 4965661367192848881n; + function naf(n) { + let E = n; + const res = []; + while (E > 0n) { + if (isOdd(E)) { + const z = 2 - Number(E % 4n); + res.push(z); + E = E - BigInt(z); + } else res.push(0); + E = E >> 1n; + } + return res; + } + function bits(n) { + let E = n; + const res = []; + while (E > 0n) { + if (isOdd(E)) res.push(1); + else res.push(0); + E = E >> 1n; + } + return res; + } + function buildPrepareG1() { + const f = module.addFunction(prefix + "_prepareG1"); + f.addParam("pP", "i32"); + f.addParam("ppreP", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(g1mPrefix + "_normalize", c.getLocal("pP"), c.getLocal("ppreP"))); + } + function buildPrepAddStep() { + const f = module.addFunction(prefix + "_prepAddStep"); + f.addParam("pQ", "i32"); + f.addParam("pR", "i32"); + f.addParam("pCoef", "i32"); + const c = f.getCodeBuilder(); + const X2 = c.getLocal("pQ"); + const Y2 = c.i32_add(c.getLocal("pQ"), c.i32_const(f2size)); + const X1 = c.getLocal("pR"); + const Y1 = c.i32_add(c.getLocal("pR"), c.i32_const(f2size)); + const Z1 = c.i32_add(c.getLocal("pR"), c.i32_const(2 * f2size)); + const ELL_0 = c.getLocal("pCoef"); + const ELL_VW = c.i32_add(c.getLocal("pCoef"), c.i32_const(f2size)); + const ELL_VV = c.i32_add(c.getLocal("pCoef"), c.i32_const(2 * f2size)); + const D = ELL_VW; + const E = c.i32_const(module.alloc(f2size)); + const F = c.i32_const(module.alloc(f2size)); + const G = c.i32_const(module.alloc(f2size)); + const H = c.i32_const(module.alloc(f2size)); + const I = c.i32_const(module.alloc(f2size)); + const J = c.i32_const(module.alloc(f2size)); + const AUX = c.i32_const(module.alloc(f2size)); + f.addCode(c.call(f2mPrefix + "_mul", X2, Z1, D), c.call(f2mPrefix + "_sub", X1, D, D), c.call(f2mPrefix + "_mul", Y2, Z1, E), c.call(f2mPrefix + "_sub", Y1, E, E), c.call(f2mPrefix + "_square", D, F), c.call(f2mPrefix + "_square", E, G), c.call(f2mPrefix + "_mul", D, F, H), c.call(f2mPrefix + "_mul", X1, F, I), c.call(f2mPrefix + "_add", I, I, AUX), c.call(f2mPrefix + "_mul", Z1, G, J), c.call(f2mPrefix + "_add", H, J, J), c.call(f2mPrefix + "_sub", J, AUX, J), c.call(f2mPrefix + "_mul", D, J, X1), c.call(f2mPrefix + "_mul", H, Y1, Y1), c.call(f2mPrefix + "_sub", I, J, AUX), c.call(f2mPrefix + "_mul", E, AUX, AUX), c.call(f2mPrefix + "_sub", AUX, Y1, Y1), c.call(f2mPrefix + "_mul", Z1, H, Z1), c.call(f2mPrefix + "_mul", D, Y2, AUX), c.call(f2mPrefix + "_mul", E, X2, ELL_0), c.call(f2mPrefix + "_sub", ELL_0, AUX, ELL_0), c.call(f2mPrefix + "_mul", ELL_0, c.i32_const(pAltBn128Twist), ELL_0), c.call(f2mPrefix + "_neg", E, ELL_VV)); + } + function buildPrepDoubleStep() { + const f = module.addFunction(prefix + "_prepDblStep"); + f.addParam("pR", "i32"); + f.addParam("pCoef", "i32"); + const c = f.getCodeBuilder(); + const X1 = c.getLocal("pR"); + const Y1 = c.i32_add(c.getLocal("pR"), c.i32_const(f2size)); + const Z1 = c.i32_add(c.getLocal("pR"), c.i32_const(2 * f2size)); + const ELL_0 = c.getLocal("pCoef"); + const ELL_VW = c.i32_add(c.getLocal("pCoef"), c.i32_const(f2size)); + const ELL_VV = c.i32_add(c.getLocal("pCoef"), c.i32_const(2 * f2size)); + const A = c.i32_const(module.alloc(f2size)); + const B = c.i32_const(module.alloc(f2size)); + const C = c.i32_const(module.alloc(f2size)); + const D = c.i32_const(module.alloc(f2size)); + const E = c.i32_const(module.alloc(f2size)); + const F = c.i32_const(module.alloc(f2size)); + const G = c.i32_const(module.alloc(f2size)); + const H = c.i32_const(module.alloc(f2size)); + const I = c.i32_const(module.alloc(f2size)); + const J = c.i32_const(module.alloc(f2size)); + const E2 = c.i32_const(module.alloc(f2size)); + const AUX = c.i32_const(module.alloc(f2size)); + f.addCode(c.call(f2mPrefix + "_mul", Y1, c.i32_const(pTwoInv), A), c.call(f2mPrefix + "_mul", X1, A, A), c.call(f2mPrefix + "_square", Y1, B), c.call(f2mPrefix + "_square", Z1, C), c.call(f2mPrefix + "_add", C, C, D), c.call(f2mPrefix + "_add", D, C, D), c.call(f2mPrefix + "_mul", c.i32_const(pTwistCoefB), D, E), c.call(f2mPrefix + "_add", E, E, F), c.call(f2mPrefix + "_add", E, F, F), c.call(f2mPrefix + "_add", B, F, G), c.call(f2mPrefix + "_mul", G, c.i32_const(pTwoInv), G), c.call(f2mPrefix + "_add", B, C, AUX), c.call(f2mPrefix + "_add", Y1, Z1, H), c.call(f2mPrefix + "_square", H, H), c.call(f2mPrefix + "_sub", H, AUX, H), c.call(f2mPrefix + "_sub", E, B, I), c.call(f2mPrefix + "_square", X1, J), c.call(f2mPrefix + "_square", E, E2), c.call(f2mPrefix + "_sub", B, F, AUX), c.call(f2mPrefix + "_mul", A, AUX, X1), c.call(f2mPrefix + "_add", E2, E2, AUX), c.call(f2mPrefix + "_add", E2, AUX, AUX), c.call(f2mPrefix + "_square", G, Y1), c.call(f2mPrefix + "_sub", Y1, AUX, Y1), c.call(f2mPrefix + "_mul", B, H, Z1), c.call(f2mPrefix + "_mul", c.i32_const(pAltBn128Twist), I, ELL_0), c.call(f2mPrefix + "_neg", H, ELL_VW), c.call(f2mPrefix + "_add", J, J, ELL_VV), c.call(f2mPrefix + "_add", J, ELL_VV, ELL_VV)); + } + function buildMulByQ() { + const f = module.addFunction(prefix + "_mulByQ"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const x = c.getLocal("p1"); + const y = c.i32_add(c.getLocal("p1"), c.i32_const(f2size)); + const z = c.i32_add(c.getLocal("p1"), c.i32_const(f2size * 2)); + const x3 = c.getLocal("pr"); + const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(f2size)); + const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(f2size * 2)); + const MulByQX = c.i32_const(module.alloc([...bigInt2BytesLE(toMontgomery("21575463638280843010398324269430826099269044274347216827212613867836435027261"), f1size), ...bigInt2BytesLE(toMontgomery("10307601595873709700152284273816112264069230130616436755625194854815875713954"), f1size)])); + const MulByQY = c.i32_const(module.alloc([...bigInt2BytesLE(toMontgomery("2821565182194536844548159561693502659359617185244120367078079554186484126554"), f1size), ...bigInt2BytesLE(toMontgomery("3505843767911556378687030309984248845540243509899259641013678093033130930403"), f1size)])); + f.addCode(c.call(f2mPrefix + "_conjugate", x, x3), c.call(f2mPrefix + "_mul", MulByQX, x3, x3), c.call(f2mPrefix + "_conjugate", y, y3), c.call(f2mPrefix + "_mul", MulByQY, y3, y3), c.call(f2mPrefix + "_conjugate", z, z3)); + } + function buildPrepareG2() { + buildMulByQ(); + const f = module.addFunction(prefix + "_prepareG2"); + f.addParam("pQ", "i32"); + f.addParam("ppreQ", "i32"); + f.addLocal("pCoef", "i32"); + f.addLocal("i", "i32"); + const c = f.getCodeBuilder(); + const QX = c.getLocal("pQ"); + const pR = module.alloc(f2size * 3); + const R = c.i32_const(pR); + const RX = c.i32_const(pR); + const RY = c.i32_const(pR + f2size); + const RZ = c.i32_const(pR + 2 * f2size); + const cQX = c.i32_add(c.getLocal("ppreQ"), c.i32_const(0)); + const cQY = c.i32_add(c.getLocal("ppreQ"), c.i32_const(f2size)); + const pQ1 = module.alloc(f2size * 3); + const Q1 = c.i32_const(pQ1); + const pQ2 = module.alloc(f2size * 3); + const Q2 = c.i32_const(pQ2); + const Q2Y = c.i32_const(pQ2 + f2size); + f.addCode(c.call(g2mPrefix + "_normalize", QX, cQX), c.call(f2mPrefix + "_copy", cQX, RX), c.call(f2mPrefix + "_copy", cQY, RY), c.call(f2mPrefix + "_one", RZ)); + f.addCode(c.setLocal("pCoef", c.i32_add(c.getLocal("ppreQ"), c.i32_const(f2size * 3))), c.setLocal("i", c.i32_const(ateLoopBitBytes.length - 2)), c.block(c.loop(c.call(prefix + "_prepDblStep", R, c.getLocal("pCoef")), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), c.if(c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes), [...c.call(prefix + "_prepAddStep", cQX, R, c.getLocal("pCoef")), ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize)))]), c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + f.addCode(c.call(prefix + "_mulByQ", cQX, Q1), c.call(prefix + "_mulByQ", Q1, Q2)); + f.addCode(c.call(f2mPrefix + "_neg", Q2Y, Q2Y), c.call(prefix + "_prepAddStep", Q1, R, c.getLocal("pCoef")), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), c.call(prefix + "_prepAddStep", Q2, R, c.getLocal("pCoef")), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize)))); + } + function buildMulBy024Old() { + const f = module.addFunction(prefix + "__mulBy024Old"); + f.addParam("pEll0", "i32"); + f.addParam("pEllVW", "i32"); + f.addParam("pEllVV", "i32"); + f.addParam("pR", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("pEll0"); + const x2 = c.getLocal("pEllVV"); + const x4 = c.getLocal("pEllVW"); + const z0 = c.getLocal("pR"); + const pAUX12 = module.alloc(ftsize); + const AUX12 = c.i32_const(pAUX12); + const AUX12_0 = c.i32_const(pAUX12); + const AUX12_2 = c.i32_const(pAUX12 + f2size); + const AUX12_4 = c.i32_const(pAUX12 + f2size * 2); + const AUX12_6 = c.i32_const(pAUX12 + f2size * 3); + const AUX12_8 = c.i32_const(pAUX12 + f2size * 4); + const AUX12_10 = c.i32_const(pAUX12 + f2size * 5); + f.addCode(c.call(f2mPrefix + "_copy", x0, AUX12_0), c.call(f2mPrefix + "_zero", AUX12_2), c.call(f2mPrefix + "_copy", x2, AUX12_4), c.call(f2mPrefix + "_zero", AUX12_6), c.call(f2mPrefix + "_copy", x4, AUX12_8), c.call(f2mPrefix + "_zero", AUX12_10), c.call(ftmPrefix + "_mul", AUX12, z0, z0)); + } + function buildMulBy024() { + const f = module.addFunction(prefix + "__mulBy024"); + f.addParam("pEll0", "i32"); + f.addParam("pEllVW", "i32"); + f.addParam("pEllVV", "i32"); + f.addParam("pR", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("pEll0"); + const x2 = c.getLocal("pEllVV"); + const x4 = c.getLocal("pEllVW"); + const z0 = c.getLocal("pR"); + const z1 = c.i32_add(c.getLocal("pR"), c.i32_const(2 * n8)); + const z2 = c.i32_add(c.getLocal("pR"), c.i32_const(4 * n8)); + const z3 = c.i32_add(c.getLocal("pR"), c.i32_const(6 * n8)); + const z4 = c.i32_add(c.getLocal("pR"), c.i32_const(8 * n8)); + const z5 = c.i32_add(c.getLocal("pR"), c.i32_const(10 * n8)); + const t0 = c.i32_const(module.alloc(f2size)); + const t1 = c.i32_const(module.alloc(f2size)); + const t2 = c.i32_const(module.alloc(f2size)); + const s0 = c.i32_const(module.alloc(f2size)); + const T3 = c.i32_const(module.alloc(f2size)); + const T4 = c.i32_const(module.alloc(f2size)); + const D0 = c.i32_const(module.alloc(f2size)); + const D2 = c.i32_const(module.alloc(f2size)); + const D4 = c.i32_const(module.alloc(f2size)); + const S1 = c.i32_const(module.alloc(f2size)); + const AUX = c.i32_const(module.alloc(f2size)); + f.addCode(c.call(f2mPrefix + "_mul", z0, x0, D0), c.call(f2mPrefix + "_mul", z2, x2, D2), c.call(f2mPrefix + "_mul", z4, x4, D4), c.call(f2mPrefix + "_add", z0, z4, t2), c.call(f2mPrefix + "_add", z0, z2, t1), c.call(f2mPrefix + "_add", z1, z3, s0), c.call(f2mPrefix + "_add", s0, z5, s0), c.call(f2mPrefix + "_mul", z1, x2, S1), c.call(f2mPrefix + "_add", S1, D4, T3), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4), c.call(f2mPrefix + "_add", T4, D0, z0), c.call(f2mPrefix + "_mul", z5, x4, T3), c.call(f2mPrefix + "_add", S1, T3, S1), c.call(f2mPrefix + "_add", T3, D2, T3), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4), c.call(f2mPrefix + "_mul", z1, x0, T3), c.call(f2mPrefix + "_add", S1, T3, S1), c.call(f2mPrefix + "_add", T4, T3, z1), c.call(f2mPrefix + "_add", x0, x2, t0), c.call(f2mPrefix + "_mul", t1, t0, T3), c.call(f2mPrefix + "_add", D0, D2, AUX), c.call(f2mPrefix + "_sub", T3, AUX, T3), c.call(f2mPrefix + "_mul", z3, x4, T4), c.call(f2mPrefix + "_add", S1, T4, S1), c.call(f2mPrefix + "_add", z2, z4, t0), c.call(f2mPrefix + "_add", T3, T4, z2), c.call(f2mPrefix + "_add", x2, x4, t1), c.call(f2mPrefix + "_mul", t1, t0, T3), c.call(f2mPrefix + "_add", D2, D4, AUX), c.call(f2mPrefix + "_sub", T3, AUX, T3), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4), c.call(f2mPrefix + "_mul", z3, x0, T3), c.call(f2mPrefix + "_add", S1, T3, S1), c.call(f2mPrefix + "_add", T4, T3, z3), c.call(f2mPrefix + "_mul", z5, x2, T3), c.call(f2mPrefix + "_add", S1, T3, S1), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4), c.call(f2mPrefix + "_add", x0, x4, t0), c.call(f2mPrefix + "_mul", t2, t0, T3), c.call(f2mPrefix + "_add", D0, D4, AUX), c.call(f2mPrefix + "_sub", T3, AUX, T3), c.call(f2mPrefix + "_add", T4, T3, z4), c.call(f2mPrefix + "_add", x0, x2, t0), c.call(f2mPrefix + "_add", t0, x4, t0), c.call(f2mPrefix + "_mul", s0, t0, T3), c.call(f2mPrefix + "_sub", T3, S1, z5)); + } + function buildMillerLoop() { + const f = module.addFunction(prefix + "_millerLoop"); + f.addParam("ppreP", "i32"); + f.addParam("ppreQ", "i32"); + f.addParam("r", "i32"); + f.addLocal("pCoef", "i32"); + f.addLocal("i", "i32"); + const c = f.getCodeBuilder(); + const preP_PX = c.getLocal("ppreP"); + const preP_PY = c.i32_add(c.getLocal("ppreP"), c.i32_const(f1size)); + const ELL_0 = c.getLocal("pCoef"); + const ELL_VW = c.i32_add(c.getLocal("pCoef"), c.i32_const(f2size)); + const ELL_VV = c.i32_add(c.getLocal("pCoef"), c.i32_const(2 * f2size)); + const pVW = module.alloc(f2size); + const VW = c.i32_const(pVW); + const pVV = module.alloc(f2size); + const VV = c.i32_const(pVV); + const F = c.getLocal("r"); + f.addCode(c.call(ftmPrefix + "_one", F), c.setLocal("pCoef", c.i32_add(c.getLocal("ppreQ"), c.i32_const(f2size * 3))), c.setLocal("i", c.i32_const(ateLoopBitBytes.length - 2)), c.block(c.loop(c.call(ftmPrefix + "_square", F, F), c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW), c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV), c.call(prefix + "__mulBy024", ELL_0, VW, VV, F), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), c.if(c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes), [ + ...c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW), + ...c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV), + ...c.call(prefix + "__mulBy024", ELL_0, VW, VV, F), + ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))) + ]), c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + f.addCode(c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW), c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV), c.call(prefix + "__mulBy024", ELL_0, VW, VV, F), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW), c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV), c.call(prefix + "__mulBy024", ELL_0, VW, VV, F), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize)))); + } + function buildFrobeniusMap(n) { + const F12 = [[ + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n] + ], [ + [1n, 0n], + [8376118865763821496583973867626364092589906065868298776909617916018768340080n, 16469823323077808223889137241176536799009286646108169935659301613961712198316n], + [21888242871839275220042445260109153167277707414472061641714758635765020556617n, 0n], + [11697423496358154304825782922584725312912383441159505038794027105778954184319n, 303847389135065887422783454877609941456349188919719272345083954437860409601n], + [21888242871839275220042445260109153167277707414472061641714758635765020556616n, 0n], + [3321304630594332808241809054958361220322477375291206261884409189760185844239n, 5722266937896532885780051958958348231143373700109372999374820235121374419868n], + [21888242871839275222246405745257275088696311157297823662689037894645226208582n, 0n], + [13512124006075453725662431877630910996106405091429524885779419978626457868503n, 5418419548761466998357268504080738289687024511189653727029736280683514010267n], + [2203960485148121921418603742825762020974279258880205651966n, 0n], + [10190819375481120917420622822672549775783927716138318623895010788866272024264n, 21584395482704209334823622290379665147239961968378104390343953940207365798982n], + [2203960485148121921418603742825762020974279258880205651967n, 0n], + [18566938241244942414004596690298913868373833782006617400804628704885040364344n, 16165975933942742336466353786298926857552937457188450663314217659523851788715n] + ]]; + const F6 = [ + [ + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n] + ], + [ + [1n, 0n], + [21575463638280843010398324269430826099269044274347216827212613867836435027261n, 10307601595873709700152284273816112264069230130616436755625194854815875713954n], + [21888242871839275220042445260109153167277707414472061641714758635765020556616n, 0n], + [3772000881919853776433695186713858239009073593817195771773381919316419345261n, 2236595495967245188281701248203181795121068902605861227855261137820944008926n], + [2203960485148121921418603742825762020974279258880205651966n, 0n], + [18429021223477853657660792034369865839114504446431234726392080002137598044644n, 9344045779998320333812420223237981029506012124075525679208581902008406485703n] + ], + [ + [1n, 0n], + [2581911344467009335267311115468803099551665605076196740867805258568234346338n, 19937756971775647987995932169929341994314640652964949448313374472400716661030n], + [2203960485148121921418603742825762020974279258880205651966n, 0n], + [5324479202449903542726783395506214481928257762400643279780343368557297135718n, 16208900380737693084919495127334387981393726419856888799917914180988844123039n], + [21888242871839275220042445260109153167277707414472061641714758635765020556616n, 0n], + [13981852324922362344252311234282257507216387789820983642040889267519694726527n, 7629828391165209371577384193250820201684255241773809077146787135900891633097n] + ] + ]; + const f = module.addFunction(prefix + "__frobeniusMap" + n); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + for (let i = 0; i < 6; i++) { + const X = i == 0 ? c.getLocal("x") : c.i32_add(c.getLocal("x"), c.i32_const(i * f2size)); + const Xc0 = X; + const Xc1 = c.i32_add(c.getLocal("x"), c.i32_const(i * f2size + f1size)); + const R = i == 0 ? c.getLocal("r") : c.i32_add(c.getLocal("r"), c.i32_const(i * f2size)); + const Rc0 = R; + const Rc1 = c.i32_add(c.getLocal("r"), c.i32_const(i * f2size + f1size)); + const coef = mul2(F12[Math.floor(i / 3)][n % 12], F6[i % 3][n % 6]); + const pCoef = module.alloc([...bigInt2BytesLE(toMontgomery(coef[0]), 32), ...bigInt2BytesLE(toMontgomery(coef[1]), 32)]); + if (n % 2 == 1) f.addCode(c.call(f1mPrefix + "_copy", Xc0, Rc0), c.call(f1mPrefix + "_neg", Xc1, Rc1), c.call(f2mPrefix + "_mul", R, c.i32_const(pCoef), R)); + else f.addCode(c.call(f2mPrefix + "_mul", X, c.i32_const(pCoef), R)); + } + function mul2(a, b) { + const ac0 = BigInt(a[0]); + const ac1 = BigInt(a[1]); + const bc0 = BigInt(b[0]); + const bc1 = BigInt(b[1]); + const res = [(ac0 * bc0 - ac1 * bc1) % q, (ac0 * bc1 + ac1 * bc0) % q]; + if (isNegative(res[0])) res[0] = res[0] + q; + return res; + } + } + function buildFinalExponentiationFirstChunk() { + const f = module.addFunction(prefix + "__finalExponentiationFirstChunk"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const elt = c.getLocal("x"); + const eltC0 = elt; + const eltC1 = c.i32_add(elt, c.i32_const(n8 * 6)); + const r = c.getLocal("r"); + const pA = module.alloc(ftsize); + const A = c.i32_const(pA); + const Ac0 = A; + const Ac1 = c.i32_const(pA + n8 * 6); + const B = c.i32_const(module.alloc(ftsize)); + const C = c.i32_const(module.alloc(ftsize)); + const D = c.i32_const(module.alloc(ftsize)); + f.addCode(c.call(f6mPrefix + "_copy", eltC0, Ac0), c.call(f6mPrefix + "_neg", eltC1, Ac1), c.call(ftmPrefix + "_inverse", elt, B), c.call(ftmPrefix + "_mul", A, B, C), c.call(prefix + "__frobeniusMap2", C, D), c.call(ftmPrefix + "_mul", C, D, r)); + } + function buildCyclotomicSquare() { + const f = module.addFunction(prefix + "__cyclotomicSquare"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x4 = c.i32_add(c.getLocal("x"), c.i32_const(f2size)); + const x3 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f2size)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(3 * f2size)); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(4 * f2size)); + const x5 = c.i32_add(c.getLocal("x"), c.i32_const(5 * f2size)); + const r0 = c.getLocal("r"); + const r4 = c.i32_add(c.getLocal("r"), c.i32_const(f2size)); + const r3 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f2size)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(3 * f2size)); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(4 * f2size)); + const r5 = c.i32_add(c.getLocal("r"), c.i32_const(5 * f2size)); + const t0 = c.i32_const(module.alloc(f2size)); + const t1 = c.i32_const(module.alloc(f2size)); + const t2 = c.i32_const(module.alloc(f2size)); + const t3 = c.i32_const(module.alloc(f2size)); + const t4 = c.i32_const(module.alloc(f2size)); + const t5 = c.i32_const(module.alloc(f2size)); + const tmp = c.i32_const(module.alloc(f2size)); + const AUX = c.i32_const(module.alloc(f2size)); + f.addCode(c.call(f2mPrefix + "_mul", x0, x1, tmp), c.call(f2mPrefix + "_mul", x1, c.i32_const(pNonResidueF6), t0), c.call(f2mPrefix + "_add", x0, t0, t0), c.call(f2mPrefix + "_add", x0, x1, AUX), c.call(f2mPrefix + "_mul", AUX, t0, t0), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), tmp, AUX), c.call(f2mPrefix + "_add", tmp, AUX, AUX), c.call(f2mPrefix + "_sub", t0, AUX, t0), c.call(f2mPrefix + "_add", tmp, tmp, t1), c.call(f2mPrefix + "_mul", x2, x3, tmp), c.call(f2mPrefix + "_mul", x3, c.i32_const(pNonResidueF6), t2), c.call(f2mPrefix + "_add", x2, t2, t2), c.call(f2mPrefix + "_add", x2, x3, AUX), c.call(f2mPrefix + "_mul", AUX, t2, t2), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), tmp, AUX), c.call(f2mPrefix + "_add", tmp, AUX, AUX), c.call(f2mPrefix + "_sub", t2, AUX, t2), c.call(f2mPrefix + "_add", tmp, tmp, t3), c.call(f2mPrefix + "_mul", x4, x5, tmp), c.call(f2mPrefix + "_mul", x5, c.i32_const(pNonResidueF6), t4), c.call(f2mPrefix + "_add", x4, t4, t4), c.call(f2mPrefix + "_add", x4, x5, AUX), c.call(f2mPrefix + "_mul", AUX, t4, t4), c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), tmp, AUX), c.call(f2mPrefix + "_add", tmp, AUX, AUX), c.call(f2mPrefix + "_sub", t4, AUX, t4), c.call(f2mPrefix + "_add", tmp, tmp, t5), c.call(f2mPrefix + "_sub", t0, x0, r0), c.call(f2mPrefix + "_add", r0, r0, r0), c.call(f2mPrefix + "_add", t0, r0, r0), c.call(f2mPrefix + "_add", t1, x1, r1), c.call(f2mPrefix + "_add", r1, r1, r1), c.call(f2mPrefix + "_add", t1, r1, r1), c.call(f2mPrefix + "_mul", t5, c.i32_const(pAltBn128Twist), AUX), c.call(f2mPrefix + "_add", AUX, x2, r2), c.call(f2mPrefix + "_add", r2, r2, r2), c.call(f2mPrefix + "_add", AUX, r2, r2), c.call(f2mPrefix + "_sub", t4, x3, r3), c.call(f2mPrefix + "_add", r3, r3, r3), c.call(f2mPrefix + "_add", t4, r3, r3), c.call(f2mPrefix + "_sub", t2, x4, r4), c.call(f2mPrefix + "_add", r4, r4, r4), c.call(f2mPrefix + "_add", t2, r4, r4), c.call(f2mPrefix + "_add", t3, x5, r5), c.call(f2mPrefix + "_add", r5, r5, r5), c.call(f2mPrefix + "_add", t3, r5, r5)); + } + function buildCyclotomicExp(exponent, fnName) { + const exponentNafBytes = naf(exponent).map((b) => b == -1 ? 255 : b); + const pExponentNafBytes = module.alloc(exponentNafBytes); + const f = module.addFunction(prefix + "__cyclotomicExp_" + fnName); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + f.addLocal("bit", "i32"); + f.addLocal("i", "i32"); + const c = f.getCodeBuilder(); + const x = c.getLocal("x"); + const res = c.getLocal("r"); + const inverse = c.i32_const(module.alloc(ftsize)); + f.addCode(c.call(ftmPrefix + "_conjugate", x, inverse), c.call(ftmPrefix + "_one", res), c.if(c.teeLocal("bit", c.i32_load8_s(c.i32_const(exponentNafBytes.length - 1), pExponentNafBytes)), c.if(c.i32_eq(c.getLocal("bit"), c.i32_const(1)), c.call(ftmPrefix + "_mul", res, x, res), c.call(ftmPrefix + "_mul", res, inverse, res))), c.setLocal("i", c.i32_const(exponentNafBytes.length - 2)), c.block(c.loop(c.call(prefix + "__cyclotomicSquare", res, res), c.if(c.teeLocal("bit", c.i32_load8_s(c.getLocal("i"), pExponentNafBytes)), c.if(c.i32_eq(c.getLocal("bit"), c.i32_const(1)), c.call(ftmPrefix + "_mul", res, x, res), c.call(ftmPrefix + "_mul", res, inverse, res))), c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + } + function buildFinalExponentiationLastChunk() { + buildCyclotomicSquare(); + buildCyclotomicExp(finalExpZ, "w0"); + const f = module.addFunction(prefix + "__finalExponentiationLastChunk"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const elt = c.getLocal("x"); + const result = c.getLocal("r"); + const A = c.i32_const(module.alloc(ftsize)); + const B = c.i32_const(module.alloc(ftsize)); + const C = c.i32_const(module.alloc(ftsize)); + const D = c.i32_const(module.alloc(ftsize)); + const E = c.i32_const(module.alloc(ftsize)); + const F = c.i32_const(module.alloc(ftsize)); + const G = c.i32_const(module.alloc(ftsize)); + const H = c.i32_const(module.alloc(ftsize)); + const I = c.i32_const(module.alloc(ftsize)); + const J = c.i32_const(module.alloc(ftsize)); + const K = c.i32_const(module.alloc(ftsize)); + const L = c.i32_const(module.alloc(ftsize)); + const M = c.i32_const(module.alloc(ftsize)); + const N = c.i32_const(module.alloc(ftsize)); + const O = c.i32_const(module.alloc(ftsize)); + const P = c.i32_const(module.alloc(ftsize)); + const Q = c.i32_const(module.alloc(ftsize)); + const R = c.i32_const(module.alloc(ftsize)); + const S = c.i32_const(module.alloc(ftsize)); + const T = c.i32_const(module.alloc(ftsize)); + const U = c.i32_const(module.alloc(ftsize)); + f.addCode(c.call(prefix + "__cyclotomicExp_w0", elt, A), c.call(ftmPrefix + "_conjugate", A, A), c.call(prefix + "__cyclotomicSquare", A, B), c.call(prefix + "__cyclotomicSquare", B, C), c.call(ftmPrefix + "_mul", C, B, D), c.call(prefix + "__cyclotomicExp_w0", D, E), c.call(ftmPrefix + "_conjugate", E, E), c.call(prefix + "__cyclotomicSquare", E, F), c.call(prefix + "__cyclotomicExp_w0", F, G), c.call(ftmPrefix + "_conjugate", G, G), c.call(ftmPrefix + "_conjugate", D, H), c.call(ftmPrefix + "_conjugate", G, I), c.call(ftmPrefix + "_mul", I, E, J), c.call(ftmPrefix + "_mul", J, H, K), c.call(ftmPrefix + "_mul", K, B, L), c.call(ftmPrefix + "_mul", K, E, M), c.call(ftmPrefix + "_mul", M, elt, N), c.call(prefix + "__frobeniusMap1", L, O), c.call(ftmPrefix + "_mul", O, N, P), c.call(prefix + "__frobeniusMap2", K, Q), c.call(ftmPrefix + "_mul", Q, P, R), c.call(ftmPrefix + "_conjugate", elt, S), c.call(ftmPrefix + "_mul", S, L, T), c.call(prefix + "__frobeniusMap3", T, U), c.call(ftmPrefix + "_mul", U, R, result)); + } + function buildFinalExponentiation() { + buildFinalExponentiationFirstChunk(); + buildFinalExponentiationLastChunk(); + const f = module.addFunction(prefix + "_finalExponentiation"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const elt = c.getLocal("x"); + const result = c.getLocal("r"); + const eltToFirstChunk = c.i32_const(module.alloc(ftsize)); + f.addCode(c.call(prefix + "__finalExponentiationFirstChunk", elt, eltToFirstChunk), c.call(prefix + "__finalExponentiationLastChunk", eltToFirstChunk, result)); + } + function buildFinalExponentiationOld() { + const f = module.addFunction(prefix + "_finalExponentiationOld"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const pExponent = module.alloc(bigInt2BytesLE(552484233613224096312617126783173147097382103762957654188882734314196910839907541213974502761540629817009608548654680343627701153829446747810907373256841551006201639677726139946029199968412598804882391702273019083653272047566316584365559776493027495458238373902875937659943504873220554161550525926302303331747463515644711876653177129578303191095900909191624817826566688241804408081892785725967931714097716709526092261278071952560171111444072049229123565057483750161460024353346284167282452756217662335528813519139808291170539072125381230815729071544861602750936964829313608137325426383735122175229541155376346436093930287402089517426973178917569713384748081827255472576937471496195752727188261435633271238710131736096299798168852925540549342330775279877006784354801422249722573783561685179618816480037695005515426162362431072245638324744480n, 352)); + const c = f.getCodeBuilder(); + f.addCode(c.call(ftmPrefix + "_exp", c.getLocal("x"), c.i32_const(pExponent), c.i32_const(352), c.getLocal("r"))); + } + const pPreP = module.alloc(prePSize); + const pPreQ = module.alloc(preQSize); + function buildPairingEquation(nPairings) { + const f = module.addFunction(prefix + "_pairingEq" + nPairings); + for (let i = 0; i < nPairings; i++) { + f.addParam("p_" + i, "i32"); + f.addParam("q_" + i, "i32"); + } + f.addParam("c", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const resT = c.i32_const(module.alloc(ftsize)); + const auxT = c.i32_const(module.alloc(ftsize)); + f.addCode(c.call(ftmPrefix + "_one", resT)); + for (let i = 0; i < nPairings; i++) { + f.addCode(c.call(prefix + "_prepareG1", c.getLocal("p_" + i), c.i32_const(pPreP))); + f.addCode(c.call(prefix + "_prepareG2", c.getLocal("q_" + i), c.i32_const(pPreQ))); + f.addCode(c.call(prefix + "_millerLoop", c.i32_const(pPreP), c.i32_const(pPreQ), auxT)); + f.addCode(c.call(ftmPrefix + "_mul", resT, auxT, resT)); + } + f.addCode(c.call(prefix + "_finalExponentiation", resT, resT)); + f.addCode(c.call(ftmPrefix + "_eq", resT, c.getLocal("c"))); + } + function buildPairing() { + const f = module.addFunction(prefix + "_pairing"); + f.addParam("p", "i32"); + f.addParam("q", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const resT = c.i32_const(module.alloc(ftsize)); + f.addCode(c.call(prefix + "_prepareG1", c.getLocal("p"), c.i32_const(pPreP))); + f.addCode(c.call(prefix + "_prepareG2", c.getLocal("q"), c.i32_const(pPreQ))); + f.addCode(c.call(prefix + "_millerLoop", c.i32_const(pPreP), c.i32_const(pPreQ), resT)); + f.addCode(c.call(prefix + "_finalExponentiation", resT, c.getLocal("r"))); + } + buildPrepAddStep(); + buildPrepDoubleStep(); + buildPrepareG1(); + buildPrepareG2(); + buildMulBy024(); + buildMulBy024Old(); + buildMillerLoop(); + for (let i = 0; i < 10; i++) { + buildFrobeniusMap(i); + module.exportFunction(prefix + "__frobeniusMap" + i); + } + buildFinalExponentiationOld(); + buildFinalExponentiation(); + for (let i = 1; i <= 5; i++) { + buildPairingEquation(i); + module.exportFunction(prefix + "_pairingEq" + i); + } + buildPairing(); + module.exportFunction(prefix + "_pairing"); + module.exportFunction(prefix + "_prepareG1"); + module.exportFunction(prefix + "_prepareG2"); + module.exportFunction(prefix + "_millerLoop"); + module.exportFunction(prefix + "_finalExponentiation"); + module.exportFunction(prefix + "_finalExponentiationOld"); + module.exportFunction(prefix + "__mulBy024"); + module.exportFunction(prefix + "__mulBy024Old"); + module.exportFunction(prefix + "__cyclotomicSquare"); + module.exportFunction(prefix + "__cyclotomicExp_w0"); +} +//#endregion +//#region src/bls12381/build_bls12381.js +function buildBLS12381(module, _prefix) { + const prefix = _prefix || "bls12381"; + if (module.modules[prefix]) return prefix; + const q = 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787n; + const r = 52435875175126190479447740508185965837690552500527637822603658699938581184513n; + const n64q = Math.floor((bitLength(q - 1n) - 1) / 64) + 1; + const n8q = n64q * 8; + const f1size = n8q; + const f2size = f1size * 2; + const ftsize = f1size * 12; + const n64r = Math.floor((bitLength(r - 1n) - 1) / 64) + 1; + const n8r = n64r * 8; + const frsize = n8r; + const pr = module.alloc(bigInt2BytesLE(r, frsize)); + const f1mPrefix = buildF1m(module, q, "f1m", "intq"); + buildF1(module, r, "fr", "frm", "intr"); + const pG1b = module.alloc(bigInt2BytesLE(toMontgomery(4n), f1size)); + const g1mPrefix = buildCurve(module, "g1m", "f1m", pG1b); + buildFFT(module, "frm", "frm", "frm", "frm_mul"); + buildPol(module, "pol", "frm"); + buildQAP(module, "qap", "frm"); + const f2mPrefix = buildF2m(module, "f1m_neg", "f2m", "f1m"); + const pG2b = module.alloc([...bigInt2BytesLE(toMontgomery(4n), f1size), ...bigInt2BytesLE(toMontgomery(4n), f1size)]); + const g2mPrefix = buildCurve(module, "g2m", "f2m", pG2b); + function buildGTimesFr(fnName, opMul) { + const f = module.addFunction(fnName); + f.addParam("pG", "i32"); + f.addParam("pFr", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const AUX = c.i32_const(module.alloc(n8r)); + f.addCode(c.call("frm_fromMontgomery", c.getLocal("pFr"), AUX), c.call(opMul, c.getLocal("pG"), AUX, c.i32_const(n8r), c.getLocal("pr"))); + module.exportFunction(fnName); + } + buildGTimesFr("g1m_timesFr", "g1m_timesScalar"); + buildFFT(module, "g1m", "g1m", "frm", "g1m_timesFr"); + buildGTimesFr("g2m_timesFr", "g2m_timesScalar"); + buildFFT(module, "g2m", "g2m", "frm", "g2m_timesFr"); + buildGTimesFr("g1m_timesFrAffine", "g1m_timesScalarAffine"); + buildGTimesFr("g2m_timesFrAffine", "g2m_timesScalarAffine"); + buildApplyKey(module, "frm_batchApplyKey", "fmr", "frm", n8r, n8r, n8r, "frm_mul"); + buildApplyKey(module, "g1m_batchApplyKey", "g1m", "frm", n8q * 3, n8q * 3, n8r, "g1m_timesFr"); + buildApplyKey(module, "g1m_batchApplyKeyMixed", "g1m", "frm", n8q * 2, n8q * 3, n8r, "g1m_timesFrAffine"); + buildApplyKey(module, "g2m_batchApplyKey", "g2m", "frm", n8q * 2 * 3, n8q * 3 * 2, n8r, "g2m_timesFr"); + buildApplyKey(module, "g2m_batchApplyKeyMixed", "g2m", "frm", n8q * 2 * 2, n8q * 3 * 2, n8r, "g2m_timesFrAffine"); + function toMontgomery(a) { + return BigInt(a) * (1n << BigInt(f1size * 8)) % q; + } + const G1gen = [ + 3685416753713387016781088315183077757961620795782546409894578378688607592378376318836054947676345821548104185464507n, + 1339506544944476473020471379941921221584933875938349620426543736416511423956333506472724655353366534992391756441569n, + 1n + ]; + const pG1gen = module.alloc([ + ...bigInt2BytesLE(toMontgomery(G1gen[0]), f1size), + ...bigInt2BytesLE(toMontgomery(G1gen[1]), f1size), + ...bigInt2BytesLE(toMontgomery(G1gen[2]), f1size) + ]); + const G1zero = [ + 0n, + 1n, + 0n + ]; + const pG1zero = module.alloc([ + ...bigInt2BytesLE(toMontgomery(G1zero[0]), f1size), + ...bigInt2BytesLE(toMontgomery(G1zero[1]), f1size), + ...bigInt2BytesLE(toMontgomery(G1zero[2]), f1size) + ]); + const G2gen = [ + [352701069587466618187139116011060144890029952792775240219908644239793785735715026873347600343865175952761926303160n, 3059144344244213709971259814753781636986470325476647558659373206291635324768958432433509563104347017837885763365758n], + [1985150602287291935568054521177171638300868978215655730859378665066344726373823718423869104263333984641494340347905n, 927553665492332455747201965776037880757740193453592970025027978793976877002675564980949289727957565575433344219582n], + [1n, 0n] + ]; + const pG2gen = module.alloc([ + ...bigInt2BytesLE(toMontgomery(G2gen[0][0]), f1size), + ...bigInt2BytesLE(toMontgomery(G2gen[0][1]), f1size), + ...bigInt2BytesLE(toMontgomery(G2gen[1][0]), f1size), + ...bigInt2BytesLE(toMontgomery(G2gen[1][1]), f1size), + ...bigInt2BytesLE(toMontgomery(G2gen[2][0]), f1size), + ...bigInt2BytesLE(toMontgomery(G2gen[2][1]), f1size) + ]); + const G2zero = [ + [0n, 0n], + [1n, 0n], + [0n, 0n] + ]; + const pG2zero = module.alloc([ + ...bigInt2BytesLE(toMontgomery(G2zero[0][0]), f1size), + ...bigInt2BytesLE(toMontgomery(G2zero[0][1]), f1size), + ...bigInt2BytesLE(toMontgomery(G2zero[1][0]), f1size), + ...bigInt2BytesLE(toMontgomery(G2zero[1][1]), f1size), + ...bigInt2BytesLE(toMontgomery(G2zero[2][0]), f1size), + ...bigInt2BytesLE(toMontgomery(G2zero[2][1]), f1size) + ]); + const pOneT = module.alloc([ + ...bigInt2BytesLE(toMontgomery(1n), f1size), + ...bigInt2BytesLE(toMontgomery(0n), f1size), + ...bigInt2BytesLE(toMontgomery(0n), f1size), + ...bigInt2BytesLE(toMontgomery(0n), f1size), + ...bigInt2BytesLE(toMontgomery(0n), f1size), + ...bigInt2BytesLE(toMontgomery(0n), f1size), + ...bigInt2BytesLE(toMontgomery(0n), f1size), + ...bigInt2BytesLE(toMontgomery(0n), f1size), + ...bigInt2BytesLE(toMontgomery(0n), f1size), + ...bigInt2BytesLE(toMontgomery(0n), f1size), + ...bigInt2BytesLE(toMontgomery(0n), f1size), + ...bigInt2BytesLE(toMontgomery(0n), f1size) + ]); + const pBls12381Twist = module.alloc([...bigInt2BytesLE(toMontgomery(1n), f1size), ...bigInt2BytesLE(toMontgomery(1n), f1size)]); + function build_mulNR2() { + const f = module.addFunction(f2mPrefix + "_mulNR"); + f.addParam("x", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const x0c = c.i32_const(module.alloc(f1size)); + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1size)); + const r0 = c.getLocal("pr"); + const r1 = c.i32_add(c.getLocal("pr"), c.i32_const(f1size)); + f.addCode(c.call(f1mPrefix + "_copy", x0, x0c), c.call(f1mPrefix + "_sub", x0, x1, r0), c.call(f1mPrefix + "_add", x0c, x1, r1)); + } + build_mulNR2(); + const f6mPrefix = buildF3m(module, f2mPrefix + "_mulNR", "f6m", "f2m"); + function build_mulNR6() { + const f = module.addFunction(f6mPrefix + "_mulNR"); + f.addParam("x", "i32"); + f.addParam("pr", "i32"); + const c = f.getCodeBuilder(); + const c0copy = c.i32_const(module.alloc(f1size * 2)); + f.addCode(c.call(f2mPrefix + "_copy", c.getLocal("x"), c0copy), c.call(f2mPrefix + "_mulNR", c.i32_add(c.getLocal("x"), c.i32_const(n8q * 4)), c.getLocal("pr")), c.call(f2mPrefix + "_copy", c.i32_add(c.getLocal("x"), c.i32_const(n8q * 2)), c.i32_add(c.getLocal("pr"), c.i32_const(n8q * 4))), c.call(f2mPrefix + "_copy", c0copy, c.i32_add(c.getLocal("pr"), c.i32_const(n8q * 2)))); + } + build_mulNR6(); + const ftmPrefix = buildF2m(module, f6mPrefix + "_mulNR", "ftm", f6mPrefix); + const ateLoopBitBytes = bits(15132376222941642752n); + const pAteLoopBitBytes = module.alloc(ateLoopBitBytes); + const ateCoefSize = 3 * f2size; + const ateNDblCoefs = ateLoopBitBytes.length - 1; + const ateNCoefs = ateLoopBitBytes.reduce((acc, b) => acc + (b != 0 ? 1 : 0), 0) + ateNDblCoefs + 1; + const prePSize = 6 * n8q; + const preQSize = 3 * n8q * 2 + ateNCoefs * ateCoefSize; + const finalExpIsNegative = true; + const finalExpZ = 15132376222941642752n; + module.modules[prefix] = { + n64q, + n64r, + n8q, + n8r, + pG1gen, + pG1zero, + pG1b, + pG2gen, + pG2zero, + pG2b, + pq: module.modules["f1m"].pq, + pr, + pOneT, + r, + q, + prePSize, + preQSize + }; + function naf(n) { + let E = n; + const res = []; + while (E > 0n) { + if (isOdd(E)) { + const z = 2 - Number(E % 4n); + res.push(z); + E = E - BigInt(z); + } else res.push(0); + E = E >> 1n; + } + return res; + } + function bits(n) { + let E = n; + const res = []; + while (E > 0n) { + if (isOdd(E)) res.push(1); + else res.push(0); + E = E >> 1n; + } + return res; + } + function buildPrepareG1() { + const f = module.addFunction(prefix + "_prepareG1"); + f.addParam("pP", "i32"); + f.addParam("ppreP", "i32"); + const c = f.getCodeBuilder(); + f.addCode(c.call(g1mPrefix + "_normalize", c.getLocal("pP"), c.getLocal("ppreP"))); + } + function buildPrepDoubleStep() { + const f = module.addFunction(prefix + "_prepDblStep"); + f.addParam("R", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const Rx = c.getLocal("R"); + const Ry = c.i32_add(c.getLocal("R"), c.i32_const(2 * n8q)); + const Rz = c.i32_add(c.getLocal("R"), c.i32_const(4 * n8q)); + const t0 = c.getLocal("r"); + const t3 = c.i32_add(c.getLocal("r"), c.i32_const(2 * n8q)); + const t6 = c.i32_add(c.getLocal("r"), c.i32_const(4 * n8q)); + const zsquared = c.i32_const(module.alloc(f2size)); + const t1 = c.i32_const(module.alloc(f2size)); + const t2 = c.i32_const(module.alloc(f2size)); + const t4 = c.i32_const(module.alloc(f2size)); + const t5 = c.i32_const(module.alloc(f2size)); + f.addCode(c.call(f2mPrefix + "_square", Rx, t0), c.call(f2mPrefix + "_square", Ry, t1), c.call(f2mPrefix + "_square", t1, t2), c.call(f2mPrefix + "_add", t1, Rx, t3), c.call(f2mPrefix + "_square", t3, t3), c.call(f2mPrefix + "_sub", t3, t0, t3), c.call(f2mPrefix + "_sub", t3, t2, t3), c.call(f2mPrefix + "_add", t3, t3, t3), c.call(f2mPrefix + "_add", t0, t0, t4), c.call(f2mPrefix + "_add", t4, t0, t4), c.call(f2mPrefix + "_add", Rx, t4, t6), c.call(f2mPrefix + "_square", t4, t5), c.call(f2mPrefix + "_square", Rz, zsquared), c.call(f2mPrefix + "_sub", t5, t3, Rx), c.call(f2mPrefix + "_sub", Rx, t3, Rx), c.call(f2mPrefix + "_add", Rz, Ry, Rz), c.call(f2mPrefix + "_square", Rz, Rz), c.call(f2mPrefix + "_sub", Rz, t1, Rz), c.call(f2mPrefix + "_sub", Rz, zsquared, Rz), c.call(f2mPrefix + "_sub", t3, Rx, Ry), c.call(f2mPrefix + "_mul", Ry, t4, Ry), c.call(f2mPrefix + "_add", t2, t2, t2), c.call(f2mPrefix + "_add", t2, t2, t2), c.call(f2mPrefix + "_add", t2, t2, t2), c.call(f2mPrefix + "_sub", Ry, t2, Ry), c.call(f2mPrefix + "_mul", t4, zsquared, t3), c.call(f2mPrefix + "_add", t3, t3, t3), c.call(f2mPrefix + "_neg", t3, t3), c.call(f2mPrefix + "_square", t6, t6), c.call(f2mPrefix + "_sub", t6, t0, t6), c.call(f2mPrefix + "_sub", t6, t5, t6), c.call(f2mPrefix + "_add", t1, t1, t1), c.call(f2mPrefix + "_add", t1, t1, t1), c.call(f2mPrefix + "_sub", t6, t1, t6), c.call(f2mPrefix + "_mul", Rz, zsquared, t0), c.call(f2mPrefix + "_add", t0, t0, t0)); + } + function buildPrepAddStep() { + const f = module.addFunction(prefix + "_prepAddStep"); + f.addParam("R", "i32"); + f.addParam("Q", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const Rx = c.getLocal("R"); + const Ry = c.i32_add(c.getLocal("R"), c.i32_const(2 * n8q)); + const Rz = c.i32_add(c.getLocal("R"), c.i32_const(4 * n8q)); + const Qx = c.getLocal("Q"); + const Qy = c.i32_add(c.getLocal("Q"), c.i32_const(2 * n8q)); + const t10 = c.getLocal("r"); + const t1 = c.i32_add(c.getLocal("r"), c.i32_const(2 * n8q)); + const t9 = c.i32_add(c.getLocal("r"), c.i32_const(4 * n8q)); + const zsquared = c.i32_const(module.alloc(f2size)); + const ysquared = c.i32_const(module.alloc(f2size)); + const ztsquared = c.i32_const(module.alloc(f2size)); + const t0 = c.i32_const(module.alloc(f2size)); + const t2 = c.i32_const(module.alloc(f2size)); + const t3 = c.i32_const(module.alloc(f2size)); + const t4 = c.i32_const(module.alloc(f2size)); + const t5 = c.i32_const(module.alloc(f2size)); + const t6 = c.i32_const(module.alloc(f2size)); + const t7 = c.i32_const(module.alloc(f2size)); + const t8 = c.i32_const(module.alloc(f2size)); + f.addCode(c.call(f2mPrefix + "_square", Rz, zsquared), c.call(f2mPrefix + "_square", Qy, ysquared), c.call(f2mPrefix + "_mul", zsquared, Qx, t0), c.call(f2mPrefix + "_add", Qy, Rz, t1), c.call(f2mPrefix + "_square", t1, t1), c.call(f2mPrefix + "_sub", t1, ysquared, t1), c.call(f2mPrefix + "_sub", t1, zsquared, t1), c.call(f2mPrefix + "_mul", t1, zsquared, t1), c.call(f2mPrefix + "_sub", t0, Rx, t2), c.call(f2mPrefix + "_square", t2, t3), c.call(f2mPrefix + "_add", t3, t3, t4), c.call(f2mPrefix + "_add", t4, t4, t4), c.call(f2mPrefix + "_mul", t4, t2, t5), c.call(f2mPrefix + "_sub", t1, Ry, t6), c.call(f2mPrefix + "_sub", t6, Ry, t6), c.call(f2mPrefix + "_mul", t6, Qx, t9), c.call(f2mPrefix + "_mul", t4, Rx, t7), c.call(f2mPrefix + "_square", t6, Rx), c.call(f2mPrefix + "_sub", Rx, t5, Rx), c.call(f2mPrefix + "_sub", Rx, t7, Rx), c.call(f2mPrefix + "_sub", Rx, t7, Rx), c.call(f2mPrefix + "_add", Rz, t2, Rz), c.call(f2mPrefix + "_square", Rz, Rz), c.call(f2mPrefix + "_sub", Rz, zsquared, Rz), c.call(f2mPrefix + "_sub", Rz, t3, Rz), c.call(f2mPrefix + "_add", Qy, Rz, t10), c.call(f2mPrefix + "_sub", t7, Rx, t8), c.call(f2mPrefix + "_mul", t8, t6, t8), c.call(f2mPrefix + "_mul", Ry, t5, t0), c.call(f2mPrefix + "_add", t0, t0, t0), c.call(f2mPrefix + "_sub", t8, t0, Ry), c.call(f2mPrefix + "_square", t10, t10), c.call(f2mPrefix + "_sub", t10, ysquared, t10), c.call(f2mPrefix + "_square", Rz, ztsquared), c.call(f2mPrefix + "_sub", t10, ztsquared, t10), c.call(f2mPrefix + "_add", t9, t9, t9), c.call(f2mPrefix + "_sub", t9, t10, t9), c.call(f2mPrefix + "_add", Rz, Rz, t10), c.call(f2mPrefix + "_neg", t6, t6), c.call(f2mPrefix + "_add", t6, t6, t1)); + } + function buildPrepareG2() { + const f = module.addFunction(prefix + "_prepareG2"); + f.addParam("pQ", "i32"); + f.addParam("ppreQ", "i32"); + f.addLocal("pCoef", "i32"); + f.addLocal("i", "i32"); + const c = f.getCodeBuilder(); + const Q = c.getLocal("pQ"); + const pR = module.alloc(f2size * 3); + const R = c.i32_const(pR); + const base = c.getLocal("ppreQ"); + f.addCode(c.call(g2mPrefix + "_normalize", Q, base), c.if(c.call(g2mPrefix + "_isZero", base), c.ret([])), c.call(g2mPrefix + "_copy", base, R), c.setLocal("pCoef", c.i32_add(c.getLocal("ppreQ"), c.i32_const(f2size * 3)))); + f.addCode(c.setLocal("i", c.i32_const(ateLoopBitBytes.length - 2)), c.block(c.loop(c.call(prefix + "_prepDblStep", R, c.getLocal("pCoef")), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), c.if(c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes), [...c.call(prefix + "_prepAddStep", R, base, c.getLocal("pCoef")), ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize)))]), c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + } + function buildF6Mul1() { + const f = module.addFunction(f6mPrefix + "_mul1"); + f.addParam("pA", "i32"); + f.addParam("pC1", "i32"); + f.addParam("pR", "i32"); + const c = f.getCodeBuilder(); + const A_c0 = c.getLocal("pA"); + const A_c1 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size * 2)); + const A_c2 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size * 4)); + const c1 = c.getLocal("pC1"); + const t1 = c.getLocal("pR"); + const t2 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size * 2)); + const b_b = c.i32_add(c.getLocal("pR"), c.i32_const(f1size * 4)); + const Ac0_Ac1 = c.i32_const(module.alloc(f1size * 2)); + const Ac1_Ac2 = c.i32_const(module.alloc(f1size * 2)); + f.addCode(c.call(f2mPrefix + "_add", A_c0, A_c1, Ac0_Ac1), c.call(f2mPrefix + "_add", A_c1, A_c2, Ac1_Ac2), c.call(f2mPrefix + "_mul", A_c1, c1, b_b), c.call(f2mPrefix + "_mul", Ac1_Ac2, c1, t1), c.call(f2mPrefix + "_sub", t1, b_b, t1), c.call(f2mPrefix + "_mulNR", t1, t1), c.call(f2mPrefix + "_mul", Ac0_Ac1, c1, t2), c.call(f2mPrefix + "_sub", t2, b_b, t2)); + } + buildF6Mul1(); + function buildF6Mul01() { + const f = module.addFunction(f6mPrefix + "_mul01"); + f.addParam("pA", "i32"); + f.addParam("pC0", "i32"); + f.addParam("pC1", "i32"); + f.addParam("pR", "i32"); + const c = f.getCodeBuilder(); + const A_c0 = c.getLocal("pA"); + const A_c1 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size * 2)); + const A_c2 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size * 4)); + const c0 = c.getLocal("pC0"); + const c1 = c.getLocal("pC1"); + const t1 = c.getLocal("pR"); + const t2 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size * 2)); + const t3 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size * 4)); + const a_a = c.i32_const(module.alloc(f1size * 2)); + const b_b = c.i32_const(module.alloc(f1size * 2)); + const Ac0_Ac1 = c.i32_const(module.alloc(f1size * 2)); + const Ac0_Ac2 = c.i32_const(module.alloc(f1size * 2)); + f.addCode(c.call(f2mPrefix + "_mul", A_c0, c0, a_a), c.call(f2mPrefix + "_mul", A_c1, c1, b_b), c.call(f2mPrefix + "_add", A_c0, A_c1, Ac0_Ac1), c.call(f2mPrefix + "_add", A_c0, A_c2, Ac0_Ac2), c.call(f2mPrefix + "_add", A_c1, A_c2, t1), c.call(f2mPrefix + "_mul", t1, c1, t1), c.call(f2mPrefix + "_sub", t1, b_b, t1), c.call(f2mPrefix + "_mulNR", t1, t1), c.call(f2mPrefix + "_add", t1, a_a, t1), c.call(f2mPrefix + "_add", c0, c1, t2), c.call(f2mPrefix + "_mul", t2, Ac0_Ac1, t2), c.call(f2mPrefix + "_sub", t2, a_a, t2), c.call(f2mPrefix + "_sub", t2, b_b, t2), c.call(f2mPrefix + "_mul", Ac0_Ac2, c0, t3), c.call(f2mPrefix + "_sub", t3, a_a, t3), c.call(f2mPrefix + "_add", t3, b_b, t3)); + } + buildF6Mul01(); + function buildF12Mul014() { + const f = module.addFunction(ftmPrefix + "_mul014"); + f.addParam("pA", "i32"); + f.addParam("pC0", "i32"); + f.addParam("pC1", "i32"); + f.addParam("pC4", "i32"); + f.addParam("pR", "i32"); + const c = f.getCodeBuilder(); + const A_c0 = c.getLocal("pA"); + const A_c1 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size * 6)); + const c0 = c.getLocal("pC0"); + const c1 = c.getLocal("pC1"); + const c4 = c.getLocal("pC4"); + const aa = c.i32_const(module.alloc(f1size * 6)); + const bb = c.i32_const(module.alloc(f1size * 6)); + const o = c.i32_const(module.alloc(f1size * 2)); + const R_c0 = c.getLocal("pR"); + const R_c1 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size * 6)); + f.addCode(c.call(f6mPrefix + "_mul01", A_c0, c0, c1, aa), c.call(f6mPrefix + "_mul1", A_c1, c4, bb), c.call(f2mPrefix + "_add", c1, c4, o), c.call(f6mPrefix + "_add", A_c1, A_c0, R_c1), c.call(f6mPrefix + "_mul01", R_c1, c0, o, R_c1), c.call(f6mPrefix + "_sub", R_c1, aa, R_c1), c.call(f6mPrefix + "_sub", R_c1, bb, R_c1), c.call(f6mPrefix + "_copy", bb, R_c0), c.call(f6mPrefix + "_mulNR", R_c0, R_c0), c.call(f6mPrefix + "_add", R_c0, aa, R_c0)); + } + buildF12Mul014(); + function buildELL() { + const f = module.addFunction(prefix + "_ell"); + f.addParam("pP", "i32"); + f.addParam("pCoefs", "i32"); + f.addParam("pF", "i32"); + const c = f.getCodeBuilder(); + const Px = c.getLocal("pP"); + const Py = c.i32_add(c.getLocal("pP"), c.i32_const(n8q)); + const F = c.getLocal("pF"); + const coef0_0 = c.getLocal("pCoefs"); + const coef0_1 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size)); + const coef1_0 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size * 2)); + const coef1_1 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size * 3)); + const coef2 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size * 4)); + const pc0 = module.alloc(f1size * 2); + const c0 = c.i32_const(pc0); + const c0_c0 = c.i32_const(pc0); + const c0_c1 = c.i32_const(pc0 + f1size); + const pc1 = module.alloc(f1size * 2); + const c1 = c.i32_const(pc1); + const c1_c0 = c.i32_const(pc1); + const c1_c1 = c.i32_const(pc1 + f1size); + f.addCode(c.call(f1mPrefix + "_mul", coef0_0, Py, c0_c0), c.call(f1mPrefix + "_mul", coef0_1, Py, c0_c1), c.call(f1mPrefix + "_mul", coef1_0, Px, c1_c0), c.call(f1mPrefix + "_mul", coef1_1, Px, c1_c1), c.call(ftmPrefix + "_mul014", F, coef2, c1, c0, F)); + } + buildELL(); + function buildMillerLoop() { + const f = module.addFunction(prefix + "_millerLoop"); + f.addParam("ppreP", "i32"); + f.addParam("ppreQ", "i32"); + f.addParam("r", "i32"); + f.addLocal("pCoef", "i32"); + f.addLocal("i", "i32"); + const c = f.getCodeBuilder(); + const preP = c.getLocal("ppreP"); + const coefs = c.getLocal("pCoef"); + const F = c.getLocal("r"); + f.addCode(c.call(ftmPrefix + "_one", F), c.if(c.call(g1mPrefix + "_isZero", preP), c.ret([])), c.if(c.call(g1mPrefix + "_isZero", c.getLocal("ppreQ")), c.ret([])), c.setLocal("pCoef", c.i32_add(c.getLocal("ppreQ"), c.i32_const(f2size * 3))), c.setLocal("i", c.i32_const(ateLoopBitBytes.length - 2)), c.block(c.loop(c.call(prefix + "_ell", preP, coefs, F), c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), c.if(c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes), [...c.call(prefix + "_ell", preP, coefs, F), ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize)))]), c.call(ftmPrefix + "_square", F, F), c.br_if(1, c.i32_eq(c.getLocal("i"), c.i32_const(1))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0))), c.call(prefix + "_ell", preP, coefs, F)); + f.addCode(c.call(ftmPrefix + "_conjugate", F, F)); + } + function buildFrobeniusMap(n) { + const F12 = [[ + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n] + ], [ + [1n, 0n], + [3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760n, 151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027n], + [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351n, 0n], + [2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n, 1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257n], + [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n, 0n], + [3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557n, 877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230n], + [4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786n, 0n], + [151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027n, 3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760n], + [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n, 0n], + [1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257n, 2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n], + [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437n, 0n], + [877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230n, 3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557n] + ]]; + const F6 = [ + [ + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n] + ], + [ + [1n, 0n], + [0n, 4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n], + [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n, 0n], + [0n, 1n], + [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n, 0n], + [0n, 793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n] + ], + [ + [1n, 0n], + [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437n, 0n], + [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n, 0n], + [4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786n, 0n], + [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n, 0n], + [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351n, 0n] + ] + ]; + const f = module.addFunction(ftmPrefix + "_frobeniusMap" + n); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + for (let i = 0; i < 6; i++) { + const X = i == 0 ? c.getLocal("x") : c.i32_add(c.getLocal("x"), c.i32_const(i * f2size)); + const Xc0 = X; + const Xc1 = c.i32_add(c.getLocal("x"), c.i32_const(i * f2size + f1size)); + const R = i == 0 ? c.getLocal("r") : c.i32_add(c.getLocal("r"), c.i32_const(i * f2size)); + const Rc0 = R; + const Rc1 = c.i32_add(c.getLocal("r"), c.i32_const(i * f2size + f1size)); + const coef = mul2(F12[Math.floor(i / 3)][n % 12], F6[i % 3][n % 6]); + const pCoef = module.alloc([...bigInt2BytesLE(toMontgomery(coef[0]), n8q), ...bigInt2BytesLE(toMontgomery(coef[1]), n8q)]); + if (n % 2 == 1) f.addCode(c.call(f1mPrefix + "_copy", Xc0, Rc0), c.call(f1mPrefix + "_neg", Xc1, Rc1), c.call(f2mPrefix + "_mul", R, c.i32_const(pCoef), R)); + else f.addCode(c.call(f2mPrefix + "_mul", X, c.i32_const(pCoef), R)); + } + function mul2(a, b) { + const ac0 = a[0]; + const ac1 = a[1]; + const bc0 = b[0]; + const bc1 = b[1]; + const res = [(ac0 * bc0 - ac1 * bc1) % q, (ac0 * bc1 + ac1 * bc0) % q]; + if (isNegative(res[0])) res[0] = res[0] + q; + return res; + } + } + function buildCyclotomicSquare() { + const f = module.addFunction(prefix + "__cyclotomicSquare"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const x0 = c.getLocal("x"); + const x4 = c.i32_add(c.getLocal("x"), c.i32_const(f2size)); + const x3 = c.i32_add(c.getLocal("x"), c.i32_const(2 * f2size)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(3 * f2size)); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(4 * f2size)); + const x5 = c.i32_add(c.getLocal("x"), c.i32_const(5 * f2size)); + const r0 = c.getLocal("r"); + const r4 = c.i32_add(c.getLocal("r"), c.i32_const(f2size)); + const r3 = c.i32_add(c.getLocal("r"), c.i32_const(2 * f2size)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(3 * f2size)); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(4 * f2size)); + const r5 = c.i32_add(c.getLocal("r"), c.i32_const(5 * f2size)); + const t0 = c.i32_const(module.alloc(f2size)); + const t1 = c.i32_const(module.alloc(f2size)); + const t2 = c.i32_const(module.alloc(f2size)); + const t3 = c.i32_const(module.alloc(f2size)); + const t4 = c.i32_const(module.alloc(f2size)); + const t5 = c.i32_const(module.alloc(f2size)); + const tmp = c.i32_const(module.alloc(f2size)); + const AUX = c.i32_const(module.alloc(f2size)); + f.addCode(c.call(f2mPrefix + "_mul", x0, x1, tmp), c.call(f2mPrefix + "_mulNR", x1, t0), c.call(f2mPrefix + "_add", x0, t0, t0), c.call(f2mPrefix + "_add", x0, x1, AUX), c.call(f2mPrefix + "_mul", AUX, t0, t0), c.call(f2mPrefix + "_mulNR", tmp, AUX), c.call(f2mPrefix + "_add", tmp, AUX, AUX), c.call(f2mPrefix + "_sub", t0, AUX, t0), c.call(f2mPrefix + "_add", tmp, tmp, t1), c.call(f2mPrefix + "_mul", x2, x3, tmp), c.call(f2mPrefix + "_mulNR", x3, t2), c.call(f2mPrefix + "_add", x2, t2, t2), c.call(f2mPrefix + "_add", x2, x3, AUX), c.call(f2mPrefix + "_mul", AUX, t2, t2), c.call(f2mPrefix + "_mulNR", tmp, AUX), c.call(f2mPrefix + "_add", tmp, AUX, AUX), c.call(f2mPrefix + "_sub", t2, AUX, t2), c.call(f2mPrefix + "_add", tmp, tmp, t3), c.call(f2mPrefix + "_mul", x4, x5, tmp), c.call(f2mPrefix + "_mulNR", x5, t4), c.call(f2mPrefix + "_add", x4, t4, t4), c.call(f2mPrefix + "_add", x4, x5, AUX), c.call(f2mPrefix + "_mul", AUX, t4, t4), c.call(f2mPrefix + "_mulNR", tmp, AUX), c.call(f2mPrefix + "_add", tmp, AUX, AUX), c.call(f2mPrefix + "_sub", t4, AUX, t4), c.call(f2mPrefix + "_add", tmp, tmp, t5), c.call(f2mPrefix + "_sub", t0, x0, r0), c.call(f2mPrefix + "_add", r0, r0, r0), c.call(f2mPrefix + "_add", t0, r0, r0), c.call(f2mPrefix + "_add", t1, x1, r1), c.call(f2mPrefix + "_add", r1, r1, r1), c.call(f2mPrefix + "_add", t1, r1, r1), c.call(f2mPrefix + "_mul", t5, c.i32_const(pBls12381Twist), AUX), c.call(f2mPrefix + "_add", AUX, x2, r2), c.call(f2mPrefix + "_add", r2, r2, r2), c.call(f2mPrefix + "_add", AUX, r2, r2), c.call(f2mPrefix + "_sub", t4, x3, r3), c.call(f2mPrefix + "_add", r3, r3, r3), c.call(f2mPrefix + "_add", t4, r3, r3), c.call(f2mPrefix + "_sub", t2, x4, r4), c.call(f2mPrefix + "_add", r4, r4, r4), c.call(f2mPrefix + "_add", t2, r4, r4), c.call(f2mPrefix + "_add", t3, x5, r5), c.call(f2mPrefix + "_add", r5, r5, r5), c.call(f2mPrefix + "_add", t3, r5, r5)); + } + function buildCyclotomicExp(exponent, isExpNegative, fnName) { + const exponentNafBytes = naf(exponent).map((b) => b == -1 ? 255 : b); + const pExponentNafBytes = module.alloc(exponentNafBytes); + const f = module.addFunction(prefix + "__cyclotomicExp_" + fnName); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + f.addLocal("bit", "i32"); + f.addLocal("i", "i32"); + const c = f.getCodeBuilder(); + const x = c.getLocal("x"); + const res = c.getLocal("r"); + const inverse = c.i32_const(module.alloc(ftsize)); + f.addCode(c.call(ftmPrefix + "_conjugate", x, inverse), c.call(ftmPrefix + "_one", res), c.if(c.teeLocal("bit", c.i32_load8_s(c.i32_const(exponentNafBytes.length - 1), pExponentNafBytes)), c.if(c.i32_eq(c.getLocal("bit"), c.i32_const(1)), c.call(ftmPrefix + "_mul", res, x, res), c.call(ftmPrefix + "_mul", res, inverse, res))), c.setLocal("i", c.i32_const(exponentNafBytes.length - 2)), c.block(c.loop(c.call(prefix + "__cyclotomicSquare", res, res), c.if(c.teeLocal("bit", c.i32_load8_s(c.getLocal("i"), pExponentNafBytes)), c.if(c.i32_eq(c.getLocal("bit"), c.i32_const(1)), c.call(ftmPrefix + "_mul", res, x, res), c.call(ftmPrefix + "_mul", res, inverse, res))), c.br_if(1, c.i32_eqz(c.getLocal("i"))), c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), c.br(0)))); + if (isExpNegative) f.addCode(c.call(ftmPrefix + "_conjugate", res, res)); + } + function buildFinalExponentiation() { + buildCyclotomicSquare(); + buildCyclotomicExp(finalExpZ, finalExpIsNegative, "w0"); + const f = module.addFunction(prefix + "_finalExponentiation"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const elt = c.getLocal("x"); + const res = c.getLocal("r"); + const t0 = c.i32_const(module.alloc(ftsize)); + const t1 = c.i32_const(module.alloc(ftsize)); + const t2 = c.i32_const(module.alloc(ftsize)); + const t3 = c.i32_const(module.alloc(ftsize)); + const t4 = c.i32_const(module.alloc(ftsize)); + const t5 = c.i32_const(module.alloc(ftsize)); + const t6 = c.i32_const(module.alloc(ftsize)); + f.addCode(c.call(ftmPrefix + "_frobeniusMap6", elt, t0), c.call(ftmPrefix + "_inverse", elt, t1), c.call(ftmPrefix + "_mul", t0, t1, t2), c.call(ftmPrefix + "_copy", t2, t1), c.call(ftmPrefix + "_frobeniusMap2", t2, t2), c.call(ftmPrefix + "_mul", t2, t1, t2), c.call(prefix + "__cyclotomicSquare", t2, t1), c.call(ftmPrefix + "_conjugate", t1, t1), c.call(prefix + "__cyclotomicExp_w0", t2, t3), c.call(prefix + "__cyclotomicSquare", t3, t4), c.call(ftmPrefix + "_mul", t1, t3, t5), c.call(prefix + "__cyclotomicExp_w0", t5, t1), c.call(prefix + "__cyclotomicExp_w0", t1, t0), c.call(prefix + "__cyclotomicExp_w0", t0, t6), c.call(ftmPrefix + "_mul", t6, t4, t6), c.call(prefix + "__cyclotomicExp_w0", t6, t4), c.call(ftmPrefix + "_conjugate", t5, t5), c.call(ftmPrefix + "_mul", t4, t5, t4), c.call(ftmPrefix + "_mul", t4, t2, t4), c.call(ftmPrefix + "_conjugate", t2, t5), c.call(ftmPrefix + "_mul", t1, t2, t1), c.call(ftmPrefix + "_frobeniusMap3", t1, t1), c.call(ftmPrefix + "_mul", t6, t5, t6), c.call(ftmPrefix + "_frobeniusMap1", t6, t6), c.call(ftmPrefix + "_mul", t3, t0, t3), c.call(ftmPrefix + "_frobeniusMap2", t3, t3), c.call(ftmPrefix + "_mul", t3, t1, t3), c.call(ftmPrefix + "_mul", t3, t6, t3), c.call(ftmPrefix + "_mul", t3, t4, res)); + } + function buildFinalExponentiationOld() { + const f = module.addFunction(prefix + "_finalExponentiationOld"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + const pExponent = module.alloc(bigInt2BytesLE(322277361516934140462891564586510139908379969514828494218366688025288661041104682794998680497580008899973249814104447692778988208376779573819485263026159588510513834876303014016798809919343532899164848730280942609956670917565618115867287399623286813270357901731510188149934363360381614501334086825442271920079363289954510565375378443704372994881406797882676971082200626541916413184642520269678897559532260949334760604962086348898118982248842634379637598665468817769075878555493752214492790122785850202957575200176084204422751485957336465472324810982833638490904279282696134323072515220044451592646885410572234451732790590013479358343841220074174848221722017083597872017638514103174122784843925578370430843522959600095676285723737049438346544753168912974976791528535276317256904336520179281145394686565050419250614107803233314658825463117900250701199181529205942363159325765991819433914303908860460720581408201373164047773794825411011922305820065611121544561808414055302212057471395719432072209245600258134364584636810093520285711072578721435517884103526483832733289802426157301542744476740008494780363354305116978805620671467071400711358839553375340724899735460480144599782014906586543813292157922220645089192130209334926661588737007768565838519456601560804957985667880395221049249803753582637708560n, 544)); + const c = f.getCodeBuilder(); + f.addCode(c.call(ftmPrefix + "_exp", c.getLocal("x"), c.i32_const(pExponent), c.i32_const(544), c.getLocal("r"))); + } + const pPreP = module.alloc(prePSize); + const pPreQ = module.alloc(preQSize); + function buildPairingEquation(nPairings) { + const f = module.addFunction(prefix + "_pairingEq" + nPairings); + for (let i = 0; i < nPairings; i++) { + f.addParam("p_" + i, "i32"); + f.addParam("q_" + i, "i32"); + } + f.addParam("c", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const resT = c.i32_const(module.alloc(ftsize)); + const auxT = c.i32_const(module.alloc(ftsize)); + f.addCode(c.call(ftmPrefix + "_one", resT)); + for (let i = 0; i < nPairings; i++) { + f.addCode(c.call(prefix + "_prepareG1", c.getLocal("p_" + i), c.i32_const(pPreP))); + f.addCode(c.call(prefix + "_prepareG2", c.getLocal("q_" + i), c.i32_const(pPreQ))); + f.addCode(c.if(c.i32_eqz(c.call(g1mPrefix + "_inGroupAffine", c.i32_const(pPreP))), c.ret(c.i32_const(0))), c.if(c.i32_eqz(c.call(g2mPrefix + "_inGroupAffine", c.i32_const(pPreQ))), c.ret(c.i32_const(0)))); + f.addCode(c.call(prefix + "_millerLoop", c.i32_const(pPreP), c.i32_const(pPreQ), auxT)); + f.addCode(c.call(ftmPrefix + "_mul", resT, auxT, resT)); + } + f.addCode(c.call(prefix + "_finalExponentiation", resT, resT)); + f.addCode(c.call(ftmPrefix + "_eq", resT, c.getLocal("c"))); + } + function buildPairing() { + const f = module.addFunction(prefix + "_pairing"); + f.addParam("p", "i32"); + f.addParam("q", "i32"); + f.addParam("r", "i32"); + const c = f.getCodeBuilder(); + const resT = c.i32_const(module.alloc(ftsize)); + f.addCode(c.call(prefix + "_prepareG1", c.getLocal("p"), c.i32_const(pPreP))); + f.addCode(c.call(prefix + "_prepareG2", c.getLocal("q"), c.i32_const(pPreQ))); + f.addCode(c.call(prefix + "_millerLoop", c.i32_const(pPreP), c.i32_const(pPreQ), resT)); + f.addCode(c.call(prefix + "_finalExponentiation", resT, c.getLocal("r"))); + } + function buildInGroupG2() { + const f = module.addFunction(g2mPrefix + "_inGroupAffine"); + f.addParam("p", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const WINV = [2001204777610833696708894912867952078278441409969503942666029068062015825245418932221343814564507832018947136279894n, 2001204777610833696708894912867952078278441409969503942666029068062015825245418932221343814564507832018947136279893n]; + const FROB2X = 4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n; + const FROB3Y = [2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n, 2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n]; + const wInv = c.i32_const(module.alloc([...bigInt2BytesLE(toMontgomery(WINV[0]), n8q), ...bigInt2BytesLE(toMontgomery(WINV[1]), n8q)])); + const frob2X = c.i32_const(module.alloc(bigInt2BytesLE(toMontgomery(FROB2X), n8q))); + const frob3Y = c.i32_const(module.alloc([...bigInt2BytesLE(toMontgomery(FROB3Y[0]), n8q), ...bigInt2BytesLE(toMontgomery(FROB3Y[1]), n8q)])); + const z = c.i32_const(module.alloc(bigInt2BytesLE(finalExpZ, 8))); + const px = c.getLocal("p"); + const py = c.i32_add(c.getLocal("p"), c.i32_const(f2size)); + const aux = c.i32_const(module.alloc(f1size)); + const x_winv = c.i32_const(module.alloc(f2size)); + const y_winv = c.i32_const(module.alloc(f2size)); + const pf2 = module.alloc(f2size * 2); + const f2 = c.i32_const(pf2); + const f2x = c.i32_const(pf2); + const f2x_c1 = c.i32_const(pf2); + const f2x_c2 = c.i32_const(pf2 + f1size); + const f2y = c.i32_const(pf2 + f2size); + const f2y_c1 = c.i32_const(pf2 + f2size); + const f2y_c2 = c.i32_const(pf2 + f2size + f1size); + const pf3 = module.alloc(f2size * 3); + const f3 = c.i32_const(pf3); + const f3x = c.i32_const(pf3); + const f3x_c1 = c.i32_const(pf3); + const f3x_c2 = c.i32_const(pf3 + f1size); + const f3y = c.i32_const(pf3 + f2size); + const f3y_c1 = c.i32_const(pf3 + f2size); + const f3y_c2 = c.i32_const(pf3 + f2size + f1size); + const f3z = c.i32_const(pf3 + f2size * 2); + f.addCode(c.if(c.call(g2mPrefix + "_isZeroAffine", c.getLocal("p")), c.ret(c.i32_const(1))), c.if(c.i32_eqz(c.call(g2mPrefix + "_inCurveAffine", c.getLocal("p"))), c.ret(c.i32_const(0))), c.call(f2mPrefix + "_mul", px, wInv, x_winv), c.call(f2mPrefix + "_mul", py, wInv, y_winv), c.call(f2mPrefix + "_mul1", x_winv, frob2X, f2x), c.call(f2mPrefix + "_neg", y_winv, f2y), c.call(f2mPrefix + "_neg", x_winv, f3x), c.call(f2mPrefix + "_mul", y_winv, frob3Y, f3y), c.call(f1mPrefix + "_sub", f2x_c1, f2x_c2, aux), c.call(f1mPrefix + "_add", f2x_c1, f2x_c2, f2x_c2), c.call(f1mPrefix + "_copy", aux, f2x_c1), c.call(f1mPrefix + "_sub", f2y_c1, f2y_c2, aux), c.call(f1mPrefix + "_add", f2y_c1, f2y_c2, f2y_c2), c.call(f1mPrefix + "_copy", aux, f2y_c1), c.call(f1mPrefix + "_add", f3x_c1, f3x_c2, aux), c.call(f1mPrefix + "_sub", f3x_c1, f3x_c2, f3x_c2), c.call(f1mPrefix + "_copy", aux, f3x_c1), c.call(f1mPrefix + "_sub", f3y_c2, f3y_c1, aux), c.call(f1mPrefix + "_add", f3y_c1, f3y_c2, f3y_c2), c.call(f1mPrefix + "_copy", aux, f3y_c1), c.call(f2mPrefix + "_one", f3z), c.call(g2mPrefix + "_timesScalar", f3, z, c.i32_const(8), f3), c.call(g2mPrefix + "_addMixed", f3, f2, f3), c.ret(c.call(g2mPrefix + "_eqMixed", f3, c.getLocal("p")))); + const fInGroup = module.addFunction(g2mPrefix + "_inGroup"); + fInGroup.addParam("pIn", "i32"); + fInGroup.setReturnType("i32"); + const c2 = fInGroup.getCodeBuilder(); + const aux2 = c2.i32_const(module.alloc(f2size * 2)); + fInGroup.addCode(c2.call(g2mPrefix + "_toAffine", c2.getLocal("pIn"), aux2), c2.ret(c2.call(g2mPrefix + "_inGroupAffine", aux2))); + } + function buildInGroupG1() { + const f = module.addFunction(g1mPrefix + "_inGroupAffine"); + f.addParam("p", "i32"); + f.setReturnType("i32"); + const c = f.getCodeBuilder(); + const BETA = 4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n; + const BETA2 = 793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n; + const Z2M1D3 = (finalExpZ * finalExpZ - 1n) / 3n; + const beta = c.i32_const(module.alloc(bigInt2BytesLE(toMontgomery(BETA), n8q))); + const beta2 = c.i32_const(module.alloc(bigInt2BytesLE(toMontgomery(BETA2), n8q))); + const z2m1d3 = c.i32_const(module.alloc(bigInt2BytesLE(Z2M1D3, 16))); + const px = c.getLocal("p"); + const py = c.i32_add(c.getLocal("p"), c.i32_const(f1size)); + const psp = module.alloc(f1size * 3); + const sp = c.i32_const(psp); + const spx = c.i32_const(psp); + const spy = c.i32_const(psp + f1size); + const ps2p = module.alloc(f1size * 2); + const s2p = c.i32_const(ps2p); + const s2px = c.i32_const(ps2p); + const s2py = c.i32_const(ps2p + f1size); + f.addCode(c.if(c.call(g1mPrefix + "_isZeroAffine", c.getLocal("p")), c.ret(c.i32_const(1))), c.if(c.i32_eqz(c.call(g1mPrefix + "_inCurveAffine", c.getLocal("p"))), c.ret(c.i32_const(0))), c.call(f1mPrefix + "_mul", px, beta, spx), c.call(f1mPrefix + "_copy", py, spy), c.call(f1mPrefix + "_mul", px, beta2, s2px), c.call(f1mPrefix + "_copy", py, s2py), c.call(g1mPrefix + "_doubleAffine", sp, sp), c.call(g1mPrefix + "_subMixed", sp, c.getLocal("p"), sp), c.call(g1mPrefix + "_subMixed", sp, s2p, sp), c.call(g1mPrefix + "_timesScalar", sp, z2m1d3, c.i32_const(16), sp), c.ret(c.call(g1mPrefix + "_eqMixed", sp, s2p))); + const fInGroup = module.addFunction(g1mPrefix + "_inGroup"); + fInGroup.addParam("pIn", "i32"); + fInGroup.setReturnType("i32"); + const c2 = fInGroup.getCodeBuilder(); + const aux2 = c2.i32_const(module.alloc(f1size * 2)); + fInGroup.addCode(c2.call(g1mPrefix + "_toAffine", c2.getLocal("pIn"), aux2), c2.ret(c2.call(g1mPrefix + "_inGroupAffine", aux2))); + } + for (let i = 0; i < 10; i++) { + buildFrobeniusMap(i); + module.exportFunction(ftmPrefix + "_frobeniusMap" + i); + } + buildInGroupG1(); + buildInGroupG2(); + buildPrepAddStep(); + buildPrepDoubleStep(); + buildPrepareG1(); + buildPrepareG2(); + buildMillerLoop(); + buildFinalExponentiationOld(); + buildFinalExponentiation(); + for (let i = 1; i <= 5; i++) { + buildPairingEquation(i); + module.exportFunction(prefix + "_pairingEq" + i); + } + buildPairing(); + module.exportFunction(prefix + "_pairing"); + module.exportFunction(prefix + "_prepareG1"); + module.exportFunction(prefix + "_prepareG2"); + module.exportFunction(prefix + "_millerLoop"); + module.exportFunction(prefix + "_finalExponentiation"); + module.exportFunction(prefix + "_finalExponentiationOld"); + module.exportFunction(prefix + "__cyclotomicSquare"); + module.exportFunction(prefix + "__cyclotomicExp_w0"); + module.exportFunction(f6mPrefix + "_mul1"); + module.exportFunction(f6mPrefix + "_mul01"); + module.exportFunction(ftmPrefix + "_mul014"); + module.exportFunction(g1mPrefix + "_inGroupAffine"); + module.exportFunction(g1mPrefix + "_inGroup"); + module.exportFunction(g2mPrefix + "_inGroupAffine"); + module.exportFunction(g2mPrefix + "_inGroup"); +} +//#endregion +exports.buildBls12381 = buildBLS12381; +exports.buildBn128 = buildBN128; +exports.buildF1m = buildF1m; diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..6cab21c --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,38 @@ +import js from "@eslint/js"; +import globals from "globals"; + +export default [ + { + ignores: ["build/**", "tools/**"], + }, + js.configs.recommended, + { + languageOptions: { + ecmaVersion: 2020, + globals: { + ...globals.node, + ...globals.es2020, + WebAssembly: "readonly", + }, + }, + rules: { + "indent": ["error", 4], + "linebreak-style": ["error", "unix"], + "quotes": ["error", "double"], + "semi": ["error", "always"], + }, + }, + { + files: ["test/**/*.js"], + languageOptions: { + globals: { + describe: "readonly", + it: "readonly", + beforeAll: "readonly", + afterAll: "readonly", + beforeEach: "readonly", + afterEach: "readonly", + }, + }, + }, +]; diff --git a/index.js b/index.js index a5461b9..ac4c55d 100644 --- a/index.js +++ b/index.js @@ -17,13 +17,12 @@ along with wasmsnark. If not, see . */ +// export * as bn128_wasm from "./build/bn128_wasm.js"; +// export * as bls12381_wasm from "./build/bls12381_wasm.js"; +// export * as mnt6753_wasm from "./build/mnt6753_wasm.js"; -// module.exports.bn128_wasm = require("./build/bn128_wasm.js"); -// module.exports.bls12381_wasm = require("./build/bls12381_wasm.js"); -// module.exports.mnt6753_wasm = require("./build/mnt6753_wasm.js"); +export { default as buildBn128 } from "./src/bn128/build_bn128.js"; +export { default as buildBls12381 } from "./src/bls12381/build_bls12381.js"; +// export { default as buildMnt6753 } from "./src/mnt6753/build_mnt7.js"; -module.exports.buildBn128 = require("./src/bn128/build_bn128.js"); -module.exports.buildBls12381 = require("./src/bls12381/build_bls12381.js"); -// module.exports.buildMnt6753 = require("./src/mnt6753/build_mnt7.js"); - -module.exports.buildF1m = require("./src/build_f1m"); +export { default as buildF1m } from "./src/build_f1m.js"; diff --git a/package-lock.json b/package-lock.json index 64689e2..0c96c5f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,10 +13,53 @@ }, "devDependencies": { "@eslint/js": "^10.0.1", + "@vitest/browser-playwright": "^4.1.0", "assemblyscript": "^0.28.19", "eslint": "^10.6.0", "globals": "^17.7.0", - "mocha": "^11.7.6" + "vite": "^8.0.0", + "vitest": "^4.0.18" + } + }, + "node_modules/@blazediff/core": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@blazediff/core/-/core-1.9.1.tgz", + "integrity": "sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" } }, "node_modules/@eslint-community/eslint-utils": { @@ -213,341 +256,680 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", "dev": true, "license": "MIT", "optional": true, - "engines": { - "node": ">=14" + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" } }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "node_modules/@oxc-project/types": { + "version": "0.137.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.137.0.tgz", + "integrity": "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==", "dev": true, - "license": "MIT" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } }, - "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "dev": true, "license": "MIT" }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz", + "integrity": "sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/acorn": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", - "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz", + "integrity": "sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.4.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz", + "integrity": "sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz", + "integrity": "sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz", + "integrity": "sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz", + "integrity": "sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/assemblyscript": { - "version": "0.28.19", - "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.28.19.tgz", - "integrity": "sha512-yOAlAb9EsrI00oUaf6qUTtTcYYeelG2iC3f1LnA45XUeSlMrp2O2FF5Llj4P+Y84ZiIlh/ciEEpOaPwwmOKq8g==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz", + "integrity": "sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "binaryen": "130.0.0-nightly.20260609", - "long": "^5.2.4" - }, - "bin": { - "asc": "bin/asc.js", - "asinit": "bin/asinit.js" - }, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=20", - "npm": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/assemblyscript" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz", + "integrity": "sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==", + "cpu": [ + "ppc64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "18 || 20 || >=22" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/binaryen": { - "version": "130.0.0-nightly.20260609", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-130.0.0-nightly.20260609.tgz", - "integrity": "sha512-Zyl9Tw638x08LDew22YtxdYiUGxn+quzpR3ySIS4Nccv6yAiO5j1Yko9IEPNpj/aBZf71xtD/6hYXsgZ2ye3ew==", + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz", + "integrity": "sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "Apache-2.0", - "bin": { - "wasm-as": "bin/wasm-as", - "wasm-ctor-eval": "bin/wasm-ctor-eval", - "wasm-dis": "bin/wasm-dis", - "wasm-merge": "bin/wasm-merge", - "wasm-metadce": "bin/wasm-metadce", - "wasm-opt": "bin/wasm-opt", - "wasm-reduce": "bin/wasm-reduce", - "wasm-shell": "bin/wasm-shell", - "wasm2js": "bin/wasm2js" + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz", + "integrity": "sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==", + "cpu": [ + "x64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "18 || 20 || >=22" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz", + "integrity": "sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==", + "cpu": [ + "x64" + ], "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz", + "integrity": "sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz", + "integrity": "sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==", + "cpu": [ + "wasm32" + ], "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "readdirp": "^4.0.1" + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" }, "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz", + "integrity": "sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz", + "integrity": "sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "dev": true, "license": "MIT" }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "tslib": "^2.4.0" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } + "license": "MIT" }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" }, - "node_modules/cross-spawn": { + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/browser": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.9.tgz", + "integrity": "sha512-j1BKtWmPcqpMhmx/L9EPLgAJpCb0zKfwoWLmqBbxaogCXHjOwHFSEoHCBfnGtx93xKQwilZ26m+UOsHqHMkRNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@blazediff/core": "1.9.1", + "@vitest/mocker": "4.1.9", + "@vitest/utils": "4.1.9", + "magic-string": "^0.30.21", + "pngjs": "^7.0.0", + "sirv": "^3.0.2", + "tinyrainbow": "^3.1.0", + "ws": "^8.19.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "4.1.9" + } + }, + "node_modules/@vitest/browser-playwright": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.9.tgz", + "integrity": "sha512-Bq1rOGf9waevzG3EOkO/dene6bvKTUsZMVg8S1i+WH3JcMjuXEjiahP9rAqZRELUqjBySOJsvvSWqK/B3wjKQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/browser": "4.1.9", + "@vitest/mocker": "4.1.9", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "playwright": "*", + "vitest": "4.1.9" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": false + } + } + }, + "node_modules/@vitest/expect": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", + "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.9", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.9", + "@vitest/utils": "4.1.9", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", + "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.9", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/assemblyscript": { + "version": "0.28.19", + "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.28.19.tgz", + "integrity": "sha512-yOAlAb9EsrI00oUaf6qUTtTcYYeelG2iC3f1LnA45XUeSlMrp2O2FF5Llj4P+Y84ZiIlh/ciEEpOaPwwmOKq8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "binaryen": "130.0.0-nightly.20260609", + "long": "^5.2.4" + }, + "bin": { + "asc": "bin/asc.js", + "asinit": "bin/asinit.js" + }, + "engines": { + "node": ">=20", + "npm": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/assemblyscript" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/binaryen": { + "version": "130.0.0-nightly.20260609", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-130.0.0-nightly.20260609.tgz", + "integrity": "sha512-Zyl9Tw638x08LDew22YtxdYiUGxn+quzpR3ySIS4Nccv6yAiO5j1Yko9IEPNpj/aBZf71xtD/6hYXsgZ2ye3ew==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "wasm-as": "bin/wasm-as", + "wasm-ctor-eval": "bin/wasm-ctor-eval", + "wasm-dis": "bin/wasm-dis", + "wasm-merge": "bin/wasm-merge", + "wasm-metadce": "bin/wasm-metadce", + "wasm-opt": "bin/wasm-opt", + "wasm-reduce": "bin/wasm-reduce", + "wasm-shell": "bin/wasm-shell", + "wasm2js": "bin/wasm2js" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", @@ -580,18 +962,6 @@ } } }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -599,40 +969,23 @@ "dev": true, "license": "MIT" }, - "node_modules/diff": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", - "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "Apache-2.0", "engines": { - "node": ">=0.3.1" + "node": ">=8" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/es-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "dev": true, "license": "MIT" }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -790,6 +1143,16 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -800,6 +1163,16 @@ "node": ">=0.10.0" } }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -821,18 +1194,36 @@ "dev": true, "license": "MIT" }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, "engines": { - "node": ">=16.0.0" - } + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } }, "node_modules/find-up": { "version": "5.0.0", @@ -850,15 +1241,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -880,53 +1262,20 @@ "dev": true, "license": "ISC" }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "license": "ISC", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/glob-parent": { @@ -942,39 +1291,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", - "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/globals": { "version": "17.7.0", "resolved": "https://registry.npmjs.org/globals/-/globals-17.7.0.tgz", @@ -988,24 +1304,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -1035,16 +1333,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -1057,37 +1345,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1095,45 +1352,6 @@ "dev": true, "license": "ISC" }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/nodeca" - } - ], - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -1179,160 +1397,335 @@ "node": ">= 0.8.0" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", "dev": true, + "license": "MPL-2.0", "dependencies": { - "p-locate": "^5.0.0" + "detect-libc": "^2.0.3" }, "engines": { - "node": ">=10" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC" + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "18 || 20 || >=22" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BlueOak-1.0.0", + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/mocha": { - "version": "11.7.6", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.6.tgz", - "integrity": "sha512-nS9xOGbw2I3cjCpxwZAEJ9xK9lmJ08vEkQvLtz4du9ZrF9UrjRpeJGiIgl2Z+Qs++pmB4ecDe48Fwsh+j+j7xA==", + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "browser-stdout": "^1.3.1", - "chokidar": "^4.0.1", - "debug": "^4.3.5", - "diff": "^7.0.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^10.4.5", - "he": "^1.2.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^9.0.5", - "ms": "^2.1.3", - "picocolors": "^1.1.1", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^9.2.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/mocha/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", - "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" } }, "node_modules/ms": { @@ -1342,6 +1735,25 @@ "dev": true, "license": "MIT" }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -1349,6 +1761,20 @@ "dev": true, "license": "MIT" }, + "node_modules/obug": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", + "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -1397,13 +1823,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -1423,22 +1842,12 @@ "node": ">=8" } }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", @@ -1447,6 +1856,92 @@ "dev": true, "license": "ISC" }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/playwright": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz", + "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "playwright-core": "1.61.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz", + "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/pngjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", + "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.19.0" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -1467,38 +1962,38 @@ "node": ">=6" } }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "node_modules/rolldown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.tgz", + "integrity": "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 14.18.0" + "dependencies": { + "@oxc-project/types": "=0.137.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/serialize-javascript": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.6.tgz", - "integrity": "sha512-ATTK5Q4gFVg0YDp1my2vqygyvhcklD/UV5GIlYHooGTn/NogJqIzpetkD6E5kmuVULqz/S9inUL25XcAgDRJQg==", - "dev": true, - "license": "BSD-3-Clause", "engines": { - "node": ">=20.0.0" + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.3", + "@rolldown/binding-darwin-arm64": "1.1.3", + "@rolldown/binding-darwin-x64": "1.1.3", + "@rolldown/binding-freebsd-x64": "1.1.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.3", + "@rolldown/binding-linux-arm64-gnu": "1.1.3", + "@rolldown/binding-linux-arm64-musl": "1.1.3", + "@rolldown/binding-linux-ppc64-gnu": "1.1.3", + "@rolldown/binding-linux-s390x-gnu": "1.1.3", + "@rolldown/binding-linux-x64-gnu": "1.1.3", + "@rolldown/binding-linux-x64-musl": "1.1.3", + "@rolldown/binding-openharmony-arm64": "1.1.3", + "@rolldown/binding-wasm32-wasi": "1.1.3", + "@rolldown/binding-win32-arm64-msvc": "1.1.3", + "@rolldown/binding-win32-x64-msvc": "1.1.3" } }, "node_modules/shebang-command": { @@ -1524,146 +2019,113 @@ "node": ">=8" } }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "ISC" }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", "dev": true, "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/std-env": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, "license": "MIT" }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.2.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.4" }, "engines": { - "node": ">=12" + "node": ">=12.0.0" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=14.0.0" } }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "0BSD", + "optional": true }, "node_modules/type-check": { "version": "0.4.0", @@ -1688,236 +2150,257 @@ "punycode": "^2.1.0" } }, - "node_modules/wasmbuilder": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz", - "integrity": "sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA==" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", - "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/wrap-ansi": { + "node_modules/vite": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.0.tgz", + "integrity": "sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "~1.1.2", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || >=22.12.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "url": "https://github.com/vitejs/vite?sponsor=1" }, - "engines": { - "node": ">=10" + "optionalDependencies": { + "fsevents": "~2.3.3" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/vitest": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@vitest/expect": "4.1.9", + "@vitest/mocker": "4.1.9", + "@vitest/pretty-format": "4.1.9", + "@vitest/runner": "4.1.9", + "@vitest/snapshot": "4.1.9", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" }, "engines": { - "node": ">=8" + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.9", + "@vitest/browser-preview": "4.1.9", + "@vitest/browser-webdriverio": "4.1.9", + "@vitest/coverage-istanbul": "4.1.9", + "@vitest/coverage-v8": "4.1.9", + "@vitest/ui": "4.1.9", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } } }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/wasmbuilder": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz", + "integrity": "sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-regex": "^5.0.1" + "isexe": "^2.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "bin": { + "node-which": "bin/node-which" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", "engines": { - "node": ">=10" + "node": ">= 8" } }, - "node_modules/yargs": { - "version": "17.7.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", - "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "siginfo": "^2.0.0", + "stackback": "0.0.2" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" + "bin": { + "why-is-node-running": "cli.js" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/yocto-queue": { @@ -1934,6 +2417,43 @@ } }, "dependencies": { + "@blazediff/core": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@blazediff/core/-/core-1.9.1.tgz", + "integrity": "sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==", + "dev": true + }, + "@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "optional": true, + "requires": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + } + }, "@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -2047,27 +2567,182 @@ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dev": true, + "optional": true, + "requires": { + "@tybys/wasm-util": "^0.10.3" + } + }, + "@oxc-project/types": { + "version": "0.137.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.137.0.tgz", + "integrity": "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==", + "dev": true + }, + "@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true + }, + "@rolldown/binding-android-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz", + "integrity": "sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==", + "dev": true, + "optional": true + }, + "@rolldown/binding-darwin-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz", + "integrity": "sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==", + "dev": true, + "optional": true + }, + "@rolldown/binding-darwin-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz", + "integrity": "sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==", + "dev": true, + "optional": true + }, + "@rolldown/binding-freebsd-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz", + "integrity": "sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz", + "integrity": "sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz", + "integrity": "sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-arm64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz", + "integrity": "sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz", + "integrity": "sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz", + "integrity": "sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-x64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz", + "integrity": "sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-x64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz", + "integrity": "sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==", + "dev": true, + "optional": true + }, + "@rolldown/binding-openharmony-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz", + "integrity": "sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==", "dev": true, + "optional": true + }, + "@rolldown/binding-wasm32-wasi": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz", + "integrity": "sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==", + "dev": true, + "optional": true, "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" } }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz", + "integrity": "sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==", "dev": true, "optional": true }, + "@rolldown/binding-win32-x64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz", + "integrity": "sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==", + "dev": true, + "optional": true + }, + "@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true + }, + "@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true + }, + "@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "requires": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true + }, "@types/esrecurse": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", @@ -2086,6 +2761,106 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, + "@vitest/browser": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.9.tgz", + "integrity": "sha512-j1BKtWmPcqpMhmx/L9EPLgAJpCb0zKfwoWLmqBbxaogCXHjOwHFSEoHCBfnGtx93xKQwilZ26m+UOsHqHMkRNg==", + "dev": true, + "requires": { + "@blazediff/core": "1.9.1", + "@vitest/mocker": "4.1.9", + "@vitest/utils": "4.1.9", + "magic-string": "^0.30.21", + "pngjs": "^7.0.0", + "sirv": "^3.0.2", + "tinyrainbow": "^3.1.0", + "ws": "^8.19.0" + } + }, + "@vitest/browser-playwright": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.9.tgz", + "integrity": "sha512-Bq1rOGf9waevzG3EOkO/dene6bvKTUsZMVg8S1i+WH3JcMjuXEjiahP9rAqZRELUqjBySOJsvvSWqK/B3wjKQw==", + "dev": true, + "requires": { + "@vitest/browser": "4.1.9", + "@vitest/mocker": "4.1.9", + "tinyrainbow": "^3.1.0" + } + }, + "@vitest/expect": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", + "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", + "dev": true, + "requires": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + } + }, + "@vitest/mocker": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", + "dev": true, + "requires": { + "@vitest/spy": "4.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + } + }, + "@vitest/pretty-format": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", + "dev": true, + "requires": { + "tinyrainbow": "^3.1.0" + } + }, + "@vitest/runner": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", + "dev": true, + "requires": { + "@vitest/utils": "4.1.9", + "pathe": "^2.0.3" + } + }, + "@vitest/snapshot": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", + "dev": true, + "requires": { + "@vitest/pretty-format": "4.1.9", + "@vitest/utils": "4.1.9", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + } + }, + "@vitest/spy": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", + "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", + "dev": true + }, + "@vitest/utils": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", + "dev": true, + "requires": { + "@vitest/pretty-format": "4.1.9", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + } + }, "acorn": { "version": "8.17.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", @@ -2111,27 +2886,6 @@ "uri-js": "^4.2.2" } }, - "ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "assemblyscript": { "version": "0.28.19", "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.28.19.tgz", @@ -2142,6 +2896,12 @@ "long": "^5.2.4" } }, + "assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true + }, "balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", @@ -2163,106 +2923,16 @@ "balanced-match": "^4.0.2" } }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "requires": { - "readdirp": "^4.0.1" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "cross-spawn": { @@ -2285,40 +2955,22 @@ "ms": "^2.1.3" } }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "diff": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", - "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", - "dev": true - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true }, - "escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "es-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "dev": true }, "escape-string-regexp": { @@ -2418,12 +3070,27 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0" + } + }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2442,6 +3109,13 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "requires": {} + }, "file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -2461,12 +3135,6 @@ "path-exists": "^4.0.0" } }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, "flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -2483,61 +3151,13 @@ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true }, - "foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", - "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.2" - } - } - } + "optional": true, + "peer": true }, "glob-parent": { "version": "6.0.2", @@ -2554,18 +3174,6 @@ "integrity": "sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==", "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, "ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -2584,12 +3192,6 @@ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2599,49 +3201,12 @@ "is-extglob": "^2.1.1" } }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -2679,6 +3244,103 @@ "type-check": "~0.4.0" } }, + "lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "requires": { + "detect-libc": "^2.0.3", + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "dev": true, + "optional": true + }, + "lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "dev": true, + "optional": true + }, + "lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "dev": true, + "optional": true + }, + "lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "dev": true, + "optional": true + }, + "lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "dev": true, + "optional": true + }, + "lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "dev": true, + "optional": true + }, + "lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "dev": true, + "optional": true + }, + "lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "dev": true, + "optional": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2688,27 +3350,20 @@ "p-locate": "^5.0.0" } }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, "long": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", "dev": true }, - "lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } }, "minimatch": { "version": "10.2.5", @@ -2719,88 +3374,36 @@ "brace-expansion": "^5.0.5" } }, - "minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", "dev": true }, - "mocha": { - "version": "11.7.6", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.6.tgz", - "integrity": "sha512-nS9xOGbw2I3cjCpxwZAEJ9xK9lmJ08vEkQvLtz4du9ZrF9UrjRpeJGiIgl2Z+Qs++pmB4ecDe48Fwsh+j+j7xA==", - "dev": true, - "requires": { - "browser-stdout": "^1.3.1", - "chokidar": "^4.0.1", - "debug": "^4.3.5", - "diff": "^8.0.3", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^10.4.5", - "he": "^1.2.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^9.0.5", - "ms": "^2.1.3", - "picocolors": "^1.1.1", - "serialize-javascript": "^7.0.5", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^9.2.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1", - "yargs-unparser": "^2.0.0" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", - "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.2" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "obug": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", + "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", + "dev": true + }, "optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -2833,12 +3436,6 @@ "p-limit": "^3.0.2" } }, - "package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -2851,15 +3448,11 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "requires": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - } + "pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true }, "picocolors": { "version": "1.1.1", @@ -2867,6 +3460,47 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, + "picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true + }, + "playwright": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz", + "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==", + "dev": true, + "peer": true, + "requires": { + "fsevents": "2.3.2", + "playwright-core": "1.61.1" + } + }, + "playwright-core": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz", + "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==", + "dev": true, + "peer": true + }, + "pngjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", + "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", + "dev": true + }, + "postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "requires": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2879,23 +3513,30 @@ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true }, - "readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "serialize-javascript": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.6.tgz", - "integrity": "sha512-ATTK5Q4gFVg0YDp1my2vqygyvhcklD/UV5GIlYHooGTn/NogJqIzpetkD6E5kmuVULqz/S9inUL25XcAgDRJQg==", - "dev": true + "rolldown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.tgz", + "integrity": "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==", + "dev": true, + "requires": { + "@oxc-project/types": "=0.137.0", + "@rolldown/binding-android-arm64": "1.1.3", + "@rolldown/binding-darwin-arm64": "1.1.3", + "@rolldown/binding-darwin-x64": "1.1.3", + "@rolldown/binding-freebsd-x64": "1.1.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.3", + "@rolldown/binding-linux-arm64-gnu": "1.1.3", + "@rolldown/binding-linux-arm64-musl": "1.1.3", + "@rolldown/binding-linux-ppc64-gnu": "1.1.3", + "@rolldown/binding-linux-s390x-gnu": "1.1.3", + "@rolldown/binding-linux-x64-gnu": "1.1.3", + "@rolldown/binding-linux-x64-musl": "1.1.3", + "@rolldown/binding-openharmony-arm64": "1.1.3", + "@rolldown/binding-wasm32-wasi": "1.1.3", + "@rolldown/binding-win32-arm64-msvc": "1.1.3", + "@rolldown/binding-win32-x64-msvc": "1.1.3", + "@rolldown/pluginutils": "^1.0.0" + } }, "shebang-command": { "version": "2.0.0", @@ -2912,97 +3553,81 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", "dev": true, "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" } }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } + "source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true }, - "strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "requires": { - "ansi-regex": "^6.2.2" - } + "stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "std-env": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", + "dev": true + }, + "tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "dev": true }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "requires": { - "ansi-regex": "^5.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - } + "fdir": "^6.5.0", + "picomatch": "^4.0.4" } }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true + }, + "totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "optional": true }, "type-check": { "version": "0.4.0", @@ -3022,6 +3647,57 @@ "punycode": "^2.1.0" } }, + "vite": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.0.tgz", + "integrity": "sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==", + "dev": true, + "requires": { + "fsevents": "~2.3.3", + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "~1.1.2", + "tinyglobby": "^0.2.17" + }, + "dependencies": { + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + } + } + }, + "vitest": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", + "dev": true, + "requires": { + "@vitest/expect": "4.1.9", + "@vitest/mocker": "4.1.9", + "@vitest/pretty-format": "4.1.9", + "@vitest/runner": "4.1.9", + "@vitest/snapshot": "4.1.9", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + } + }, "wasmbuilder": { "version": "0.0.16", "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz", @@ -3036,154 +3712,28 @@ "isexe": "^2.0.0" } }, - "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true - }, - "workerpool": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", - "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", - "dev": true - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "17.7.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", - "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } + "siginfo": "^2.0.0", + "stackback": "0.0.2" } }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } + "requires": {} }, "yocto-queue": { "version": "0.1.0", diff --git a/package.json b/package.json index 1ecee6d..4d5db3f 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,25 @@ { "name": "wasmcurves", + "type": "module", "version": "0.2.2", "description": "elliptic curves implementations in wasm", - "main": "index.js", + "main": "./build/main.cjs", + "module": "./index.js", + "exports": { + ".": { + "import": "./index.js", + "require": "./build/main.cjs" + }, + "./build/*": "./build/*" + }, "scripts": { "lint": "eslint .", "pretest": "npm run lint", - "test": "mocha", - "build": "npm run build_bn128 && npm run build_mnt6753 && npm run build_bls12381 && npm run build_msm_batch", - "build_bn128": "node tools/buildwasm_bn128.js", - "build_mnt6753": "node tools/buildwasm_mnt6753.js", - "build_bls12381": "node tools/buildwasm_bls12381.js", - "build_msm_batch": "node tools/buildwasm_msm_batch.js" + "test": "vitest run", + "test:watch": "vitest", + "build:wasm": "node tools/buildwasm_bn128.js && node tools/buildwasm_bls12381.js && node tools/buildwasm_msm_batch.js", + "build:cjs": "vite build", + "build": "npm run build:wasm && npm run build:cjs" }, "keywords": [ "bigint", @@ -34,7 +42,8 @@ "assemblyscript": "^0.28.19", "eslint": "^10.6.0", "globals": "^17.7.0", - "mocha": "^11.7.6" + "vite": "^8.0.0", + "vitest": "^4.0.18" }, "dependencies": { "wasmbuilder": "0.0.16" diff --git a/src/bigint.js b/src/bigint.js index 618ddfa..831bb77 100644 --- a/src/bigint.js +++ b/src/bigint.js @@ -110,12 +110,12 @@ function prev(n) { function isKnownPrime(v) { let n = abs(v); switch (n) { - case 21888242871839275222246405745257275088696311157297823662689037894645226208583n: - case 21888242871839275222246405745257275088548364400416034343698204186575808495617n: - case 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn: - case 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001n: - case 41898490967918953402344214791240637128170709919953949071783502921025352812571106773058893763790338921418070971888458477323173057491593855069696241854796396165721416325350064441470418137846398469611935719059908164220784476160001n: - return true; + case 21888242871839275222246405745257275088696311157297823662689037894645226208583n: + case 21888242871839275222246405745257275088548364400416034343698204186575808495617n: + case 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn: + case 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001n: + case 41898490967918953402344214791240637128170709919953949071783502921025352812571106773058893763790338921418070971888458477323173057491593855069696241854796396165721416325350064441470418137846398469611935719059908164220784476160001n: + return true; } return false; } @@ -158,13 +158,4 @@ function isPrime(p) { return millerRabinTest(n, a); } -module.exports.bitLength = bitLength; -module.exports.isOdd = isOdd; -module.exports.isNegative = isNegative; -module.exports.abs = abs; -module.exports.isUnit = isUnit; -module.exports.compare = compare; -module.exports.modInv = modInv; -module.exports.modPow = modPow; -module.exports.isPrime = isPrime; -module.exports.square = square; +export { bitLength, isOdd, isNegative, abs, isUnit, compare, modInv, modPow, isPrime, square }; diff --git a/src/bls12381/build_bls12381.js b/src/bls12381/build_bls12381.js index e224d9e..7cda07a 100644 --- a/src/bls12381/build_bls12381.js +++ b/src/bls12381/build_bls12381.js @@ -1,19 +1,18 @@ -const utils = require("../utils"); - -const buildF1m =require("../build_f1m.js"); -const buildF1 =require("../build_f1.js"); -const buildF2m =require("../build_f2m.js"); -const buildF3m =require("../build_f3m.js"); -const buildCurve =require("../build_curve_jacobian_a0.js"); -const buildFFT = require("../build_fft"); -const buildPol = require("../build_pol"); -const buildQAP = require("../build_qap"); -const buildApplyKey = require("../build_applykey"); -const { bitLength, isOdd, isNegative } = require("../bigint.js"); +import * as utils from "../utils.js"; +import buildF1m from "../build_f1m.js"; +import buildF1 from "../build_f1.js"; +import buildF2m from "../build_f2m.js"; +import buildF3m from "../build_f3m.js"; +import buildCurve from "../build_curve_jacobian_a0.js"; +import buildFFT from "../build_fft.js"; +import buildPol from "../build_pol.js"; +import buildQAP from "../build_qap.js"; +import buildApplyKey from "../build_applykey.js"; +import { bitLength, isOdd, isNegative } from "../bigint.js"; // Definition here: https://electriccoin.co/blog/new-snark-curve/ -module.exports = function buildBLS12381(module, _prefix) { +export default function buildBLS12381(module, _prefix) { const prefix = _prefix || "bls12381"; diff --git a/src/bn128/build_bn128.js b/src/bn128/build_bn128.js index 0c5f297..8973778 100644 --- a/src/bn128/build_bn128.js +++ b/src/bn128/build_bn128.js @@ -1,17 +1,16 @@ -const utils = require("../utils"); - -const buildF1m =require("../build_f1m.js"); -const buildF1 =require("../build_f1.js"); -const buildF2m =require("../build_f2m.js"); -const buildF3m =require("../build_f3m.js"); -const buildCurve =require("../build_curve_jacobian_a0.js"); -const buildFFT = require("../build_fft"); -const buildPol = require("../build_pol"); -const buildQAP = require("../build_qap"); -const buildApplyKey = require("../build_applykey"); -const { bitLength, modInv, isOdd, isNegative } = require("../bigint.js"); - -module.exports = function buildBN128(module, _prefix) { +import * as utils from "../utils.js"; +import buildF1m from "../build_f1m.js"; +import buildF1 from "../build_f1.js"; +import buildF2m from "../build_f2m.js"; +import buildF3m from "../build_f3m.js"; +import buildCurve from "../build_curve_jacobian_a0.js"; +import buildFFT from "../build_fft.js"; +import buildPol from "../build_pol.js"; +import buildQAP from "../build_qap.js"; +import buildApplyKey from "../build_applykey.js"; +import { bitLength, modInv, isOdd, isNegative } from "../bigint.js"; + +export default function buildBN128(module, _prefix) { const prefix = _prefix || "bn128"; diff --git a/src/build_applykey.js b/src/build_applykey.js index 2cc3ef3..e7fecbb 100644 --- a/src/build_applykey.js +++ b/src/build_applykey.js @@ -19,7 +19,7 @@ along with wasmsnark. If not, see . */ -module.exports = function buildApplyKey(module, fnName, gPrefix, frPrefix, sizeGIn, sizeGOut, sizeF, opGtimesF) { +export default function buildApplyKey(module, fnName, gPrefix, frPrefix, sizeGIn, sizeGOut, sizeF, opGtimesF) { const f = module.addFunction(fnName); f.addParam("pIn", "i32"); diff --git a/src/build_batchconvertion.js b/src/build_batchconvertion.js index b4e81a1..563739c 100644 --- a/src/build_batchconvertion.js +++ b/src/build_batchconvertion.js @@ -1,6 +1,6 @@ -module.exports = buildBatchConvertion; +export default buildBatchConvertion; function buildBatchConvertion(module, fnName, internalFnName, sizeIn, sizeOut, reverse) { if (typeof reverse === "undefined") { diff --git a/src/build_batchinverse.js b/src/build_batchinverse.js index 71c8214..d39f1f5 100644 --- a/src/build_batchinverse.js +++ b/src/build_batchinverse.js @@ -1,5 +1,5 @@ -module.exports = buildBatchInverse; +export default buildBatchInverse; function buildBatchInverse(module, prefix) { diff --git a/src/build_batchop.js b/src/build_batchop.js index f593a65..207ae2b 100644 --- a/src/build_batchop.js +++ b/src/build_batchop.js @@ -1,6 +1,6 @@ -module.exports = buildBatchConvertion; +export default buildBatchConvertion; function buildBatchConvertion(module, fnName, internalFnName, sizeIn, sizeOut, reverse) { if (typeof reverse === "undefined") { diff --git a/src/build_curve_jacobian_a0.js b/src/build_curve_jacobian_a0.js index 53439b4..888bca2 100644 --- a/src/build_curve_jacobian_a0.js +++ b/src/build_curve_jacobian_a0.js @@ -17,12 +17,12 @@ along with wasmsnark. If not, see . */ -const buildTimesScalarNAF = require("./build_timesscalarnaf"); -//const buildTimesScalar = require("./build_timesscalar"); -const buildBatchConvertion = require("./build_batchconvertion"); -const buildMultiexp = require("./build_multiexp"); +import buildTimesScalarNAF from "./build_timesscalarnaf.js"; +//import buildTimesScalar from "./build_timesscalar.js"; +import buildBatchConvertion from "./build_batchconvertion.js"; +import buildMultiexp from "./build_multiexp.js"; -module.exports = function buildCurve(module, prefix, prefixField, pB) { +export default function buildCurve(module, prefix, prefixField, pB) { const n64 = module.modules[prefixField].n64; diff --git a/src/build_curve_projective.js b/src/build_curve_projective.js index 6c4c979..6912233 100644 --- a/src/build_curve_projective.js +++ b/src/build_curve_projective.js @@ -28,10 +28,10 @@ Operations in: http://www.hyperelliptic.org/EFD/g1p/auto-shortw-projective.html# f */ -const buildTimesScalar = require("./build_timesscalar"); -const buildTimesScalarNAF = require("./build_timesscalarnaf"); +import buildTimesScalar from "./build_timesscalar.js"; +import buildTimesScalarNAF from "./build_timesscalarnaf.js"; -module.exports = function buildCurve(module, prefix, prefixField, fnMulByA) { +export default function buildCurve(module, prefix, prefixField, fnMulByA) { const n64 = module.modules[prefixField].n64; diff --git a/src/build_f1.js b/src/build_f1.js index 79db942..4d875ab 100644 --- a/src/build_f1.js +++ b/src/build_f1.js @@ -17,10 +17,10 @@ along with wasmsnark. If not, see . */ -const buildF1m =require("./build_f1m.js"); -const { bitLength } = require("./bigint.js"); +import buildF1m from "./build_f1m.js"; +import { bitLength } from "./bigint.js"; -module.exports = function buildF1(module, _q, _prefix, _f1mPrefix, _intPrefix) { +export default function buildF1(module, _q, _prefix, _f1mPrefix, _intPrefix) { const q = BigInt(_q); const n64 = Math.floor((bitLength(q - 1n) - 1)/64) +1; diff --git a/src/build_f1m.js b/src/build_f1m.js index bcacdaf..19f3f51 100644 --- a/src/build_f1m.js +++ b/src/build_f1m.js @@ -17,15 +17,15 @@ along with wasmsnark. If not, see . */ -const buildInt = require("./build_int.js"); -const utils = require("./utils.js"); -const buildExp = require("./build_timesscalar"); -const buildBatchInverse = require("./build_batchinverse"); -const buildBatchConvertion = require("./build_batchconvertion"); -const buildBatchOp = require("./build_batchop"); -const { bitLength, modInv, modPow, isPrime, isOdd, square } = require("./bigint.js"); - -module.exports = function buildF1m(module, _q, _prefix, _intPrefix) { +import buildInt from "./build_int.js"; +import * as utils from "./utils.js"; +import buildExp from "./build_timesscalar.js"; +import buildBatchInverse from "./build_batchinverse.js"; +import buildBatchConvertion from "./build_batchconvertion.js"; +import buildBatchOp from "./build_batchop.js"; +import { bitLength, modInv, modPow, isPrime, isOdd, square } from "./bigint.js"; + +export default function buildF1m(module, _q, _prefix, _intPrefix) { const q = BigInt(_q); const n64 = Math.floor((bitLength(q - 1n) - 1)/64) +1; const n32 = n64*2; diff --git a/src/build_f2m.js b/src/build_f2m.js index b407d6e..cb94d32 100644 --- a/src/build_f2m.js +++ b/src/build_f2m.js @@ -16,11 +16,11 @@ You should have received a copy of the GNU General Public License along with wasmsnark. If not, see . */ -const buildExp = require("./build_timesscalar"); -const buildBatchInverse = require("./build_batchinverse"); -const utils = require("./utils.js"); +import buildExp from "./build_timesscalar.js"; +import buildBatchInverse from "./build_batchinverse.js"; +import * as utils from "./utils.js"; -module.exports = function buildF2m(module, mulNonResidueFn, prefix, f1mPrefix) { +export default function buildF2m(module, mulNonResidueFn, prefix, f1mPrefix) { if (module.modules[prefix]) return prefix; // already builded diff --git a/src/build_f3m.js b/src/build_f3m.js index 08e10f2..12b2c08 100644 --- a/src/build_f3m.js +++ b/src/build_f3m.js @@ -16,10 +16,10 @@ You should have received a copy of the GNU General Public License along with wasmsnark. If not, see . */ -const buildExp = require("./build_timesscalar"); -const buildBatchInverse = require("./build_batchinverse"); +import buildExp from "./build_timesscalar.js"; +import buildBatchInverse from "./build_batchinverse.js"; -module.exports = function buildF3m(module, mulNonResidueFn, prefix, f1mPrefix) { +export default function buildF3m(module, mulNonResidueFn, prefix, f1mPrefix) { if (module.modules[prefix]) return prefix; // already builded diff --git a/src/build_fft.js b/src/build_fft.js index d2b482d..4590d32 100644 --- a/src/build_fft.js +++ b/src/build_fft.js @@ -17,10 +17,10 @@ along with wasmsnark. If not, see . */ -const { isOdd, modInv, modPow } = require("./bigint.js"); -const utils = require("./utils.js"); +import { isOdd, modInv, modPow } from "./bigint.js"; +import * as utils from "./utils.js"; -module.exports = function buildFFT(module, prefix, gPrefix, fPrefix, opGtimesF) { +export default function buildFFT(module, prefix, gPrefix, fPrefix, opGtimesF) { const n64f = module.modules[fPrefix].n64; const n8f = n64f*8; diff --git a/src/build_int.js b/src/build_int.js index 89e4b3b..ad10648 100644 --- a/src/build_int.js +++ b/src/build_int.js @@ -17,7 +17,7 @@ along with wasmsnark. If not, see . */ -module.exports = function buildInt(module, n64, _prefix) { +export default function buildInt(module, n64, _prefix) { const prefix = _prefix || "int"; if (module.modules[prefix]) return prefix; // already builded diff --git a/src/build_mem.js b/src/build_mem.js index d0cf98b..d4d99e2 100644 --- a/src/build_mem.js +++ b/src/build_mem.js @@ -17,7 +17,7 @@ along with wasmsnark. If not, see . */ -module.exports = function buildMem(module, prefix) { +export default function buildMem(module, prefix) { function buildCopy() { const f = module.addFunction(prefix+"copy"); diff --git a/src/build_mulacc.js b/src/build_mulacc.js index fd3b0c7..202bc81 100644 --- a/src/build_mulacc.js +++ b/src/build_mulacc.js @@ -17,7 +17,7 @@ along with wasmsnark. If not, see . */ -module.exports = function buildMulAcc(windowSize, prefix, curvePrefix, scalarPrefix) { +export default function buildMulAcc(windowSize, prefix, curvePrefix, scalarPrefix) { const pointN64 = module.modules[curvePrefix].n64; const pointN8 = pointN64*8; const scalarN64 = module.modules[scalarPrefix].n64; diff --git a/src/build_multiexp.js b/src/build_multiexp.js index 0e11fef..2e834c8 100644 --- a/src/build_multiexp.js +++ b/src/build_multiexp.js @@ -23,7 +23,7 @@ // free on the curve, a digit -m is handled by subtracting the base, so only // 2^(c-1) buckets are needed per window instead of 2^c-1 -- halving the // bucket-reduction cost and the bucket memory. -module.exports = function buildMultiexp(module, prefix, fnName, opAdd, opSub, n8b) { +export default function buildMultiexp(module, prefix, fnName, opAdd, opSub, n8b) { const n64g = module.modules[prefix].n64; const n8g = n64g*8; diff --git a/src/build_pedersenhash.js b/src/build_pedersenhash.js index 05fd5ec..75d2039 100644 --- a/src/build_pedersenhash.js +++ b/src/build_pedersenhash.js @@ -37,7 +37,7 @@ */ -module.exports = function buildPedersenHash(module, prefix, curvePrefix, pointFieldPrefix, chunkSize, basesTable) { +export default function buildPedersenHash(module, prefix, curvePrefix, pointFieldPrefix, chunkSize, basesTable) { const pointN64 = module.modules[curvePrefix].n64; const pointN8 = pointN64*8; diff --git a/src/build_pol.js b/src/build_pol.js index 938ee6c..a45cc1c 100644 --- a/src/build_pol.js +++ b/src/build_pol.js @@ -17,7 +17,7 @@ along with wasmsnark. If not, see . */ -module.exports = function buildPol(module, prefix, prefixField) { +export default function buildPol(module, prefix, prefixField) { const n64 = module.modules[prefixField].n64; const n8 = n64*8; diff --git a/src/build_qap.js b/src/build_qap.js index a8c20cf..f78763d 100644 --- a/src/build_qap.js +++ b/src/build_qap.js @@ -1,5 +1,5 @@ -module.exports = function buildQAP(module, prefix, prefixField) { +export default function buildQAP(module, prefix, prefixField) { const n64 = module.modules[prefixField].n64; const n8 = n64*8; diff --git a/src/build_test.js b/src/build_test.js index 6d078d9..ff35a25 100644 --- a/src/build_test.js +++ b/src/build_test.js @@ -40,5 +40,4 @@ function buildTest2(module, fn) { module.exportFunction("test_"+fn); } -module.exports.buildTest1 = buildTest1; -module.exports.buildTest2 = buildTest2; +export { buildTest1, buildTest2 }; diff --git a/src/build_testf1.js b/src/build_testf1.js index dc3edea..99fac45 100644 --- a/src/build_testf1.js +++ b/src/build_testf1.js @@ -17,7 +17,7 @@ along with wasmsnark. If not, see . */ -module.exports = function buildTestF1(module) { +export default function buildTestF1(module) { const pR2 = module.modules.f1m.pR2; const n8 = module.modules.f1m.n64*8; diff --git a/src/build_testg1.js b/src/build_testg1.js index 74921c4..5627c87 100644 --- a/src/build_testg1.js +++ b/src/build_testg1.js @@ -17,7 +17,7 @@ along with wasmsnark. If not, see . */ -module.exports = function buildTestAddG1(module) { +export default function buildTestAddG1(module) { function buildTestAddG1() { const f = module.addFunction("testAddG1"); diff --git a/src/build_timesscalar.js b/src/build_timesscalar.js index 48f6fec..aa14df8 100644 --- a/src/build_timesscalar.js +++ b/src/build_timesscalar.js @@ -17,7 +17,7 @@ along with wasmsnark. If not, see . */ -module.exports = function buildTimesScalar(module, fnName, elementLen, opAB, opAA, opCopy, opInit) { +export default function buildTimesScalar(module, fnName, elementLen, opAB, opAA, opCopy, opInit) { const f = module.addFunction(fnName); f.addParam("base", "i32"); diff --git a/src/build_timesscalarnaf.js b/src/build_timesscalarnaf.js index 868b825..3f48122 100644 --- a/src/build_timesscalarnaf.js +++ b/src/build_timesscalarnaf.js @@ -17,7 +17,7 @@ along with wasmsnark. If not, see . */ -module.exports = function buildTimesScalarNAF(module, fnName, elementLen, opAB, opAA, opAmB, opCopy, opInit) { +export default function buildTimesScalarNAF(module, fnName, elementLen, opAB, opAA, opAmB, opCopy, opInit) { const f = module.addFunction(fnName); f.addParam("base", "i32"); diff --git a/src/build_tomcook.js b/src/build_tomcook.js index ab1f6b0..285a650 100644 --- a/src/build_tomcook.js +++ b/src/build_tomcook.js @@ -1,6 +1,5 @@ -const assert = require("assert"); -module.exports = function buildTomCook(module, _prefix) { +export default function buildTomCook(module, _prefix) { const prefix = _prefix || "tomcook"; const definedFunctions = {}; @@ -10,23 +9,25 @@ module.exports = function buildTomCook(module, _prefix) { const CHUNK_BASE_MAX = "9223372036317904896"; function load(size, c, localVar, pos) { - if (size == "l") { - return c.i64_load(c.getLocal(localVar), pos*8); - } else if (size=="s") { - return c.i64_load32_s(c.getLocal(localVar), pos*4); - } else { - assert(false, "invalid size: "+size); + if (size === "l") { + return c.i64_load(c.getLocal(localVar), pos * 8); } + if (size === "s") { + return c.i64_load32_s(c.getLocal(localVar), pos * 4); + } + throw new Error("invalid size: " + size); + } function store(size, c, localVar, pos, value) { - if (size == "l") { - return c.i64_store(c.getLocal(localVar), pos*8, value); - } else if (size == "s") { - return c.i64_store32(c.getLocal(localVar), pos*4, value); - } else { - assert(false, "invalid size: "+size); + if (size === "l") { + return c.i64_store(c.getLocal(localVar), pos * 8, value); } + if (size === "s") { + return c.i64_store32(c.getLocal(localVar), pos * 4, value); + } + throw new Error("invalid size: " + size); + } function storeAdjusting(size, c, carryVar, dstVar, auxVar, pos) { @@ -66,7 +67,7 @@ module.exports = function buildTomCook(module, _prefix) { } function buildMul3(sizes) { - const fnName = prefix+"_mul3"+sizes; + const fnName = prefix + "_mul3" + sizes; if (definedFunctions[fnName]) return; definedFunctions[fnName] = true; @@ -92,24 +93,24 @@ module.exports = function buildTomCook(module, _prefix) { c.setLocal("a0", load(sizes[0], c, "x", 0)), c.setLocal("b0", load(sizes[1], c, "y", 0)), - c.setLocal("c", c.i64_mul( c.getLocal("a0"), c.getLocal("b0") )), + c.setLocal("c", c.i64_mul(c.getLocal("a0"), c.getLocal("b0"))), store(sizes[2], c, "r", 0, - c.i64_rem_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)) + c.i64_rem_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)) ), c.setLocal("a1", load(sizes[0], c, "x", 1)), c.setLocal("b1", load(sizes[1], c, "y", 1)), c.setLocal("c", c.i64_add( - c.i64_div_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)), + c.i64_div_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)), c.i64_add( - c.i64_mul( c.getLocal("a0"), c.getLocal("b1") ), - c.i64_mul( c.getLocal("a1"), c.getLocal("b0") ) + c.i64_mul(c.getLocal("a0"), c.getLocal("b1")), + c.i64_mul(c.getLocal("a1"), c.getLocal("b0")) ) )), store(sizes[2], c, "r", 1, - c.i64_rem_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)) + c.i64_rem_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)) ), c.setLocal("a2", load(sizes[0], c, "x", 2)), @@ -117,46 +118,46 @@ module.exports = function buildTomCook(module, _prefix) { c.setLocal("c", c.i64_add( c.i64_add( - c.i64_mul( c.getLocal("a0"), c.getLocal("b2") ), - c.i64_mul( c.getLocal("a2"), c.getLocal("b0") ) + c.i64_mul(c.getLocal("a0"), c.getLocal("b2")), + c.i64_mul(c.getLocal("a2"), c.getLocal("b0")) ), c.i64_add( - c.i64_div_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)), - c.i64_mul( c.getLocal("a1"), c.getLocal("b1") ), + c.i64_div_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)), + c.i64_mul(c.getLocal("a1"), c.getLocal("b1")), ) )), store(sizes[2], c, "r", 2, - c.i64_rem_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)) + c.i64_rem_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)) ), c.setLocal("c", c.i64_add( c.i64_add( - c.i64_div_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)), - c.i64_mul( c.getLocal("a1"), c.getLocal("b2")) + c.i64_div_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)), + c.i64_mul(c.getLocal("a1"), c.getLocal("b2")) ), - c.i64_mul( c.getLocal("a2"), c.getLocal("b1") ), + c.i64_mul(c.getLocal("a2"), c.getLocal("b1")), )), store(sizes[2], c, "r", 3, - c.i64_rem_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)) + c.i64_rem_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)) ), c.setLocal("c", c.i64_add( - c.i64_mul( c.getLocal("a2"), c.getLocal("b2") ), - c.i64_div_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)), + c.i64_mul(c.getLocal("a2"), c.getLocal("b2")), + c.i64_div_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)), )), store(sizes[2], c, "r", 4, - c.i64_rem_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)) + c.i64_rem_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)) ), store(sizes[2], c, "r", 5, - c.i64_div_s( c.getLocal("c"), c.i64_const(CHUNK_BASE)), + c.i64_div_s(c.getLocal("c"), c.i64_const(CHUNK_BASE)), ), ); } function buildAdd(n, sizes) { - const fnName = prefix+"_add"+n+sizes; + const fnName = prefix + "_add" + n + sizes; if (definedFunctions[fnName]) return; definedFunctions[fnName] = true; @@ -168,7 +169,7 @@ module.exports = function buildTomCook(module, _prefix) { const c = f.getCodeBuilder(); - for (let i=0; i=0; i--) { + for (let i = n - 2; i >= 0; i--) { f.addCode( c.setLocal("c", c.i64_add( @@ -288,11 +289,11 @@ module.exports = function buildTomCook(module, _prefix) { function buildRecompose(n, sizes) { - const fnName = prefix+"_recompose"+n+sizes; + const fnName = prefix + "_recompose" + n + sizes; if (definedFunctions[fnName]) return; definedFunctions[fnName] = true; - const sn = n/3; + const sn = n / 3; const f = module.addFunction(fnName); f.addParam("s", "i32"); f.addParam("r", "i32"); @@ -319,7 +320,7 @@ module.exports = function buildTomCook(module, _prefix) { f.addCode(c.setLocal("c", c.i64_const(0))); - for (let i=0; i. */ -const ModuleBuilder = require("wasmbuilder").ModuleBuilder; -const buildF1 = require("./build_f1.js"); -const buildTestF1 = require("./build_testf1.js"); -const { bitLength } = require("./bigint.js"); +import { ModuleBuilder } from "wasmbuilder"; +import buildF1 from "./build_f1.js"; +import buildTestF1 from "./build_testf1.js"; +import { bitLength } from "./bigint.js"; async function build(q) { const f1 = new F1(q); @@ -149,4 +149,4 @@ class F1 { */ } -module.exports = build; +export default build; diff --git a/src/mnt6753/build_mnt6753.js b/src/mnt6753/build_mnt6753.js index 7bf0691..0458008 100644 --- a/src/mnt6753/build_mnt6753.js +++ b/src/mnt6753/build_mnt6753.js @@ -1,16 +1,15 @@ -const utils = require("../utils"); - -const buildF1m =require("../build_f1m.js"); -const buildF1 =require("../build_f1.js"); -const buildF2m =require("../build_f2m.js"); -const buildF3m =require("../build_f3m.js"); -const buildCurve =require("../build_curve_projective.js"); -const { bitLength, isOdd, modInv } = require("../bigint.js"); +import * as utils from "../utils.js"; +import buildF1m from "../build_f1m.js"; +import buildF1 from "../build_f1.js"; +import buildF2m from "../build_f2m.js"; +import buildF3m from "../build_f3m.js"; +import buildCurve from "../build_curve_projective.js"; +import { bitLength, isOdd, modInv } from "../bigint.js"; // // Curve definition: https://coinlist.co/build/coda/pages/mnt6753 // -module.exports = function buildMNT6753(module, _prefix) { +export default function buildMNT6753(module, _prefix) { const prefix = _prefix || "mnt6753"; diff --git a/src/utils.js b/src/utils.js index a3ac5b9..7edc07f 100644 --- a/src/utils.js +++ b/src/utils.js @@ -17,7 +17,7 @@ along with wasmsnark. If not, see . */ -exports.bigInt2BytesLE = function bigInt2BytesLE(_a, len) { +export function bigInt2BytesLE(_a, len) { const b = Array(len); let v = BigInt(_a); for (let i=0; i> 8n; } return b; -}; +} -exports.bigInt2U32LE = function bigInt2BytesLE(_a, len) { +export function bigInt2U32LE(_a, len) { const b = Array(len); let v = BigInt(_a); for (let i=0; i> 32n; } return b; -}; +} -exports.isOcamNum = function(a) { +export function isOcamNum(a) { if (!Array.isArray(a)) return false; if (a.length != 3) return false; if (typeof a[0] !== "number") return false; if (typeof a[1] !== "number") return false; if (!Array.isArray(a[2])) return false; return true; -}; +} diff --git a/test/bls12381.js b/test/bls12381.js index ba7a318..9b43110 100644 --- a/test/bls12381.js +++ b/test/bls12381.js @@ -1,39 +1,37 @@ -const assert = require("assert"); -const buildBls12381 = require("../src/bls12381/build_bls12381.js"); -const buildProtoboard = require("wasmbuilder").buildProtoboard; -const {bitLength} = require("../src/bigint.js"); +import buildBls12381 from "../src/bls12381/build_bls12381.js"; +import { buildProtoboard } from "wasmbuilder"; +import { bitLength } from "../src/bigint.js"; +import { describe, assert, it, beforeAll } from "vitest"; describe("Basic tests for g1 in bls12-381", function () { - this.timeout(10000000); - - const n8q=48; - const n8r=32; + const n8q = 48; + const n8r = 32; function getFieldElementF12(pR) { pb.ftm_fromMontgomery(pR, pR); - const res = [ + const res = [ [ [ pb.get(pR), - pb.get(pR+n8q), - ],[ - pb.get(pR+n8q*2), - pb.get(pR+n8q*3), - ],[ - pb.get(pR+n8q*4), - pb.get(pR+n8q*5), + pb.get(pR + n8q), + ], [ + pb.get(pR + n8q * 2), + pb.get(pR + n8q * 3), + ], [ + pb.get(pR + n8q * 4), + pb.get(pR + n8q * 5), ] - ],[ + ], [ [ - pb.get(pR+n8q*6), - pb.get(pR+n8q*7), - ],[ - pb.get(pR+n8q*8), - pb.get(pR+n8q*9), - ],[ - pb.get(pR+n8q*10), - pb.get(pR+n8q*11), + pb.get(pR + n8q * 6), + pb.get(pR + n8q * 7), + ], [ + pb.get(pR + n8q * 8), + pb.get(pR + n8q * 9), + ], [ + pb.get(pR + n8q * 10), + pb.get(pR + n8q * 11), ] ] ]; @@ -42,16 +40,16 @@ describe("Basic tests for g1 in bls12-381", function () { } function getFieldElementF6(pR) { pb.f6m_fromMontgomery(pR, pR); - const res = [ + const res = [ [ pb.get(pR), - pb.get(pR+n8q), - ],[ - pb.get(pR+n8q*2), - pb.get(pR+n8q*3), - ],[ - pb.get(pR+n8q*4), - pb.get(pR+n8q*5), + pb.get(pR + n8q), + ], [ + pb.get(pR + n8q * 2), + pb.get(pR + n8q * 3), + ], [ + pb.get(pR + n8q * 4), + pb.get(pR + n8q * 5), ] ]; pb.f6m_toMontgomery(pR, pR); @@ -59,18 +57,18 @@ describe("Basic tests for g1 in bls12-381", function () { } function getFieldElementF2(pR) { pb.f2m_fromMontgomery(pR, pR); - const res = [ + const res = [ pb.get(pR), - pb.get(pR+n8q), + pb.get(pR + n8q), ]; pb.f2m_toMontgomery(pR, pR); return res; } function assertEqualF12(p1, p2) { - for (let i=0; i<2; i++) { - for (let j=0; j<3; j++) { - for (let k=0; k<2; k++) { + for (let i = 0; i < 2; i++) { + for (let j = 0; j < 3; j++) { + for (let k = 0; k < 2; k++) { assert.equal(p1[i][j][k], p2[i][j][k]); } } @@ -78,15 +76,15 @@ describe("Basic tests for g1 in bls12-381", function () { } function assertEqualF6(p1, p2) { - for (let j=0; j<3; j++) { - for (let k=0; k<2; k++) { + for (let j = 0; j < 3; j++) { + for (let k = 0; k < 2; k++) { assert.equal(BigInt(p1[j][k]), BigInt(p2[j][k])); } } } function assertEqualF2(p1, p2) { - for (let k=0; k<2; k++) { + for (let k = 0; k < 2; k++) { assert.equal(p1[k], p2[k]); } } @@ -98,85 +96,91 @@ describe("Basic tests for g1 in bls12-381", function () { return "0x" + n.toString(16); } + //eslint-disable-next-line no-unused-vars function printF1(s, p) { console.log(s, " " + ns(p)); } + //eslint-disable-next-line no-unused-vars function printF2(s, p) { - console.log(s + " Fq2(" + ns(p) + " + " + ns(p+n8q) +"*u " ); + console.log(s + " Fq2(" + ns(p) + " + " + ns(p + n8q) + "*u "); } + //eslint-disable-next-line no-unused-vars function printF6(s, p) { - console.log(s + " [Fq2(\n" + ns(p) + " +\n " + ns(p+n8q) +"*u],[" ); - console.log("Fq2(\n" + ns(p+n8q*2) + " +\n " + ns(p+n8q*3) +"*u],[" ); - console.log("Fq2(\n" + ns(p+n8q*4) + " +\n " + ns(p+n8q*5) +"*u]" ); + console.log(s + " [Fq2(\n" + ns(p) + " +\n " + ns(p + n8q) + "*u],["); + console.log("Fq2(\n" + ns(p + n8q * 2) + " +\n " + ns(p + n8q * 3) + "*u],["); + console.log("Fq2(\n" + ns(p + n8q * 4) + " +\n " + ns(p + n8q * 5) + "*u]"); } + //eslint-disable-next-line no-unused-vars function printF12(s, p) { - console.log(s + " [ [Fq2(\n" + ns(p) + " +\n " + ns(p+n8q) +"*u],[" ); - console.log("Fq2(\n" + ns(p+n8q*2) + " +\n " + ns(p+n8q*3) +"*u],[" ); - console.log("Fq2(\n" + ns(p+n8q*4) + " +\n " + ns(p+n8q*5) +"*u]]" ); - console.log("[ [Fq2(\n" + ns(p+n8q*6) + " +\n " + ns(p+n8q*7) +"*u],[" ); - console.log("Fq2(\n" + ns(p+n8q*8) + " +\n " + ns(p+n8q*9) +"*u],[" ); - console.log("Fq2(\n" + ns(p+n8q*10) + " +\n " + ns(p+n8q*11) +"*u]]" ); + console.log(s + " [ [Fq2(\n" + ns(p) + " +\n " + ns(p + n8q) + "*u],["); + console.log("Fq2(\n" + ns(p + n8q * 2) + " +\n " + ns(p + n8q * 3) + "*u],["); + console.log("Fq2(\n" + ns(p + n8q * 4) + " +\n " + ns(p + n8q * 5) + "*u]]"); + console.log("[ [Fq2(\n" + ns(p + n8q * 6) + " +\n " + ns(p + n8q * 7) + "*u],["); + console.log("Fq2(\n" + ns(p + n8q * 8) + " +\n " + ns(p + n8q * 9) + "*u],["); + console.log("Fq2(\n" + ns(p + n8q * 10) + " +\n " + ns(p + n8q * 11) + "*u]]"); } + //eslint-disable-next-line no-unused-vars function printG1(s, p) { - console.log(s + " G1(" + ns(p) + " , " + ns(p+n8q) + " , " + ns(p+n8q*2) + ")" ); + console.log(s + " G1(" + ns(p) + " , " + ns(p + n8q) + " , " + ns(p + n8q * 2) + ")"); } + //eslint-disable-next-line no-unused-vars function printG2(s, p) { console.log(s + " (G2):"); - for (let i=0; i<6; i++) { - console.log(ns(p+n8q*i)); + for (let i = 0; i < 6; i++) { + console.log(ns(p + n8q * i)); } console.log(""); } let pb; - before(async () => { + beforeAll(async () => { pb = await buildProtoboard((module) => { buildBls12381(module); }, n8q); }); it("It should do a basic point operation in F2", async () => { - const e1 = pb.alloc(n8q*2); + const e1 = pb.alloc(n8q * 2); pb.set(e1, 1n); - pb.set(e1+n8q, 2n); - const e2 = pb.alloc(n8q*2); - pb.f2m_square(e1,e2); + pb.set(e1 + n8q, 2n); + const e2 = pb.alloc(n8q * 2); + pb.f2m_square(e1, e2); - const e3 = pb.alloc(n8q*2); - pb.f2m_mul(e1,e1, e3); + const e3 = pb.alloc(n8q * 2); + pb.f2m_mul(e1, e1, e3); const res2 = getFieldElementF2(e2); const res3 = getFieldElementF2(e3); - assert(res2[0] = res3[0]); - assert(res2[1] = res3[1]); + assert.equal(res2[0], res3[0]); + assert.equal(res2[1], res3[1]); }); it("It should do a big exponentioation F2", async () => { - const e1 = pb.alloc(n8q*2); + const e1 = pb.alloc(n8q * 2); pb.set(e1, 1n); - pb.set(e1+n8q, 2n); + pb.set(e1 + n8q, 2n); const exp = pb.bls12381.q ** 2n - 1n; - const l = (Math.floor((bitLength(exp)- 1) / 64) +1)*8; + const l = (Math.floor((bitLength(exp) - 1) / 64) + 1) * 8; const ps = pb.alloc(l); pb.set(ps, exp, l); - const e2 = pb.alloc(n8q*2); + const e2 = pb.alloc(n8q * 2); pb.f2m_exp(e1, ps, l, e2); const res2 = getFieldElementF2(e2); @@ -185,19 +189,19 @@ describe("Basic tests for g1 in bls12-381", function () { assert.equal(res2[1], 0n); }); it("It should do a basic op in f2", async () => { - const e1 = pb.alloc(n8q*2); + const e1 = pb.alloc(n8q * 2); - for (let i=0; i<2; i++) { - pb.set(e1+n8q*i, BigInt(i+1)); + for (let i = 0; i < 2; i++) { + pb.set(e1 + n8q * i, BigInt(i + 1)); } pb.f2m_toMontgomery(e1, e1); - const e2 = pb.alloc(n8q*2); + const e2 = pb.alloc(n8q * 2); pb.f2m_square(e1, e2); - const e3 = pb.alloc(n8q*2); - pb.f2m_mul(e1,e1, e3); + const e3 = pb.alloc(n8q * 2); + pb.f2m_mul(e1, e1, e3); const res2 = getFieldElementF2(e2); const res3 = getFieldElementF2(e3); @@ -205,23 +209,23 @@ describe("Basic tests for g1 in bls12-381", function () { assertEqualF2(res2, res3); }); it("It should do a basic op in f6", async () => { - const e1 = pb.alloc(n8q*6); + const e1 = pb.alloc(n8q * 6); - for (let i=0; i<6; i++) { - if ((i==2)||(i==5)) { - pb.set(e1+n8q*i, 1n); + for (let i = 0; i < 6; i++) { + if ((i == 2) || (i == 5)) { + pb.set(e1 + n8q * i, 1n); } else { - pb.f1m_zero(e1+n8q*i); + pb.f1m_zero(e1 + n8q * i); } } pb.f6m_toMontgomery(e1, e1); - const e2 = pb.alloc(n8q*6); + const e2 = pb.alloc(n8q * 6); pb.f6m_square(e1, e2); - const e3 = pb.alloc(n8q*6); - pb.f6m_mul(e1,e1, e3); + const e3 = pb.alloc(n8q * 6); + pb.f6m_mul(e1, e1, e3); pb.f6m_fromMontgomery(e2, e2); pb.f6m_fromMontgomery(e3, e3); @@ -232,23 +236,23 @@ describe("Basic tests for g1 in bls12-381", function () { assertEqualF6(res2, res3); }); it("It should do a basic op in f12", async () => { - const e1 = pb.alloc(n8q*12); + const e1 = pb.alloc(n8q * 12); - for (let i=0; i<12; i++) { - if ((i==5)||(i==6)) { - pb.set(e1+n8q*i, 1n); + for (let i = 0; i < 12; i++) { + if ((i == 5) || (i == 6)) { + pb.set(e1 + n8q * i, 1n); } else { - pb.f1m_zero(e1+n8q*i); + pb.f1m_zero(e1 + n8q * i); } } pb.ftm_toMontgomery(e1, e1); - const e2 = pb.alloc(n8q*12); + const e2 = pb.alloc(n8q * 12); pb.ftm_square(e1, e2); - const e3 = pb.alloc(n8q*12); - pb.ftm_mul(e1,e1, e3); + const e3 = pb.alloc(n8q * 12); + pb.ftm_mul(e1, e1, e3); pb.ftm_fromMontgomery(e2, e2); pb.ftm_fromMontgomery(e3, e3); @@ -261,21 +265,21 @@ describe("Basic tests for g1 in bls12-381", function () { it("It should do a big exponentioation F12", async () => { - const e1 = pb.alloc(n8q*12); + const e1 = pb.alloc(n8q * 12); - for (let i=0; i<12; i++) { - pb.set(e1+n8q*i, BigInt(i+1)); + for (let i = 0; i < 12; i++) { + pb.set(e1 + n8q * i, BigInt(i + 1)); } const exp = pb.bls12381.q ** 12n - 1n; - const l = (Math.floor((bitLength(exp) - 1) / 64) +1)*8; + const l = (Math.floor((bitLength(exp) - 1) / 64) + 1) * 8; const ps = pb.alloc(l); pb.set(ps, exp, l); - const e2 = pb.alloc(n8q*12); + const e2 = pb.alloc(n8q * 12); pb.ftm_exp(e1, ps, l, e2); const res2 = getFieldElementF12(e2); @@ -296,8 +300,8 @@ describe("Basic tests for g1 in bls12-381", function () { it("It should do a basic point doubling adding G1", async () => { const pG1 = pb.bls12381.pG1gen; - const p1 = pb.alloc(n8q*3); - const p2 = pb.alloc(n8q*3); + const p1 = pb.alloc(n8q * 3); + const p2 = pb.alloc(n8q * 3); pb.g1m_add(pG1, pG1, p1); // 2*G1 pb.g1m_add(p1, pG1, p1); // 3*G1 @@ -315,11 +319,11 @@ describe("Basic tests for g1 in bls12-381", function () { }); it("It should timesScalar G1", async () => { - const s=10; + const s = 10; const pG1 = pb.bls12381.pG1gen; - const p1 = pb.alloc(n8q*3); - const p2 = pb.alloc(n8q*3); + const p1 = pb.alloc(n8q * 3); + const p2 = pb.alloc(n8q * 3); const ps = pb.alloc(n8r); pb.set(ps, s); @@ -328,8 +332,8 @@ describe("Basic tests for g1 in bls12-381", function () { pb.g1m_zero(p2); - for (let i=0; i { const pG2 = pb.bls12381.pG2gen; - const p1 = pb.alloc(n8q*6); - const p2 = pb.alloc(n8q*6); + const p1 = pb.alloc(n8q * 6); + const p2 = pb.alloc(n8q * 6); pb.g2m_add(pG2, pG2, p1); // 2*G1 pb.g2m_add(p1, pG2, p1); // 3*G1 @@ -366,11 +370,11 @@ describe("Basic tests for g1 in bls12-381", function () { }); it("It should timesScalar G2", async () => { - const s=10; + const s = 10; const pG2 = pb.bls12381.pG2gen; - const p1 = pb.alloc(n8q*6); - const p2 = pb.alloc(n8q*6); + const p1 = pb.alloc(n8q * 6); + const p2 = pb.alloc(n8q * 6); const ps = pb.alloc(n8r); pb.set(ps, s); @@ -379,8 +383,8 @@ describe("Basic tests for g1 in bls12-381", function () { pb.g2m_zero(p2); - for (let i=0; i { - const pA = pb.alloc(n8q*6); - const pB = pb.alloc(n8q*6); - const pRes1 = pb.alloc(n8q*6); - const pRes2 = pb.alloc(n8q*6); - const pOne = pb.alloc(n8q*6); - const pRef = pb.alloc(n8q*6); - for (let i=0; i<6; i++) { - pb.set(pA + i*n8q, i+1); - if ([2,3].indexOf(i)>=0) { - pb.set(pB + i*n8q, i+1); + const pA = pb.alloc(n8q * 6); + const pB = pb.alloc(n8q * 6); + const pRes1 = pb.alloc(n8q * 6); + const pRes2 = pb.alloc(n8q * 6); + const pOne = pb.alloc(n8q * 6); + const pRef = pb.alloc(n8q * 6); + for (let i = 0; i < 6; i++) { + pb.set(pA + i * n8q, i + 1); + if ([2, 3].indexOf(i) >= 0) { + pb.set(pB + i * n8q, i + 1); } else { - pb.f1m_zero(pB + i*n8q); + pb.f1m_zero(pB + i * n8q); } } pb.f6m_one(pOne); - pb.f6m_toMontgomery(pA,pA); - pb.f6m_toMontgomery(pB,pB); - const pc1 = pb.alloc(n8q*2); + pb.f6m_toMontgomery(pA, pA); + pb.f6m_toMontgomery(pB, pB); + const pc1 = pb.alloc(n8q * 2); pb.set(pc1, 3); pb.set(pc1 + n8q, 4); pb.f2m_toMontgomery(pc1, pc1); @@ -429,34 +433,34 @@ describe("Basic tests for g1 in bls12-381", function () { const res1 = getFieldElementF6(pRes1); const res2 = getFieldElementF6(pRes2); - assertEqualF6(ref, [[0,0], [3,4], [0,0]]); + assertEqualF6(ref, [[0, 0], [3, 4], [0, 0]]); assertEqualF6(res1, res2); }); it("Should f6_mul01", async () => { - const pA = pb.alloc(n8q*6); - const pB = pb.alloc(n8q*6); - const pRes1 = pb.alloc(n8q*6); - const pRes2 = pb.alloc(n8q*6); - const pOne = pb.alloc(n8q*6); - const pRef = pb.alloc(n8q*6); - for (let i=0; i<6; i++) { - pb.set(pA + i*n8q, i+1); - if ([0,1,2,3].indexOf(i)>=0) { - pb.set(pB + i*n8q, i+1); + const pA = pb.alloc(n8q * 6); + const pB = pb.alloc(n8q * 6); + const pRes1 = pb.alloc(n8q * 6); + const pRes2 = pb.alloc(n8q * 6); + const pOne = pb.alloc(n8q * 6); + const pRef = pb.alloc(n8q * 6); + for (let i = 0; i < 6; i++) { + pb.set(pA + i * n8q, i + 1); + if ([0, 1, 2, 3].indexOf(i) >= 0) { + pb.set(pB + i * n8q, i + 1); } else { - pb.f1m_zero(pB + i*n8q); + pb.f1m_zero(pB + i * n8q); } } pb.f6m_one(pOne); - pb.f6m_toMontgomery(pA,pA); - pb.f6m_toMontgomery(pB,pB); - const pc0 = pb.alloc(n8q*2); + pb.f6m_toMontgomery(pA, pA); + pb.f6m_toMontgomery(pB, pB); + const pc0 = pb.alloc(n8q * 2); pb.set(pc0, 1); pb.set(pc0 + n8q, 2); pb.f2m_toMontgomery(pc0, pc0); - const pc1 = pb.alloc(n8q*2); + const pc1 = pb.alloc(n8q * 2); pb.set(pc1, 3); pb.set(pc1 + n8q, 4); pb.f2m_toMontgomery(pc1, pc1); @@ -470,37 +474,37 @@ describe("Basic tests for g1 in bls12-381", function () { const res1 = getFieldElementF6(pRes1); const res2 = getFieldElementF6(pRes2); - assertEqualF6(ref, [[1,2], [3,4], [0,0]]); + assertEqualF6(ref, [[1, 2], [3, 4], [0, 0]]); assertEqualF6(res1, res2); }); it("Should f12_014", async () => { - const pA = pb.alloc(n8q*12); - const pB = pb.alloc(n8q*12); - const pRes1 = pb.alloc(n8q*12); - const pRes2 = pb.alloc(n8q*12); - const pOne = pb.alloc(n8q*12); - const pRef = pb.alloc(n8q*12); - for (let i=0; i<12; i++) { - pb.set(pA + i*n8q, i+1); - if ([0,1,2,3,8,9].indexOf(i)>=0) { - pb.set(pB + i*n8q, i+1); + const pA = pb.alloc(n8q * 12); + const pB = pb.alloc(n8q * 12); + const pRes1 = pb.alloc(n8q * 12); + const pRes2 = pb.alloc(n8q * 12); + const pOne = pb.alloc(n8q * 12); + const pRef = pb.alloc(n8q * 12); + for (let i = 0; i < 12; i++) { + pb.set(pA + i * n8q, i + 1); + if ([0, 1, 2, 3, 8, 9].indexOf(i) >= 0) { + pb.set(pB + i * n8q, i + 1); } else { - pb.f1m_zero(pB + i*n8q); + pb.f1m_zero(pB + i * n8q); } } pb.ftm_one(pOne); - pb.ftm_toMontgomery(pA,pA); - pb.ftm_toMontgomery(pB,pB); - const pc0 = pb.alloc(n8q*2); + pb.ftm_toMontgomery(pA, pA); + pb.ftm_toMontgomery(pB, pB); + const pc0 = pb.alloc(n8q * 2); pb.set(pc0, 1); pb.set(pc0 + n8q, 2); pb.ftm_toMontgomery(pc0, pc0); - const pc1 = pb.alloc(n8q*2); + const pc1 = pb.alloc(n8q * 2); pb.set(pc1, 3); pb.set(pc1 + n8q, 4); pb.f2m_toMontgomery(pc1, pc1); - const pc4 = pb.alloc(n8q*2); + const pc4 = pb.alloc(n8q * 2); pb.set(pc4, 9); pb.set(pc4 + n8q, 10); pb.f2m_toMontgomery(pc4, pc4); @@ -514,20 +518,20 @@ describe("Basic tests for g1 in bls12-381", function () { const res1 = getFieldElementF12(pRes1); const res2 = getFieldElementF12(pRes2); - assertEqualF12(ref, [[[1,2], [3,4], [0,0]],[[0,0], [9,10], [0,0]]]); + assertEqualF12(ref, [[[1, 2], [3, 4], [0, 0]], [[0, 0], [9, 10], [0, 0]]]); assertEqualF12(res1, res2); }); it("Should Test Frobenius", async () => { - const pA = pb.alloc(n8q*12); - const pB = pb.alloc(n8q*12); - const pAq = pb.alloc(n8q*12); - const pAqi = pb.alloc(n8q*12); + const pA = pb.alloc(n8q * 12); + const pB = pb.alloc(n8q * 12); + const pAq = pb.alloc(n8q * 12); + const pAqi = pb.alloc(n8q * 12); const pq = pb.bls12381.pq; let res1, res2; - for (let i=0; i<12; i++) { - pb.set(pA+n8q*i, BigInt(i+1)); + for (let i = 0; i < 12; i++) { + pb.set(pA + n8q * i, BigInt(i + 1)); } pb.ftm_toMontgomery(pA, pA); // printF12("pA", pA); @@ -538,10 +542,10 @@ describe("Basic tests for g1 in bls12-381", function () { assertEqualF12(res1, res2); - pb.ftm_exp(pA, pq, n8q,pAq); + pb.ftm_exp(pA, pq, n8q, pAq); - for (let power = 1; power<10; ++power) { - pb["ftm_frobeniusMap"+power](pA, pAqi); + for (let power = 1; power < 10; ++power) { + pb["ftm_frobeniusMap" + power](pA, pAqi); res1 = getFieldElementF12(pAq); res2 = getFieldElementF12(pAqi); @@ -550,7 +554,7 @@ describe("Basic tests for g1 in bls12-381", function () { assertEqualF12(res1, res2); - pb.ftm_exp(pAq, pq, n8q,pAq); + pb.ftm_exp(pAq, pq, n8q, pAq); } }); @@ -566,15 +570,15 @@ describe("Basic tests for g1 in bls12-381", function () { // FieldT aqcubed_minus1 = a.Frobenius_map(FieldT::extension_degree()/2) * a.inverse(); // assert(aqcubed_minus1.inverse() == aqcubed_minus1.unitary_inverse()); - const pA = pb.alloc(n8q*12); - const pAf = pb.alloc(n8q*12); - const pAInverse = pb.alloc(n8q*12); - const pAcubedMinus1 = pb.alloc(n8q*12); - const pAcubedMinus1Inverse = pb.alloc(n8q*12); - const pAcubedMinus1UnitaryInverse = pb.alloc(n8q*12); + const pA = pb.alloc(n8q * 12); + const pAf = pb.alloc(n8q * 12); + const pAInverse = pb.alloc(n8q * 12); + const pAcubedMinus1 = pb.alloc(n8q * 12); + const pAcubedMinus1Inverse = pb.alloc(n8q * 12); + const pAcubedMinus1UnitaryInverse = pb.alloc(n8q * 12); let res1, res2; - for (let i=0; i<12; i++) { - pb.set(pA+n8q*i, BigInt(i+1)); + for (let i = 0; i < 12; i++) { + pb.set(pA + n8q * i, BigInt(i + 1)); } pb.ftm_toMontgomery(pA, pA); pb.ftm_frobeniusMap6(pA, pAf); @@ -602,12 +606,12 @@ describe("Basic tests for g1 in bls12-381", function () { // assert(beta.cyclotomic_squared() == beta.squared()); - const pA = pb.alloc(n8q*12); - const pBeta = pb.alloc(n8q*12); - const pCycSquare = pb.alloc(n8q*12); - const pNormSquare = pb.alloc(n8q*12); - const pCycExp = pb.alloc(n8q*12); - const pNormExp = pb.alloc(n8q*12); + const pA = pb.alloc(n8q * 12); + const pBeta = pb.alloc(n8q * 12); + const pCycSquare = pb.alloc(n8q * 12); + const pNormSquare = pb.alloc(n8q * 12); + const pCycExp = pb.alloc(n8q * 12); + const pNormExp = pb.alloc(n8q * 12); const pr = pb.alloc(n8q); const pe = pb.alloc(544); const peZ = pb.alloc(n8q); @@ -617,8 +621,8 @@ describe("Basic tests for g1 in bls12-381", function () { pb.set(peZ, 15132376222941642752n); let res1, res2; - for (let i=0; i<12; i++) { - pb.set(pA+n8q*i, BigInt(i+1)); + for (let i = 0; i < 12; i++) { + pb.set(pA + n8q * i, BigInt(i + 1)); } pb.ftm_exp(pA, pe, 544, pBeta); @@ -647,12 +651,12 @@ describe("Basic tests for g1 in bls12-381", function () { it("Should test unitary", async () => { const pG1 = pb.bls12381.pG1gen; const pG2 = pb.bls12381.pG2gen; - const pnG1 = pb.alloc(n8q*3); - const pnG2 = pb.alloc(n8q*6); + const pnG1 = pb.alloc(n8q * 3); + const pnG2 = pb.alloc(n8q * 6); - const pP = pb.alloc(n8q*12); - const pQ = pb.alloc(n8q*12); - const pR = pb.alloc(n8q*12); + const pP = pb.alloc(n8q * 12); + const pQ = pb.alloc(n8q * 12); + const pR = pb.alloc(n8q * 12); pb.g1m_neg(pG1, pnG1); pb.g2m_neg(pG2, pnG2); @@ -676,15 +680,15 @@ describe("Basic tests for g1 in bls12-381", function () { it("It should do a basic pairing", async () => { const ps = pb.alloc(n8r); - const pOne = pb.alloc(n8q*12); + const pOne = pb.alloc(n8q * 12); pb.set(ps, 10n); - const pRes1 = pb.alloc(n8q*12); - const pRes2 = pb.alloc(n8q*12); - const pRes3 = pb.alloc(n8q*12); - const pRes4 = pb.alloc(n8q*12); + const pRes1 = pb.alloc(n8q * 12); + const pRes2 = pb.alloc(n8q * 12); + const pRes3 = pb.alloc(n8q * 12); + const pRes4 = pb.alloc(n8q * 12); - const pG1s = pb.alloc(n8q*3); - const pG2s = pb.alloc(n8q*2*3); + const pG1s = pb.alloc(n8q * 3); + const pG2s = pb.alloc(n8q * 2 * 3); const pG1gen = pb.bls12381.pG1gen; const pG2gen = pb.bls12381.pG2gen; @@ -692,8 +696,8 @@ describe("Basic tests for g1 in bls12-381", function () { pb.g1m_timesScalar(pG1gen, ps, n8r, pG1s); pb.g2m_timesScalar(pG2gen, ps, n8r, pG2s); - const pPreP = pb.alloc(n8q*3); - const pPreQ = pb.alloc(n8q*2*3 + n8q*2*3*70); + const pPreP = pb.alloc(n8q * 3); + const pPreQ = pb.alloc(n8q * 2 * 3 + n8q * 2 * 3 * 70); pb.bls12381_prepareG1(pG1s, pPreP); pb.bls12381_prepareG2(pG2gen, pPreQ); @@ -739,27 +743,27 @@ describe("Basic tests for g1 in bls12-381", function () { }); it("Point in curve and not in group G1", async () => { - const p1 = pb.alloc(n8q*3); + const p1 = pb.alloc(n8q * 3); const pG1b = pb.bls12381.pG1b; pb.set(p1, 4n, n8q); pb.f1m_toMontgomery(p1, p1); - pb.f1m_square(p1, p1+n8q); - pb.f1m_mul(p1, p1+n8q, p1+n8q); - pb.f1m_add(p1+n8q, pG1b, p1+n8q); + pb.f1m_square(p1, p1 + n8q); + pb.f1m_mul(p1, p1 + n8q, p1 + n8q); + pb.f1m_add(p1 + n8q, pG1b, p1 + n8q); assert.equal(pb.g1m_inGroupAffine(p1), 0); assert.equal(pb.g1m_inCurveAffine(p1), 0); - pb.f1m_sqrt(p1+n8q, p1+n8q); + pb.f1m_sqrt(p1 + n8q, p1 + n8q); assert.equal(pb.g1m_inGroupAffine(p1), 0); assert.equal(pb.g1m_inCurveAffine(p1), 1); - const ph= pb.alloc(16); + const ph = pb.alloc(16); pb.set(ph, 0x396c8c005555e1568c00aaab0000aaabn, 16); - pb.g1m_timesScalarAffine(p1, ph, 16 ,p1); + pb.g1m_timesScalarAffine(p1, ph, 16, p1); assert.equal(pb.g1m_inCurve(p1), 1); assert.equal(pb.g1m_inGroup(p1), 1); @@ -773,28 +777,28 @@ describe("Basic tests for g1 in bls12-381", function () { it("Point in curve and not in group G2", async () => { - const p1 = pb.alloc(n8q*6); + const p1 = pb.alloc(n8q * 6); const pG2b = pb.bls12381.pG2b; pb.set(p1, 0n, n8q); - pb.set(p1+n8q, 4n, n8q); + pb.set(p1 + n8q, 4n, n8q); pb.f2m_toMontgomery(p1, p1); - pb.f2m_square(p1, p1+n8q*2); - pb.f2m_mul(p1, p1+n8q*2, p1+n8q*2); - pb.f2m_add(p1+n8q*2, pG2b, p1+n8q*2); + pb.f2m_square(p1, p1 + n8q * 2); + pb.f2m_mul(p1, p1 + n8q * 2, p1 + n8q * 2); + pb.f2m_add(p1 + n8q * 2, pG2b, p1 + n8q * 2); assert.equal(pb.g2m_inGroupAffine(p1), 0); assert.equal(pb.g2m_inCurveAffine(p1), 0); - pb.f2m_sqrt(p1+n8q*2, p1+n8q*2); + pb.f2m_sqrt(p1 + n8q * 2, p1 + n8q * 2); assert.equal(pb.g2m_inGroupAffine(p1), 0); assert.equal(pb.g2m_inCurveAffine(p1), 1); - const ph= pb.alloc(64); + const ph = pb.alloc(64); pb.set(ph, 0x05d543a95414e7f1091d50792876a202cd91de4547085abaa68a205b2e5a7ddfa628f1cb4d9e82ef21537e293a6691ae1616ec6e786f0c70cf1c38e31c7238e5n, 64); - pb.g2m_timesScalarAffine(p1, ph, 64 ,p1); + pb.g2m_timesScalarAffine(p1, ph, 64, p1); assert.equal(pb.g2m_inCurve(p1), 1); assert.equal(pb.g2m_inGroup(p1), 1); diff --git a/test/bn128.js b/test/bn128.js index ed12262..f3b3d85 100644 --- a/test/bn128.js +++ b/test/bn128.js @@ -1,6 +1,7 @@ -const assert = require("assert"); -const buildBn128 = require("../src/bn128/build_bn128.js"); -const buildProtoboard = require("wasmbuilder").buildProtoboard; +import buildBn128 from "../src/bn128/build_bn128.js"; +import { buildProtoboard } from "wasmbuilder"; +import { describe, assert, it, beforeAll } from "vitest"; + describe("Basic tests for g1 in bn128", () => { @@ -9,33 +10,33 @@ describe("Basic tests for g1 in bn128", () => { [ [ pb.get(pR), - pb.get(pR+32), - ],[ - pb.get(pR+32*2), - pb.get(pR+32*3), - ],[ - pb.get(pR+32*4), - pb.get(pR+32*5), + pb.get(pR + 32), + ], [ + pb.get(pR + 32 * 2), + pb.get(pR + 32 * 3), + ], [ + pb.get(pR + 32 * 4), + pb.get(pR + 32 * 5), ] - ],[ + ], [ [ - pb.get(pR+32*6), - pb.get(pR+32*7), - ],[ - pb.get(pR+32*8), - pb.get(pR+32*9), - ],[ - pb.get(pR+32*10), - pb.get(pR+32*11), + pb.get(pR + 32 * 6), + pb.get(pR + 32 * 7), + ], [ + pb.get(pR + 32 * 8), + pb.get(pR + 32 * 9), + ], [ + pb.get(pR + 32 * 10), + pb.get(pR + 32 * 11), ] ] ]; } function assertEqualF12(p1, p2) { - for (let i=0; i<2; i++) { - for (let j=0; j<3; j++) { - for (let k=0; k<2; k++) { + for (let i = 0; i < 2; i++) { + for (let j = 0; j < 3; j++) { + for (let k = 0; k < 2; k++) { assert.equal(p1[i][j][k], p2[i][j][k]); } } @@ -49,51 +50,56 @@ describe("Basic tests for g1 in bn128", () => { return "0x" + n.toString(16); } + //eslint-disable-next-line no-unused-vars function printF1(s, p) { console.log(s, " " + ns(p)); } + //eslint-disable-next-line no-unused-vars function printF2(s, p) { - console.log(s + " Fq2(" + ns(p) + " + " + ns(p+32) +"*u " ); + console.log(s + " Fq2(" + ns(p) + " + " + ns(p + 32) + "*u "); } + //eslint-disable-next-line no-unused-vars function printF6(s, p) { - console.log(s + " [Fq2(\n" + ns(p) + " +\n " + ns(p+32) +"*u],[" ); - console.log("Fq2(\n" + ns(p+32*2) + " +\n " + ns(p+32*3) +"*u],[" ); - console.log("Fq2(\n" + ns(p+32*4) + " +\n " + ns(p+32*5) +"*u]" ); + console.log(s + " [Fq2(\n" + ns(p) + " +\n " + ns(p + 32) + "*u],["); + console.log("Fq2(\n" + ns(p + 32 * 2) + " +\n " + ns(p + 32 * 3) + "*u],["); + console.log("Fq2(\n" + ns(p + 32 * 4) + " +\n " + ns(p + 32 * 5) + "*u]"); } + //eslint-disable-next-line no-unused-vars function printF12(s, p) { - console.log(s + " [ [Fq2(\n" + ns(p) + " +\n " + ns(p+32) +"*u],[" ); - console.log("Fq2(\n" + ns(p+32*2) + " +\n " + ns(p+32*3) +"*u],[" ); - console.log("Fq2(\n" + ns(p+32*4) + " +\n " + ns(p+32*5) +"*u]]" ); - console.log("[ [Fq2(\n" + ns(p+32*6) + " +\n " + ns(p+32*7) +"*u],[" ); - console.log("Fq2(\n" + ns(p+32*8) + " +\n " + ns(p+32*9) +"*u],[" ); - console.log("Fq2(\n" + ns(p+32*10) + " +\n " + ns(p+32*11) +"*u]]" ); + console.log(s + " [ [Fq2(\n" + ns(p) + " +\n " + ns(p + 32) + "*u],["); + console.log("Fq2(\n" + ns(p + 32 * 2) + " +\n " + ns(p + 32 * 3) + "*u],["); + console.log("Fq2(\n" + ns(p + 32 * 4) + " +\n " + ns(p + 32 * 5) + "*u]]"); + console.log("[ [Fq2(\n" + ns(p + 32 * 6) + " +\n " + ns(p + 32 * 7) + "*u],["); + console.log("Fq2(\n" + ns(p + 32 * 8) + " +\n " + ns(p + 32 * 9) + "*u],["); + console.log("Fq2(\n" + ns(p + 32 * 10) + " +\n " + ns(p + 32 * 11) + "*u]]"); } - //eslint-disable-next-line no-unused-vars + function printG1(s, p) { - console.log(s + " G1(" + ns(p) + " , " + ns(p+n8) + " , " + ns(p+n8*2) + ")" ); + console.log(s + " G1(" + ns(p) + " , " + ns(p + n8) + " , " + ns(p + n8 * 2) + ")"); } + //eslint-disable-next-line no-unused-vars function printG2(s, p) { console.log(s + " (G2):"); - for (let i=0; i<6; i++) { - console.log(ns(p+n8*i)); + for (let i = 0; i < 6; i++) { + console.log(ns(p + n8 * i)); } console.log(""); } let pb; - const n8=32; - before(async () => { + const n8 = 32; + beforeAll(async () => { pb = await buildProtoboard((module) => { buildBn128(module); }, n8); @@ -102,15 +108,15 @@ describe("Basic tests for g1 in bn128", () => { it("It should do a basic point doubling adding G1", async () => { const pG1 = pb.bn128.pG1gen; - const p1 = pb.alloc(n8*3); - const p2 = pb.alloc(n8*3); + const p1 = pb.alloc(n8 * 3); + const p2 = pb.alloc(n8 * 3); pb.g1m_add(pG1, pG1, p1); // 2*G1 // pb.g1m_normalize(p1, p1); - printG1("2*G1=",p1); + printG1("2*G1=", p1); pb.g1m_add(p1, pG1, p1); // 3*G1 // pb.g1m_normalize(p1, p1); - printG1("3*G1=",p1); + printG1("3*G1=", p1); pb.g1m_add(p1, pG1, p1); // 4*G1 pb.g1m_double(pG1, p2); // 2*G1 @@ -127,8 +133,8 @@ describe("Basic tests for g1 in bn128", () => { it("It should do a basic doubling adding G1", async () => { const pG1 = pb.bn128.pG1gen; - const p1 = pb.alloc(n8*3); - const p2 = pb.alloc(n8*3); + const p1 = pb.alloc(n8 * 3); + const p2 = pb.alloc(n8 * 3); pb.g1m_add(pG1, pG1, p1); // 2*G1 pb.g1m_add(p1, pG1, p1); // 3*G1 @@ -146,11 +152,11 @@ describe("Basic tests for g1 in bn128", () => { }); it("It should timesScalar G1", async () => { - const s=2; + const s = 2; const pG1 = pb.bn128.pG1gen; - const p1 = pb.alloc(n8*3); - const p2 = pb.alloc(n8*3); + const p1 = pb.alloc(n8 * 3); + const p2 = pb.alloc(n8 * 3); const ps = pb.alloc(n8); pb.set(ps, s); @@ -159,8 +165,8 @@ describe("Basic tests for g1 in bn128", () => { pb.g1m_zero(p2); - for (let i=0; i { const pG1 = pb.bn128.pG1gen; const pr = pb.bn128.pr; - const p1 = pb.alloc(n8*3); + const p1 = pb.alloc(n8 * 3); pb.g1m_timesScalar(pG1, pr, n8, p1); @@ -179,7 +185,7 @@ describe("Basic tests for g1 in bn128", () => { const pG1 = pb.bn128.pG1gen; const pr = pb.bn128.pr; - const p1 = pb.alloc(n8*3); + const p1 = pb.alloc(n8 * 3); pb.g1m_timesScalarAffine(pG1, pr, n8, p1); @@ -189,7 +195,7 @@ describe("Basic tests for g1 in bn128", () => { const pG2 = pb.bn128.pG2gen; const pr = pb.bn128.pr; - const p1 = pb.alloc(n8*3*2); + const p1 = pb.alloc(n8 * 3 * 2); pb.g1m_timesScalarAffine(pG2, pr, n8, p1); @@ -198,8 +204,8 @@ describe("Basic tests for g1 in bn128", () => { it("It should do a basic point doubling adding G2", async () => { const pG2 = pb.bn128.pG2gen; - const p1 = pb.alloc(n8*6); - const p2 = pb.alloc(n8*6); + const p1 = pb.alloc(n8 * 6); + const p2 = pb.alloc(n8 * 6); pb.g2m_add(pG2, pG2, p1); // 2*G1 pb.g2m_add(p1, pG2, p1); // 3*G1 @@ -217,11 +223,11 @@ describe("Basic tests for g1 in bn128", () => { }); it("It should timesScalar G2", async () => { - const s=10; + const s = 10; const pG2 = pb.bn128.pG2gen; - const p1 = pb.alloc(n8*6); - const p2 = pb.alloc(n8*6); + const p1 = pb.alloc(n8 * 6); + const p2 = pb.alloc(n8 * 6); const ps = pb.alloc(n8); pb.set(ps, s); @@ -230,8 +236,8 @@ describe("Basic tests for g1 in bn128", () => { pb.g2m_zero(p2); - for (let i=0; i { const pG2 = pb.bn128.pG2gen; const pr = pb.bn128.pr; - const p1 = pb.alloc(n8*6); + const p1 = pb.alloc(n8 * 6); pb.g2m_timesScalar(pG2, pr, n8, p1); @@ -248,20 +254,20 @@ describe("Basic tests for g1 in bn128", () => { }); it("Should multiply 024", async () => { - const pf = pb.alloc(32*12); - for (let i=0; i<12; i++) { - pb.set(pf + i*32, i); + const pf = pb.alloc(32 * 12); + for (let i = 0; i < 12; i++) { + pb.set(pf + i * 32, i); } - pb.ftm_toMontgomery(pf,pf); - const pEll0 = pb.alloc(32*2); + pb.ftm_toMontgomery(pf, pf); + const pEll0 = pb.alloc(32 * 2); pb.set(pEll0, 1); pb.set(pEll0 + 32, 2); - pb.f2m_toMontgomery(pEll0,pEll0); - const pVW = pb.alloc(32*2); + pb.f2m_toMontgomery(pEll0, pEll0); + const pVW = pb.alloc(32 * 2); pb.set(pVW, 3); pb.set(pVW + 32, 4); pb.f2m_toMontgomery(pVW, pVW); - const pVV = pb.alloc(32*2); + const pVV = pb.alloc(32 * 2); pb.set(pVV, 5); pb.set(pVV + 32, 6); pb.f2m_toMontgomery(pVV, pVV); @@ -269,10 +275,10 @@ describe("Basic tests for g1 in bn128", () => { pb.bn128__mulBy024(pEll0, pVW, pVV, pf); const res1 = getFieldElementF12(pf); - for (let i=0; i<12; i++) { - pb.set(pf + i*32, i); + for (let i = 0; i < 12; i++) { + pb.set(pf + i * 32, i); } - pb.ftm_toMontgomery(pf,pf); + pb.ftm_toMontgomery(pf, pf); pb.bn128__mulBy024(pEll0, pVW, pVV, pf); const res2 = getFieldElementF12(pf); @@ -283,14 +289,14 @@ describe("Basic tests for g1 in bn128", () => { it("Should Test Frobenius", async () => { - const pA = pb.alloc(32*12); - const pB = pb.alloc(32*12); - const pAq = pb.alloc(32*12); - const pAqi = pb.alloc(32*12); + const pA = pb.alloc(32 * 12); + const pB = pb.alloc(32 * 12); + const pAq = pb.alloc(32 * 12); + const pAqi = pb.alloc(32 * 12); const pq = pb.bn128.pq; let res1, res2; - for (let i=0; i<12; i++) { - pb.set(pA+32*i, BigInt(i+1)); + for (let i = 0; i < 12; i++) { + pb.set(pA + 32 * i, BigInt(i + 1)); } pb.ftm_toMontgomery(pA, pA); // printF12("pA", pA); @@ -300,10 +306,10 @@ describe("Basic tests for g1 in bn128", () => { res2 = getFieldElementF12(pB); assertEqualF12(res1, res2); - pb.ftm_exp(pA, pq, 32,pAq); + pb.ftm_exp(pA, pq, 32, pAq); - for (let power = 1; power<10; ++power) { - pb["bn128__frobeniusMap"+power](pA, pAqi); + for (let power = 1; power < 10; ++power) { + pb["bn128__frobeniusMap" + power](pA, pAqi); res1 = getFieldElementF12(pAq); res2 = getFieldElementF12(pAqi); @@ -312,7 +318,7 @@ describe("Basic tests for g1 in bn128", () => { assertEqualF12(res1, res2); - pb.ftm_exp(pAq, pq, 32,pAq); + pb.ftm_exp(pAq, pq, 32, pAq); } }); @@ -329,15 +335,15 @@ describe("Basic tests for g1 in bn128", () => { // assert(aqcubed_minus1.inverse() == aqcubed_minus1.unitary_inverse()); // } - const pA = pb.alloc(32*12); - const pAf = pb.alloc(32*12); - const pAInverse = pb.alloc(32*12); - const pAcubedMinus1 = pb.alloc(32*12); - const pAcubedMinus1Inverse = pb.alloc(32*12); - const pAcubedMinus1UnitaryInverse = pb.alloc(32*12); + const pA = pb.alloc(32 * 12); + const pAf = pb.alloc(32 * 12); + const pAInverse = pb.alloc(32 * 12); + const pAcubedMinus1 = pb.alloc(32 * 12); + const pAcubedMinus1Inverse = pb.alloc(32 * 12); + const pAcubedMinus1UnitaryInverse = pb.alloc(32 * 12); let res1, res2; - for (let i=0; i<12; i++) { - pb.set(pA+32*i, BigInt(i+1)); + for (let i = 0; i < 12; i++) { + pb.set(pA + 32 * i, BigInt(i + 1)); } pb.ftm_toMontgomery(pA, pA); pb.bn128__frobeniusMap6(pA, pAf); @@ -365,12 +371,12 @@ describe("Basic tests for g1 in bn128", () => { // assert(beta.cyclotomic_squared() == beta.squared()); - const pA = pb.alloc(32*12); - const pBeta = pb.alloc(32*12); - const pCycSquare = pb.alloc(32*12); - const pNormSquare = pb.alloc(32*12); - const pCycExp = pb.alloc(32*12); - const pNormExp = pb.alloc(32*12); + const pA = pb.alloc(32 * 12); + const pBeta = pb.alloc(32 * 12); + const pCycSquare = pb.alloc(32 * 12); + const pNormSquare = pb.alloc(32 * 12); + const pCycExp = pb.alloc(32 * 12); + const pNormExp = pb.alloc(32 * 12); const pr = pb.alloc(32); const pe = pb.alloc(352); const peZ = pb.alloc(32); @@ -380,8 +386,8 @@ describe("Basic tests for g1 in bn128", () => { pb.set(peZ, 4965661367192848881n); let res1, res2; - for (let i=0; i<12; i++) { - pb.set(pA+32*i, BigInt(i+1)); + for (let i = 0; i < 12; i++) { + pb.set(pA + 32 * i, BigInt(i + 1)); } pb.ftm_exp(pA, pe, 352, pBeta); @@ -410,15 +416,15 @@ describe("Basic tests for g1 in bn128", () => { it("It should do a basic pairing", async () => { const ps = pb.alloc(32); - const pOne = pb.alloc(32*12); + const pOne = pb.alloc(32 * 12); pb.set(ps, 10n); - const pRes1 = pb.alloc(32*12); - const pRes2 = pb.alloc(32*12); - const pRes3 = pb.alloc(32*12); - const pRes4 = pb.alloc(32*12); + const pRes1 = pb.alloc(32 * 12); + const pRes2 = pb.alloc(32 * 12); + const pRes3 = pb.alloc(32 * 12); + const pRes4 = pb.alloc(32 * 12); - const pG1s = pb.alloc(32*3); - const pG2s = pb.alloc(32*2*3); + const pG1s = pb.alloc(32 * 3); + const pG2s = pb.alloc(32 * 2 * 3); const pG1gen = pb.bn128.pG1gen; const pG2gen = pb.bn128.pG2gen; @@ -426,8 +432,8 @@ describe("Basic tests for g1 in bn128", () => { pb.g1m_timesScalar(pG1gen, ps, 32, pG1s); pb.g2m_timesScalar(pG2gen, ps, 32, pG2s); - const pPreP = pb.alloc(32*3); - const pPreQ = pb.alloc(32*2*3 + 32*2*3*103); + const pPreP = pb.alloc(32 * 3); + const pPreQ = pb.alloc(32 * 2 * 3 + 32 * 2 * 3 * 103); pb.bn128_prepareG1(pG1s, pPreP); pb.bn128_prepareG2(pG2gen, pPreQ); @@ -460,33 +466,33 @@ describe("Basic tests for g1 in bn128", () => { }); it("It should test multiexp", async () => { - const N=8; + const N = 8; const pG1 = pb.bn128.pG1gen; - const pExpected = pb.alloc(n8*3); - const pScalarExpected = pb.alloc(n8*N); - let acc=0; - for (let i=0; i { }); it("Should test compress and decompress in G1", async () => { - const N=10; + const N = 10; const pScalar = pb.alloc(n8); - const pP1 = pb.alloc(n8*3); - const pP1a = pb.alloc(n8*2); - const pP2a = pb.alloc(n8*2); + const pP1 = pb.alloc(n8 * 3); + const pP1a = pb.alloc(n8 * 2); + const pP2a = pb.alloc(n8 * 2); const pP1c = pb.alloc(n8); - const pP1u = pb.alloc(n8*2); + const pP1u = pb.alloc(n8 * 2); const pG1 = pb.bn128.pG1gen; - for (let i=0; i { }); it("Should test compress and decompress in G2", async () => { - const N=10; + const N = 10; const pScalar = pb.alloc(n8); - const pP1 = pb.alloc(n8*2*3); - const pP1a = pb.alloc(n8*2*2); - const pP2a = pb.alloc(n8*2*2); - const pP1c = pb.alloc(n8*2); - const pP1u = pb.alloc(n8*2*2); + const pP1 = pb.alloc(n8 * 2 * 3); + const pP1a = pb.alloc(n8 * 2 * 2); + const pP2a = pb.alloc(n8 * 2 * 2); + const pP1c = pb.alloc(n8 * 2); + const pP1u = pb.alloc(n8 * 2 * 2); const pG2 = pb.bn128.pG2gen; - for (let i=0; i { @@ -349,7 +348,7 @@ describe("Basic tests for Zq", () => { console.log(t); - }).timeout(10000000); + }); it("Should test to montgomery", async () => { const q = 21888242871839275222246405745257275088548364400416034343698204186575808495617n; const f1 = await buildF1(q); @@ -769,7 +768,7 @@ describe("Basic tests for Zq", () => { assert.equal(c1, c2); - }).timeout(10000000); + }); it("It should profile int", async () => { @@ -820,6 +819,6 @@ describe("Basic tests for Zq", () => { // // console.log("Mul Old Time (ms): " + time); - }).timeout(10000000); + }); }); diff --git a/test/f1_critical_numbers.js b/test/f1_critical_numbers.js index 3a650ab..7593ef7 100644 --- a/test/f1_critical_numbers.js +++ b/test/f1_critical_numbers.js @@ -1,8 +1,9 @@ -const assert = require("assert"); -const { bitLength } = require("../src/bigint.js"); +import assert from "assert"; +import { bitLength } from "../src/bigint.js"; -const buildF1m = require("../src/build_f1m"); -const buildProtoboard = require("wasmbuilder").buildProtoboard; +import buildF1m from "../src/build_f1m.js"; +import { buildProtoboard } from "wasmbuilder"; +import { describe, it } from "vitest"; // bn254 base field (q) and scalar field (r) -- same moduli used throughout // the rest of the suite (test/bn128.js, test/f1.js). @@ -47,8 +48,7 @@ function getCriticalNumbers(q, lim) { return Array.from(numbers); } -describe("f1m critical-number stress tests (limb-boundary carries)", function () { - this.timeout(120000); +describe("f1m critical-number stress tests (limb-boundary carries)", () => { function generateTests(q, name) { const nums = getCriticalNumbers(q, 2); diff --git a/test/fft.js b/test/fft.js index 0b87002..57cb2b0 100644 --- a/test/fft.js +++ b/test/fft.js @@ -1,12 +1,12 @@ -const assert = require("assert"); -const buildBn128 = require("../src/bn128/build_bn128.js"); -const buildProtoboard = require("wasmbuilder").buildProtoboard; +import buildBn128 from "../src/bn128/build_bn128.js"; +import { buildProtoboard } from "wasmbuilder"; +import { describe, assert, it, beforeAll } from "vitest"; + describe("FFT tests", function () { - this.timeout(100000); let pb; const n8=32; - before(async () => { + beforeAll(async () => { pb = await buildProtoboard((module) => { buildBn128(module); }, n8); diff --git a/test/helpers/helpers.js b/test/helpers/helpers.js index 0ce8810..2437745 100644 --- a/test/helpers/helpers.js +++ b/test/helpers/helpers.js @@ -20,4 +20,4 @@ function genValues(n, neg, bitsPerWord) { return res; } -module.exports.genValues = genValues; +export { genValues }; diff --git a/test/int.js b/test/int.js index 637f425..2e54a8f 100644 --- a/test/int.js +++ b/test/int.js @@ -1,16 +1,17 @@ -const assert = require("assert"); -const buildProtoboard = require("wasmbuilder").buildProtoboard; -const buildInt = require("../src/build_int.js"); -const buildTest2 = require("../src/build_test.js").buildTest2; +import { buildProtoboard } from "wasmbuilder"; +import buildInt from "../src/build_int.js"; +import { buildTest2 } from "../src/build_test.js"; +import { genValues } from "./helpers/helpers.js"; +import { describe, assert, it, beforeAll } from "vitest"; + -const helpers = require("./helpers/helpers.js"); describe("Basic tests for Int", () => { let pbInt; - before(async () => { + beforeAll(async () => { pbInt = await buildProtoboard((module) => { buildInt(module, 4); buildTest2(module, "int_mul"); @@ -23,10 +24,10 @@ describe("Basic tests for Int", () => { const pB = pbInt.alloc(); const pC = pbInt.alloc(64); - const values = helpers.genValues(8, false); + const values = genValues(8, false); - for (let i=0; i { const pA = pbInt.alloc(); const pC = pbInt.alloc(64); - const values = helpers.genValues(8, false); + const values = genValues(8, false); - for (let i=0; i { assert.equal(c, values[i] * values[i]); } - }).timeout(10000000); + }); it("It should profile int", async () => { @@ -96,6 +97,6 @@ describe("Basic tests for Int", () => { // console.log("Mul Old Time (ms): " + time); - }).timeout(10000000); + }); }); diff --git a/test/mnt6753.js b/test/mnt6753.js index 7249306..78b45c4 100644 --- a/test/mnt6753.js +++ b/test/mnt6753.js @@ -1,15 +1,15 @@ -const assert = require("assert"); -const buildProtoboard = require("wasmbuilder").buildProtoboard; -const buildMNT6753 = require("../src/mnt6753/build_mnt6753.js"); -const buildPedersenHash = require("../src/build_pedersenhash.js"); -const baseTables = require("../build/pedersenparams_mnt6753.js"); +import { buildProtoboard } from "wasmbuilder"; +import buildMNT6753 from "../src/mnt6753/build_mnt6753.js"; +import buildPedersenHash from "../src/build_pedersenhash.js"; +import { code as pedersenParamsCode } from "../build/pedersenparams_mnt6753.js"; +import { describe, assert, it, beforeAll } from "vitest"; + +const baseTables = Uint8Array.from(atob(pedersenParamsCode), c => c.charCodeAt(0)); describe("Basic tests for MNT6753", function () { let pb; - this.timeout(100000); - function getPointG1(pR) { return [ pb.get(pR), @@ -82,23 +82,23 @@ describe("Basic tests for MNT6753", function () { return "0x" + n.toString(16); } - //eslint-disable-next-line no-unused-vars + function printF1(s, p) { console.log(s, " " + ns(p)); } - //eslint-disable-next-line no-unused-vars + function printF3(s, p) { console.log(s + " Fq3(" + ns(p) + " + " + ns(p+96) +"*u + "+ ns(p+96*2)+ "*u^2 )" ); } - //eslint-disable-next-line no-unused-vars + function printF6(s, p) { console.log(s + " [Fq3(\n" + ns(p) + " +\n " + ns(p+96) +"*u +\n"+ ns(p+96*2)+ "*u^2)\n],[" ); console.log("Fq3(\n" + ns(p+96*3) + " +\n " + ns(p+96*4) +"*u +\n"+ ns(p+96*5)+ "*u^2)\n]" ); } - before(async () => { + beforeAll(async () => { pb = await buildProtoboard((module) => { buildMNT6753(module); buildPedersenHash(module, "g1m", "g1m", "f1m", 188, baseTables); @@ -118,7 +118,7 @@ describe("Basic tests for MNT6753", function () { const res = getPointG1(pR); assertEqualG1(g1gen, res); - }).timeout(100000000); + }); it("Should work mixed add", async() => { const pP1 = pb.alloc(96*3); @@ -176,7 +176,7 @@ describe("Basic tests for MNT6753", function () { const res2 = getPointG1(pR2); assertEqualG1(res1, res2); - }).timeout(100000000); + }); it("It should do timesScalar many times on G1", async () => { const pRes = pb.alloc(96*3); @@ -216,7 +216,7 @@ describe("Basic tests for MNT6753", function () { ]; assertEqualG1(res, zero); - }).timeout(100000000); + }); it("It should multiply generator by 0 and return generator in G2", async () => { @@ -232,7 +232,7 @@ describe("Basic tests for MNT6753", function () { const res = getPointG2(pR); assertEqualG2(g2gen, res); - }).timeout(100000000); + }); it("It should give same result doubling and adding G2", async () => { const pR1 = pb.alloc(96*3*3); @@ -257,7 +257,7 @@ describe("Basic tests for MNT6753", function () { const res2 = getPointG2(pR2); assertEqualG2(res1, res2); - }).timeout(100000000); + }); it("It should multiply by r and give 0 G2", async () => { @@ -293,7 +293,7 @@ describe("Basic tests for MNT6753", function () { ]; assertEqualG2(res, zero); - }).timeout(100000000); + }); it("Any number in F6 exp q^6 must be one ", async () => { const pn = pb.alloc(96*6); const pRes = pb.alloc(96*6); diff --git a/test/msm_batch.js b/test/msm_batch.js index 3946878..8a37b3a 100644 --- a/test/msm_batch.js +++ b/test/msm_batch.js @@ -1,8 +1,12 @@ -const assert = require("assert"); -const fs = require("fs"); -const path = require("path"); -const buildBn128 = require("../src/bn128/build_bn128.js"); -const buildProtoboard = require("wasmbuilder").buildProtoboard; +import assert from "assert"; +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; +import buildBn128 from "../src/bn128/build_bn128.js"; +import { buildProtoboard } from "wasmbuilder"; +import { describe, it, beforeAll } from "vitest"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); // The batch-affine MSM module (src/as/msm_batch.ts -> build/msm_batch.wasm) // is never instantiated by anything in this repo's own test suite: it's @@ -18,14 +22,13 @@ const buildProtoboard = require("wasmbuilder").buildProtoboard; // `multiexpAffineGLS` can be checked directly against the already-trusted // `g1m_multiexpAffine`/`g2m_multiexpAffine` (used elsewhere in test/bn128.js) // as ground truth. -describe("batch-affine MSM module (msm_batch.wasm)", function () { - this.timeout(60000); +describe("batch-affine MSM module (msm_batch.wasm)", () => { const n8 = 32; // Fr / bn254 base-field element size let pb, batchG1, batchG2; - before(async () => { + beforeAll(async () => { pb = await buildProtoboard((module) => { buildBn128(module); }, 32); diff --git a/test/tomcook.js b/test/tomcook.js index 645f080..9200367 100644 --- a/test/tomcook.js +++ b/test/tomcook.js @@ -1,11 +1,9 @@ -const assert = require("assert"); - -const buildProtoboard = require("wasmbuilder").buildProtoboard; -const buildTomCook = require("../src/build_tomcook.js"); -const buildInt = require("../src/build_int.js"); -const buildTest2 = require("../src/build_test.js").buildTest2; - -const helpers = require("./helpers/helpers.js"); +import { buildProtoboard } from "wasmbuilder"; +import buildTomCook from "../src/build_tomcook.js"; +import buildInt from "../src/build_int.js"; +import { buildTest2 } from "../src/build_test.js"; +import { genValues } from "./helpers/helpers.js"; +import { describe, assert, it, beforeAll } from "vitest"; @@ -13,7 +11,7 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => { let pbTC; let pbInt; - before(async () => { + beforeAll(async () => { pbTC = await buildProtoboard((module) => { buildTomCook(module); buildTest2(module, "tomcook_mul9"); @@ -26,11 +24,11 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => { it("It should divide by 3 (6)", async () => { let c; - const pA = pbTC.alloc(6*4); + const pA = pbTC.alloc(6 * 4); - const values = helpers.genValues(6, true, 29); + const values = genValues(6, true, 29); - for (let i=0; i { it("It should doubling (6)", async () => { let c; - const pA = pbTC.alloc(6*4); + const pA = pbTC.alloc(6 * 4); - const values = helpers.genValues(6, true, 29); + const values = genValues(6, true, 29); - for (let i=0; i { it("It should halving (6)", async () => { let c; - const pA = pbTC.alloc(6*4); + const pA = pbTC.alloc(6 * 4); - const values = helpers.genValues(6, true, 29); + const values = genValues(6, true, 29); - for (let i=0; i { const pB = pbTC.alloc(); const pC = pbTC.alloc(24); - const values = helpers.genValues(3, true, 29); + const values = genValues(3, true, 29); - for (let i=0; i { }); it("It should do a basic multiplication 9", async () => { let c; - const pA = pbTC.alloc(9*4); - const pB = pbTC.alloc(9*4); - const pC = pbTC.alloc(9*4*2); + const pA = pbTC.alloc(9 * 4); + const pB = pbTC.alloc(9 * 4); + const pC = pbTC.alloc(9 * 4 * 2); const A = 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn; const B = 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn; - pbTC.set(pA, A, 9*4); - pbTC.set(pB, B, 9*4); + pbTC.set(pA, A, 9 * 4); + pbTC.set(pB, B, 9 * 4); console.log(A.toString(16)); console.log(B.toString(16)); @@ -118,16 +116,16 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => { it("It should do a basic multiplication Multi values (9)", async () => { let c; - const pA = pbTC.alloc(9*4); - const pB = pbTC.alloc(9*4); - const pC = pbTC.alloc(9*4*2); + const pA = pbTC.alloc(9 * 4); + const pB = pbTC.alloc(9 * 4); + const pC = pbTC.alloc(9 * 4 * 2); - const values = helpers.genValues(9, false, 29); + const values = genValues(9, false, 29); - for (let i=0; i { console.log("Refere: " + (A * B).toString(16)); console.log("Tom School (ms): " + time); - }).timeout(10000000); + }); it("It should profile tomCook", async () => { let start, end, time; const A = (1n << 254n) - 1n; @@ -171,9 +169,9 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => { console.log(A.toString(16)); - const pA = pbTC.set(pbTC.alloc(9*4), A, 9*4); - const pB = pbTC.set(pbTC.alloc(9*4), B, 9*4); - const pC = pbTC.alloc(9*4*2); + const pA = pbTC.set(pbTC.alloc(9 * 4), A, 9 * 4); + const pB = pbTC.set(pbTC.alloc(9 * 4), B, 9 * 4); + const pC = pbTC.alloc(9 * 4 * 2); // start = new Date().getTime(); // pbTC.test_tomcook_mul1(pA, pB, pC, 100000000); @@ -186,11 +184,11 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => { end = new Date().getTime(); time = end - start; - const c = pbTC.get(pC, 1, 9*4*2); + const c = pbTC.get(pC, 1, 9 * 4 * 2); console.log("Result: " + c.toString(16)); console.log("Refere: " + (A * B).toString(16)); console.log("Mul9 Tom Cook Time (ms): " + time); - }).timeout(10000000); + }); }); diff --git a/tools/buildpedersentablebases_mnt6753.js b/tools/buildpedersentablebases_mnt6753.js index 1ae390c..4b63d34 100644 --- a/tools/buildpedersentablebases_mnt6753.js +++ b/tools/buildpedersentablebases_mnt6753.js @@ -1,9 +1,10 @@ - -const buildProtoboard = require("wasmbuilder").buildProtoboard; -const buildMNT6753 = require("../src/mnt6753/build_mnt6753.js"); -const bigInt = require("big-integer"); -const fs = require("fs"); -const path = require("path"); +import { buildProtoboard } from "wasmbuilder"; +import buildMNT6753 from "../src/mnt6753/build_mnt6753.js"; +import bigInt from "big-integer"; +import { writeFileSync } from "fs"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; +const __dirname = dirname(fileURLToPath(import.meta.url)); var pedersenParameters = [ ["2071893303198007985737678972190309212568452221625132024511988170095494148670997278812694070338313361389889122280160253462982652030041813566301365289695187505618174204273471887226695702458395861269694368663558765191107385382142", "17187187414417664367585796530257262302159176591062800465884265459977066325098901507827719965058588341044788483232395252403515861767227243983849894797683644816538861625368393588001624014759720661490214325432345769098675755344007"], @@ -55,12 +56,10 @@ buildProtoboard((module) => { res.push(...pb.i8.slice(p4, p4+96*2)); } - fs.writeFileSync( - path.join( __dirname, "..", "build", "pedersenparams_mnt6753.js"), -` -// Code generated automatically by tools/buildpedersentablebases_mnt6753.js -module.exports = Buffer.from("${Buffer.from(res).toString("base64")}", "base64");; -` + writeFileSync( + join( __dirname, "..", "build", "pedersenparams_mnt6753.js"), +`// Code generated automatically by tools/buildpedersentablebases_mnt6753.js + export const code ="${Buffer.from(res).toString("base64")}";` ); }); diff --git a/tools/buildwasm_bls12381.js b/tools/buildwasm_bls12381.js index 77513d6..419ae17 100644 --- a/tools/buildwasm_bls12381.js +++ b/tools/buildwasm_bls12381.js @@ -1,7 +1,9 @@ -const ModuleBuilder = require("wasmbuilder").ModuleBuilder; -const buildBls12381 = require("../src/bls12381/build_bls12381.js"); -const fs = require("fs"); -const path = require("path"); +import { ModuleBuilder } from "wasmbuilder"; +import buildBls12381 from "../src/bls12381/build_bls12381.js"; +import { writeFileSync } from "fs"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; +const __dirname = dirname(fileURLToPath(import.meta.url)); function buildWasm() { const moduleBuilder = new ModuleBuilder(); @@ -10,30 +12,29 @@ function buildWasm() { const code = moduleBuilder.build(); - fs.writeFileSync( - path.join( __dirname, "..", "build", "bls12381_wasm.js"), - ` - exports.code = "${Buffer.from(code).toString("base64")}"; - exports.pq = ${moduleBuilder.modules.f1m.pq}; - exports.pr = ${moduleBuilder.modules.frm.pq}; - exports.pG1gen = ${moduleBuilder.modules.bls12381.pG1gen}; - exports.pG1zero = ${moduleBuilder.modules.bls12381.pG1zero}; - exports.pG1b = ${moduleBuilder.modules.bls12381.pG1b}; - exports.pG2gen = ${moduleBuilder.modules.bls12381.pG2gen}; - exports.pG2zero = ${moduleBuilder.modules.bls12381.pG2zero}; - exports.pG2b = ${moduleBuilder.modules.bls12381.pG2b}; - exports.pOneT = ${moduleBuilder.modules.bls12381.pOneT}; - exports.prePSize = ${moduleBuilder.modules.bls12381.prePSize}; - exports.preQSize = ${moduleBuilder.modules.bls12381.preQSize}; - exports.n8q = 48; - exports.n8r = 32; - exports.q = "${moduleBuilder.modules.bls12381.q}"; - exports.r = "${moduleBuilder.modules.bls12381.r}"; - ` + writeFileSync( + join( __dirname, "..", "build", "bls12381_wasm.js"), + `export const code = "${Buffer.from(code).toString("base64")}"; +export const pq = ${moduleBuilder.modules.f1m.pq}; +export const pr = ${moduleBuilder.modules.frm.pq}; +export const pG1gen = ${moduleBuilder.modules.bls12381.pG1gen}; +export const pG1zero = ${moduleBuilder.modules.bls12381.pG1zero}; +export const pG1b = ${moduleBuilder.modules.bls12381.pG1b}; +export const pG2gen = ${moduleBuilder.modules.bls12381.pG2gen}; +export const pG2zero = ${moduleBuilder.modules.bls12381.pG2zero}; +export const pG2b = ${moduleBuilder.modules.bls12381.pG2b}; +export const pOneT = ${moduleBuilder.modules.bls12381.pOneT}; +export const prePSize = ${moduleBuilder.modules.bls12381.prePSize}; +export const preQSize = ${moduleBuilder.modules.bls12381.preQSize}; +export const n8q = 48; +export const n8r = 32; +export const q = "${moduleBuilder.modules.bls12381.q}"; +export const r = "${moduleBuilder.modules.bls12381.r}"; +` ); - fs.writeFileSync( - path.join( __dirname, "..", "build", "bls12381.wasm"), + writeFileSync( + join( __dirname, "..", "build", "bls12381.wasm"), Buffer.from(code) ); } diff --git a/tools/buildwasm_bn128.js b/tools/buildwasm_bn128.js index b78c543..2889b94 100644 --- a/tools/buildwasm_bn128.js +++ b/tools/buildwasm_bn128.js @@ -1,7 +1,9 @@ -const ModuleBuilder = require("wasmbuilder").ModuleBuilder; -const buildBn128 = require("../src/bn128/build_bn128.js"); -const fs = require("fs"); -const path = require("path"); +import { ModuleBuilder } from "wasmbuilder"; +import buildBn128 from "../src/bn128/build_bn128.js"; +import { writeFileSync } from "fs"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; +const __dirname = dirname(fileURLToPath(import.meta.url)); async function buildWasm() { const moduleBuilder = new ModuleBuilder(); @@ -10,30 +12,60 @@ async function buildWasm() { const code = moduleBuilder.build(); - fs.writeFileSync( - path.join( __dirname, "..", "build", "bn128_wasm.js"), - ` - exports.code = "${Buffer.from(code).toString("base64")}"; - exports.pq = ${moduleBuilder.modules.f1m.pq}; - exports.pr = ${moduleBuilder.modules.frm.pq}; - exports.pG1gen = ${moduleBuilder.modules.bn128.pG1gen}; - exports.pG1zero = ${moduleBuilder.modules.bn128.pG1zero}; - exports.pG1b = ${moduleBuilder.modules.bn128.pG1b}; - exports.pG2gen = ${moduleBuilder.modules.bn128.pG2gen}; - exports.pG2zero = ${moduleBuilder.modules.bn128.pG2zero}; - exports.pG2b = ${moduleBuilder.modules.bn128.pG2b}; - exports.pOneT = ${moduleBuilder.modules.bn128.pOneT}; - exports.prePSize = ${moduleBuilder.modules.bn128.prePSize}; - exports.preQSize = ${moduleBuilder.modules.bn128.preQSize}; - exports.n8q = 32; - exports.n8r = 32; - exports.q = "${moduleBuilder.modules.bn128.q}"; - exports.r = "${moduleBuilder.modules.bn128.r}"; - ` + writeFileSync( + join( __dirname, "..", "build", "bn128_wasm.js"), + `export const code = "${Buffer.from(code).toString("base64")}"; +export const pq = ${moduleBuilder.modules.f1m.pq}; +export const pr = ${moduleBuilder.modules.frm.pq}; +export const pG1gen = ${moduleBuilder.modules.bn128.pG1gen}; +export const pG1zero = ${moduleBuilder.modules.bn128.pG1zero}; +export const pG1b = ${moduleBuilder.modules.bn128.pG1b}; +export const pG2gen = ${moduleBuilder.modules.bn128.pG2gen}; +export const pG2zero = ${moduleBuilder.modules.bn128.pG2zero}; +export const pG2b = ${moduleBuilder.modules.bn128.pG2b}; +export const pOneT = ${moduleBuilder.modules.bn128.pOneT}; +export const prePSize = ${moduleBuilder.modules.bn128.prePSize}; +export const preQSize = ${moduleBuilder.modules.bn128.preQSize}; +export const n8q = 32; +export const n8r = 32; +export const q = "${moduleBuilder.modules.bn128.q}"; +export const r = "${moduleBuilder.modules.bn128.r}"; +` ); - fs.writeFileSync( - path.join( __dirname, "..", "build", "bn128.wasm"), + const codeBlob = new Blob([code]); + + console.log(await codeBlob.stream()); + + const codeStream = codeBlob.stream(); + const compressedReadableStream = codeStream.pipeThrough( + new CompressionStream("gzip"), + ); + const compressedCode = await new Response(compressedReadableStream).bytes(); + + writeFileSync( + join( __dirname, "..", "build", "bn128_wasm_gzip.js"), + `export const gzipCode = "${Buffer.from(compressedCode).toString("base64")}"; +export const pq = ${moduleBuilder.modules.f1m.pq}; +export const pr = ${moduleBuilder.modules.frm.pq}; +export const pG1gen = ${moduleBuilder.modules.bn128.pG1gen}; +export const pG1zero = ${moduleBuilder.modules.bn128.pG1zero}; +export const pG1b = ${moduleBuilder.modules.bn128.pG1b}; +export const pG2gen = ${moduleBuilder.modules.bn128.pG2gen}; +export const pG2zero = ${moduleBuilder.modules.bn128.pG2zero}; +export const pG2b = ${moduleBuilder.modules.bn128.pG2b}; +export const pOneT = ${moduleBuilder.modules.bn128.pOneT}; +export const prePSize = ${moduleBuilder.modules.bn128.prePSize}; +export const preQSize = ${moduleBuilder.modules.bn128.preQSize}; +export const n8q = 32; +export const n8r = 32; +export const q = "${moduleBuilder.modules.bn128.q}"; +export const r = "${moduleBuilder.modules.bn128.r}"; +` + ); + + writeFileSync( + join( __dirname, "..", "build", "bn128.wasm"), Buffer.from(code) ); } diff --git a/tools/buildwasm_mnt6753.js b/tools/buildwasm_mnt6753.js index b38d1be..f788182 100644 --- a/tools/buildwasm_mnt6753.js +++ b/tools/buildwasm_mnt6753.js @@ -1,9 +1,12 @@ -const ModuleBuilder = require("wasmbuilder").ModuleBuilder; -const buildMNT6753 = require("../src/mnt6753/build_mnt6753.js"); -const buildPedersenHash = require("../src/build_pedersenhash.js"); -const baseTables = require("../build/pedersenparams_mnt6753.js"); -const fs = require("fs"); -const path = require("path"); +import { ModuleBuilder } from "wasmbuilder"; +import buildMNT6753 from "../src/mnt6753/build_mnt6753.js"; +import buildPedersenHash from "../src/build_pedersenhash.js"; +import { code as pedersenParamsCode } from "../build/pedersenparams_mnt6753.js"; +import { writeFileSync } from "fs"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; +const __dirname = dirname(fileURLToPath(import.meta.url)); + function buildWasm() { @@ -11,24 +14,25 @@ function buildWasm() { moduleBuilder.setMemory(1000); buildMNT6753(moduleBuilder); + const baseTables = Uint8Array.from(atob(pedersenParamsCode), c => c.charCodeAt(0)); + buildPedersenHash(moduleBuilder, "g1m", "g1m", "f1m", 188, baseTables); const code = moduleBuilder.build(); - fs.writeFileSync( - path.join( __dirname, "..", "build", "mnt6753_wasm.js"), - ` - exports.code = "${Buffer.from(code).toString("base64")}"; - exports.pq = ${moduleBuilder.modules.mnt6753.pq}; - exports.pr = ${moduleBuilder.modules.mnt6753.pq}; - exports.pG1gen = ${moduleBuilder.modules.mnt6753.pG1gen}; - exports.pG1zero = ${moduleBuilder.modules.mnt6753.pG1zero}; - exports.pG2gen = ${moduleBuilder.modules.mnt6753.pG2gen}; - exports.pG2zero = ${moduleBuilder.modules.mnt6753.pG2zero}; - exports.pOneT = ${moduleBuilder.modules.mnt6753.pOneT}; - exports.prePSize = ${moduleBuilder.modules.mnt6753.prePSize}; - exports.preQSize = ${moduleBuilder.modules.mnt6753.preQSize}; - ` + writeFileSync( + join(__dirname, "..", "build", "mnt6753_wasm.js"), + `export const code = "${Buffer.from(code).toString("base64")}"; +export const pq = ${moduleBuilder.modules.mnt6753.pq}; +export const pr = ${moduleBuilder.modules.mnt6753.pq}; +export const pG1gen = ${moduleBuilder.modules.mnt6753.pG1gen}; +export const pG1zero = ${moduleBuilder.modules.mnt6753.pG1zero}; +export const pG2gen = ${moduleBuilder.modules.mnt6753.pG2gen}; +export const pG2zero = ${moduleBuilder.modules.mnt6753.pG2zero}; +export const pOneT = ${moduleBuilder.modules.mnt6753.pOneT}; +export const prePSize = ${moduleBuilder.modules.mnt6753.prePSize}; +export const preQSize = ${moduleBuilder.modules.mnt6753.preQSize}; +` ); } diff --git a/tools/buildwasm_msm_batch.js b/tools/buildwasm_msm_batch.js index 0098bcb..f175363 100644 --- a/tools/buildwasm_msm_batch.js +++ b/tools/buildwasm_msm_batch.js @@ -2,8 +2,10 @@ // to build/msm_batch.wasm. The module is curve-independent: it imports the // base-field/group ops and shares the main module's linear memory, so the // same binary serves bn128 and bls12381 (G1 and G2). -const { execFileSync } = require("child_process"); -const path = require("path"); +import { execFileSync } from "child_process"; +import path from "path"; +import { fileURLToPath } from "url"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const asc = path.join(__dirname, "..", "node_modules", ".bin", "asc"); const src = path.join(__dirname, "..", "src", "as", "msm_batch.ts"); diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..5bb8964 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,43 @@ +import { defineConfig } from "vite"; +import { builtinModules } from "module"; +import { readFileSync } from "fs"; + +const pkg = JSON.parse(readFileSync("./package.json", "utf8")); +const external = [ + ...builtinModules, + ...Object.keys(pkg.dependencies || {}), +]; + +export default defineConfig({ + build: { + lib: { + entry: "./index.js", + formats: ["cjs"], + fileName: () => "main.cjs", + }, + outDir: "build", + emptyOutDir: false, + minify: false, + rollupOptions: { + external, + }, + }, + test: { + projects: [ + { + test: { + globals: true, + testTimeout: 10000000, + include: ["test/**/*.js"], + // mnt6753 is a legacy curve unused by the iden3 stack; its + // pedersen-table / base64 build tooling needs a separate ESM + // pass. wasmcurves is a codegen library validated in Node, so + // there is no separate browser project (it would be redundant). + exclude: ["**/node_modules/**", "test/helpers/**", "test/mnt6753.js"], + name: "unit", + environment: "node", + }, + }, + ], + }, +});