diff --git a/.gitignore b/.gitignore index 5260e7f..9b1ee42 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,175 @@ -node_modules -.env* +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config .DS_Store -*.pem \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 44a557e..0000000 --- a/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "tabWidth": 4, - "useTabs": true, - "trailingComma": "all" -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index b92839d..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "workbench.colorCustomizations": { - "activityBar.activeBackground": "#65c89b", - "activityBar.background": "#65c89b", - "activityBar.foreground": "#15202b", - "activityBar.inactiveForeground": "#15202b99", - "activityBarBadge.background": "#945bc4", - "activityBarBadge.foreground": "#e7e7e7", - "commandCenter.border": "#15202b99", - "sash.hoverBorder": "#65c89b", - "statusBar.background": "#42b883", - "statusBar.foreground": "#15202b", - "statusBarItem.hoverBackground": "#359268", - "statusBarItem.remoteBackground": "#42b883", - "statusBarItem.remoteForeground": "#15202b", - "titleBar.activeBackground": "#42b883", - "titleBar.activeForeground": "#15202b", - "titleBar.inactiveBackground": "#42b88399", - "titleBar.inactiveForeground": "#15202b99" - }, - "peacock.color": "#42b883" -} \ No newline at end of file diff --git a/Procfile b/Procfile deleted file mode 100644 index e8f79ea..0000000 --- a/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: npm start \ No newline at end of file diff --git a/README.md b/README.md index 27f67e6..1106080 100644 --- a/README.md +++ b/README.md @@ -1,77 +1,213 @@ -# Relay Server - -_⚠️ NOTE: This repo is a work in progress._ - -_This repo was initially made via the instructions from Simple WebAuthn (https://simplewebauthn.dev/docs/advanced/example-project) and provides a fully-functional reference implementation of **@simplewebauthn/server** and **@simplewebauthn/browser**._ - -Relay Server is a server that is centrally run by the Lit Protocol team to facilitate and subsidize some interactions with the Lit Protocol smart contracts. - -The Relay Server hosted by the Lit Protocol team currently only interacts with the smart contracts on Lit's [Chronicle Vesuvius](https://developer.litprotocol.com/connecting-to-a-lit-network/lit-blockchains/chronicle-vesuvius) chain. - -**If you are to use the contract addresses that are hardcoded into this repo, minting a PKP will work but not storing an encryption condition, as our private key is the only authorized signer to store a condition on behalf of an address.** - -## Running The Server - -### Prerequisites - -- Install Redis and have a valid connection to it -- Have access to a valid RPC service endpoint for the network you plan to interact with -- Have access to a ECDSA private key, with its corresponding wallet containing some funds on the network you plan to interact with - -### Instructions - -Create a `.env` file at the root of the repo and populate the corresponding environment variables: - -- `REDIS_URL` -- `PORT` -- `LIT_TXSENDER_RPC_URL` -- `LIT_TXSENDER_PRIVATE_KEY` -- `LIT_DELEGATION_ROOT_MNEMONIC` -- `LIT_DELEGATION_USES` -- `GAS_LIMIT_INCREASE_PERCENTAGE` - -Make sure to start your Redis server if you plan to host one locally. - -Run `yarn install` to install the dependencies. - -Run `yarn start` to start the server. - -
- -## Available Endpoints - -Staging instance of the relay server is live at https://relay-server-staging.herokuapp.com. Check out the [demo app](https://github.com/LIT-Protocol/oauth-pkp-signup-example) for an example of how to use the relay server. - -### Minting PKPs - -| HTTP Verb | Path | Description | -| --------- | -------------------------------------------- | -------------------------------------------------------------- | -| POST | /auth/google | Mint PKP for authorized Google account | -| POST | /auth/discord | Mint PKP for authorized Discord account | -| POST | /auth/wallet | Mint PKP for verified Eth wallet account | -| GET | /auth/webauthn/generate-registration-options | Register (i.e., create an account) via supported authenticator | -| POST | /auth/webauthn/verify-registration | Verify the authenticator's response | -| GET | /auth/status/:requestId | Poll status of minting PKP transaction | - -
- -### Fetching PKPs - -| HTTP Verb | Path | Description | -| --------- | ----------------------- | ------------------------------------------------------ | -| POST | /auth/google/userinfo | Fetch PKPs associated with authorized Google account | -| POST | /auth/discord/userinfo | Fetch PKPs associated with authorized Discord account | -| POST | /auth/wallet/userinfo | Fetch PKPs associated with verified Eth wallet account | -| POST | /auth/webauthn/userinfo | Fetch PKPs associated with WebAuthn credential | - -
- -\*Note: WebAuthn implementation is still a work in progress. - -
- -### Storing Conditions (only available on Serrano and Cayenne) - -| HTTP Verb | Path | Description | -| --------- | ---------------- | ------------------------------------ | -| POST | /store-condition | Write encryption conditions to chain | +# Lit Protocol Auth Service + +A relay server for managing Programmable Key Pairs (PKPs) in the Lit Protocol ecosystem. This server handles PKP minting, authentication, and management operations. + +## Architecture + +```mermaid +graph TD + subgraph Client + client[Client Application] + end + + subgraph Relay Server + server[Express Server] + + subgraph Middleware + rate[Rate Limiter] + apikey[API Key Gate] + end + + subgraph Routes + auth[Auth Router] + webauthn[WebAuthn Router] + pkp[PKP Router] + end + + subgraph Services + lit[Lit Protocol Service] + contracts[Contract Service] + end + + subgraph Infrastructure + redis[(Redis Cache)] + env[Environment Config] + end + end + + subgraph External + blockchain[Blockchain] + litprotocol[Lit Protocol] + end + + %% Client connections + client -->|HTTP Requests| server + + %% Server middleware + server --> rate + server --> apikey + + %% Route handling + server -->|/auth routes| auth + server -->|/auth/webauthn routes| webauthn + server -->|/pkp routes| pkp + + %% Service dependencies + auth --> lit + webauthn --> lit + pkp --> lit + lit --> contracts + + %% Infrastructure connections + lit --> redis + contracts --> env + + %% External connections + contracts -->|RPC Calls| blockchain + lit -->|Protocol Interactions| litprotocol + + %% Styling + classDef service fill:#f9f,stroke:#333,stroke-width:2px + classDef infrastructure fill:#bbf,stroke:#333,stroke-width:2px + classDef external fill:#bfb,stroke:#333,stroke-width:2px + + class lit,contracts service + class redis,env infrastructure + class blockchain,litprotocol external +``` + +## Features + +- PKP (Programmable Key Pair) minting and management +- WebAuthn authentication integration +- Rate limiting and API key validation +- Redis-based caching +- Blockchain contract interactions + +## API Documentation + +### Authentication Routes (`/auth`) + +#### GET `/auth/status/:requestId` +Get the status of a PKP minting request. +- **Parameters**: `requestId` (string) +- **Response**: + ```typescript + { + status: "InProgress" | "Succeeded" | "Failed" + error?: string + } + ``` + +### WebAuthn Routes (`/auth/webauthn`) + +#### POST `/auth/webauthn/generate-registration-options` +Generate options for WebAuthn registration. +- **Response**: Registration options for WebAuthn authentication + +#### POST `/auth/webauthn/verify-registration` +Verify WebAuthn registration and mint a PKP. +- **Body**: + ```typescript + { + credential: RegistrationCredential + } + ``` +- **Response**: + ```typescript + { + requestId?: string + error?: string + } + ``` + +### PKP Routes (`/`) + +#### POST `/fetch-pkps-by-auth-method` +Fetch PKPs associated with an authentication method. +- **Body**: + ```typescript + { + authMethodType: AuthMethodType + authMethodId: string + } + ``` +- **Response**: + ```typescript + { + pkps?: Array<{ + tokenId: string + publicKey: string + ethAddress: string + }> + error?: string + } + ``` + +## Authentication Methods + +The server supports various authentication methods: +- EthWallet (1) +- LitAction (2) +- WebAuthn (3) +- Discord (4) +- Google (5) +- GoogleJwt (6) +- OTP (7) +- StytchOtp (9) + +## Setup & Development + +1. Install dependencies: + ```bash + bun install + ``` + +2. Set up environment variables: + - Copy `.env.example` to `.env` + - Fill in required environment variables + +3. Start development server: + ```bash + bun run dev + ``` + +4. Build for production: + ```bash + bun run build + ``` + +5. Start production server: + ```bash + bun run start + ``` + +## Environment Variables + +Required environment variables: +- `REDIS_URL`: Redis connection URL +- `API_KEY`: API key for authentication +- Network configuration (based on environment) +- Contract addresses +- Rate limiting configuration + +## Security + +The server implements several security measures: +- Rate limiting to prevent abuse +- API key validation for all requests +- WebAuthn security for authentication +- Redis-based request tracking + +## Dependencies + +Major dependencies: +- Express.js for API server +- Redis for caching and rate limiting +- @lit-protocol packages for Lit Protocol integration +- @simplewebauthn for WebAuthn support +- ethers.js for blockchain interactions + +## License + +[Add your license information here] diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..f9fe47d --- /dev/null +++ b/bun.lock @@ -0,0 +1,631 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "relay-server", + "dependencies": { + "@elysiajs/bearer": "^1.2.0", + "@elysiajs/cors": "^1.2.0", + "@elysiajs/swagger": "^1.2.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@lit-protocol/constants": "^7.0.6", + "@lit-protocol/contracts": "0.0.87", + "@noble/ed25519": "^2.2.3", + "@simplewebauthn/server": "6.2.1", + "@simplewebauthn/typescript-types": "^8.3.4", + "@t3-oss/env-core": "^0.7.1", + "base64url": "^3.0.1", + "cors": "^2.8.5", + "elysia": "^1.2.12", + "elysia-rate-limit": "^4.1.0", + "ethers5": "npm:ethers@^5.7.2", + "express": "^4.18.2", + "express-rate-limit": "^7.1.5", + "json-with-bigint": "^2.4.2", + "jwk-to-pem": "^2.0.7", + "pino": "^9.6.0", + "pino-pretty": "^13.0.0", + "rate-limit-redis": "^4.2.0", + "redis": "^4.6.13", + "viem": "^2.23.2", + "zod": "^3.24.2", + }, + "devDependencies": { + "@types/cbor": "^6.0.4", + "@types/cors": "^2.8.17", + "@types/elliptic": "^6.4.18", + "@types/express": "^4.17.21", + "@types/jwk-to-pem": "^2.0.3", + "@types/node": "^20.11.19", + "bun-types": "latest", + "typescript": "^5.3.3", + }, + }, + }, + "packages": { + "@adraffy/ens-normalize": ["@adraffy/ens-normalize@1.11.0", "", {}, "sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg=="], + + "@elysiajs/bearer": ["@elysiajs/bearer@1.2.0", "", { "peerDependencies": { "elysia": ">= 1.2.0" } }, "sha512-orr0XHhc99JgtxQlKhnTPRqRlYrE9MDW+v1IMcs9Uy+bEMbohAkK1zmbi05tO7P2UT9t4Xl6pHF/R0WD71ZpCQ=="], + + "@elysiajs/cors": ["@elysiajs/cors@1.2.0", "", { "peerDependencies": { "elysia": ">= 1.2.0" } }, "sha512-qsJwDAg6WfdQRMfj6uSMcDPSpXvm/zQFeAX1uuJXhIgazH8itSfcDxcH9pMuXVRX1yQNi2pPwNQLJmAcw5mzvw=="], + + "@elysiajs/swagger": ["@elysiajs/swagger@1.2.0", "", { "dependencies": { "@scalar/themes": "^0.9.52", "@scalar/types": "^0.0.12", "openapi-types": "^12.1.3", "pathe": "^1.1.2" }, "peerDependencies": { "elysia": ">= 1.2.0" } }, "sha512-OPx93DP6rM2VHjA3D44Xiz5MYm9AYlO2NGWPsnSsdyvaOCiL9wJj529583h7arX4iIEYE5LiLB0/A45unqbopw=="], + + "@ethersproject/abi": ["@ethersproject/abi@5.7.0", "", { "dependencies": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/hash": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/strings": "^5.7.0" } }, "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA=="], + + "@ethersproject/abstract-provider": ["@ethersproject/abstract-provider@5.7.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/networks": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/transactions": "^5.7.0", "@ethersproject/web": "^5.7.0" } }, "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw=="], + + "@ethersproject/abstract-signer": ["@ethersproject/abstract-signer@5.7.0", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0" } }, "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ=="], + + "@ethersproject/address": ["@ethersproject/address@5.7.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/rlp": "^5.7.0" } }, "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA=="], + + "@ethersproject/base64": ["@ethersproject/base64@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0" } }, "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ=="], + + "@ethersproject/basex": ["@ethersproject/basex@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/properties": "^5.7.0" } }, "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw=="], + + "@ethersproject/bignumber": ["@ethersproject/bignumber@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "bn.js": "^5.2.1" } }, "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw=="], + + "@ethersproject/bytes": ["@ethersproject/bytes@5.7.0", "", { "dependencies": { "@ethersproject/logger": "^5.7.0" } }, "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A=="], + + "@ethersproject/constants": ["@ethersproject/constants@5.7.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.7.0" } }, "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA=="], + + "@ethersproject/contracts": ["@ethersproject/contracts@5.7.0", "", { "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/transactions": "^5.7.0" } }, "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg=="], + + "@ethersproject/hash": ["@ethersproject/hash@5.7.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/base64": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/strings": "^5.7.0" } }, "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g=="], + + "@ethersproject/hdnode": ["@ethersproject/hdnode@5.7.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/basex": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/pbkdf2": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/sha2": "^5.7.0", "@ethersproject/signing-key": "^5.7.0", "@ethersproject/strings": "^5.7.0", "@ethersproject/transactions": "^5.7.0", "@ethersproject/wordlists": "^5.7.0" } }, "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg=="], + + "@ethersproject/json-wallets": ["@ethersproject/json-wallets@5.7.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/hdnode": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/pbkdf2": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/random": "^5.7.0", "@ethersproject/strings": "^5.7.0", "@ethersproject/transactions": "^5.7.0", "aes-js": "3.0.0", "scrypt-js": "3.0.1" } }, "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g=="], + + "@ethersproject/keccak256": ["@ethersproject/keccak256@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "js-sha3": "0.8.0" } }, "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg=="], + + "@ethersproject/logger": ["@ethersproject/logger@5.7.0", "", {}, "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig=="], + + "@ethersproject/networks": ["@ethersproject/networks@5.7.1", "", { "dependencies": { "@ethersproject/logger": "^5.7.0" } }, "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ=="], + + "@ethersproject/pbkdf2": ["@ethersproject/pbkdf2@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/sha2": "^5.7.0" } }, "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw=="], + + "@ethersproject/properties": ["@ethersproject/properties@5.7.0", "", { "dependencies": { "@ethersproject/logger": "^5.7.0" } }, "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw=="], + + "@ethersproject/providers": ["@ethersproject/providers@5.7.2", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/base64": "^5.7.0", "@ethersproject/basex": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/hash": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/networks": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/random": "^5.7.0", "@ethersproject/rlp": "^5.7.0", "@ethersproject/sha2": "^5.7.0", "@ethersproject/strings": "^5.7.0", "@ethersproject/transactions": "^5.7.0", "@ethersproject/web": "^5.7.0", "bech32": "1.1.4", "ws": "7.4.6" } }, "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg=="], + + "@ethersproject/random": ["@ethersproject/random@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ=="], + + "@ethersproject/rlp": ["@ethersproject/rlp@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w=="], + + "@ethersproject/sha2": ["@ethersproject/sha2@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "hash.js": "1.1.7" } }, "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw=="], + + "@ethersproject/signing-key": ["@ethersproject/signing-key@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "bn.js": "^5.2.1", "elliptic": "6.5.4", "hash.js": "1.1.7" } }, "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q=="], + + "@ethersproject/solidity": ["@ethersproject/solidity@5.7.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/sha2": "^5.7.0", "@ethersproject/strings": "^5.7.0" } }, "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA=="], + + "@ethersproject/strings": ["@ethersproject/strings@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg=="], + + "@ethersproject/transactions": ["@ethersproject/transactions@5.7.0", "", { "dependencies": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/rlp": "^5.7.0", "@ethersproject/signing-key": "^5.7.0" } }, "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ=="], + + "@ethersproject/units": ["@ethersproject/units@5.7.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg=="], + + "@ethersproject/wallet": ["@ethersproject/wallet@5.7.0", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/hash": "^5.7.0", "@ethersproject/hdnode": "^5.7.0", "@ethersproject/json-wallets": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/random": "^5.7.0", "@ethersproject/signing-key": "^5.7.0", "@ethersproject/transactions": "^5.7.0", "@ethersproject/wordlists": "^5.7.0" } }, "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA=="], + + "@ethersproject/web": ["@ethersproject/web@5.7.1", "", { "dependencies": { "@ethersproject/base64": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/strings": "^5.7.0" } }, "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w=="], + + "@ethersproject/wordlists": ["@ethersproject/wordlists@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/hash": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/strings": "^5.7.0" } }, "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA=="], + + "@lit-protocol/accs-schemas": ["@lit-protocol/accs-schemas@0.0.22", "", { "dependencies": { "ajv": "^8.12.0" } }, "sha512-c3LPDE8g8COt8FdXx+Nfv4CvEvP+QcHh94HZcukcttjZyu6jjICecq/XMXWVUSMGhAVWRMH8tBbjpHzElB45QQ=="], + + "@lit-protocol/constants": ["@lit-protocol/constants@7.0.6", "", { "dependencies": { "@ethersproject/abstract-provider": "5.7.0", "@lit-protocol/accs-schemas": "^0.0.22", "@lit-protocol/contracts": "^0.0.74", "@lit-protocol/types": "7.0.6", "@openagenda/verror": "^3.1.4", "depd": "^2.0.0", "ethers": "^5.7.1", "siwe": "^2.3.2", "tslib": "1.14.1" } }, "sha512-ZU0V3Ixw/xzHtPnRCK6lf8PdU9P6PyfhQQ8AEeQ7Eygh5dOBA0IFC7hArTa/If/+BssWPdsj5vwIdwKOgIbTMQ=="], + + "@lit-protocol/contracts": ["@lit-protocol/contracts@0.0.87", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-M4SU4pO4skiCt22Xi8AY8nri9RI2mESv1wMFLJ77HJG2HzkVxFp3GM9oVgs/6WhFhc9cBFu0022pU8xKg0sA+g=="], + + "@lit-protocol/types": ["@lit-protocol/types@7.0.6", "", { "dependencies": { "@ethersproject/abstract-provider": "5.7.0", "@lit-protocol/accs-schemas": "^0.0.22", "depd": "^2.0.0", "ethers": "^5.7.1", "siwe": "^2.3.2", "tslib": "1.14.1" } }, "sha512-PT0m2hQuPhaXoDURsJkeUF8Nq8s4JGeamGmxLMLSLCoctXrFWBiCjw5GDOYLoFe3cEHPQSj19rm9mzyjxkqQ8g=="], + + "@noble/curves": ["@noble/curves@1.8.1", "", { "dependencies": { "@noble/hashes": "1.7.1" } }, "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ=="], + + "@noble/ed25519": ["@noble/ed25519@2.2.3", "", {}, "sha512-iHV8eI2mRcUmOx159QNrU8vTpQ/Xm70yJ2cTk3Trc86++02usfqFoNl6x0p3JN81ZDS/1gx6xiK0OwrgqCT43g=="], + + "@noble/hashes": ["@noble/hashes@1.7.1", "", {}, "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ=="], + + "@openagenda/verror": ["@openagenda/verror@3.1.4", "", { "dependencies": { "assertion-error": "^1.1.0", "depd": "^2.0.0", "inherits": "^2.0.4", "sprintf-js": "^1.1.2" } }, "sha512-+V7QuD6v5sMWez7cu+5DXoXMim+iQssOcspoNgbWDW8sEyC54Mdo5VuIkcIjqhPmQYOzBWo5qlbzNGEpD6PzMA=="], + + "@peculiar/asn1-android": ["@peculiar/asn1-android@2.3.15", "", { "dependencies": { "@peculiar/asn1-schema": "^2.3.15", "asn1js": "^3.0.5", "tslib": "^2.8.1" } }, "sha512-8U2TIj59cRlSXTX2d0mzUKP7whfWGFMzTeC3qPgAbccXFrPNZLaDhpNEdG5U2QZ/tBv/IHlCJ8s+KYXpJeop6w=="], + + "@peculiar/asn1-schema": ["@peculiar/asn1-schema@2.3.15", "", { "dependencies": { "asn1js": "^3.0.5", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "sha512-QPeD8UA8axQREpgR5UTAfu2mqQmm97oUqahDtNdBcfj3qAnoXzFdQW+aNf/tD2WVXF8Fhmftxoj0eMIT++gX2w=="], + + "@peculiar/asn1-x509": ["@peculiar/asn1-x509@2.3.15", "", { "dependencies": { "@peculiar/asn1-schema": "^2.3.15", "asn1js": "^3.0.5", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "sha512-0dK5xqTqSLaxv1FHXIcd4Q/BZNuopg+u1l23hT9rOmQ1g4dNtw0g/RnEi+TboB0gOwGtrWn269v27cMgchFIIg=="], + + "@redis/bloom": ["@redis/bloom@1.2.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg=="], + + "@redis/client": ["@redis/client@1.6.0", "", { "dependencies": { "cluster-key-slot": "1.1.2", "generic-pool": "3.9.0", "yallist": "4.0.0" } }, "sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg=="], + + "@redis/graph": ["@redis/graph@1.1.1", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw=="], + + "@redis/json": ["@redis/json@1.0.7", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ=="], + + "@redis/search": ["@redis/search@1.2.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw=="], + + "@redis/time-series": ["@redis/time-series@1.1.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g=="], + + "@scalar/openapi-types": ["@scalar/openapi-types@0.1.1", "", {}, "sha512-NMy3QNk6ytcCoPUGJH0t4NNr36OWXgZhA3ormr3TvhX1NDgoF95wFyodGVH8xiHeUyn2/FxtETm8UBLbB5xEmg=="], + + "@scalar/themes": ["@scalar/themes@0.9.66", "", { "dependencies": { "@scalar/types": "0.0.32" } }, "sha512-Fm2dUlIQoWCG83yZ2QNdIG7j+3eHgmSQHSnGOfd59+XIC/JxmCVbiOCYyhzfCXl1Zb8YcPlu6Ka2wY++GlrEeQ=="], + + "@scalar/types": ["@scalar/types@0.0.12", "", { "dependencies": { "@scalar/openapi-types": "0.1.1", "@unhead/schema": "^1.9.5" } }, "sha512-XYZ36lSEx87i4gDqopQlGCOkdIITHHEvgkuJFrXFATQs9zHARop0PN0g4RZYWj+ZpCUclOcaOjbCt8JGe22mnQ=="], + + "@scure/base": ["@scure/base@1.2.4", "", {}, "sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ=="], + + "@scure/bip32": ["@scure/bip32@1.6.2", "", { "dependencies": { "@noble/curves": "~1.8.1", "@noble/hashes": "~1.7.1", "@scure/base": "~1.2.2" } }, "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw=="], + + "@scure/bip39": ["@scure/bip39@1.5.4", "", { "dependencies": { "@noble/hashes": "~1.7.1", "@scure/base": "~1.2.4" } }, "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA=="], + + "@simplewebauthn/server": ["@simplewebauthn/server@6.2.1", "", { "dependencies": { "@noble/ed25519": "^1.6.1", "@peculiar/asn1-android": "^2.1.7", "@peculiar/asn1-schema": "^2.1.7", "@peculiar/asn1-x509": "^2.1.7", "@simplewebauthn/typescript-types": "^6.2.1", "base64url": "^3.0.1", "cbor": "^5.1.0", "debug": "^4.3.2", "jsrsasign": "^10.4.0", "jwk-to-pem": "^2.0.4", "node-fetch": "^2.6.0" } }, "sha512-0JPHrxhYkYislk60kCoExqyLW0yulxmD+1LAhOo9Oo3BlFFPnGIRgm5QNnDnXsDXX4WDqK8fU+RgPunCnUqcJw=="], + + "@simplewebauthn/typescript-types": ["@simplewebauthn/typescript-types@8.3.4", "", {}, "sha512-38xtca0OqfRVNloKBrFB5LEM6PN5vzFbJG6rAutPVrtGHFYxPdiV3btYWq0eAZAZmP+dqFPYJxJWeJrGfmYHng=="], + + "@sinclair/typebox": ["@sinclair/typebox@0.34.21", "", {}, "sha512-G+7YVIZalo+N+h7KapWBxRH2at9yO4yIHq49PkQLTQQkPTM0ZYaPOfPDpeNv/ukWjm8a1GdnO3yDC7bietT23A=="], + + "@spruceid/siwe-parser": ["@spruceid/siwe-parser@2.1.2", "", { "dependencies": { "@noble/hashes": "^1.1.2", "apg-js": "^4.3.0", "uri-js": "^4.4.1", "valid-url": "^1.0.9" } }, "sha512-d/r3S1LwJyMaRAKQ0awmo9whfXeE88Qt00vRj91q5uv5ATtWIQEGJ67Yr5eSZw5zp1/fZCXZYuEckt8lSkereQ=="], + + "@stablelib/binary": ["@stablelib/binary@1.0.1", "", { "dependencies": { "@stablelib/int": "^1.0.1" } }, "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q=="], + + "@stablelib/int": ["@stablelib/int@1.0.1", "", {}, "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w=="], + + "@stablelib/random": ["@stablelib/random@1.0.2", "", { "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/wipe": "^1.0.1" } }, "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w=="], + + "@stablelib/wipe": ["@stablelib/wipe@1.0.1", "", {}, "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg=="], + + "@t3-oss/env-core": ["@t3-oss/env-core@0.7.3", "", { "peerDependencies": { "typescript": ">=4.7.2", "zod": "^3.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hhtj59TKC6TKVdwJ0CcbKsvkr9R8Pc/SNKd4IgGUIC9T9X6moB8EZZ3FTJdABA/h9UABCK4J+KsF8gzmvMvHPg=="], + + "@types/bn.js": ["@types/bn.js@5.1.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w=="], + + "@types/body-parser": ["@types/body-parser@1.19.5", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg=="], + + "@types/cbor": ["@types/cbor@6.0.4", "", { "dependencies": { "cbor": "*" } }, "sha512-Mgo9dwJw9o4K3buIAVChFwud9WQTz4vLgWv7z8RVQnY6vIocZaDTr6Yxa8ldKCyQO5w1rBb5ovzBpfGMOgWZEQ=="], + + "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], + + "@types/cors": ["@types/cors@2.8.17", "", { "dependencies": { "@types/node": "*" } }, "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA=="], + + "@types/elliptic": ["@types/elliptic@6.4.18", "", { "dependencies": { "@types/bn.js": "*" } }, "sha512-UseG6H5vjRiNpQvrhy4VF/JXdA3V/Fp5amvveaL+fs28BZ6xIKJBPnUPRlEaZpysD9MbpfaLi8lbl7PGUAkpWw=="], + + "@types/express": ["@types/express@4.17.21", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ=="], + + "@types/express-serve-static-core": ["@types/express-serve-static-core@4.19.6", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A=="], + + "@types/http-errors": ["@types/http-errors@2.0.4", "", {}, "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA=="], + + "@types/jwk-to-pem": ["@types/jwk-to-pem@2.0.3", "", {}, "sha512-I/WFyFgk5GrNbkpmt14auGO3yFK1Wt4jXzkLuI+fDBNtO5ZI2rbymyGd6bKzfSBEuyRdM64ZUwxU1+eDcPSOEQ=="], + + "@types/mime": ["@types/mime@1.3.5", "", {}, "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="], + + "@types/node": ["@types/node@20.17.18", "", { "dependencies": { "undici-types": "~6.19.2" } }, "sha512-9kS0opXVV3dJ+C7HPhXfDlOdMu4cjJSZhlSxlDK39IxVRxBbuiYjCkLYSO9d5UYqTd4DApxRK9T1xJiTAkfA0w=="], + + "@types/qs": ["@types/qs@6.9.18", "", {}, "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA=="], + + "@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="], + + "@types/send": ["@types/send@0.17.4", "", { "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA=="], + + "@types/serve-static": ["@types/serve-static@1.15.7", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "*" } }, "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw=="], + + "@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="], + + "@unhead/schema": ["@unhead/schema@1.11.18", "", { "dependencies": { "hookable": "^5.5.3", "zhead": "^2.2.4" } }, "sha512-a3TA/OJCRdfbFhcA3Hq24k1ZU1o9szicESrw8DZcGyQFacHnh84mVgnyqSkMnwgCmfN4kvjSiTBlLEHS6+wATw=="], + + "abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + + "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], + + "aes-js": ["aes-js@3.0.0", "", {}, "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw=="], + + "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], + + "apg-js": ["apg-js@4.4.0", "", {}, "sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q=="], + + "array-flatten": ["array-flatten@1.1.1", "", {}, "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="], + + "asn1.js": ["asn1.js@5.4.1", "", { "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" } }, "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA=="], + + "asn1js": ["asn1js@3.0.5", "", { "dependencies": { "pvtsutils": "^1.3.2", "pvutils": "^1.1.3", "tslib": "^2.4.0" } }, "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ=="], + + "assertion-error": ["assertion-error@1.1.0", "", {}, "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="], + + "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], + + "base64url": ["base64url@3.0.1", "", {}, "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A=="], + + "bech32": ["bech32@1.1.4", "", {}, "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="], + + "bignumber.js": ["bignumber.js@9.1.2", "", {}, "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug=="], + + "bn.js": ["bn.js@5.2.1", "", {}, "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ=="], + + "body-parser": ["body-parser@1.20.3", "", { "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" } }, "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g=="], + + "brorand": ["brorand@1.1.0", "", {}, "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="], + + "bun-types": ["bun-types@1.2.2", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-RCbMH5elr9gjgDGDhkTTugA21XtJAy/9jkKe/G3WR2q17VPGhcquf9Sir6uay9iW+7P/BV0CAHA1XlHXMAVKHg=="], + + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.3", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "get-intrinsic": "^1.2.6" } }, "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA=="], + + "cbor": ["cbor@5.2.0", "", { "dependencies": { "bignumber.js": "^9.0.1", "nofilter": "^1.0.4" } }, "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A=="], + + "cluster-key-slot": ["cluster-key-slot@1.1.2", "", {}, "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="], + + "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], + + "content-disposition": ["content-disposition@0.5.4", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ=="], + + "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + + "cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], + + "cookie-signature": ["cookie-signature@1.0.6", "", {}, "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="], + + "cors": ["cors@2.8.5", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="], + + "dateformat": ["dateformat@4.6.3", "", {}, "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA=="], + + "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + + "destroy": ["destroy@1.2.0", "", {}, "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + + "elliptic": ["elliptic@6.6.1", "", { "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g=="], + + "elysia": ["elysia@1.2.12", "", { "dependencies": { "@sinclair/typebox": "^0.34.15", "cookie": "^1.0.2", "memoirist": "^0.3.0", "openapi-types": "^12.1.3" }, "peerDependencies": { "typescript": ">= 5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-X1bZo09qe8/Poa/5tz08Y+sE/77B/wLwnA5xDDENU3FCrsUtYJuBVcy6BPXGRCgnJ1fPQpc0Ov2ZU5MYJXluTg=="], + + "elysia-rate-limit": ["elysia-rate-limit@4.1.0", "", { "dependencies": { "debug": "4.3.4", "lru-cache": "10.2.2" }, "peerDependencies": { "elysia": ">= 1.0.0" } }, "sha512-r1/wsJaX0utSrtn3EjWXhNdSDutMwy6HTTfepU+KmXDA1rj1nlYxXnO3/nWtI33mHhrKSD0YAtCZ5cy8B+vAgg=="], + + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + + "end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + + "ethers": ["ethers@5.7.2", "", { "dependencies": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", "@ethersproject/abstract-signer": "5.7.0", "@ethersproject/address": "5.7.0", "@ethersproject/base64": "5.7.0", "@ethersproject/basex": "5.7.0", "@ethersproject/bignumber": "5.7.0", "@ethersproject/bytes": "5.7.0", "@ethersproject/constants": "5.7.0", "@ethersproject/contracts": "5.7.0", "@ethersproject/hash": "5.7.0", "@ethersproject/hdnode": "5.7.0", "@ethersproject/json-wallets": "5.7.0", "@ethersproject/keccak256": "5.7.0", "@ethersproject/logger": "5.7.0", "@ethersproject/networks": "5.7.1", "@ethersproject/pbkdf2": "5.7.0", "@ethersproject/properties": "5.7.0", "@ethersproject/providers": "5.7.2", "@ethersproject/random": "5.7.0", "@ethersproject/rlp": "5.7.0", "@ethersproject/sha2": "5.7.0", "@ethersproject/signing-key": "5.7.0", "@ethersproject/solidity": "5.7.0", "@ethersproject/strings": "5.7.0", "@ethersproject/transactions": "5.7.0", "@ethersproject/units": "5.7.0", "@ethersproject/wallet": "5.7.0", "@ethersproject/web": "5.7.1", "@ethersproject/wordlists": "5.7.0" } }, "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg=="], + + "ethers5": ["ethers@5.7.2", "", { "dependencies": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", "@ethersproject/abstract-signer": "5.7.0", "@ethersproject/address": "5.7.0", "@ethersproject/base64": "5.7.0", "@ethersproject/basex": "5.7.0", "@ethersproject/bignumber": "5.7.0", "@ethersproject/bytes": "5.7.0", "@ethersproject/constants": "5.7.0", "@ethersproject/contracts": "5.7.0", "@ethersproject/hash": "5.7.0", "@ethersproject/hdnode": "5.7.0", "@ethersproject/json-wallets": "5.7.0", "@ethersproject/keccak256": "5.7.0", "@ethersproject/logger": "5.7.0", "@ethersproject/networks": "5.7.1", "@ethersproject/pbkdf2": "5.7.0", "@ethersproject/properties": "5.7.0", "@ethersproject/providers": "5.7.2", "@ethersproject/random": "5.7.0", "@ethersproject/rlp": "5.7.0", "@ethersproject/sha2": "5.7.0", "@ethersproject/signing-key": "5.7.0", "@ethersproject/solidity": "5.7.0", "@ethersproject/strings": "5.7.0", "@ethersproject/transactions": "5.7.0", "@ethersproject/units": "5.7.0", "@ethersproject/wallet": "5.7.0", "@ethersproject/web": "5.7.1", "@ethersproject/wordlists": "5.7.0" } }, "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg=="], + + "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], + + "express": ["express@4.21.2", "", { "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.19.0", "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" } }, "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA=="], + + "express-rate-limit": ["express-rate-limit@7.5.0", "", { "peerDependencies": { "express": "^4.11 || 5 || ^5.0.0-beta.1" } }, "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg=="], + + "fast-copy": ["fast-copy@3.0.2", "", {}, "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-redact": ["fast-redact@3.5.0", "", {}, "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="], + + "fast-safe-stringify": ["fast-safe-stringify@2.1.1", "", {}, "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="], + + "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], + + "finalhandler": ["finalhandler@1.3.1", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", "statuses": "2.0.1", "unpipe": "~1.0.0" } }, "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ=="], + + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], + + "fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "generic-pool": ["generic-pool@3.9.0", "", {}, "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g=="], + + "get-intrinsic": ["get-intrinsic@1.2.7", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", "get-proto": "^1.0.0", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "hash.js": ["hash.js@1.1.7", "", { "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "help-me": ["help-me@5.0.0", "", {}, "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg=="], + + "hmac-drbg": ["hmac-drbg@1.0.1", "", { "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg=="], + + "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], + + "http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], + + "iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], + + "isows": ["isows@1.0.6", "", { "peerDependencies": { "ws": "*" } }, "sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw=="], + + "joycon": ["joycon@3.1.1", "", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="], + + "js-sha3": ["js-sha3@0.8.0", "", {}, "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="], + + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "json-with-bigint": ["json-with-bigint@2.4.2", "", {}, "sha512-699n7JnZ5yhREx3MQTlxZAFL60QC+NVRD8n2aeftKh3OzmOEwExejktccRjXjfVChKxV3PP85TplG/vIbFUKew=="], + + "jsrsasign": ["jsrsasign@10.9.0", "", {}, "sha512-QWLUikj1SBJGuyGK8tjKSx3K7Y69KYJnrs/pQ1KZ6wvZIkHkWjZ1PJDpuvc1/28c1uP0KW9qn1eI1LzHQqDOwQ=="], + + "jwk-to-pem": ["jwk-to-pem@2.0.7", "", { "dependencies": { "asn1.js": "^5.3.0", "elliptic": "^6.6.1", "safe-buffer": "^5.0.1" } }, "sha512-cSVphrmWr6reVchuKQZdfSs4U9c5Y4hwZggPoz6cbVnTpAVgGRpEuQng86IyqLeGZlhTh+c4MAreB6KbdQDKHQ=="], + + "lru-cache": ["lru-cache@10.2.2", "", {}, "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], + + "memoirist": ["memoirist@0.3.0", "", {}, "sha512-wR+4chMgVPq+T6OOsk40u9Wlpw1Pjx66NMNiYxCQQ4EUJ7jDs3D9kTCeKdBOkvAiqXlHLVJlvYL01PvIJ1MPNg=="], + + "merge-descriptors": ["merge-descriptors@1.0.3", "", {}, "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="], + + "methods": ["methods@1.1.2", "", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="], + + "mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], + + "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "minimalistic-assert": ["minimalistic-assert@1.0.1", "", {}, "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="], + + "minimalistic-crypto-utils": ["minimalistic-crypto-utils@1.0.1", "", {}, "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], + + "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + + "nofilter": ["nofilter@1.0.4", "", {}, "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="], + + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], + + "ox": ["ox@0.6.7", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA=="], + + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + + "path-to-regexp": ["path-to-regexp@0.1.12", "", {}, "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="], + + "pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + + "pino": ["pino@9.6.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^4.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg=="], + + "pino-abstract-transport": ["pino-abstract-transport@2.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw=="], + + "pino-pretty": ["pino-pretty@13.0.0", "", { "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", "fast-copy": "^3.0.2", "fast-safe-stringify": "^2.1.1", "help-me": "^5.0.0", "joycon": "^3.1.1", "minimist": "^1.2.6", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pump": "^3.0.0", "secure-json-parse": "^2.4.0", "sonic-boom": "^4.0.1", "strip-json-comments": "^3.1.1" }, "bin": { "pino-pretty": "bin.js" } }, "sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA=="], + + "pino-std-serializers": ["pino-std-serializers@7.0.0", "", {}, "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA=="], + + "process-warning": ["process-warning@4.0.1", "", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="], + + "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], + + "pump": ["pump@3.0.2", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "pvtsutils": ["pvtsutils@1.3.6", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg=="], + + "pvutils": ["pvutils@1.1.3", "", {}, "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ=="], + + "qs": ["qs@6.13.0", "", { "dependencies": { "side-channel": "^1.0.6" } }, "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg=="], + + "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], + + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], + + "rate-limit-redis": ["rate-limit-redis@4.2.0", "", { "peerDependencies": { "express-rate-limit": ">= 6" } }, "sha512-wV450NQyKC24NmPosJb2131RoczLdfIJdKCReNwtVpm5998U8SgKrAZrIHaN/NfQgqOHaan8Uq++B4sa5REwjA=="], + + "raw-body": ["raw-body@2.5.2", "", { "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA=="], + + "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], + + "redis": ["redis@4.7.0", "", { "dependencies": { "@redis/bloom": "1.2.0", "@redis/client": "1.6.0", "@redis/graph": "1.1.1", "@redis/json": "1.0.7", "@redis/search": "1.2.0", "@redis/time-series": "1.1.0" } }, "sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ=="], + + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "scrypt-js": ["scrypt-js@3.0.1", "", {}, "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA=="], + + "secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], + + "send": ["send@0.19.0", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" } }, "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw=="], + + "serve-static": ["serve-static@1.16.2", "", { "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.19.0" } }, "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw=="], + + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + + "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + + "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "siwe": ["siwe@2.3.2", "", { "dependencies": { "@spruceid/siwe-parser": "^2.1.2", "@stablelib/random": "^1.0.1", "uri-js": "^4.4.1", "valid-url": "^1.0.9" }, "peerDependencies": { "ethers": "^5.6.8 || ^6.0.8" } }, "sha512-aSf+6+Latyttbj5nMu6GF3doMfv2UYj83hhwZgUF20ky6fTS83uVhkQABdIVnEuS8y1bBdk7p6ltb9SmlhTTlA=="], + + "sonic-boom": ["sonic-boom@4.2.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww=="], + + "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + + "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], + + "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], + + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "thread-stream": ["thread-stream@3.1.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A=="], + + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + + "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + + "tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + + "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], + + "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], + + "undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="], + + "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], + + "valid-url": ["valid-url@1.0.9", "", {}, "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA=="], + + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + + "viem": ["viem@2.23.2", "", { "dependencies": { "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.7", "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA=="], + + "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "ws": ["ws@7.4.6", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="], + + "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "zhead": ["zhead@2.2.4", "", {}, "sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag=="], + + "zod": ["zod@3.24.2", "", {}, "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="], + + "@ethersproject/signing-key/elliptic": ["elliptic@6.5.4", "", { "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ=="], + + "@lit-protocol/constants/@lit-protocol/contracts": ["@lit-protocol/contracts@0.0.74", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-8uV038gzBp7ew7a4884SVt9Zhu8CtiTb+A8dKNnByxVoT1kFt4O4DmsaniV8p9AGjNR13IWfpU1NFChmPHVIpQ=="], + + "@peculiar/asn1-android/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@peculiar/asn1-schema/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@peculiar/asn1-x509/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@scalar/themes/@scalar/types": ["@scalar/types@0.0.32", "", { "dependencies": { "@scalar/openapi-types": "0.1.7", "@unhead/schema": "^1.11.11" } }, "sha512-WHMkFQw4cu1mrG4pEiTUXVBBs205kHECdLM/5F7ATI0A7Axv6G1GgofkwbyCAayUjNk82uaCXzSOgPojbq4iGQ=="], + + "@simplewebauthn/server/@noble/ed25519": ["@noble/ed25519@1.7.3", "", {}, "sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ=="], + + "@simplewebauthn/server/@simplewebauthn/typescript-types": ["@simplewebauthn/typescript-types@6.2.1", "", {}, "sha512-qScvkt0nP0Uy/xeeunlXAkJni9wtecsvxwLELSgiWRx/KRVZy1SGDHsKAfQowpIeDmLDyhWxUoN7qUgvgWCiAQ=="], + + "@types/bn.js/@types/node": ["@types/node@22.13.2", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Z+r8y3XL9ZpI2EY52YYygAFmo2/oWfNSj4BCpAXE2McAexDk8VcnBMGC9Djn9gTKt4d2T/hhXqmPzo4hfIXtTg=="], + + "@types/body-parser/@types/node": ["@types/node@22.13.2", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Z+r8y3XL9ZpI2EY52YYygAFmo2/oWfNSj4BCpAXE2McAexDk8VcnBMGC9Djn9gTKt4d2T/hhXqmPzo4hfIXtTg=="], + + "@types/connect/@types/node": ["@types/node@22.13.2", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Z+r8y3XL9ZpI2EY52YYygAFmo2/oWfNSj4BCpAXE2McAexDk8VcnBMGC9Djn9gTKt4d2T/hhXqmPzo4hfIXtTg=="], + + "@types/cors/@types/node": ["@types/node@22.13.2", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Z+r8y3XL9ZpI2EY52YYygAFmo2/oWfNSj4BCpAXE2McAexDk8VcnBMGC9Djn9gTKt4d2T/hhXqmPzo4hfIXtTg=="], + + "@types/express-serve-static-core/@types/node": ["@types/node@22.13.2", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Z+r8y3XL9ZpI2EY52YYygAFmo2/oWfNSj4BCpAXE2McAexDk8VcnBMGC9Djn9gTKt4d2T/hhXqmPzo4hfIXtTg=="], + + "@types/send/@types/node": ["@types/node@22.13.2", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Z+r8y3XL9ZpI2EY52YYygAFmo2/oWfNSj4BCpAXE2McAexDk8VcnBMGC9Djn9gTKt4d2T/hhXqmPzo4hfIXtTg=="], + + "@types/serve-static/@types/node": ["@types/node@22.13.2", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Z+r8y3XL9ZpI2EY52YYygAFmo2/oWfNSj4BCpAXE2McAexDk8VcnBMGC9Djn9gTKt4d2T/hhXqmPzo4hfIXtTg=="], + + "@types/ws/@types/node": ["@types/node@22.13.2", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Z+r8y3XL9ZpI2EY52YYygAFmo2/oWfNSj4BCpAXE2McAexDk8VcnBMGC9Djn9gTKt4d2T/hhXqmPzo4hfIXtTg=="], + + "asn1.js/bn.js": ["bn.js@4.12.1", "", {}, "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg=="], + + "asn1js/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "bun-types/@types/node": ["@types/node@22.13.2", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Z+r8y3XL9ZpI2EY52YYygAFmo2/oWfNSj4BCpAXE2McAexDk8VcnBMGC9Djn9gTKt4d2T/hhXqmPzo4hfIXtTg=="], + + "elliptic/bn.js": ["bn.js@4.12.1", "", {}, "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg=="], + + "elysia-rate-limit/debug": ["debug@4.3.4", "", { "dependencies": { "ms": "2.1.2" } }, "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="], + + "express/cookie": ["cookie@0.7.1", "", {}, "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="], + + "express/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "finalhandler/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "pvtsutils/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], + + "viem/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], + + "@ethersproject/signing-key/elliptic/bn.js": ["bn.js@4.12.1", "", {}, "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg=="], + + "@scalar/themes/@scalar/types/@scalar/openapi-types": ["@scalar/openapi-types@0.1.7", "", {}, "sha512-oOTG3JQifg55U3DhKB7WdNIxFnJzbPJe7rqdyWdio977l8IkxQTVmObftJhdNIMvhV2K+1f/bDoMQGu6yTaD0A=="], + + "@types/bn.js/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@types/body-parser/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@types/connect/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@types/cors/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@types/express-serve-static-core/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@types/send/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@types/serve-static/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@types/ws/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "bun-types/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "elysia-rate-limit/debug/ms": ["ms@2.1.2", "", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], + + "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + } +} diff --git a/config/index.ts b/config/index.ts deleted file mode 100644 index 78dc71f..0000000 --- a/config/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -require("dotenv").config(); - -import { Config } from "../models"; - -const { - REDIS_URL, - PORT, - ENABLE_HTTPS, - SERRANO_ACCESS_CONTROL_CONDITIONS_ADDRESS, - SERRANO_PKP_NFT_ADDRESS, - SERRANO_PKP_HELPER_ADDRESS, - SERRANO_PKP_PERMISSIONS_ADDRESS, - CAYENNE_ACCESS_CONTROL_CONDITIONS_ADDRESS, - CAYENNE_PKP_NFT_ADDRESS, - CAYENNE_PKP_HELPER_ADDRESS, - CAYENNE_PKP_PERMISSIONS_ADDRESS, - NETWORK, - USE_SOLO_NET, - EXPECTED_ORIGINS, -} = process.env; - -const baseConfig = { - redisUrl: REDIS_URL || "dummy-url", - port: parseInt(PORT !== "" ? PORT! : "3001"), - enableHttps: ENABLE_HTTPS === "true", - serranoContracts: { - accessControlConditionsAddress: - SERRANO_ACCESS_CONTROL_CONDITIONS_ADDRESS || - "0x8b353Bb9E26F2c2B8155f377982537C39AD01A1B", - pkpNftAddress: - SERRANO_PKP_NFT_ADDRESS || - "0x8F75a53F65e31DD0D2e40d0827becAaE2299D111", - pkpHelperAddress: - SERRANO_PKP_HELPER_ADDRESS || - "0x8bB62077437D918891F12c7F35d9e1B78468bF11", - pkpPermissionsAddress: - SERRANO_PKP_PERMISSIONS_ADDRESS || - "0x4Aed2F242E806c58758677059340e29E6B5b7619", - }, - cayenneContracts: { - accessControlConditionsAddress: - CAYENNE_ACCESS_CONTROL_CONDITIONS_ADDRESS || - "0x8b353Bb9E26F2c2B8155f377982537C39AD01A1B", - pkpNftAddress: - CAYENNE_PKP_NFT_ADDRESS || - "0x35789dea0044D311671D5827F6EB0f45081D8811", - pkpHelperAddress: - CAYENNE_PKP_HELPER_ADDRESS || - "0xDe905Fde36562270AA6FEeBAbC5aB1f440f733c2", - pkpPermissionsAddress: - CAYENNE_PKP_PERMISSIONS_ADDRESS || - "0x9a0a6DD9D229eEfa5119cEB237c90D843d5e1003", - }, - network: NETWORK || "cayenne", - useSoloNet: USE_SOLO_NET === "true", - expectedOrigins: EXPECTED_ORIGINS?.split(",") || ["http://localhost:3000"], -}; - -export default { - ...baseConfig, -} as Config; diff --git a/contracts/cayenne/AccessControlConditions.json b/contracts/cayenne/AccessControlConditions.json deleted file mode 100644 index ea0960f..0000000 --- a/contracts/cayenne/AccessControlConditions.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "AccessControlConditions", - "sourceName": "contracts/lit-node/AccessControlConditions.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "key", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "permanent", - "type": "bool" - }, - { - "indexed": false, - "internalType": "address", - "name": "creator", - "type": "address" - } - ], - "name": "ConditionStored", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "key", - "type": "uint256" - } - ], - "name": "getCondition", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "securityHash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "permanent", - "type": "bool" - }, - { - "internalType": "address", - "name": "creator", - "type": "address" - } - ], - "internalType": "struct AccessControlConditions.StoredCondition", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newSigner", - "type": "address" - } - ], - "name": "setSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "signer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "key", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "securityHash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "permanent", - "type": "bool" - } - ], - "name": "storeCondition", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "key", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "securityHash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "permanent", - "type": "bool" - }, - { - "internalType": "address", - "name": "creatorAddress", - "type": "address" - } - ], - "name": "storeConditionWithSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "storedConditions", - "outputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "securityHash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "permanent", - "type": "bool" - }, - { - "internalType": "address", - "name": "creator", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5061002d61002261007a60201b60201c565b61008260201b60201c565b6001808190555033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610146565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61125b806101556000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80637bf212f8116100665780637bf212f8146100f85780638da5cb5b146101285780639fd040da14610146578063f2fde38b1461017a578063ff27f2df1461019657610093565b8063238ac933146100985780636c19e783146100b6578063715018a6146100d25780637265434f146100dc575b600080fd5b6100a06101b2565b6040516100ad9190610a74565b60405180910390f35b6100d060048036038101906100cb9190610ac0565b6101d8565b005b6100da610224565b005b6100f660048036038101906100f19190610b5b565b610238565b005b610112600480360381019061010d9190610be8565b6102ee565b60405161011f9190610caa565b60405180910390f35b6101306103aa565b60405161013d9190610a74565b60405180910390f35b610160600480360381019061015b9190610be8565b6103d3565b604051610171959493929190610ce3565b60405180910390f35b610194600480360381019061018f9190610ac0565b610436565b005b6101b060048036038101906101ab9190610d36565b6104b9565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6101e06104de565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61022c6104de565b610236600061055c565b565b610240610620565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c790610e34565b60405180910390fd5b6102de86868686868661066f565b6102e66109db565b505050505050565b6102f66109ec565b600260008381526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff161515151581526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60026020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b61043e6104de565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036104ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a490610ec6565b60405180910390fd5b6104b68161055c565b50565b6104c1610620565b6104cf85858585853361066f565b6104d76109db565b5050505050565b6104e66109e4565b73ffffffffffffffffffffffffffffffffffffffff166105046103aa565b73ffffffffffffffffffffffffffffffffffffffff161461055a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055190610f32565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600260015403610665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065c90610f9e565b60405180910390fd5b6002600181905550565b600086036106b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a99061100a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166002600088815260200190815260200160002060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108bb578073ffffffffffffffffffffffffffffffffffffffff166002600088815260200190815260200160002060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b79061109c565b60405180910390fd5b600015156002600088815260200190815260200160002060030160009054906101000a900460ff1615151461082a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082190611154565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b1906111c0565b60405180910390fd5b5b6040518060a0016040528086815260200185815260200184815260200183151581526020018273ffffffffffffffffffffffffffffffffffffffff168152506002600088815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555060808201518160030160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050857ffb2c1b4938e3cf2dc95120a73dce224dfc1108057906403d419bc7a1748f2cd0868585856040516109cb94939291906111e0565b60405180910390a2505050505050565b60018081905550565b600033905090565b6040518060a00160405280600081526020016000815260200160008152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a5e82610a33565b9050919050565b610a6e81610a53565b82525050565b6000602082019050610a896000830184610a65565b92915050565b600080fd5b610a9d81610a53565b8114610aa857600080fd5b50565b600081359050610aba81610a94565b92915050565b600060208284031215610ad657610ad5610a8f565b5b6000610ae484828501610aab565b91505092915050565b6000819050919050565b610b0081610aed565b8114610b0b57600080fd5b50565b600081359050610b1d81610af7565b92915050565b60008115159050919050565b610b3881610b23565b8114610b4357600080fd5b50565b600081359050610b5581610b2f565b92915050565b60008060008060008060c08789031215610b7857610b77610a8f565b5b6000610b8689828a01610b0e565b9650506020610b9789828a01610b0e565b9550506040610ba889828a01610b0e565b9450506060610bb989828a01610b0e565b9350506080610bca89828a01610b46565b92505060a0610bdb89828a01610aab565b9150509295509295509295565b600060208284031215610bfe57610bfd610a8f565b5b6000610c0c84828501610b0e565b91505092915050565b610c1e81610aed565b82525050565b610c2d81610b23565b82525050565b610c3c81610a53565b82525050565b60a082016000820151610c586000850182610c15565b506020820151610c6b6020850182610c15565b506040820151610c7e6040850182610c15565b506060820151610c916060850182610c24565b506080820151610ca46080850182610c33565b50505050565b600060a082019050610cbf6000830184610c42565b92915050565b610cce81610aed565b82525050565b610cdd81610b23565b82525050565b600060a082019050610cf86000830188610cc5565b610d056020830187610cc5565b610d126040830186610cc5565b610d1f6060830185610cd4565b610d2c6080830184610a65565b9695505050505050565b600080600080600060a08688031215610d5257610d51610a8f565b5b6000610d6088828901610b0e565b9550506020610d7188828901610b0e565b9450506040610d8288828901610b0e565b9350506060610d9388828901610b0e565b9250506080610da488828901610b46565b9150509295509295909350565b600082825260208201905092915050565b7f4f6e6c79207369676e65722063616e2063616c6c2073746f7265436f6e64697460008201527f696f6e73576974685369676e65722e0000000000000000000000000000000000602082015250565b6000610e1e602f83610db1565b9150610e2982610dc2565b604082019050919050565b60006020820190508181036000830152610e4d81610e11565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610eb0602683610db1565b9150610ebb82610e54565b604082019050919050565b60006020820190508181036000830152610edf81610ea3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610f1c602083610db1565b9150610f2782610ee6565b602082019050919050565b60006020820190508181036000830152610f4b81610f0f565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000610f88601f83610db1565b9150610f9382610f52565b602082019050919050565b60006020820190508181036000830152610fb781610f7b565b9050919050565b7f4b6579206d757374206e6f74206265207a65726f000000000000000000000000600082015250565b6000610ff4601483610db1565b9150610fff82610fbe565b602082019050919050565b6000602082019050818103600083015261102381610fe7565b9050919050565b7f4f6e6c792074686520636f6e646974696f6e2063726561746f722063616e207560008201527f7064617465206974000000000000000000000000000000000000000000000000602082015250565b6000611086602883610db1565b91506110918261102a565b604082019050919050565b600060208201905081810360008301526110b581611079565b9050919050565b7f5468697320636f6e646974696f6e207761732073746f7265642077697468207460008201527f6865205065726d616e656e7420666c616720616e642063616e6e6f742062652060208201527f7570646174656400000000000000000000000000000000000000000000000000604082015250565b600061113e604783610db1565b9150611149826110bc565b606082019050919050565b6000602082019050818103600083015261116d81611131565b9050919050565b7f5369676e65722063616e6e6f742075706461746520636f6e646974696f6e7300600082015250565b60006111aa601f83610db1565b91506111b582611174565b602082019050919050565b600060208201905081810360008301526111d98161119d565b9050919050565b60006080820190506111f56000830187610cc5565b6112026020830186610cc5565b61120f6040830185610cd4565b61121c6060830184610a65565b9594505050505056fea2646970667358221220cd8d4f98f6e1657f649862b18be214de83bf9a090cbc55324b77096054e9c2bb64736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80637bf212f8116100665780637bf212f8146100f85780638da5cb5b146101285780639fd040da14610146578063f2fde38b1461017a578063ff27f2df1461019657610093565b8063238ac933146100985780636c19e783146100b6578063715018a6146100d25780637265434f146100dc575b600080fd5b6100a06101b2565b6040516100ad9190610a74565b60405180910390f35b6100d060048036038101906100cb9190610ac0565b6101d8565b005b6100da610224565b005b6100f660048036038101906100f19190610b5b565b610238565b005b610112600480360381019061010d9190610be8565b6102ee565b60405161011f9190610caa565b60405180910390f35b6101306103aa565b60405161013d9190610a74565b60405180910390f35b610160600480360381019061015b9190610be8565b6103d3565b604051610171959493929190610ce3565b60405180910390f35b610194600480360381019061018f9190610ac0565b610436565b005b6101b060048036038101906101ab9190610d36565b6104b9565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6101e06104de565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61022c6104de565b610236600061055c565b565b610240610620565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c790610e34565b60405180910390fd5b6102de86868686868661066f565b6102e66109db565b505050505050565b6102f66109ec565b600260008381526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff161515151581526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60026020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b61043e6104de565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036104ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a490610ec6565b60405180910390fd5b6104b68161055c565b50565b6104c1610620565b6104cf85858585853361066f565b6104d76109db565b5050505050565b6104e66109e4565b73ffffffffffffffffffffffffffffffffffffffff166105046103aa565b73ffffffffffffffffffffffffffffffffffffffff161461055a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055190610f32565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600260015403610665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065c90610f9e565b60405180910390fd5b6002600181905550565b600086036106b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a99061100a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166002600088815260200190815260200160002060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108bb578073ffffffffffffffffffffffffffffffffffffffff166002600088815260200190815260200160002060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b79061109c565b60405180910390fd5b600015156002600088815260200190815260200160002060030160009054906101000a900460ff1615151461082a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082190611154565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b1906111c0565b60405180910390fd5b5b6040518060a0016040528086815260200185815260200184815260200183151581526020018273ffffffffffffffffffffffffffffffffffffffff168152506002600088815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555060808201518160030160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050857ffb2c1b4938e3cf2dc95120a73dce224dfc1108057906403d419bc7a1748f2cd0868585856040516109cb94939291906111e0565b60405180910390a2505050505050565b60018081905550565b600033905090565b6040518060a00160405280600081526020016000815260200160008152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a5e82610a33565b9050919050565b610a6e81610a53565b82525050565b6000602082019050610a896000830184610a65565b92915050565b600080fd5b610a9d81610a53565b8114610aa857600080fd5b50565b600081359050610aba81610a94565b92915050565b600060208284031215610ad657610ad5610a8f565b5b6000610ae484828501610aab565b91505092915050565b6000819050919050565b610b0081610aed565b8114610b0b57600080fd5b50565b600081359050610b1d81610af7565b92915050565b60008115159050919050565b610b3881610b23565b8114610b4357600080fd5b50565b600081359050610b5581610b2f565b92915050565b60008060008060008060c08789031215610b7857610b77610a8f565b5b6000610b8689828a01610b0e565b9650506020610b9789828a01610b0e565b9550506040610ba889828a01610b0e565b9450506060610bb989828a01610b0e565b9350506080610bca89828a01610b46565b92505060a0610bdb89828a01610aab565b9150509295509295509295565b600060208284031215610bfe57610bfd610a8f565b5b6000610c0c84828501610b0e565b91505092915050565b610c1e81610aed565b82525050565b610c2d81610b23565b82525050565b610c3c81610a53565b82525050565b60a082016000820151610c586000850182610c15565b506020820151610c6b6020850182610c15565b506040820151610c7e6040850182610c15565b506060820151610c916060850182610c24565b506080820151610ca46080850182610c33565b50505050565b600060a082019050610cbf6000830184610c42565b92915050565b610cce81610aed565b82525050565b610cdd81610b23565b82525050565b600060a082019050610cf86000830188610cc5565b610d056020830187610cc5565b610d126040830186610cc5565b610d1f6060830185610cd4565b610d2c6080830184610a65565b9695505050505050565b600080600080600060a08688031215610d5257610d51610a8f565b5b6000610d6088828901610b0e565b9550506020610d7188828901610b0e565b9450506040610d8288828901610b0e565b9350506060610d9388828901610b0e565b9250506080610da488828901610b46565b9150509295509295909350565b600082825260208201905092915050565b7f4f6e6c79207369676e65722063616e2063616c6c2073746f7265436f6e64697460008201527f696f6e73576974685369676e65722e0000000000000000000000000000000000602082015250565b6000610e1e602f83610db1565b9150610e2982610dc2565b604082019050919050565b60006020820190508181036000830152610e4d81610e11565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610eb0602683610db1565b9150610ebb82610e54565b604082019050919050565b60006020820190508181036000830152610edf81610ea3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610f1c602083610db1565b9150610f2782610ee6565b602082019050919050565b60006020820190508181036000830152610f4b81610f0f565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000610f88601f83610db1565b9150610f9382610f52565b602082019050919050565b60006020820190508181036000830152610fb781610f7b565b9050919050565b7f4b6579206d757374206e6f74206265207a65726f000000000000000000000000600082015250565b6000610ff4601483610db1565b9150610fff82610fbe565b602082019050919050565b6000602082019050818103600083015261102381610fe7565b9050919050565b7f4f6e6c792074686520636f6e646974696f6e2063726561746f722063616e207560008201527f7064617465206974000000000000000000000000000000000000000000000000602082015250565b6000611086602883610db1565b91506110918261102a565b604082019050919050565b600060208201905081810360008301526110b581611079565b9050919050565b7f5468697320636f6e646974696f6e207761732073746f7265642077697468207460008201527f6865205065726d616e656e7420666c616720616e642063616e6e6f742062652060208201527f7570646174656400000000000000000000000000000000000000000000000000604082015250565b600061113e604783610db1565b9150611149826110bc565b606082019050919050565b6000602082019050818103600083015261116d81611131565b9050919050565b7f5369676e65722063616e6e6f742075706461746520636f6e646974696f6e7300600082015250565b60006111aa601f83610db1565b91506111b582611174565b602082019050919050565b600060208201905081810360008301526111d98161119d565b9050919050565b60006080820190506111f56000830187610cc5565b6112026020830186610cc5565b61120f6040830185610cd4565b61121c6060830184610a65565b9594505050505056fea2646970667358221220cd8d4f98f6e1657f649862b18be214de83bf9a090cbc55324b77096054e9c2bb64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} - } \ No newline at end of file diff --git a/contracts/cayenne/Allowlist.json b/contracts/cayenne/Allowlist.json deleted file mode 100644 index d1d20a3..0000000 --- a/contracts/cayenne/Allowlist.json +++ /dev/null @@ -1,236 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Allowlist", - "sourceName": "contracts/lit-node/Allowlist.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "ItemAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "ItemNotAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "allowAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "allowedItems", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isAllowed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_allowAll", - "type": "bool" - } - ], - "name": "setAllowAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "setAllowed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "setNotAllowed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5061002d61002261005260201b60201c565b61005a60201b60201c565b6001808190555061004c33600361011e60201b6105811790919060201c565b506101ed565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061014c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61015460201b60201c565b905092915050565b600061016683836101ca60201b60201c565b6101bf5782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506101c4565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b610d2a806101fc6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063715018a611610071578063715018a614610150578063787552951461015a578063865815971461018a5780638767d9aa146101a65780638da5cb5b146101c2578063f2fde38b146101e0576100a9565b80631785f53c146100ae5780634d7d9c01146100ca5780634ee643a5146100e657806352f97536146101045780637048027514610134575b600080fd5b6100c860048036038101906100c39190610965565b6101fc565b005b6100e460048036038101906100df91906109ca565b61025f565b005b6100ee610284565b6040516100fb9190610a06565b60405180910390f35b61011e60048036038101906101199190610a57565b610297565b60405161012b9190610a06565b60405180910390f35b61014e60048036038101906101499190610965565b6102b7565b005b61015861031a565b005b610174600480360381019061016f9190610a57565b61032e565b6040516101819190610a06565b60405180910390f35b6101a4600480360381019061019f9190610a57565b610377565b005b6101c060048036038101906101bb9190610a57565b610426565b005b6101ca6104d5565b6040516101d79190610a93565b60405180910390f35b6101fa60048036038101906101f59190610965565b6104fe565b005b6102046105b1565b61021881600361062f90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f60405160405180910390a250565b6102676105b1565b80600560006101000a81548160ff02191690831515021790555050565b600560009054906101000a900460ff1681565b60026020528060005260406000206000915054906101000a900460ff1681565b6102bf6105b1565b6102d381600361058190919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33960405160405180910390a250565b6103226105b1565b61032c600061065f565b565b6000600560009054906101000a900460ff161561034e5760019050610372565b6002600083815260200190815260200160002060009054906101000a900460ff1690505b919050565b61038b33600361072390919063ffffffff16565b6103ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c190610b0b565b60405180910390fd5b60016002600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807fe4be98886a3c8cd9027fdb44065f6b81514c5cf5a1dab85eb7733beb531580ef60405160405180910390a250565b61043a33600361072390919063ffffffff16565b610479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047090610b0b565b60405180910390fd5b60006002600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807fa676ee7eed1b9e9e90c0ce1964919b8a084b891bafa6b778b64571f338c0cd9560405160405180910390a250565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6105066105b1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056c90610b9d565b60405180910390fd5b61057e8161065f565b50565b60006105a9836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610753565b905092915050565b6105b96107c3565b73ffffffffffffffffffffffffffffffffffffffff166105d76104d5565b73ffffffffffffffffffffffffffffffffffffffff161461062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610c09565b60405180910390fd5b565b6000610657836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6107cb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061074b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6108df565b905092915050565b600061075f83836108df565b6107b85782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506107bd565b600090505b92915050565b600033905090565b600080836001016000848152602001908152602001600020549050600081146108d35760006001826107fd9190610c62565b90506000600186600001805490506108159190610c62565b905081811461088457600086600001828154811061083657610835610c96565b5b906000526020600020015490508087600001848154811061085a57610859610c96565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061089857610897610cc5565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108d9565b60009150505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061093282610907565b9050919050565b61094281610927565b811461094d57600080fd5b50565b60008135905061095f81610939565b92915050565b60006020828403121561097b5761097a610902565b5b600061098984828501610950565b91505092915050565b60008115159050919050565b6109a781610992565b81146109b257600080fd5b50565b6000813590506109c48161099e565b92915050565b6000602082840312156109e0576109df610902565b5b60006109ee848285016109b5565b91505092915050565b610a0081610992565b82525050565b6000602082019050610a1b60008301846109f7565b92915050565b6000819050919050565b610a3481610a21565b8114610a3f57600080fd5b50565b600081359050610a5181610a2b565b92915050565b600060208284031215610a6d57610a6c610902565b5b6000610a7b84828501610a42565b91505092915050565b610a8d81610927565b82525050565b6000602082019050610aa86000830184610a84565b92915050565b600082825260208201905092915050565b7f4e6f7420616e2061646d696e0000000000000000000000000000000000000000600082015250565b6000610af5600c83610aae565b9150610b0082610abf565b602082019050919050565b60006020820190508181036000830152610b2481610ae8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610b87602683610aae565b9150610b9282610b2b565b604082019050919050565b60006020820190508181036000830152610bb681610b7a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610bf3602083610aae565b9150610bfe82610bbd565b602082019050919050565b60006020820190508181036000830152610c2281610be6565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610c6d82610c29565b9150610c7883610c29565b9250828203905081811115610c9057610c8f610c33565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212207e1a6af37beb947dc95a513aa50f619bbd1bae2ab94b93ebf9e3d8c1b5b0876464736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063715018a611610071578063715018a614610150578063787552951461015a578063865815971461018a5780638767d9aa146101a65780638da5cb5b146101c2578063f2fde38b146101e0576100a9565b80631785f53c146100ae5780634d7d9c01146100ca5780634ee643a5146100e657806352f97536146101045780637048027514610134575b600080fd5b6100c860048036038101906100c39190610965565b6101fc565b005b6100e460048036038101906100df91906109ca565b61025f565b005b6100ee610284565b6040516100fb9190610a06565b60405180910390f35b61011e60048036038101906101199190610a57565b610297565b60405161012b9190610a06565b60405180910390f35b61014e60048036038101906101499190610965565b6102b7565b005b61015861031a565b005b610174600480360381019061016f9190610a57565b61032e565b6040516101819190610a06565b60405180910390f35b6101a4600480360381019061019f9190610a57565b610377565b005b6101c060048036038101906101bb9190610a57565b610426565b005b6101ca6104d5565b6040516101d79190610a93565b60405180910390f35b6101fa60048036038101906101f59190610965565b6104fe565b005b6102046105b1565b61021881600361062f90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f60405160405180910390a250565b6102676105b1565b80600560006101000a81548160ff02191690831515021790555050565b600560009054906101000a900460ff1681565b60026020528060005260406000206000915054906101000a900460ff1681565b6102bf6105b1565b6102d381600361058190919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33960405160405180910390a250565b6103226105b1565b61032c600061065f565b565b6000600560009054906101000a900460ff161561034e5760019050610372565b6002600083815260200190815260200160002060009054906101000a900460ff1690505b919050565b61038b33600361072390919063ffffffff16565b6103ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c190610b0b565b60405180910390fd5b60016002600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807fe4be98886a3c8cd9027fdb44065f6b81514c5cf5a1dab85eb7733beb531580ef60405160405180910390a250565b61043a33600361072390919063ffffffff16565b610479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047090610b0b565b60405180910390fd5b60006002600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807fa676ee7eed1b9e9e90c0ce1964919b8a084b891bafa6b778b64571f338c0cd9560405160405180910390a250565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6105066105b1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056c90610b9d565b60405180910390fd5b61057e8161065f565b50565b60006105a9836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610753565b905092915050565b6105b96107c3565b73ffffffffffffffffffffffffffffffffffffffff166105d76104d5565b73ffffffffffffffffffffffffffffffffffffffff161461062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610c09565b60405180910390fd5b565b6000610657836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6107cb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061074b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6108df565b905092915050565b600061075f83836108df565b6107b85782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506107bd565b600090505b92915050565b600033905090565b600080836001016000848152602001908152602001600020549050600081146108d35760006001826107fd9190610c62565b90506000600186600001805490506108159190610c62565b905081811461088457600086600001828154811061083657610835610c96565b5b906000526020600020015490508087600001848154811061085a57610859610c96565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061089857610897610cc5565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108d9565b60009150505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061093282610907565b9050919050565b61094281610927565b811461094d57600080fd5b50565b60008135905061095f81610939565b92915050565b60006020828403121561097b5761097a610902565b5b600061098984828501610950565b91505092915050565b60008115159050919050565b6109a781610992565b81146109b257600080fd5b50565b6000813590506109c48161099e565b92915050565b6000602082840312156109e0576109df610902565b5b60006109ee848285016109b5565b91505092915050565b610a0081610992565b82525050565b6000602082019050610a1b60008301846109f7565b92915050565b6000819050919050565b610a3481610a21565b8114610a3f57600080fd5b50565b600081359050610a5181610a2b565b92915050565b600060208284031215610a6d57610a6c610902565b5b6000610a7b84828501610a42565b91505092915050565b610a8d81610927565b82525050565b6000602082019050610aa86000830184610a84565b92915050565b600082825260208201905092915050565b7f4e6f7420616e2061646d696e0000000000000000000000000000000000000000600082015250565b6000610af5600c83610aae565b9150610b0082610abf565b602082019050919050565b60006020820190508181036000830152610b2481610ae8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610b87602683610aae565b9150610b9282610b2b565b604082019050919050565b60006020820190508181036000830152610bb681610b7a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610bf3602083610aae565b9150610bfe82610bbd565b602082019050919050565b60006020820190508181036000830152610c2281610be6565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610c6d82610c29565b9150610c7883610c29565b9250828203905081811115610c9057610c8f610c33565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212207e1a6af37beb947dc95a513aa50f619bbd1bae2ab94b93ebf9e3d8c1b5b0876464736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/ConditionValidations.json b/contracts/cayenne/ConditionValidations.json deleted file mode 100644 index 8058766..0000000 --- a/contracts/cayenne/ConditionValidations.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ConditionValidations", - "sourceName": "contracts/lit-node/ConditionValidations.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_ownerAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "conditionHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "creator", - "type": "address" - } - ], - "name": "ValidationStored", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "conditionHashKey", - "type": "bytes32" - } - ], - "name": "getValidatedCondition", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "address", - "name": "creator", - "type": "address" - } - ], - "internalType": "struct ConditionValidations.ValidatedCondition", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "conditionHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "storeValidatedCondition", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_publicKey", - "type": "bytes" - } - ], - "name": "testPubKeyToAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "validAddresses", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "validatedConditions", - "outputs": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "address", - "name": "creator", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "conditionHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "verifySignature", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b506040516200119d3803806200119d833981810160405281019062000037919062000108565b60016000819055506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200013a565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d082620000a3565b9050919050565b620000e281620000c3565b8114620000ee57600080fd5b50565b6000815190506200010281620000d7565b92915050565b6000602082840312156200012157620001206200009e565b5b60006200013184828501620000f1565b91505092915050565b611053806200014a6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80636b8ba3b514610067578063b91e408714610097578063daca6f78146100c7578063e127b54e146100f7578063e2f9477f14610127578063f650071a14610159575b600080fd5b610081600480360381019061007c9190610876565b610175565b60405161008e919061093f565b60405180910390f35b6100b160048036038101906100ac9190610986565b610266565b6040516100be91906109ce565b60405180910390f35b6100e160048036038101906100dc9190610b2f565b610286565b6040516100ee91906109ce565b60405180910390f35b610111600480360381019061010c9190610b8b565b6102eb565b60405161011e9190610be3565b60405180910390f35b610141600480360381019061013c9190610876565b610304565b60405161015093929190610c0d565b60405180910390f35b610173600480360381019061016e9190610c70565b61034e565b005b61017d6107f5565b600060016000848152602001908152602001600020600101541461022a576001600083815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050610261565b60405180606001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090505b919050565b60026020528060005260406000206000915054906101000a900460ff1681565b60008061029384846104dc565b9050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691505092915050565b600080828051906020012060001c905080915050919050565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b610356610503565b600061036283836104dc565b9050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166103f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e790610d88565b60405180910390fd5b60405180606001604052808581526020014281526020013373ffffffffffffffffffffffffffffffffffffffff1681525060016000858152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050827f98bf26ccdb9d2aea868d927938a0471b3f1491ef4aff63aa9c833bffb284ba298542336040516104c693929190610c0d565b60405180910390a2506104d7610552565b505050565b60008060006104eb858561055c565b915091506104f8816105ad565b819250505092915050565b600260005403610548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f90610df4565b60405180910390fd5b6002600081905550565b6001600081905550565b600080604183510361059d5760008060006020860151925060408601519150606086015160001a905061059187828585610713565b945094505050506105a6565b60006002915091505b9250929050565b600060048111156105c1576105c0610e14565b5b8160048111156105d4576105d3610e14565b5b031561071057600160048111156105ee576105ed610e14565b5b81600481111561060157610600610e14565b5b03610641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063890610e8f565b60405180910390fd5b6002600481111561065557610654610e14565b5b81600481111561066857610667610e14565b5b036106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f90610efb565b60405180910390fd5b600360048111156106bc576106bb610e14565b5b8160048111156106cf576106ce610e14565b5b0361070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070690610f8d565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561074e5760006003915091506107ec565b6000600187878787604051600081526020016040526040516107739493929190610fd8565b6020604051602081039080840390855afa158015610795573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107e3576000600192509250506107ec565b80600092509250505b94509492505050565b60405180606001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61085381610840565b811461085e57600080fd5b50565b6000813590506108708161084a565b92915050565b60006020828403121561088c5761088b610836565b5b600061089a84828501610861565b91505092915050565b6000819050919050565b6108b6816108a3565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006108e7826108bc565b9050919050565b6108f7816108dc565b82525050565b60608201600082015161091360008501826108ad565b50602082015161092660208501826108ad565b50604082015161093960408501826108ee565b50505050565b600060608201905061095460008301846108fd565b92915050565b610963816108dc565b811461096e57600080fd5b50565b6000813590506109808161095a565b92915050565b60006020828403121561099c5761099b610836565b5b60006109aa84828501610971565b91505092915050565b60008115159050919050565b6109c8816109b3565b82525050565b60006020820190506109e360008301846109bf565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610a3c826109f3565b810181811067ffffffffffffffff82111715610a5b57610a5a610a04565b5b80604052505050565b6000610a6e61082c565b9050610a7a8282610a33565b919050565b600067ffffffffffffffff821115610a9a57610a99610a04565b5b610aa3826109f3565b9050602081019050919050565b82818337600083830152505050565b6000610ad2610acd84610a7f565b610a64565b905082815260208101848484011115610aee57610aed6109ee565b5b610af9848285610ab0565b509392505050565b600082601f830112610b1657610b156109e9565b5b8135610b26848260208601610abf565b91505092915050565b60008060408385031215610b4657610b45610836565b5b6000610b5485828601610861565b925050602083013567ffffffffffffffff811115610b7557610b7461083b565b5b610b8185828601610b01565b9150509250929050565b600060208284031215610ba157610ba0610836565b5b600082013567ffffffffffffffff811115610bbf57610bbe61083b565b5b610bcb84828501610b01565b91505092915050565b610bdd816108dc565b82525050565b6000602082019050610bf86000830184610bd4565b92915050565b610c07816108a3565b82525050565b6000606082019050610c226000830186610bfe565b610c2f6020830185610bfe565b610c3c6040830184610bd4565b949350505050565b610c4d816108a3565b8114610c5857600080fd5b50565b600081359050610c6a81610c44565b92915050565b600080600060608486031215610c8957610c88610836565b5b6000610c9786828701610c5b565b9350506020610ca886828701610861565b925050604084013567ffffffffffffffff811115610cc957610cc861083b565b5b610cd586828701610b01565b9150509250925092565b600082825260208201905092915050565b7f5369676e617475726520646f65736e2774206d6174636820616e79204c49542060008201527f6b657920666f722074686520676976656e2068617368656420636f6e6469746960208201527f6f6e000000000000000000000000000000000000000000000000000000000000604082015250565b6000610d72604283610cdf565b9150610d7d82610cf0565b606082019050919050565b60006020820190508181036000830152610da181610d65565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000610dde601f83610cdf565b9150610de982610da8565b602082019050919050565b60006020820190508181036000830152610e0d81610dd1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000610e79601883610cdf565b9150610e8482610e43565b602082019050919050565b60006020820190508181036000830152610ea881610e6c565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000610ee5601f83610cdf565b9150610ef082610eaf565b602082019050919050565b60006020820190508181036000830152610f1481610ed8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000610f77602283610cdf565b9150610f8282610f1b565b604082019050919050565b60006020820190508181036000830152610fa681610f6a565b9050919050565b610fb681610840565b82525050565b600060ff82169050919050565b610fd281610fbc565b82525050565b6000608082019050610fed6000830187610fad565b610ffa6020830186610fc9565b6110076040830185610fad565b6110146060830184610fad565b9594505050505056fea26469706673582212207d4d0f94894f7be6a26d0e16b4a2576d0e5b879c616268fcf87043b830e0afd164736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c80636b8ba3b514610067578063b91e408714610097578063daca6f78146100c7578063e127b54e146100f7578063e2f9477f14610127578063f650071a14610159575b600080fd5b610081600480360381019061007c9190610876565b610175565b60405161008e919061093f565b60405180910390f35b6100b160048036038101906100ac9190610986565b610266565b6040516100be91906109ce565b60405180910390f35b6100e160048036038101906100dc9190610b2f565b610286565b6040516100ee91906109ce565b60405180910390f35b610111600480360381019061010c9190610b8b565b6102eb565b60405161011e9190610be3565b60405180910390f35b610141600480360381019061013c9190610876565b610304565b60405161015093929190610c0d565b60405180910390f35b610173600480360381019061016e9190610c70565b61034e565b005b61017d6107f5565b600060016000848152602001908152602001600020600101541461022a576001600083815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050610261565b60405180606001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090505b919050565b60026020528060005260406000206000915054906101000a900460ff1681565b60008061029384846104dc565b9050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691505092915050565b600080828051906020012060001c905080915050919050565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b610356610503565b600061036283836104dc565b9050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166103f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e790610d88565b60405180910390fd5b60405180606001604052808581526020014281526020013373ffffffffffffffffffffffffffffffffffffffff1681525060016000858152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050827f98bf26ccdb9d2aea868d927938a0471b3f1491ef4aff63aa9c833bffb284ba298542336040516104c693929190610c0d565b60405180910390a2506104d7610552565b505050565b60008060006104eb858561055c565b915091506104f8816105ad565b819250505092915050565b600260005403610548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f90610df4565b60405180910390fd5b6002600081905550565b6001600081905550565b600080604183510361059d5760008060006020860151925060408601519150606086015160001a905061059187828585610713565b945094505050506105a6565b60006002915091505b9250929050565b600060048111156105c1576105c0610e14565b5b8160048111156105d4576105d3610e14565b5b031561071057600160048111156105ee576105ed610e14565b5b81600481111561060157610600610e14565b5b03610641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063890610e8f565b60405180910390fd5b6002600481111561065557610654610e14565b5b81600481111561066857610667610e14565b5b036106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f90610efb565b60405180910390fd5b600360048111156106bc576106bb610e14565b5b8160048111156106cf576106ce610e14565b5b0361070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070690610f8d565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561074e5760006003915091506107ec565b6000600187878787604051600081526020016040526040516107739493929190610fd8565b6020604051602081039080840390855afa158015610795573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107e3576000600192509250506107ec565b80600092509250505b94509492505050565b60405180606001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61085381610840565b811461085e57600080fd5b50565b6000813590506108708161084a565b92915050565b60006020828403121561088c5761088b610836565b5b600061089a84828501610861565b91505092915050565b6000819050919050565b6108b6816108a3565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006108e7826108bc565b9050919050565b6108f7816108dc565b82525050565b60608201600082015161091360008501826108ad565b50602082015161092660208501826108ad565b50604082015161093960408501826108ee565b50505050565b600060608201905061095460008301846108fd565b92915050565b610963816108dc565b811461096e57600080fd5b50565b6000813590506109808161095a565b92915050565b60006020828403121561099c5761099b610836565b5b60006109aa84828501610971565b91505092915050565b60008115159050919050565b6109c8816109b3565b82525050565b60006020820190506109e360008301846109bf565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610a3c826109f3565b810181811067ffffffffffffffff82111715610a5b57610a5a610a04565b5b80604052505050565b6000610a6e61082c565b9050610a7a8282610a33565b919050565b600067ffffffffffffffff821115610a9a57610a99610a04565b5b610aa3826109f3565b9050602081019050919050565b82818337600083830152505050565b6000610ad2610acd84610a7f565b610a64565b905082815260208101848484011115610aee57610aed6109ee565b5b610af9848285610ab0565b509392505050565b600082601f830112610b1657610b156109e9565b5b8135610b26848260208601610abf565b91505092915050565b60008060408385031215610b4657610b45610836565b5b6000610b5485828601610861565b925050602083013567ffffffffffffffff811115610b7557610b7461083b565b5b610b8185828601610b01565b9150509250929050565b600060208284031215610ba157610ba0610836565b5b600082013567ffffffffffffffff811115610bbf57610bbe61083b565b5b610bcb84828501610b01565b91505092915050565b610bdd816108dc565b82525050565b6000602082019050610bf86000830184610bd4565b92915050565b610c07816108a3565b82525050565b6000606082019050610c226000830186610bfe565b610c2f6020830185610bfe565b610c3c6040830184610bd4565b949350505050565b610c4d816108a3565b8114610c5857600080fd5b50565b600081359050610c6a81610c44565b92915050565b600080600060608486031215610c8957610c88610836565b5b6000610c9786828701610c5b565b9350506020610ca886828701610861565b925050604084013567ffffffffffffffff811115610cc957610cc861083b565b5b610cd586828701610b01565b9150509250925092565b600082825260208201905092915050565b7f5369676e617475726520646f65736e2774206d6174636820616e79204c49542060008201527f6b657920666f722074686520676976656e2068617368656420636f6e6469746960208201527f6f6e000000000000000000000000000000000000000000000000000000000000604082015250565b6000610d72604283610cdf565b9150610d7d82610cf0565b606082019050919050565b60006020820190508181036000830152610da181610d65565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000610dde601f83610cdf565b9150610de982610da8565b602082019050919050565b60006020820190508181036000830152610e0d81610dd1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000610e79601883610cdf565b9150610e8482610e43565b602082019050919050565b60006020820190508181036000830152610ea881610e6c565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000610ee5601f83610cdf565b9150610ef082610eaf565b602082019050919050565b60006020820190508181036000830152610f1481610ed8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000610f77602283610cdf565b9150610f8282610f1b565b604082019050919050565b60006020820190508181036000830152610fa681610f6a565b9050919050565b610fb681610840565b82525050565b600060ff82169050919050565b610fd281610fbc565b82525050565b6000608082019050610fed6000830187610fad565b610ffa6020830186610fc9565b6110076040830185610fad565b6110146060830184610fad565b9594505050505056fea26469706673582212207d4d0f94894f7be6a26d0e16b4a2576d0e5b879c616268fcf87043b830e0afd164736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/ContractResolver.json b/contracts/cayenne/ContractResolver.json deleted file mode 100644 index f2049bf..0000000 --- a/contracts/cayenne/ContractResolver.json +++ /dev/null @@ -1,600 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ContractResolver", - "sourceName": "contracts/lit-core/ContractResolver.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AdminRoleRequired", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ContractResolver.Env", - "name": "env", - "type": "uint8" - } - ], - "name": "AllowedEnvAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ContractResolver.Env", - "name": "env", - "type": "uint8" - } - ], - "name": "AllowedEnvRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "typ", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "enum ContractResolver.Env", - "name": "env", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "SetContract", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ALLOWLIST_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN_WALLET_ORACLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN_WALLET_REGISTRY", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "HD_KEY_DERIVER_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LIT_TOKEN_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MULTI_SENDER_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PKP_HELPER_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PKP_NFT_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PKP_NFT_METADATA_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PKP_PERMISSIONS_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PUB_KEY_ROUTER_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RATE_LIMIT_NFT_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RELEASE_REGISTER_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "STAKING_BALANCES_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "STAKING_CONTRACT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "env", - "type": "uint8" - } - ], - "name": "addAllowedEnv", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "typ", - "type": "bytes32" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "env", - "type": "uint8" - } - ], - "name": "getContract", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "env", - "type": "uint8" - } - ], - "name": "removeAllowedEnv", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "typ", - "type": "bytes32" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "env", - "type": "uint8" - }, - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "setContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "", - "type": "uint8" - } - ], - "name": "typeAddresses", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b506040516200209538038062002095833981810160405281019062000037919062000358565b620000697fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336200013060201b60201c565b6200009b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42806200014660201b60201c565b6001806000836002811115620000b657620000b56200038a565b5b6002811115620000cb57620000ca6200038a565b5b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece8015816040516200012191906200040a565b60405180910390a15062000427565b620001428282620001a960201b60201c565b5050565b600062000159836200029a60201b60201c565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b620001bb8282620002b960201b60201c565b6200029657600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200023b6200032360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000806000838152602001908152602001600020600101549050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600381106200033e57600080fd5b50565b600081519050620003528162000330565b92915050565b6000602082840312156200037157620003706200032b565b5b6000620003818482850162000341565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110620003cd57620003cc6200038a565b5b50565b6000819050620003e082620003b9565b919050565b6000620003f282620003d0565b9050919050565b6200040481620003e5565b82525050565b6000602082019050620004216000830184620003f9565b92915050565b611c5e80620004376000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806375b238fc1161010457806391d14854116100a2578063d547741f11610071578063d547741f14610510578063da19ddfb1461052c578063df3806931461054a578063f8ae93b414610568576101cf565b806391d1485414610486578063977a8070146104b6578063a217fddf146104d4578063ad1c8a86146104f2576101cf565b80638c1536df116100de5780638c1536df146103fe5780638deb38931461041c5780638e8dfd16146104385780639072f83814610468576101cf565b806375b238fc146103a45780637cadf69f146103c257806385cb1191146103e0576101cf565b806336568abe1161017157806351ad0a801161014b57806351ad0a8014610332578063704b6c021461034e57806372823fa71461036a57806374bc813914610388576101cf565b806336568abe146102c85780633ebf7985146102e45780634216e73a14610314576101cf565b80632668f305116101ad5780632668f305146102525780632c0b8bf7146102705780632e4885e81461028e5780632f2ff15d146102ac576101cf565b806301ffc9a7146101d457806316f76bbf14610204578063248a9ca314610222575b600080fd5b6101ee60048036038101906101e9919061140f565b610586565b6040516101fb9190611457565b60405180910390f35b61020c610600565b604051610219919061148b565b60405180910390f35b61023c600480360381019061023791906114d2565b610624565b604051610249919061148b565b60405180910390f35b61025a610643565b604051610267919061148b565b60405180910390f35b610278610667565b604051610285919061148b565b60405180910390f35b61029661068b565b6040516102a3919061148b565b60405180910390f35b6102c660048036038101906102c1919061155d565b6106af565b005b6102e260048036038101906102dd919061155d565b6106d0565b005b6102fe60048036038101906102f991906115c2565b610753565b60405161030b9190611611565b60405180910390f35b61031c610795565b604051610329919061148b565b60405180910390f35b61034c6004803603810190610347919061162c565b6107b9565b005b6103686004803603810190610363919061167f565b61096b565b005b610372610a22565b60405161037f919061148b565b60405180910390f35b6103a2600480360381019061039d91906116ac565b610a46565b005b6103ac610b2f565b6040516103b9919061148b565b60405180910390f35b6103ca610b53565b6040516103d7919061148b565b60405180910390f35b6103e8610b77565b6040516103f5919061148b565b60405180910390f35b610406610b9b565b604051610413919061148b565b60405180910390f35b610436600480360381019061043191906116ac565b610bbf565b005b610452600480360381019061044d91906115c2565b610ca0565b60405161045f9190611611565b60405180910390f35b610470610d13565b60405161047d919061148b565b60405180910390f35b6104a0600480360381019061049b919061155d565b610d37565b6040516104ad9190611457565b60405180910390f35b6104be610da1565b6040516104cb919061148b565b60405180910390f35b6104dc610dc5565b6040516104e9919061148b565b60405180910390f35b6104fa610dcc565b604051610507919061148b565b60405180910390f35b61052a6004803603810190610525919061155d565b610df0565b005b610534610e11565b604051610541919061148b565b60405180910390f35b610552610e35565b60405161055f919061148b565b60405180910390f35b610570610e59565b60405161057d919061148b565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f957506105f882610e7d565b5b9050919050565b7ff14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a81565b6000806000838152602001908152602001600020600101549050919050565b7fb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f781565b7fb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b081565b7fb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a91881565b6106b882610624565b6106c181610ee7565b6106cb8383610efb565b505050565b6106d8610fdb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073c9061175c565b60405180910390fd5b61074f8282610fe3565b5050565b60026020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f4c41ae454beb6bbbe9be50accc957a3b1536e48b835a86919af981b5244db75581565b6107e37fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610d37565b610819576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60011515600160008460028111156108345761083361177c565b5b60028111156108465761084561177c565b5b815260200190815260200160002060009054906101000a900460ff161515146108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089b9061181d565b60405180910390fd5b806002600085815260200190815260200160002060008460028111156108cd576108cc61177c565b5b60028111156108df576108de61177c565b5b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f33f014890f109229bbcf8dd47204c153a2c0ff1c572a61de220d10336530f53d83838360405161095e93929190611885565b60405180910390a1505050565b6109957fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610d37565b6109cb576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109f57fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610efb565b610a1f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610fe3565b50565b7fc293b28944ab4199ad0f77d42d49e33b15d60cc12ed2a0b94a0db1d0b719f56181565b610a707fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610d37565b610aa6576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001806000836002811115610abe57610abd61177c565b5b6002811115610ad057610acf61177c565b5b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051610b2491906118bc565b60405180910390a150565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca81565b7fae79a935737012d066e7183032692e521ffe1ade2beda267e23e02b1d6e9118781565b7faa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d7281565b610be97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610d37565b610c1f576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016000826002811115610c3657610c3561177c565b5b6002811115610c4857610c4761177c565b5b815260200190815260200160002060006101000a81549060ff02191690557f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4781604051610c9591906118bc565b60405180910390a150565b6000600260008481526020019081526020016000206000836002811115610cca57610cc961177c565b5b6002811115610cdc57610cdb61177c565b5b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b7f54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe81565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7f27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b4438875576581565b6000801b81565b7f3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec81565b610df982610624565b610e0281610ee7565b610e0c8383610fe3565b505050565b7f080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b81565b7fb4bf999b68d8085dbbf7a0ec2f5a2d660873935bdf1ed08eb421ac6dcbc0036281565b7fdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da724381565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610ef881610ef3610fdb565b6110c4565b50565b610f058282610d37565b610fd757600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f7c610fdb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b610fed8282610d37565b156110c057600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611065610fdb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6110ce8282610d37565b611145576110db81611149565b6110e98360001c6020611176565b6040516020016110fa9291906119e0565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c9190611a64565b60405180910390fd5b5050565b606061116f8273ffffffffffffffffffffffffffffffffffffffff16601460ff16611176565b9050919050565b6060600060028360026111899190611abf565b6111939190611b01565b67ffffffffffffffff8111156111ac576111ab611b35565b5b6040519080825280601f01601f1916602001820160405280156111de5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061121657611215611b64565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061127a57611279611b64565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026112ba9190611abf565b6112c49190611b01565b90505b6001811115611364577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061130657611305611b64565b5b1a60f81b82828151811061131d5761131c611b64565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061135d90611b93565b90506112c7565b50600084146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90611c08565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6113ec816113b7565b81146113f757600080fd5b50565b600081359050611409816113e3565b92915050565b600060208284031215611425576114246113b2565b5b6000611433848285016113fa565b91505092915050565b60008115159050919050565b6114518161143c565b82525050565b600060208201905061146c6000830184611448565b92915050565b6000819050919050565b61148581611472565b82525050565b60006020820190506114a0600083018461147c565b92915050565b6114af81611472565b81146114ba57600080fd5b50565b6000813590506114cc816114a6565b92915050565b6000602082840312156114e8576114e76113b2565b5b60006114f6848285016114bd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061152a826114ff565b9050919050565b61153a8161151f565b811461154557600080fd5b50565b60008135905061155781611531565b92915050565b60008060408385031215611574576115736113b2565b5b6000611582858286016114bd565b925050602061159385828601611548565b9150509250929050565b600381106115aa57600080fd5b50565b6000813590506115bc8161159d565b92915050565b600080604083850312156115d9576115d86113b2565b5b60006115e7858286016114bd565b92505060206115f8858286016115ad565b9150509250929050565b61160b8161151f565b82525050565b60006020820190506116266000830184611602565b92915050565b600080600060608486031215611645576116446113b2565b5b6000611653868287016114bd565b9350506020611664868287016115ad565b925050604061167586828701611548565b9150509250925092565b600060208284031215611695576116946113b2565b5b60006116a384828501611548565b91505092915050565b6000602082840312156116c2576116c16113b2565b5b60006116d0848285016115ad565b91505092915050565b600082825260208201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000611746602f836116d9565b9150611751826116ea565b604082019050919050565b6000602082019050818103600083015261177581611739565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f5468652070726f766964656420456e76206973206e6f742076616c696420666f60008201527f72207468697320636f6e74726163740000000000000000000000000000000000602082015250565b6000611807602f836116d9565b9150611812826117ab565b604082019050919050565b60006020820190508181036000830152611836816117fa565b9050919050565b6003811061184e5761184d61177c565b5b50565b600081905061185f8261183d565b919050565b600061186f82611851565b9050919050565b61187f81611864565b82525050565b600060608201905061189a600083018661147c565b6118a76020830185611876565b6118b46040830184611602565b949350505050565b60006020820190506118d16000830184611876565b92915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006119186017836118d7565b9150611923826118e2565b601782019050919050565b600081519050919050565b60005b8381101561195757808201518184015260208101905061193c565b60008484015250505050565b600061196e8261192e565b61197881856118d7565b9350611988818560208601611939565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006119ca6011836118d7565b91506119d582611994565b601182019050919050565b60006119eb8261190b565b91506119f78285611963565b9150611a02826119bd565b9150611a0e8284611963565b91508190509392505050565b6000601f19601f8301169050919050565b6000611a368261192e565b611a4081856116d9565b9350611a50818560208601611939565b611a5981611a1a565b840191505092915050565b60006020820190508181036000830152611a7e8184611a2b565b905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611aca82611a86565b9150611ad583611a86565b9250828202611ae381611a86565b91508282048414831517611afa57611af9611a90565b5b5092915050565b6000611b0c82611a86565b9150611b1783611a86565b9250828201905080821115611b2f57611b2e611a90565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611b9e82611a86565b915060008203611bb157611bb0611a90565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000611bf26020836116d9565b9150611bfd82611bbc565b602082019050919050565b60006020820190508181036000830152611c2181611be5565b905091905056fea26469706673582212209cfb64a4057ba9478cee57cf8096c4dcda3cc43308d8a232a381e7e2708797b764736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806375b238fc1161010457806391d14854116100a2578063d547741f11610071578063d547741f14610510578063da19ddfb1461052c578063df3806931461054a578063f8ae93b414610568576101cf565b806391d1485414610486578063977a8070146104b6578063a217fddf146104d4578063ad1c8a86146104f2576101cf565b80638c1536df116100de5780638c1536df146103fe5780638deb38931461041c5780638e8dfd16146104385780639072f83814610468576101cf565b806375b238fc146103a45780637cadf69f146103c257806385cb1191146103e0576101cf565b806336568abe1161017157806351ad0a801161014b57806351ad0a8014610332578063704b6c021461034e57806372823fa71461036a57806374bc813914610388576101cf565b806336568abe146102c85780633ebf7985146102e45780634216e73a14610314576101cf565b80632668f305116101ad5780632668f305146102525780632c0b8bf7146102705780632e4885e81461028e5780632f2ff15d146102ac576101cf565b806301ffc9a7146101d457806316f76bbf14610204578063248a9ca314610222575b600080fd5b6101ee60048036038101906101e9919061140f565b610586565b6040516101fb9190611457565b60405180910390f35b61020c610600565b604051610219919061148b565b60405180910390f35b61023c600480360381019061023791906114d2565b610624565b604051610249919061148b565b60405180910390f35b61025a610643565b604051610267919061148b565b60405180910390f35b610278610667565b604051610285919061148b565b60405180910390f35b61029661068b565b6040516102a3919061148b565b60405180910390f35b6102c660048036038101906102c1919061155d565b6106af565b005b6102e260048036038101906102dd919061155d565b6106d0565b005b6102fe60048036038101906102f991906115c2565b610753565b60405161030b9190611611565b60405180910390f35b61031c610795565b604051610329919061148b565b60405180910390f35b61034c6004803603810190610347919061162c565b6107b9565b005b6103686004803603810190610363919061167f565b61096b565b005b610372610a22565b60405161037f919061148b565b60405180910390f35b6103a2600480360381019061039d91906116ac565b610a46565b005b6103ac610b2f565b6040516103b9919061148b565b60405180910390f35b6103ca610b53565b6040516103d7919061148b565b60405180910390f35b6103e8610b77565b6040516103f5919061148b565b60405180910390f35b610406610b9b565b604051610413919061148b565b60405180910390f35b610436600480360381019061043191906116ac565b610bbf565b005b610452600480360381019061044d91906115c2565b610ca0565b60405161045f9190611611565b60405180910390f35b610470610d13565b60405161047d919061148b565b60405180910390f35b6104a0600480360381019061049b919061155d565b610d37565b6040516104ad9190611457565b60405180910390f35b6104be610da1565b6040516104cb919061148b565b60405180910390f35b6104dc610dc5565b6040516104e9919061148b565b60405180910390f35b6104fa610dcc565b604051610507919061148b565b60405180910390f35b61052a6004803603810190610525919061155d565b610df0565b005b610534610e11565b604051610541919061148b565b60405180910390f35b610552610e35565b60405161055f919061148b565b60405180910390f35b610570610e59565b60405161057d919061148b565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f957506105f882610e7d565b5b9050919050565b7ff14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a81565b6000806000838152602001908152602001600020600101549050919050565b7fb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f781565b7fb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b081565b7fb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a91881565b6106b882610624565b6106c181610ee7565b6106cb8383610efb565b505050565b6106d8610fdb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073c9061175c565b60405180910390fd5b61074f8282610fe3565b5050565b60026020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f4c41ae454beb6bbbe9be50accc957a3b1536e48b835a86919af981b5244db75581565b6107e37fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610d37565b610819576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60011515600160008460028111156108345761083361177c565b5b60028111156108465761084561177c565b5b815260200190815260200160002060009054906101000a900460ff161515146108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089b9061181d565b60405180910390fd5b806002600085815260200190815260200160002060008460028111156108cd576108cc61177c565b5b60028111156108df576108de61177c565b5b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f33f014890f109229bbcf8dd47204c153a2c0ff1c572a61de220d10336530f53d83838360405161095e93929190611885565b60405180910390a1505050565b6109957fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610d37565b6109cb576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109f57fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4282610efb565b610a1f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610fe3565b50565b7fc293b28944ab4199ad0f77d42d49e33b15d60cc12ed2a0b94a0db1d0b719f56181565b610a707fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610d37565b610aa6576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001806000836002811115610abe57610abd61177c565b5b6002811115610ad057610acf61177c565b5b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051610b2491906118bc565b60405180910390a150565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca81565b7fae79a935737012d066e7183032692e521ffe1ade2beda267e23e02b1d6e9118781565b7faa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d7281565b610be97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610d37565b610c1f576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016000826002811115610c3657610c3561177c565b5b6002811115610c4857610c4761177c565b5b815260200190815260200160002060006101000a81549060ff02191690557f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4781604051610c9591906118bc565b60405180910390a150565b6000600260008481526020019081526020016000206000836002811115610cca57610cc961177c565b5b6002811115610cdc57610cdb61177c565b5b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b7f54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe81565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7f27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b4438875576581565b6000801b81565b7f3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec81565b610df982610624565b610e0281610ee7565b610e0c8383610fe3565b505050565b7f080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b81565b7fb4bf999b68d8085dbbf7a0ec2f5a2d660873935bdf1ed08eb421ac6dcbc0036281565b7fdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da724381565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610ef881610ef3610fdb565b6110c4565b50565b610f058282610d37565b610fd757600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f7c610fdb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b610fed8282610d37565b156110c057600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611065610fdb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6110ce8282610d37565b611145576110db81611149565b6110e98360001c6020611176565b6040516020016110fa9291906119e0565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c9190611a64565b60405180910390fd5b5050565b606061116f8273ffffffffffffffffffffffffffffffffffffffff16601460ff16611176565b9050919050565b6060600060028360026111899190611abf565b6111939190611b01565b67ffffffffffffffff8111156111ac576111ab611b35565b5b6040519080825280601f01601f1916602001820160405280156111de5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061121657611215611b64565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061127a57611279611b64565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026112ba9190611abf565b6112c49190611b01565b90505b6001811115611364577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061130657611305611b64565b5b1a60f81b82828151811061131d5761131c611b64565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061135d90611b93565b90506112c7565b50600084146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90611c08565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6113ec816113b7565b81146113f757600080fd5b50565b600081359050611409816113e3565b92915050565b600060208284031215611425576114246113b2565b5b6000611433848285016113fa565b91505092915050565b60008115159050919050565b6114518161143c565b82525050565b600060208201905061146c6000830184611448565b92915050565b6000819050919050565b61148581611472565b82525050565b60006020820190506114a0600083018461147c565b92915050565b6114af81611472565b81146114ba57600080fd5b50565b6000813590506114cc816114a6565b92915050565b6000602082840312156114e8576114e76113b2565b5b60006114f6848285016114bd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061152a826114ff565b9050919050565b61153a8161151f565b811461154557600080fd5b50565b60008135905061155781611531565b92915050565b60008060408385031215611574576115736113b2565b5b6000611582858286016114bd565b925050602061159385828601611548565b9150509250929050565b600381106115aa57600080fd5b50565b6000813590506115bc8161159d565b92915050565b600080604083850312156115d9576115d86113b2565b5b60006115e7858286016114bd565b92505060206115f8858286016115ad565b9150509250929050565b61160b8161151f565b82525050565b60006020820190506116266000830184611602565b92915050565b600080600060608486031215611645576116446113b2565b5b6000611653868287016114bd565b9350506020611664868287016115ad565b925050604061167586828701611548565b9150509250925092565b600060208284031215611695576116946113b2565b5b60006116a384828501611548565b91505092915050565b6000602082840312156116c2576116c16113b2565b5b60006116d0848285016115ad565b91505092915050565b600082825260208201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000611746602f836116d9565b9150611751826116ea565b604082019050919050565b6000602082019050818103600083015261177581611739565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f5468652070726f766964656420456e76206973206e6f742076616c696420666f60008201527f72207468697320636f6e74726163740000000000000000000000000000000000602082015250565b6000611807602f836116d9565b9150611812826117ab565b604082019050919050565b60006020820190508181036000830152611836816117fa565b9050919050565b6003811061184e5761184d61177c565b5b50565b600081905061185f8261183d565b919050565b600061186f82611851565b9050919050565b61187f81611864565b82525050565b600060608201905061189a600083018661147c565b6118a76020830185611876565b6118b46040830184611602565b949350505050565b60006020820190506118d16000830184611876565b92915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006119186017836118d7565b9150611923826118e2565b601782019050919050565b600081519050919050565b60005b8381101561195757808201518184015260208101905061193c565b60008484015250505050565b600061196e8261192e565b61197881856118d7565b9350611988818560208601611939565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006119ca6011836118d7565b91506119d582611994565b601182019050919050565b60006119eb8261190b565b91506119f78285611963565b9150611a02826119bd565b9150611a0e8284611963565b91508190509392505050565b6000601f19601f8301169050919050565b6000611a368261192e565b611a4081856116d9565b9350611a50818560208601611939565b611a5981611a1a565b840191505092915050565b60006020820190508181036000830152611a7e8184611a2b565b905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611aca82611a86565b9150611ad583611a86565b9250828202611ae381611a86565b91508282048414831517611afa57611af9611a90565b5b5092915050565b6000611b0c82611a86565b9150611b1783611a86565b9250828201905080821115611b2f57611b2e611a90565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611b9e82611a86565b915060008203611bb157611bb0611a90565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000611bf26020836116d9565b9150611bfd82611bbc565b602082019050919050565b60006020820190508181036000830152611c2181611be5565b905091905056fea26469706673582212209cfb64a4057ba9478cee57cf8096c4dcda3cc43308d8a232a381e7e2708797b764736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/DevKeyDeriver.json b/contracts/cayenne/DevKeyDeriver.json deleted file mode 100644 index addcce1..0000000 --- a/contracts/cayenne/DevKeyDeriver.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "DevKeyDeriver", - "sourceName": "contracts/lit-node/HDKeyDeriver.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct IPubkeyRouter.RootKey[]", - "name": "rootHDKeys", - "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "computeHDPubKey", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50610564806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a32c2b9914610030575b600080fd5b61004a600480360381019061004591906103b4565b610061565b6040516100589291906104bd565b60405180910390f35b6000606060006040518060800160405280604181526020016104ee6041913990506001819250925050935093915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6100b9816100a6565b81146100c457600080fd5b50565b6000813590506100d6816100b0565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61012a826100e1565b810181811067ffffffffffffffff82111715610149576101486100f2565b5b80604052505050565b600061015c610092565b90506101688282610121565b919050565b600067ffffffffffffffff821115610188576101876100f2565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff8211156101c8576101c76100f2565b5b6101d1826100e1565b9050602081019050919050565b82818337600083830152505050565b60006102006101fb846101ad565b610152565b90508281526020810184848401111561021c5761021b6101a8565b5b6102278482856101de565b509392505050565b600082601f830112610244576102436100dc565b5b81356102548482602086016101ed565b91505092915050565b6000819050919050565b6102708161025d565b811461027b57600080fd5b50565b60008135905061028d81610267565b92915050565b6000604082840312156102a9576102a861019e565b5b6102b36040610152565b9050600082013567ffffffffffffffff8111156102d3576102d26101a3565b5b6102df8482850161022f565b60008301525060206102f38482850161027e565b60208301525092915050565b600061031261030d8461016d565b610152565b9050808382526020820190506020840283018581111561033557610334610199565b5b835b8181101561037c57803567ffffffffffffffff81111561035a576103596100dc565b5b8086016103678982610293565b85526020850194505050602081019050610337565b5050509392505050565b600082601f83011261039b5761039a6100dc565b5b81356103ab8482602086016102ff565b91505092915050565b6000806000606084860312156103cd576103cc61009c565b5b60006103db868287016100c7565b935050602084013567ffffffffffffffff8111156103fc576103fb6100a1565b5b61040886828701610386565b92505060406104198682870161027e565b9150509250925092565b60008115159050919050565b61043881610423565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561047857808201518184015260208101905061045d565b60008484015250505050565b600061048f8261043e565b6104998185610449565b93506104a981856020860161045a565b6104b2816100e1565b840191505092915050565b60006040820190506104d2600083018561042f565b81810360208301526104e48184610484565b9050939250505056fe047c3647345020536e8aaccac7f73c5248bf3609677997fb615c290cc58e8ac1dcad1fa1d4f6eedf516f023dee11fbc06310434c5a7ee40f5f8c49e255b1d1bfb6a264697066735822122044d98ac83bae76788f38a7e3e4a8f2e5f37c925f933fe3ca5d414562ec2497f964736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a32c2b9914610030575b600080fd5b61004a600480360381019061004591906103b4565b610061565b6040516100589291906104bd565b60405180910390f35b6000606060006040518060800160405280604181526020016104ee6041913990506001819250925050935093915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6100b9816100a6565b81146100c457600080fd5b50565b6000813590506100d6816100b0565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61012a826100e1565b810181811067ffffffffffffffff82111715610149576101486100f2565b5b80604052505050565b600061015c610092565b90506101688282610121565b919050565b600067ffffffffffffffff821115610188576101876100f2565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff8211156101c8576101c76100f2565b5b6101d1826100e1565b9050602081019050919050565b82818337600083830152505050565b60006102006101fb846101ad565b610152565b90508281526020810184848401111561021c5761021b6101a8565b5b6102278482856101de565b509392505050565b600082601f830112610244576102436100dc565b5b81356102548482602086016101ed565b91505092915050565b6000819050919050565b6102708161025d565b811461027b57600080fd5b50565b60008135905061028d81610267565b92915050565b6000604082840312156102a9576102a861019e565b5b6102b36040610152565b9050600082013567ffffffffffffffff8111156102d3576102d26101a3565b5b6102df8482850161022f565b60008301525060206102f38482850161027e565b60208301525092915050565b600061031261030d8461016d565b610152565b9050808382526020820190506020840283018581111561033557610334610199565b5b835b8181101561037c57803567ffffffffffffffff81111561035a576103596100dc565b5b8086016103678982610293565b85526020850194505050602081019050610337565b5050509392505050565b600082601f83011261039b5761039a6100dc565b5b81356103ab8482602086016102ff565b91505092915050565b6000806000606084860312156103cd576103cc61009c565b5b60006103db868287016100c7565b935050602084013567ffffffffffffffff8111156103fc576103fb6100a1565b5b61040886828701610386565b92505060406104198682870161027e565b9150509250925092565b60008115159050919050565b61043881610423565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561047857808201518184015260208101905061045d565b60008484015250505050565b600061048f8261043e565b6104998185610449565b93506104a981856020860161045a565b6104b2816100e1565b840191505092915050565b60006040820190506104d2600083018561042f565b81810360208301526104e48184610484565b9050939250505056fe047c3647345020536e8aaccac7f73c5248bf3609677997fb615c290cc58e8ac1dcad1fa1d4f6eedf516f023dee11fbc06310434c5a7ee40f5f8c49e255b1d1bfb6a264697066735822122044d98ac83bae76788f38a7e3e4a8f2e5f37c925f933fe3ca5d414562ec2497f964736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/DomainWalletOracle.json b/contracts/cayenne/DomainWalletOracle.json deleted file mode 100644 index 0508a0f..0000000 --- a/contracts/cayenne/DomainWalletOracle.json +++ /dev/null @@ -1,726 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "DomainWalletOracle", - "sourceName": "contracts/domain-wallets/DomainWalletOracle.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractResolver", - "type": "address" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "_env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "uri", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "DomainAlreadyRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "registryAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NonRegistryCaller", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "subDomain", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "ttl", - "type": "uint256" - } - ], - "name": "Expired", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "id", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "subDomain", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "ttl", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Registered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "subDomain", - "type": "bytes" - } - ], - "name": "Removed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "subDomain", - "type": "bytes" - } - ], - "name": "Revoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "uri", - "type": "bytes" - } - ], - "name": "checkRegistration", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "contractResolver", - "outputs": [ - { - "internalType": "contract ContractResolver", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "env", - "outputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "getDomainIdByTokenId", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "uri", - "type": "bytes" - } - ], - "name": "getDomainTokenIdByUri", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "getDomainUri", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "getExpiration", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "id", - "type": "uint64" - } - ], - "name": "getPkpTokenId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "getRecord", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "hasExpired", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "hasOwner", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "isOwner", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "isRouted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "userId", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "uri", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "ttl", - "type": "uint256" - } - ], - "name": "registerDomain", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "id", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "registerPKP", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "removeDomain", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "revokeDomain", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "acct", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "record", - "type": "bytes" - } - ], - "name": "updateDomainRecord", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6080604052600060045560006005556000600660006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055503480156200004557600080fd5b5060405162003b9e38038062003b9e83398181016040528101906200006b91906200036b565b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760146101000a81548160ff02191690836002811115620000d457620000d3620003b2565b5b021790555033600660086101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200016e7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42600660089054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200017660201b60201c565b5050620003e1565b6200018882826200026760201b60201c565b6200026357600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000208620002d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200030b82620002de565b9050919050565b6200031d81620002fe565b81146200032957600080fd5b50565b6000815190506200033d8162000312565b92915050565b600381106200035157600080fd5b50565b600081519050620003658162000343565b92915050565b60008060408385031215620003855762000384620002d9565b5b600062000395858286016200032c565b9250506020620003a88582860162000354565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6137ad80620003f16000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636f50cd97116100f9578063a05b775f11610097578063c9b2874911610071578063c9b2874914610552578063d547741f14610582578063d964a3751461059e578063f48d60ca146105ce576101a9565b8063a05b775f146104d4578063a217fddf14610504578063a2f4210414610522576101a9565b8063880bc4e6116100d3578063880bc4e61461043a57806391d148541461046a5780639a2056f41461049a5780639dca0032146104b6576101a9565b80636f50cd97146103d0578063704b6c021461040057806375b238fc1461041c576101a9565b806327bd069e1161016657806339c7639c1161014057806339c7639c1461032257806349fcbc541461035257806350d17b5e146103825780636a3000c4146103a0576101a9565b806327bd069e146102ce5780632f2ff15d146102ea57806336568abe14610306576101a9565b806301c6d035146101ae57806301ffc9a7146101de57806303e9e6091461020e57806306985fb11461023e57806315d464741461026e578063248a9ca31461029e575b600080fd5b6101c860048036038101906101c391906122eb565b6105fe565b6040516101d59190612333565b60405180910390f35b6101f860048036038101906101f391906123a6565b61062b565b6040516102059190612333565b60405180910390f35b610228600480360381019061022391906122eb565b6106a5565b6040516102359190612463565b60405180910390f35b610258600480360381019061025391906125ba565b61074d565b6040516102659190612333565b60405180910390f35b610288600480360381019061028391906122eb565b6108e2565b6040516102959190612333565b60405180910390f35b6102b860048036038101906102b3919061264c565b610ca3565b6040516102c59190612688565b60405180910390f35b6102e860048036038101906102e391906126a3565b610cc2565b005b61030460048036038101906102ff919061274a565b610d48565b005b610320600480360381019061031b919061274a565b610d69565b005b61033c600480360381019061033791906122eb565b610dec565b6040516103499190612333565b60405180910390f35b61036c600480360381019061036791906122eb565b610e19565b6040516103799190612333565b60405180910390f35b61038a610f39565b60405161039791906127e9565b60405180910390f35b6103ba60048036038101906103b591906122eb565b610f5f565b6040516103c79190612463565b60405180910390f35b6103ea60048036038101906103e591906126a3565b611007565b6040516103f79190612813565b60405180910390f35b61041a6004803603810190610415919061282e565b61102f565b005b6104246110c8565b6040516104319190612688565b60405180910390f35b610454600480360381019061044f91906122eb565b6110ec565b604051610461919061287e565b60405180910390f35b610484600480360381019061047f919061274a565b611120565b6040516104919190612333565b60405180910390f35b6104b460048036038101906104af9190612899565b61118a565b005b6104be61165f565b6040516104cb91906129af565b60405180910390f35b6104ee60048036038101906104e991906122eb565b611672565b6040516104fb9190612813565b60405180910390f35b61050c611692565b6040516105199190612688565b60405180910390f35b61053c600480360381019061053791906129f6565b611699565b6040516105499190612813565b60405180910390f35b61056c60048036038101906105679190612a23565b6116e3565b6040516105799190612333565b60405180910390f35b61059c6004803603810190610597919061274a565b611820565b005b6105b860048036038101906105b391906122eb565b611841565b6040516105c59190612333565b60405180910390f35b6105e860048036038101906105e391906122eb565b611b9e565b6040516105f59190612333565b60405180910390f35b60006002600083815260200190815260200160002060050160019054906101000a900460ff169050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061069e575061069d82611bcb565b5b9050919050565b60606002600083815260200190815260200160002060060180546106c890612a92565b80601f01602080910402602001604051908101604052809291908181526020018280546106f490612a92565b80156107415780601f1061071657610100808354040283529160200191610741565b820191906000526020600020905b81548152906001019060200180831161072457829003601f168201915b50505050509050919050565b6000610757611c35565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156107b957506107b77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611120565b155b15610804576107c6611c35565b336040517f3274939c0000000000000000000000000000000000000000000000000000000081526004016107fb929190612ad2565b60405180910390fd5b600015156002600085815260200190815260200160002060050160009054906101000a900460ff1615150361083c57600090506108dc565b8160026000858152602001908152602001600020600601908161085f9190612c9d565b5060026000848152602001908152602001600020600601600160006002600087815260200190815260200160002060010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060060190816108d69190612d9a565b50600190505b92915050565b60006108ec611c35565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561094e575061094c7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611120565b155b156109995761095b611c35565b336040517f3274939c000000000000000000000000000000000000000000000000000000008152600401610990929190612ad2565b60405180910390fd5b600015156002600084815260200190815260200160002060050160009054906101000a900460ff161515036109d15760009050610c9e565b60006002600084815260200190815260200160002060010160009054906101000a900467ffffffffffffffff1690506002600084815260200190815260200160002060008082016000610a249190612244565b6001820160006101000a81549067ffffffffffffffff02191690556002820160009055600382016000610a579190612244565b60048201600090556005820160006101000a81549060ff02191690556005820160016101000a81549060ff0219169055600682016000610a979190612244565b50506003600160008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600301604051610ad29190612f10565b9081526020016040518091039020600090556000600160008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050160016101000a81548160ff0219169083151502179055506000600160008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050160006101000a81548160ff0219169083151502179055506000600160008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201819055506040518060400160405280600181526020016000815250600160008367ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206000019081610be79190612f32565b506040518060400160405280600181526020016000815250600160008367ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206006019081610c359190612f32565b507fd4a95e28367a3ce6694042b01d34e7ba0198bcdaca1ffb38eaec9898c748b0ad81600160008467ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600001604051610c909291906130b9565b60405180910390a160019150505b919050565b6000806000838152602001908152602001600020600101549050919050565b6000600382604051610cd4919061311a565b90815260200160405180910390205414610d455780600382604051610cf9919061311a565b9081526020016040518091039020546040517f3bcbf6c4000000000000000000000000000000000000000000000000000000008152600401610d3c929190613131565b60405180910390fd5b50565b610d5182610ca3565b610d5a81611d79565b610d648383611d8d565b505050565b610d71611e6d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd5906131e4565b60405180910390fd5b610de88282611e75565b5050565b60006002600083815260200190815260200160002060050160019054906101000a900460ff169050919050565b600080600260008481526020019081526020016000206004015490506000600260008581526020019081526020016000206003018054610e5890612a92565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8490612a92565b8015610ed15780601f10610ea657610100808354040283529160200191610ed1565b820191906000526020600020905b815481529060010190602001808311610eb457829003601f168201915b50505050509050600042831090508015610f2c577fb2363f688f7b32557c64bff90081959f0bb6c24f09ca465424c5afc5854dc58d828685604051610f1893929190613204565b60405180910390a160019350505050610f34565b600093505050505b919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600260008381526020019081526020016000206003018054610f8290612a92565b80601f0160208091040260200160405190810160405280929190818152602001828054610fae90612a92565b8015610ffb5780601f10610fd057610100808354040283529160200191610ffb565b820191906000526020600020905b815481529060010190602001808311610fde57829003601f168201915b50505050509050919050565b6000600382604051611019919061311a565b9081526020016040518091039020549050919050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261105981611d79565b6110837fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4283611d8d565b81600660086101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b60006002600083815260200190815260200160002060010160009054906101000a900467ffffffffffffffff169050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611192611c35565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156111f457506111f27fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611120565b155b1561123f57611201611c35565b336040517f3274939c000000000000000000000000000000000000000000000000000000008152600401611236929190612ad2565b60405180910390fd5b6000600384604051611251919061311a565b908152602001604051809103902054146112c25782600384604051611276919061311a565b9081526020016040518091039020546040517f3bcbf6c40000000000000000000000000000000000000000000000000000000081526004016112b9929190613131565b60405180910390fd5b6001600660009054906101000a900467ffffffffffffffff166112e59190613271565b600660006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600660009054906101000a900467ffffffffffffffff16905084600160008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600001908161135f9190612c9d565b5082600160008367ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018190555083600160008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060030190816113c69190612c9d565b5081600160008367ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206004018190555060018060008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050160016101000a81548160ff02191690831515021790555060018060008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050160006101000a81548160ff02191690831515021790555080600160008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160008267ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600260008581526020019081526020016000206000820181600001908161151991906132c3565b506001820160009054906101000a900467ffffffffffffffff168160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600282015481600201556003820181600301908161157b91906132c3565b50600482015481600401556005820160009054906101000a900460ff168160050160006101000a81548160ff0219169083151502179055506005820160019054906101000a900460ff168160050160016101000a81548160ff021916908315150217905550600682018160060190816115f491906132c3565b5090505082600385604051611609919061311a565b9081526020016040518091039020819055507fc276b207558b882d6e0e49fc3e221e9fd140cced79dd16fae88e0de97f4a2f0d8186848660405161165094939291906133ab565b60405180910390a15050505050565b600760149054906101000a900460ff1681565b600060026000838152602001908152602001600020600401549050919050565b6000801b81565b600060026000600160008567ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201548152602001908152602001600020600201549050919050565b60006116ed611c35565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561174f575061174d7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611120565b155b1561179a5761175c611c35565b336040517f3274939c000000000000000000000000000000000000000000000000000000008152600401611791929190612ad2565b60405180910390fd5b60001515600160008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050160009054906101000a900460ff161515036117e6576000905061181a565b81600160008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020181905550600190505b92915050565b61182982610ca3565b61183281611d79565b61183c8383611e75565b505050565b600061184b611c35565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156118ad57506118ab7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611120565b155b156118f8576118ba611c35565b336040517f3274939c0000000000000000000000000000000000000000000000000000000081526004016118ef929190612ad2565b60405180910390fd5b600015156002600084815260200190815260200160002060050160019054906101000a900460ff161515036119305760009050611b99565b60006002600084815260200190815260200160002060050160016101000a81548160ff0219169083151502179055506000600260008481526020019081526020016000206002018190555060405180604001604052806001815260200160008152506002600084815260200190815260200160002060000190816119b49190612f32565b5060405180604001604052806001815260200160008152506002600084815260200190815260200160002060060190816119ee9190612f32565b5060026000838152602001908152602001600020600160006002600086815260200190815260200160002060010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201816000019081611a6791906132c3565b506001820160009054906101000a900467ffffffffffffffff168160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506002820154816002015560038201816003019081611ac991906132c3565b50600482015481600401556005820160009054906101000a900460ff168160050160006101000a81548160ff0219169083151502179055506005820160019054906101000a900460ff168160050160016101000a81548160ff02191690831515021790555060068201816006019081611b4291906132c3565b509050507fae179513beb9b19a22a2c82f794dfd4d379cbbd2e7e95c744a1ea89ad20032f78260026000858152602001908152602001600020600301604051611b8c9291906133f7565b60405180910390a1600190505b919050565b60006002600083815260200190815260200160002060050160019054906101000a900460ff169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634216e73a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d06919061343c565b600760149054906101000a900460ff166040518363ffffffff1660e01b8152600401611d33929190613469565b602060405180830381865afa158015611d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7491906134a7565b905090565b611d8a81611d85611e6d565b611f56565b50565b611d978282611120565b611e6957600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e0e611e6d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b611e7f8282611120565b15611f5257600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ef7611e6d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611f608282611120565b611fd757611f6d81611fdb565b611f7b8360001c6020612008565b604051602001611f8c9291906135a8565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce919061361b565b60405180910390fd5b5050565b60606120018273ffffffffffffffffffffffffffffffffffffffff16601460ff16612008565b9050919050565b60606000600283600261201b919061363d565b612025919061367f565b67ffffffffffffffff81111561203e5761203d61248f565b5b6040519080825280601f01601f1916602001820160405280156120705781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106120a8576120a76136b3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061210c5761210b6136b3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261214c919061363d565b612156919061367f565b90505b60018111156121f6577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612198576121976136b3565b5b1a60f81b8282815181106121af576121ae6136b3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806121ef906136e2565b9050612159565b506000841461223a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223190613757565b60405180910390fd5b8091505092915050565b50805461225090612a92565b6000825580601f106122625750612281565b601f0160209004906000526020600020908101906122809190612284565b5b50565b5b8082111561229d576000816000905550600101612285565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6122c8816122b5565b81146122d357600080fd5b50565b6000813590506122e5816122bf565b92915050565b600060208284031215612301576123006122ab565b5b600061230f848285016122d6565b91505092915050565b60008115159050919050565b61232d81612318565b82525050565b60006020820190506123486000830184612324565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123838161234e565b811461238e57600080fd5b50565b6000813590506123a08161237a565b92915050565b6000602082840312156123bc576123bb6122ab565b5b60006123ca84828501612391565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561240d5780820151818401526020810190506123f2565b60008484015250505050565b6000601f19601f8301169050919050565b6000612435826123d3565b61243f81856123de565b935061244f8185602086016123ef565b61245881612419565b840191505092915050565b6000602082019050818103600083015261247d818461242a565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124c782612419565b810181811067ffffffffffffffff821117156124e6576124e561248f565b5b80604052505050565b60006124f96122a1565b905061250582826124be565b919050565b600067ffffffffffffffff8211156125255761252461248f565b5b61252e82612419565b9050602081019050919050565b82818337600083830152505050565b600061255d6125588461250a565b6124ef565b9050828152602081018484840111156125795761257861248a565b5b61258484828561253b565b509392505050565b600082601f8301126125a1576125a0612485565b5b81356125b184826020860161254a565b91505092915050565b600080604083850312156125d1576125d06122ab565b5b60006125df858286016122d6565b925050602083013567ffffffffffffffff811115612600576125ff6122b0565b5b61260c8582860161258c565b9150509250929050565b6000819050919050565b61262981612616565b811461263457600080fd5b50565b60008135905061264681612620565b92915050565b600060208284031215612662576126616122ab565b5b600061267084828501612637565b91505092915050565b61268281612616565b82525050565b600060208201905061269d6000830184612679565b92915050565b6000602082840312156126b9576126b86122ab565b5b600082013567ffffffffffffffff8111156126d7576126d66122b0565b5b6126e38482850161258c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612717826126ec565b9050919050565b6127278161270c565b811461273257600080fd5b50565b6000813590506127448161271e565b92915050565b60008060408385031215612761576127606122ab565b5b600061276f85828601612637565b925050602061278085828601612735565b9150509250929050565b6000819050919050565b60006127af6127aa6127a5846126ec565b61278a565b6126ec565b9050919050565b60006127c182612794565b9050919050565b60006127d3826127b6565b9050919050565b6127e3816127c8565b82525050565b60006020820190506127fe60008301846127da565b92915050565b61280d816122b5565b82525050565b60006020820190506128286000830184612804565b92915050565b600060208284031215612844576128436122ab565b5b600061285284828501612735565b91505092915050565b600067ffffffffffffffff82169050919050565b6128788161285b565b82525050565b6000602082019050612893600083018461286f565b92915050565b600080600080608085870312156128b3576128b26122ab565b5b600085013567ffffffffffffffff8111156128d1576128d06122b0565b5b6128dd8782880161258c565b945050602085013567ffffffffffffffff8111156128fe576128fd6122b0565b5b61290a8782880161258c565b935050604061291b878288016122d6565b925050606061292c878288016122d6565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061297857612977612938565b5b50565b600081905061298982612967565b919050565b60006129998261297b565b9050919050565b6129a98161298e565b82525050565b60006020820190506129c460008301846129a0565b92915050565b6129d38161285b565b81146129de57600080fd5b50565b6000813590506129f0816129ca565b92915050565b600060208284031215612a0c57612a0b6122ab565b5b6000612a1a848285016129e1565b91505092915050565b60008060408385031215612a3a57612a396122ab565b5b6000612a48858286016129e1565b9250506020612a59858286016122d6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612aaa57607f821691505b602082108103612abd57612abc612a63565b5b50919050565b612acc8161270c565b82525050565b6000604082019050612ae76000830185612ac3565b612af46020830184612ac3565b9392505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612b5d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612b20565b612b678683612b20565b95508019841693508086168417925050509392505050565b6000612b9a612b95612b90846122b5565b61278a565b6122b5565b9050919050565b6000819050919050565b612bb483612b7f565b612bc8612bc082612ba1565b848454612b2d565b825550505050565b600090565b612bdd612bd0565b612be8818484612bab565b505050565b5b81811015612c0c57612c01600082612bd5565b600181019050612bee565b5050565b601f821115612c5157612c2281612afb565b612c2b84612b10565b81016020851015612c3a578190505b612c4e612c4685612b10565b830182612bed565b50505b505050565b600082821c905092915050565b6000612c7460001984600802612c56565b1980831691505092915050565b6000612c8d8383612c63565b9150826002028217905092915050565b612ca6826123d3565b67ffffffffffffffff811115612cbf57612cbe61248f565b5b612cc98254612a92565b612cd4828285612c10565b600060209050601f831160018114612d075760008415612cf5578287015190505b612cff8582612c81565b865550612d67565b601f198416612d1586612afb565b60005b82811015612d3d57848901518255600182019150602085019450602081019050612d18565b86831015612d5a5784890151612d56601f891682612c63565b8355505b6001600288020188555050505b505050505050565b600081549050612d7e81612a92565b9050919050565b60008190508160005260206000209050919050565b818103612da8575050612e80565b612db182612d6f565b67ffffffffffffffff811115612dca57612dc961248f565b5b612dd48254612a92565b612ddf828285612c10565b6000601f831160018114612e0e5760008415612dfc578287015490505b612e068582612c81565b865550612e79565b601f198416612e1c87612d85565b9650612e2786612afb565b60005b82811015612e4f57848901548255600182019150600185019450602081019050612e2a565b86831015612e6c5784890154612e68601f891682612c63565b8355505b6001600288020188555050505b5050505050505b565b600081905092915050565b60008154612e9a81612a92565b612ea48186612e82565b94506001821660008114612ebf5760018114612ed457612f07565b60ff1983168652811515820286019350612f07565b612edd85612afb565b60005b83811015612eff57815481890152600182019150602081019050612ee0565b838801955050505b50505092915050565b6000612f1c8284612e8d565b915081905092915050565b600081519050919050565b612f3b82612f27565b67ffffffffffffffff811115612f5457612f5361248f565b5b612f5e8254612a92565b612f69828285612c10565b600060209050601f831160018114612f9c5760008415612f8a578287015190505b612f948582612c81565b865550612ffc565b601f198416612faa86612afb565b60005b82811015612fd257848901518255600182019150602085019450602081019050612fad565b86831015612fef5784890151612feb601f891682612c63565b8355505b6001600288020188555050505b505050505050565b600061301f61301a6130158461285b565b61278a565b6122b5565b9050919050565b61302f81613004565b82525050565b6000815461304281612a92565b61304c81866123de565b94506001821660008114613067576001811461307d576130b0565b60ff1983168652811515602002860193506130b0565b61308685612afb565b60005b838110156130a857815481890152600182019150602081019050613089565b808801955050505b50505092915050565b60006040820190506130ce6000830185613026565b81810360208301526130e08184613035565b90509392505050565b60006130f4826123d3565b6130fe8185612e82565b935061310e8185602086016123ef565b80840191505092915050565b600061312682846130e9565b915081905092915050565b6000604082019050818103600083015261314b818561242a565b905061315a6020830184612804565b9392505050565b600082825260208201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006131ce602f83613161565b91506131d982613172565b604082019050919050565b600060208201905081810360008301526131fd816131c1565b9050919050565b6000606082019050818103600083015261321e818661242a565b905061322d6020830185612804565b61323a6040830184612804565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061327c8261285b565b91506132878361285b565b9250828201905067ffffffffffffffff8111156132a7576132a6613242565b5b92915050565b6000815490506132bc81612a92565b9050919050565b8181036132d15750506133a9565b6132da826132ad565b67ffffffffffffffff8111156132f3576132f261248f565b5b6132fd8254612a92565b613308828285612c10565b6000601f8311600181146133375760008415613325578287015490505b61332f8582612c81565b8655506133a2565b601f19841661334587612afb565b965061335086612afb565b60005b8281101561337857848901548255600182019150600185019450602081019050613353565b868310156133955784890154613391601f891682612c63565b8355505b6001600288020188555050505b5050505050505b565b60006080820190506133c0600083018761286f565b81810360208301526133d2818661242a565b90506133e16040830185612804565b6133ee6060830184612804565b95945050505050565b600060408201905061340c6000830185612804565b818103602083015261341e8184613035565b90509392505050565b60008151905061343681612620565b92915050565b600060208284031215613452576134516122ab565b5b600061346084828501613427565b91505092915050565b600060408201905061347e6000830185612679565b61348b60208301846129a0565b9392505050565b6000815190506134a18161271e565b92915050565b6000602082840312156134bd576134bc6122ab565b5b60006134cb84828501613492565b91505092915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006135156017836134d4565b9150613520826134df565b601782019050919050565b600061353682612f27565b61354081856134d4565b93506135508185602086016123ef565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006135926011836134d4565b915061359d8261355c565b601182019050919050565b60006135b382613508565b91506135bf828561352b565b91506135ca82613585565b91506135d6828461352b565b91508190509392505050565b60006135ed82612f27565b6135f78185613161565b93506136078185602086016123ef565b61361081612419565b840191505092915050565b6000602082019050818103600083015261363581846135e2565b905092915050565b6000613648826122b5565b9150613653836122b5565b9250828202613661816122b5565b9150828204841483151761367857613677613242565b5b5092915050565b600061368a826122b5565b9150613695836122b5565b92508282019050808211156136ad576136ac613242565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006136ed826122b5565b915060008203613700576136ff613242565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000613741602083613161565b915061374c8261370b565b602082019050919050565b6000602082019050818103600083015261377081613734565b905091905056fea26469706673582212201e2a01f7d42c95a37d43cc51d3acf63d45808136d4b730234342c6e614b2558164736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80636f50cd97116100f9578063a05b775f11610097578063c9b2874911610071578063c9b2874914610552578063d547741f14610582578063d964a3751461059e578063f48d60ca146105ce576101a9565b8063a05b775f146104d4578063a217fddf14610504578063a2f4210414610522576101a9565b8063880bc4e6116100d3578063880bc4e61461043a57806391d148541461046a5780639a2056f41461049a5780639dca0032146104b6576101a9565b80636f50cd97146103d0578063704b6c021461040057806375b238fc1461041c576101a9565b806327bd069e1161016657806339c7639c1161014057806339c7639c1461032257806349fcbc541461035257806350d17b5e146103825780636a3000c4146103a0576101a9565b806327bd069e146102ce5780632f2ff15d146102ea57806336568abe14610306576101a9565b806301c6d035146101ae57806301ffc9a7146101de57806303e9e6091461020e57806306985fb11461023e57806315d464741461026e578063248a9ca31461029e575b600080fd5b6101c860048036038101906101c391906122eb565b6105fe565b6040516101d59190612333565b60405180910390f35b6101f860048036038101906101f391906123a6565b61062b565b6040516102059190612333565b60405180910390f35b610228600480360381019061022391906122eb565b6106a5565b6040516102359190612463565b60405180910390f35b610258600480360381019061025391906125ba565b61074d565b6040516102659190612333565b60405180910390f35b610288600480360381019061028391906122eb565b6108e2565b6040516102959190612333565b60405180910390f35b6102b860048036038101906102b3919061264c565b610ca3565b6040516102c59190612688565b60405180910390f35b6102e860048036038101906102e391906126a3565b610cc2565b005b61030460048036038101906102ff919061274a565b610d48565b005b610320600480360381019061031b919061274a565b610d69565b005b61033c600480360381019061033791906122eb565b610dec565b6040516103499190612333565b60405180910390f35b61036c600480360381019061036791906122eb565b610e19565b6040516103799190612333565b60405180910390f35b61038a610f39565b60405161039791906127e9565b60405180910390f35b6103ba60048036038101906103b591906122eb565b610f5f565b6040516103c79190612463565b60405180910390f35b6103ea60048036038101906103e591906126a3565b611007565b6040516103f79190612813565b60405180910390f35b61041a6004803603810190610415919061282e565b61102f565b005b6104246110c8565b6040516104319190612688565b60405180910390f35b610454600480360381019061044f91906122eb565b6110ec565b604051610461919061287e565b60405180910390f35b610484600480360381019061047f919061274a565b611120565b6040516104919190612333565b60405180910390f35b6104b460048036038101906104af9190612899565b61118a565b005b6104be61165f565b6040516104cb91906129af565b60405180910390f35b6104ee60048036038101906104e991906122eb565b611672565b6040516104fb9190612813565b60405180910390f35b61050c611692565b6040516105199190612688565b60405180910390f35b61053c600480360381019061053791906129f6565b611699565b6040516105499190612813565b60405180910390f35b61056c60048036038101906105679190612a23565b6116e3565b6040516105799190612333565b60405180910390f35b61059c6004803603810190610597919061274a565b611820565b005b6105b860048036038101906105b391906122eb565b611841565b6040516105c59190612333565b60405180910390f35b6105e860048036038101906105e391906122eb565b611b9e565b6040516105f59190612333565b60405180910390f35b60006002600083815260200190815260200160002060050160019054906101000a900460ff169050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061069e575061069d82611bcb565b5b9050919050565b60606002600083815260200190815260200160002060060180546106c890612a92565b80601f01602080910402602001604051908101604052809291908181526020018280546106f490612a92565b80156107415780601f1061071657610100808354040283529160200191610741565b820191906000526020600020905b81548152906001019060200180831161072457829003601f168201915b50505050509050919050565b6000610757611c35565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156107b957506107b77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611120565b155b15610804576107c6611c35565b336040517f3274939c0000000000000000000000000000000000000000000000000000000081526004016107fb929190612ad2565b60405180910390fd5b600015156002600085815260200190815260200160002060050160009054906101000a900460ff1615150361083c57600090506108dc565b8160026000858152602001908152602001600020600601908161085f9190612c9d565b5060026000848152602001908152602001600020600601600160006002600087815260200190815260200160002060010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060060190816108d69190612d9a565b50600190505b92915050565b60006108ec611c35565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561094e575061094c7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611120565b155b156109995761095b611c35565b336040517f3274939c000000000000000000000000000000000000000000000000000000008152600401610990929190612ad2565b60405180910390fd5b600015156002600084815260200190815260200160002060050160009054906101000a900460ff161515036109d15760009050610c9e565b60006002600084815260200190815260200160002060010160009054906101000a900467ffffffffffffffff1690506002600084815260200190815260200160002060008082016000610a249190612244565b6001820160006101000a81549067ffffffffffffffff02191690556002820160009055600382016000610a579190612244565b60048201600090556005820160006101000a81549060ff02191690556005820160016101000a81549060ff0219169055600682016000610a979190612244565b50506003600160008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600301604051610ad29190612f10565b9081526020016040518091039020600090556000600160008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050160016101000a81548160ff0219169083151502179055506000600160008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050160006101000a81548160ff0219169083151502179055506000600160008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201819055506040518060400160405280600181526020016000815250600160008367ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206000019081610be79190612f32565b506040518060400160405280600181526020016000815250600160008367ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206006019081610c359190612f32565b507fd4a95e28367a3ce6694042b01d34e7ba0198bcdaca1ffb38eaec9898c748b0ad81600160008467ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600001604051610c909291906130b9565b60405180910390a160019150505b919050565b6000806000838152602001908152602001600020600101549050919050565b6000600382604051610cd4919061311a565b90815260200160405180910390205414610d455780600382604051610cf9919061311a565b9081526020016040518091039020546040517f3bcbf6c4000000000000000000000000000000000000000000000000000000008152600401610d3c929190613131565b60405180910390fd5b50565b610d5182610ca3565b610d5a81611d79565b610d648383611d8d565b505050565b610d71611e6d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd5906131e4565b60405180910390fd5b610de88282611e75565b5050565b60006002600083815260200190815260200160002060050160019054906101000a900460ff169050919050565b600080600260008481526020019081526020016000206004015490506000600260008581526020019081526020016000206003018054610e5890612a92565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8490612a92565b8015610ed15780601f10610ea657610100808354040283529160200191610ed1565b820191906000526020600020905b815481529060010190602001808311610eb457829003601f168201915b50505050509050600042831090508015610f2c577fb2363f688f7b32557c64bff90081959f0bb6c24f09ca465424c5afc5854dc58d828685604051610f1893929190613204565b60405180910390a160019350505050610f34565b600093505050505b919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600260008381526020019081526020016000206003018054610f8290612a92565b80601f0160208091040260200160405190810160405280929190818152602001828054610fae90612a92565b8015610ffb5780601f10610fd057610100808354040283529160200191610ffb565b820191906000526020600020905b815481529060010190602001808311610fde57829003601f168201915b50505050509050919050565b6000600382604051611019919061311a565b9081526020016040518091039020549050919050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261105981611d79565b6110837fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4283611d8d565b81600660086101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b60006002600083815260200190815260200160002060010160009054906101000a900467ffffffffffffffff169050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611192611c35565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156111f457506111f27fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611120565b155b1561123f57611201611c35565b336040517f3274939c000000000000000000000000000000000000000000000000000000008152600401611236929190612ad2565b60405180910390fd5b6000600384604051611251919061311a565b908152602001604051809103902054146112c25782600384604051611276919061311a565b9081526020016040518091039020546040517f3bcbf6c40000000000000000000000000000000000000000000000000000000081526004016112b9929190613131565b60405180910390fd5b6001600660009054906101000a900467ffffffffffffffff166112e59190613271565b600660006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600660009054906101000a900467ffffffffffffffff16905084600160008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600001908161135f9190612c9d565b5082600160008367ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018190555083600160008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060030190816113c69190612c9d565b5081600160008367ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206004018190555060018060008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050160016101000a81548160ff02191690831515021790555060018060008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050160006101000a81548160ff02191690831515021790555080600160008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160008267ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600260008581526020019081526020016000206000820181600001908161151991906132c3565b506001820160009054906101000a900467ffffffffffffffff168160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600282015481600201556003820181600301908161157b91906132c3565b50600482015481600401556005820160009054906101000a900460ff168160050160006101000a81548160ff0219169083151502179055506005820160019054906101000a900460ff168160050160016101000a81548160ff021916908315150217905550600682018160060190816115f491906132c3565b5090505082600385604051611609919061311a565b9081526020016040518091039020819055507fc276b207558b882d6e0e49fc3e221e9fd140cced79dd16fae88e0de97f4a2f0d8186848660405161165094939291906133ab565b60405180910390a15050505050565b600760149054906101000a900460ff1681565b600060026000838152602001908152602001600020600401549050919050565b6000801b81565b600060026000600160008567ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201548152602001908152602001600020600201549050919050565b60006116ed611c35565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561174f575061174d7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611120565b155b1561179a5761175c611c35565b336040517f3274939c000000000000000000000000000000000000000000000000000000008152600401611791929190612ad2565b60405180910390fd5b60001515600160008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050160009054906101000a900460ff161515036117e6576000905061181a565b81600160008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020181905550600190505b92915050565b61182982610ca3565b61183281611d79565b61183c8383611e75565b505050565b600061184b611c35565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156118ad57506118ab7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611120565b155b156118f8576118ba611c35565b336040517f3274939c0000000000000000000000000000000000000000000000000000000081526004016118ef929190612ad2565b60405180910390fd5b600015156002600084815260200190815260200160002060050160019054906101000a900460ff161515036119305760009050611b99565b60006002600084815260200190815260200160002060050160016101000a81548160ff0219169083151502179055506000600260008481526020019081526020016000206002018190555060405180604001604052806001815260200160008152506002600084815260200190815260200160002060000190816119b49190612f32565b5060405180604001604052806001815260200160008152506002600084815260200190815260200160002060060190816119ee9190612f32565b5060026000838152602001908152602001600020600160006002600086815260200190815260200160002060010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201816000019081611a6791906132c3565b506001820160009054906101000a900467ffffffffffffffff168160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506002820154816002015560038201816003019081611ac991906132c3565b50600482015481600401556005820160009054906101000a900460ff168160050160006101000a81548160ff0219169083151502179055506005820160019054906101000a900460ff168160050160016101000a81548160ff02191690831515021790555060068201816006019081611b4291906132c3565b509050507fae179513beb9b19a22a2c82f794dfd4d379cbbd2e7e95c744a1ea89ad20032f78260026000858152602001908152602001600020600301604051611b8c9291906133f7565b60405180910390a1600190505b919050565b60006002600083815260200190815260200160002060050160019054906101000a900460ff169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634216e73a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d06919061343c565b600760149054906101000a900460ff166040518363ffffffff1660e01b8152600401611d33929190613469565b602060405180830381865afa158015611d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7491906134a7565b905090565b611d8a81611d85611e6d565b611f56565b50565b611d978282611120565b611e6957600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e0e611e6d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b611e7f8282611120565b15611f5257600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ef7611e6d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611f608282611120565b611fd757611f6d81611fdb565b611f7b8360001c6020612008565b604051602001611f8c9291906135a8565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce919061361b565b60405180910390fd5b5050565b60606120018273ffffffffffffffffffffffffffffffffffffffff16601460ff16612008565b9050919050565b60606000600283600261201b919061363d565b612025919061367f565b67ffffffffffffffff81111561203e5761203d61248f565b5b6040519080825280601f01601f1916602001820160405280156120705781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106120a8576120a76136b3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061210c5761210b6136b3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261214c919061363d565b612156919061367f565b90505b60018111156121f6577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612198576121976136b3565b5b1a60f81b8282815181106121af576121ae6136b3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806121ef906136e2565b9050612159565b506000841461223a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223190613757565b60405180910390fd5b8091505092915050565b50805461225090612a92565b6000825580601f106122625750612281565b601f0160209004906000526020600020908101906122809190612284565b5b50565b5b8082111561229d576000816000905550600101612285565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6122c8816122b5565b81146122d357600080fd5b50565b6000813590506122e5816122bf565b92915050565b600060208284031215612301576123006122ab565b5b600061230f848285016122d6565b91505092915050565b60008115159050919050565b61232d81612318565b82525050565b60006020820190506123486000830184612324565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123838161234e565b811461238e57600080fd5b50565b6000813590506123a08161237a565b92915050565b6000602082840312156123bc576123bb6122ab565b5b60006123ca84828501612391565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561240d5780820151818401526020810190506123f2565b60008484015250505050565b6000601f19601f8301169050919050565b6000612435826123d3565b61243f81856123de565b935061244f8185602086016123ef565b61245881612419565b840191505092915050565b6000602082019050818103600083015261247d818461242a565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124c782612419565b810181811067ffffffffffffffff821117156124e6576124e561248f565b5b80604052505050565b60006124f96122a1565b905061250582826124be565b919050565b600067ffffffffffffffff8211156125255761252461248f565b5b61252e82612419565b9050602081019050919050565b82818337600083830152505050565b600061255d6125588461250a565b6124ef565b9050828152602081018484840111156125795761257861248a565b5b61258484828561253b565b509392505050565b600082601f8301126125a1576125a0612485565b5b81356125b184826020860161254a565b91505092915050565b600080604083850312156125d1576125d06122ab565b5b60006125df858286016122d6565b925050602083013567ffffffffffffffff811115612600576125ff6122b0565b5b61260c8582860161258c565b9150509250929050565b6000819050919050565b61262981612616565b811461263457600080fd5b50565b60008135905061264681612620565b92915050565b600060208284031215612662576126616122ab565b5b600061267084828501612637565b91505092915050565b61268281612616565b82525050565b600060208201905061269d6000830184612679565b92915050565b6000602082840312156126b9576126b86122ab565b5b600082013567ffffffffffffffff8111156126d7576126d66122b0565b5b6126e38482850161258c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612717826126ec565b9050919050565b6127278161270c565b811461273257600080fd5b50565b6000813590506127448161271e565b92915050565b60008060408385031215612761576127606122ab565b5b600061276f85828601612637565b925050602061278085828601612735565b9150509250929050565b6000819050919050565b60006127af6127aa6127a5846126ec565b61278a565b6126ec565b9050919050565b60006127c182612794565b9050919050565b60006127d3826127b6565b9050919050565b6127e3816127c8565b82525050565b60006020820190506127fe60008301846127da565b92915050565b61280d816122b5565b82525050565b60006020820190506128286000830184612804565b92915050565b600060208284031215612844576128436122ab565b5b600061285284828501612735565b91505092915050565b600067ffffffffffffffff82169050919050565b6128788161285b565b82525050565b6000602082019050612893600083018461286f565b92915050565b600080600080608085870312156128b3576128b26122ab565b5b600085013567ffffffffffffffff8111156128d1576128d06122b0565b5b6128dd8782880161258c565b945050602085013567ffffffffffffffff8111156128fe576128fd6122b0565b5b61290a8782880161258c565b935050604061291b878288016122d6565b925050606061292c878288016122d6565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061297857612977612938565b5b50565b600081905061298982612967565b919050565b60006129998261297b565b9050919050565b6129a98161298e565b82525050565b60006020820190506129c460008301846129a0565b92915050565b6129d38161285b565b81146129de57600080fd5b50565b6000813590506129f0816129ca565b92915050565b600060208284031215612a0c57612a0b6122ab565b5b6000612a1a848285016129e1565b91505092915050565b60008060408385031215612a3a57612a396122ab565b5b6000612a48858286016129e1565b9250506020612a59858286016122d6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612aaa57607f821691505b602082108103612abd57612abc612a63565b5b50919050565b612acc8161270c565b82525050565b6000604082019050612ae76000830185612ac3565b612af46020830184612ac3565b9392505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612b5d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612b20565b612b678683612b20565b95508019841693508086168417925050509392505050565b6000612b9a612b95612b90846122b5565b61278a565b6122b5565b9050919050565b6000819050919050565b612bb483612b7f565b612bc8612bc082612ba1565b848454612b2d565b825550505050565b600090565b612bdd612bd0565b612be8818484612bab565b505050565b5b81811015612c0c57612c01600082612bd5565b600181019050612bee565b5050565b601f821115612c5157612c2281612afb565b612c2b84612b10565b81016020851015612c3a578190505b612c4e612c4685612b10565b830182612bed565b50505b505050565b600082821c905092915050565b6000612c7460001984600802612c56565b1980831691505092915050565b6000612c8d8383612c63565b9150826002028217905092915050565b612ca6826123d3565b67ffffffffffffffff811115612cbf57612cbe61248f565b5b612cc98254612a92565b612cd4828285612c10565b600060209050601f831160018114612d075760008415612cf5578287015190505b612cff8582612c81565b865550612d67565b601f198416612d1586612afb565b60005b82811015612d3d57848901518255600182019150602085019450602081019050612d18565b86831015612d5a5784890151612d56601f891682612c63565b8355505b6001600288020188555050505b505050505050565b600081549050612d7e81612a92565b9050919050565b60008190508160005260206000209050919050565b818103612da8575050612e80565b612db182612d6f565b67ffffffffffffffff811115612dca57612dc961248f565b5b612dd48254612a92565b612ddf828285612c10565b6000601f831160018114612e0e5760008415612dfc578287015490505b612e068582612c81565b865550612e79565b601f198416612e1c87612d85565b9650612e2786612afb565b60005b82811015612e4f57848901548255600182019150600185019450602081019050612e2a565b86831015612e6c5784890154612e68601f891682612c63565b8355505b6001600288020188555050505b5050505050505b565b600081905092915050565b60008154612e9a81612a92565b612ea48186612e82565b94506001821660008114612ebf5760018114612ed457612f07565b60ff1983168652811515820286019350612f07565b612edd85612afb565b60005b83811015612eff57815481890152600182019150602081019050612ee0565b838801955050505b50505092915050565b6000612f1c8284612e8d565b915081905092915050565b600081519050919050565b612f3b82612f27565b67ffffffffffffffff811115612f5457612f5361248f565b5b612f5e8254612a92565b612f69828285612c10565b600060209050601f831160018114612f9c5760008415612f8a578287015190505b612f948582612c81565b865550612ffc565b601f198416612faa86612afb565b60005b82811015612fd257848901518255600182019150602085019450602081019050612fad565b86831015612fef5784890151612feb601f891682612c63565b8355505b6001600288020188555050505b505050505050565b600061301f61301a6130158461285b565b61278a565b6122b5565b9050919050565b61302f81613004565b82525050565b6000815461304281612a92565b61304c81866123de565b94506001821660008114613067576001811461307d576130b0565b60ff1983168652811515602002860193506130b0565b61308685612afb565b60005b838110156130a857815481890152600182019150602081019050613089565b808801955050505b50505092915050565b60006040820190506130ce6000830185613026565b81810360208301526130e08184613035565b90509392505050565b60006130f4826123d3565b6130fe8185612e82565b935061310e8185602086016123ef565b80840191505092915050565b600061312682846130e9565b915081905092915050565b6000604082019050818103600083015261314b818561242a565b905061315a6020830184612804565b9392505050565b600082825260208201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006131ce602f83613161565b91506131d982613172565b604082019050919050565b600060208201905081810360008301526131fd816131c1565b9050919050565b6000606082019050818103600083015261321e818661242a565b905061322d6020830185612804565b61323a6040830184612804565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061327c8261285b565b91506132878361285b565b9250828201905067ffffffffffffffff8111156132a7576132a6613242565b5b92915050565b6000815490506132bc81612a92565b9050919050565b8181036132d15750506133a9565b6132da826132ad565b67ffffffffffffffff8111156132f3576132f261248f565b5b6132fd8254612a92565b613308828285612c10565b6000601f8311600181146133375760008415613325578287015490505b61332f8582612c81565b8655506133a2565b601f19841661334587612afb565b965061335086612afb565b60005b8281101561337857848901548255600182019150600185019450602081019050613353565b868310156133955784890154613391601f891682612c63565b8355505b6001600288020188555050505b5050505050505b565b60006080820190506133c0600083018761286f565b81810360208301526133d2818661242a565b90506133e16040830185612804565b6133ee6060830184612804565b95945050505050565b600060408201905061340c6000830185612804565b818103602083015261341e8184613035565b90509392505050565b60008151905061343681612620565b92915050565b600060208284031215613452576134516122ab565b5b600061346084828501613427565b91505092915050565b600060408201905061347e6000830185612679565b61348b60208301846129a0565b9392505050565b6000815190506134a18161271e565b92915050565b6000602082840312156134bd576134bc6122ab565b5b60006134cb84828501613492565b91505092915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006135156017836134d4565b9150613520826134df565b601782019050919050565b600061353682612f27565b61354081856134d4565b93506135508185602086016123ef565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006135926011836134d4565b915061359d8261355c565b601182019050919050565b60006135b382613508565b91506135bf828561352b565b91506135ca82613585565b91506135d6828461352b565b91508190509392505050565b60006135ed82612f27565b6135f78185613161565b93506136078185602086016123ef565b61361081612419565b840191505092915050565b6000602082019050818103600083015261363581846135e2565b905092915050565b6000613648826122b5565b9150613653836122b5565b9250828202613661816122b5565b9150828204841483151761367857613677613242565b5b5092915050565b600061368a826122b5565b9150613695836122b5565b92508282019050808211156136ad576136ac613242565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006136ed826122b5565b915060008203613700576136ff613242565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000613741602083613161565b915061374c8261370b565b602082019050919050565b6000602082019050818103600083015261377081613734565b905091905056fea26469706673582212201e2a01f7d42c95a37d43cc51d3acf63d45808136d4b730234342c6e614b2558164736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/DomainWalletRegistry.json b/contracts/cayenne/DomainWalletRegistry.json deleted file mode 100644 index 12ef39e..0000000 --- a/contracts/cayenne/DomainWalletRegistry.json +++ /dev/null @@ -1,659 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "DomainWalletRegistry", - "sourceName": "contracts/domain-wallets/DomainWalletRegistry.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_resolver", - "type": "address" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "_env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "metadataCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "validMetadataCount", - "type": "uint256" - } - ], - "name": "InvalidNftMetadataCollectionLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "adminAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NonAdminCaller", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "contractResolver", - "outputs": [ - { - "internalType": "contract ContractResolver", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "env", - "outputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "getDomainIdByTokenId", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "uri", - "type": "bytes" - } - ], - "name": "getDomainTokenIdByUri", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "getDomainUri", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "getExpiration", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "id", - "type": "uint64" - } - ], - "name": "getPkpTokenId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "hasExpired", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "hasOwner", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "isOwner", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "isRouted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "userId", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "uri", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "ttl", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - }, - { - "internalType": "string[]", - "name": "nftMetadata", - "type": "string[]" - } - ], - "name": "registerDomain", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "userId", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "uri", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "ttl", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "string[]", - "name": "nftMetadata", - "type": "string[]" - } - ], - "name": "registerDomainAndMintNext", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "id", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "registerPKP", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "removeDomain", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - } - ], - "name": "revokeDomain", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "adminAddress", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pkpTokenId", - "type": "uint256" - }, - { - "internalType": "string[]", - "name": "nftMetadata", - "type": "string[]" - } - ], - "name": "setPKPMetadata", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162003f5f38038062003f5f8339818101604052810190620000379190620003eb565b33600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160146101000a81548160ff02191690836002811115620000e157620000e062000432565b5b02179055506200013a7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200017460201b60201c565b6200016c7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42806200026560201b60201c565b505062000461565b620001868282620002c860201b60201c565b6200026157600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002066200033260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000278836200033a60201b60201c565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b6000806000838152602001908152602001600020600101549050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200038b826200035e565b9050919050565b6200039d816200037e565b8114620003a957600080fd5b50565b600081519050620003bd8162000392565b92915050565b60038110620003d157600080fd5b50565b600081519050620003e581620003c3565b92915050565b6000806040838503121562000405576200040462000359565b5b60006200041585828601620003ac565b92505060206200042885828601620003d4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b613aee80620004716000396000f3fe6080604052600436106101815760003560e01c8063704b6c02116100d1578063a217fddf1161008a578063c9b2874911610064578063c9b287491461061f578063d547741f1461065c578063d964a37514610685578063f48d60ca146106c257610181565b8063a217fddf1461058e578063a2f42104146105b9578063b6e7f4d2146105f657610181565b8063704b6c021461045857806375b238fc14610481578063880bc4e6146104ac57806391d14854146104e95780639dca003214610526578063a05b775f1461055157610181565b806339c7639c1161013e5780635530adf8116101185780635530adf8146103715780635b045724146103a15780636a3000c4146103de5780636f50cd971461041b57610181565b806339c7639c146102cc57806349fcbc541461030957806350d17b5e1461034657610181565b806301c6d0351461018657806301ffc9a7146101c357806315d4647414610200578063248a9ca31461023d5780632f2ff15d1461027a57806336568abe146102a3575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a8919061211f565b6106ff565b6040516101ba9190612167565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e591906121da565b61078e565b6040516101f79190612167565b60405180910390f35b34801561020c57600080fd5b506102276004803603810190610222919061211f565b610808565b6040516102349190612167565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f919061223d565b6109a1565b6040516102719190612279565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c91906122f2565b6109c0565b005b3480156102af57600080fd5b506102ca60048036038101906102c591906122f2565b6109e1565b005b3480156102d857600080fd5b506102f360048036038101906102ee919061211f565b610a64565b6040516103009190612167565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b919061211f565b610af3565b60405161033d9190612167565b60405180910390f35b34801561035257600080fd5b5061035b610c14565b6040516103689190612391565b60405180910390f35b61038b600480360381019061038691906128fe565b610c3a565b6040516103989190612a87565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190612aa2565b610eaa565b6040516103d59190612a87565b60405180910390f35b3480156103ea57600080fd5b506104056004803603810190610400919061211f565b6110cd565b6040516104129190612bf0565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190612c12565b611162565b60405161044f9190612a87565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190612c5b565b6111f1565b005b34801561048d57600080fd5b50610496611249565b6040516104a39190612279565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce919061211f565b61126d565b6040516104e09190612cab565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b91906122f2565b6112fc565b60405161051d9190612167565b60405180910390f35b34801561053257600080fd5b5061053b611366565b6040516105489190612d3d565b60405180910390f35b34801561055d57600080fd5b506105786004803603810190610573919061211f565b611379565b6040516105859190612a87565b60405180910390f35b34801561059a57600080fd5b506105a3611408565b6040516105b09190612279565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190612d84565b61140f565b6040516105ed9190612a87565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190612db1565b61149e565b005b34801561062b57600080fd5b5061064660048036038101906106419190612e0d565b6115ab565b6040516106539190612167565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e91906122f2565b6116cf565b005b34801561069157600080fd5b506106ac60048036038101906106a7919061211f565b6116f0565b6040516106b99190612167565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e4919061211f565b611889565b6040516106f69190612167565b60405180910390f35b60008061070a611918565b90508073ffffffffffffffffffffffffffffffffffffffff166301c6d035846040518263ffffffff1660e01b81526004016107459190612a87565b602060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107869190612e79565b915050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610801575061080082611a5c565b5b9050919050565b60006108347fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b61089957600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401610890929190612eb5565b60405180910390fd5b60006108a3611918565b905060006108af611ac6565b90508073ffffffffffffffffffffffffffffffffffffffff16632b553551856040518263ffffffff1660e01b81526004016108ea9190612a87565b600060405180830381600087803b15801561090457600080fd5b505af1158015610918573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff166315d46474856040518263ffffffff1660e01b81526004016109559190612a87565b6020604051808303816000875af1158015610974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109989190612e79565b92505050919050565b6000806000838152602001908152602001600020600101549050919050565b6109c9826109a1565b6109d281611c0a565b6109dc8383611c1e565b505050565b6109e9611cfe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90612f61565b60405180910390fd5b610a608282611d06565b5050565b600080610a6f611918565b90508073ffffffffffffffffffffffffffffffffffffffff166339c7639c846040518263ffffffff1660e01b8152600401610aaa9190612a87565b602060405180830381865afa158015610ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aeb9190612e79565b915050919050565b6000610b1f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b610b8457600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401610b7b929190612eb5565b60405180910390fd5b6000610b8e611918565b90508073ffffffffffffffffffffffffffffffffffffffff166349fcbc54846040518263ffffffff1660e01b8152600401610bc99190612a87565b6020604051808303816000875af1158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c9190612e79565b915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c667fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b610ccb57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401610cc2929190612eb5565b60405180910390fd5b6000610cd5611918565b90506000610ce1611ac6565b90508173ffffffffffffffffffffffffffffffffffffffff166327bd069e8b6040518263ffffffff1660e01b8152600401610d1c9190612bf0565b60006040518083038186803b158015610d3457600080fd5b505afa158015610d48573d6000803e3d6000fd5b505050506002845114610d9657835160026040517f216aeb3f000000000000000000000000000000000000000000000000000000008152600401610d8d929190612fbc565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663ffc833253460028c8c8c8c8c6001806040518a63ffffffff1660e01b8152600401610de29897969594939291906133f7565b60206040518083038185885af1158015610e00573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e2591906134ad565b90508273ffffffffffffffffffffffffffffffffffffffff16639a2056f48d8d848e6040518563ffffffff1660e01b8152600401610e6694939291906134da565b600060405180830381600087803b158015610e8057600080fd5b505af1158015610e94573d6000803e3d6000fd5b5050505080935050505098975050505050505050565b6000610ed67fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b610f3b57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401610f32929190612eb5565b60405180910390fd5b6002825114610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f76906135c5565b60405180910390fd5b6002825114610fc957815160026040517f216aeb3f000000000000000000000000000000000000000000000000000000008152600401610fc0929190612fbc565b60405180910390fd5b6000610fd3611918565b90506000610fdf611ac6565b90508173ffffffffffffffffffffffffffffffffffffffff16639a2056f48989888a6040518563ffffffff1660e01b815260040161102094939291906134da565b600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663782e2ea586866040518363ffffffff1660e01b815260040161108d9291906135e5565b600060405180830381600087803b1580156110a757600080fd5b505af11580156110bb573d6000803e3d6000fd5b50505050849250505095945050505050565b606060006110d9611918565b90508073ffffffffffffffffffffffffffffffffffffffff16636a3000c4846040518263ffffffff1660e01b81526004016111149190612a87565b600060405180830381865afa158015611131573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061115a9190613685565b915050919050565b60008061116d611918565b90508073ffffffffffffffffffffffffffffffffffffffff16636f50cd97846040518263ffffffff1660e01b81526004016111a89190612bf0565b602060405180830381865afa1580156111c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e991906134ad565b915050919050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261121b81611c0a565b6112457fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4283611c1e565b5050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b600080611278611918565b90508073ffffffffffffffffffffffffffffffffffffffff1663880bc4e6846040518263ffffffff1660e01b81526004016112b39190612a87565b602060405180830381865afa1580156112d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f491906136e3565b915050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600160149054906101000a900460ff1681565b600080611384611918565b90508073ffffffffffffffffffffffffffffffffffffffff1663a05b775f846040518263ffffffff1660e01b81526004016113bf9190612a87565b602060405180830381865afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140091906134ad565b915050919050565b6000801b81565b60008061141a611918565b90508073ffffffffffffffffffffffffffffffffffffffff1663a2f42104846040518263ffffffff1660e01b81526004016114559190612cab565b602060405180830381865afa158015611472573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149691906134ad565b915050919050565b6114c87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b61152d57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401611524929190612eb5565b60405180910390fd5b6000611537611ac6565b90508073ffffffffffffffffffffffffffffffffffffffff1663782e2ea584846040518363ffffffff1660e01b81526004016115749291906135e5565b600060405180830381600087803b15801561158e57600080fd5b505af11580156115a2573d6000803e3d6000fd5b50505050505050565b60006115d77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b61163c57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401611633929190612eb5565b60405180910390fd5b6000611646611918565b90508073ffffffffffffffffffffffffffffffffffffffff1663c9b2874985856040518363ffffffff1660e01b8152600401611683929190613710565b6020604051808303816000875af11580156116a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c69190612e79565b91505092915050565b6116d8826109a1565b6116e181611c0a565b6116eb8383611d06565b505050565b600061171c7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b61178157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401611778929190612eb5565b60405180910390fd5b600061178b611918565b90506000611797611ac6565b90508073ffffffffffffffffffffffffffffffffffffffff16632b553551856040518263ffffffff1660e01b81526004016117d29190612a87565b600060405180830381600087803b1580156117ec57600080fd5b505af1158015611800573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663d964a375856040518263ffffffff1660e01b815260040161183d9190612a87565b6020604051808303816000875af115801561185c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118809190612e79565b92505050919050565b600080611894611918565b90508073ffffffffffffffffffffffffffffffffffffffff1663f48d60ca846040518263ffffffff1660e01b81526004016118cf9190612a87565b602060405180830381865afa1580156118ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119109190612e79565b915050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166372823fa76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e9919061374e565b600160149054906101000a900460ff166040518363ffffffff1660e01b8152600401611a1692919061377b565b602060405180830381865afa158015611a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5791906137b9565b905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663977a80706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b97919061374e565b600160149054906101000a900460ff166040518363ffffffff1660e01b8152600401611bc492919061377b565b602060405180830381865afa158015611be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0591906137b9565b905090565b611c1b81611c16611cfe565b611de7565b50565b611c2882826112fc565b611cfa57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c9f611cfe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b611d1082826112fc565b15611de357600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611d88611cfe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611df182826112fc565b611e6857611dfe81611e6c565b611e0c8360001c6020611e99565b604051602001611e1d9291906138ba565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f919061392d565b60405180910390fd5b5050565b6060611e928273ffffffffffffffffffffffffffffffffffffffff16601460ff16611e99565b9050919050565b606060006002836002611eac919061397e565b611eb691906139c0565b67ffffffffffffffff811115611ecf57611ece6123c7565b5b6040519080825280601f01601f191660200182016040528015611f015781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611f3957611f386139f4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611f9d57611f9c6139f4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611fdd919061397e565b611fe791906139c0565b90505b6001811115612087577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612029576120286139f4565b5b1a60f81b8282815181106120405761203f6139f4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061208090613a23565b9050611fea565b50600084146120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c290613a98565b60405180910390fd5b8091505092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6120fc816120e9565b811461210757600080fd5b50565b600081359050612119816120f3565b92915050565b600060208284031215612135576121346120df565b5b60006121438482850161210a565b91505092915050565b60008115159050919050565b6121618161214c565b82525050565b600060208201905061217c6000830184612158565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6121b781612182565b81146121c257600080fd5b50565b6000813590506121d4816121ae565b92915050565b6000602082840312156121f0576121ef6120df565b5b60006121fe848285016121c5565b91505092915050565b6000819050919050565b61221a81612207565b811461222557600080fd5b50565b60008135905061223781612211565b92915050565b600060208284031215612253576122526120df565b5b600061226184828501612228565b91505092915050565b61227381612207565b82525050565b600060208201905061228e600083018461226a565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122bf82612294565b9050919050565b6122cf816122b4565b81146122da57600080fd5b50565b6000813590506122ec816122c6565b92915050565b60008060408385031215612309576123086120df565b5b600061231785828601612228565b9250506020612328858286016122dd565b9150509250929050565b6000819050919050565b600061235761235261234d84612294565b612332565b612294565b9050919050565b60006123698261233c565b9050919050565b600061237b8261235e565b9050919050565b61238b81612370565b82525050565b60006020820190506123a66000830184612382565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6123ff826123b6565b810181811067ffffffffffffffff8211171561241e5761241d6123c7565b5b80604052505050565b60006124316120d5565b905061243d82826123f6565b919050565b600067ffffffffffffffff82111561245d5761245c6123c7565b5b612466826123b6565b9050602081019050919050565b82818337600083830152505050565b600061249561249084612442565b612427565b9050828152602081018484840111156124b1576124b06123b1565b5b6124bc848285612473565b509392505050565b600082601f8301126124d9576124d86123ac565b5b81356124e9848260208601612482565b91505092915050565b600067ffffffffffffffff82111561250d5761250c6123c7565b5b602082029050602081019050919050565b600080fd5b6000612536612531846124f2565b612427565b905080838252602082019050602084028301858111156125595761255861251e565b5b835b81811015612582578061256e888261210a565b84526020840193505060208101905061255b565b5050509392505050565b600082601f8301126125a1576125a06123ac565b5b81356125b1848260208601612523565b91505092915050565b600067ffffffffffffffff8211156125d5576125d46123c7565b5b602082029050602081019050919050565b60006125f96125f4846125ba565b612427565b9050808382526020820190506020840283018581111561261c5761261b61251e565b5b835b8181101561266357803567ffffffffffffffff811115612641576126406123ac565b5b80860161264e89826124c4565b8552602085019450505060208101905061261e565b5050509392505050565b600082601f830112612682576126816123ac565b5b81356126928482602086016125e6565b91505092915050565b600067ffffffffffffffff8211156126b6576126b56123c7565b5b602082029050602081019050919050565b60006126da6126d58461269b565b612427565b905080838252602082019050602084028301858111156126fd576126fc61251e565b5b835b8181101561274457803567ffffffffffffffff811115612722576127216123ac565b5b80860161272f898261258c565b855260208501945050506020810190506126ff565b5050509392505050565b600082601f830112612763576127626123ac565b5b81356127738482602086016126c7565b91505092915050565b600067ffffffffffffffff821115612797576127966123c7565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156127c3576127c26123c7565b5b6127cc826123b6565b9050602081019050919050565b60006127ec6127e7846127a8565b612427565b905082815260208101848484011115612808576128076123b1565b5b612813848285612473565b509392505050565b600082601f8301126128305761282f6123ac565b5b81356128408482602086016127d9565b91505092915050565b600061285c6128578461277c565b612427565b9050808382526020820190506020840283018581111561287f5761287e61251e565b5b835b818110156128c657803567ffffffffffffffff8111156128a4576128a36123ac565b5b8086016128b1898261281b565b85526020850194505050602081019050612881565b5050509392505050565b600082601f8301126128e5576128e46123ac565b5b81356128f5848260208601612849565b91505092915050565b600080600080600080600080610100898b03121561291f5761291e6120df565b5b600089013567ffffffffffffffff81111561293d5761293c6120e4565b5b6129498b828c016124c4565b985050602089013567ffffffffffffffff81111561296a576129696120e4565b5b6129768b828c016124c4565b97505060406129878b828c0161210a565b965050606089013567ffffffffffffffff8111156129a8576129a76120e4565b5b6129b48b828c0161258c565b955050608089013567ffffffffffffffff8111156129d5576129d46120e4565b5b6129e18b828c0161266d565b94505060a089013567ffffffffffffffff811115612a0257612a016120e4565b5b612a0e8b828c0161266d565b93505060c089013567ffffffffffffffff811115612a2f57612a2e6120e4565b5b612a3b8b828c0161274e565b92505060e089013567ffffffffffffffff811115612a5c57612a5b6120e4565b5b612a688b828c016128d0565b9150509295985092959890939650565b612a81816120e9565b82525050565b6000602082019050612a9c6000830184612a78565b92915050565b600080600080600060a08688031215612abe57612abd6120df565b5b600086013567ffffffffffffffff811115612adc57612adb6120e4565b5b612ae8888289016124c4565b955050602086013567ffffffffffffffff811115612b0957612b086120e4565b5b612b15888289016124c4565b9450506040612b268882890161210a565b9350506060612b378882890161210a565b925050608086013567ffffffffffffffff811115612b5857612b576120e4565b5b612b64888289016128d0565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b83811015612bab578082015181840152602081019050612b90565b60008484015250505050565b6000612bc282612b71565b612bcc8185612b7c565b9350612bdc818560208601612b8d565b612be5816123b6565b840191505092915050565b60006020820190508181036000830152612c0a8184612bb7565b905092915050565b600060208284031215612c2857612c276120df565b5b600082013567ffffffffffffffff811115612c4657612c456120e4565b5b612c52848285016124c4565b91505092915050565b600060208284031215612c7157612c706120df565b5b6000612c7f848285016122dd565b91505092915050565b600067ffffffffffffffff82169050919050565b612ca581612c88565b82525050565b6000602082019050612cc06000830184612c9c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110612d0657612d05612cc6565b5b50565b6000819050612d1782612cf5565b919050565b6000612d2782612d09565b9050919050565b612d3781612d1c565b82525050565b6000602082019050612d526000830184612d2e565b92915050565b612d6181612c88565b8114612d6c57600080fd5b50565b600081359050612d7e81612d58565b92915050565b600060208284031215612d9a57612d996120df565b5b6000612da884828501612d6f565b91505092915050565b60008060408385031215612dc857612dc76120df565b5b6000612dd68582860161210a565b925050602083013567ffffffffffffffff811115612df757612df66120e4565b5b612e03858286016128d0565b9150509250929050565b60008060408385031215612e2457612e236120df565b5b6000612e3285828601612d6f565b9250506020612e438582860161210a565b9150509250929050565b612e568161214c565b8114612e6157600080fd5b50565b600081519050612e7381612e4d565b92915050565b600060208284031215612e8f57612e8e6120df565b5b6000612e9d84828501612e64565b91505092915050565b612eaf816122b4565b82525050565b6000604082019050612eca6000830185612ea6565b612ed76020830184612ea6565b9392505050565b600082825260208201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612f4b602f83612ede565b9150612f5682612eef565b604082019050919050565b60006020820190508181036000830152612f7a81612f3e565b9050919050565b6000819050919050565b6000612fa6612fa1612f9c84612f81565b612332565b6120e9565b9050919050565b612fb681612f8b565b82525050565b6000604082019050612fd16000830185612a78565b612fde6020830184612fad565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61301a816120e9565b82525050565b600061302c8383613011565b60208301905092915050565b6000602082019050919050565b600061305082612fe5565b61305a8185612ff0565b935061306583613001565b8060005b8381101561309657815161307d8882613020565b975061308883613038565b925050600181019050613069565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006130eb82612b71565b6130f581856130cf565b9350613105818560208601612b8d565b61310e816123b6565b840191505092915050565b600061312583836130e0565b905092915050565b6000602082019050919050565b6000613145826130a3565b61314f81856130ae565b935083602082028501613161856130bf565b8060005b8581101561319d578484038952815161317e8582613119565b94506131898361312d565b925060208a01995050600181019050613165565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006131f782612fe5565b61320181856131db565b935061320c83613001565b8060005b8381101561323d5781516132248882613020565b975061322f83613038565b925050600181019050613210565b5085935050505092915050565b600061325683836131ec565b905092915050565b6000602082019050919050565b6000613276826131af565b61328081856131ba565b935083602082028501613292856131cb565b8060005b858110156132ce57848403895281516132af858261324a565b94506132ba8361325e565b925060208a01995050600181019050613296565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60006133338261330c565b61333d8185613317565b935061334d818560208601612b8d565b613356816123b6565b840191505092915050565b600061336d8383613328565b905092915050565b6000602082019050919050565b600061338d826132e0565b61339781856132eb565b9350836020820285016133a9856132fc565b8060005b858110156133e557848403895281516133c68582613361565b94506133d183613375565b925060208a019950506001810190506133ad565b50829750879550505050505092915050565b60006101008201905061340d600083018b612fad565b818103602083015261341f818a613045565b90508181036040830152613433818961313a565b90508181036060830152613447818861313a565b9050818103608083015261345b818761326b565b905081810360a083015261346f8186613382565b905061347e60c0830185612158565b61348b60e0830184612158565b9998505050505050505050565b6000815190506134a7816120f3565b92915050565b6000602082840312156134c3576134c26120df565b5b60006134d184828501613498565b91505092915050565b600060808201905081810360008301526134f48187612bb7565b905081810360208301526135088186612bb7565b90506135176040830185612a78565b6135246060830184612a78565b95945050505050565b7f446f6d61696e57616c6c657452656769737472793a206d65746164617461206e60008201527f616d6520616e642075726c206d7573742062652073657420696e206d6574616460208201527f6174610000000000000000000000000000000000000000000000000000000000604082015250565b60006135af604383612ede565b91506135ba8261352d565b606082019050919050565b600060208201905081810360008301526135de816135a2565b9050919050565b60006040820190506135fa6000830185612a78565b818103602083015261360c8184613382565b90509392505050565b600061362861362384612442565b612427565b905082815260208101848484011115613644576136436123b1565b5b61364f848285612b8d565b509392505050565b600082601f83011261366c5761366b6123ac565b5b815161367c848260208601613615565b91505092915050565b60006020828403121561369b5761369a6120df565b5b600082015167ffffffffffffffff8111156136b9576136b86120e4565b5b6136c584828501613657565b91505092915050565b6000815190506136dd81612d58565b92915050565b6000602082840312156136f9576136f86120df565b5b6000613707848285016136ce565b91505092915050565b60006040820190506137256000830185612c9c565b6137326020830184612a78565b9392505050565b60008151905061374881612211565b92915050565b600060208284031215613764576137636120df565b5b600061377284828501613739565b91505092915050565b6000604082019050613790600083018561226a565b61379d6020830184612d2e565b9392505050565b6000815190506137b3816122c6565b92915050565b6000602082840312156137cf576137ce6120df565b5b60006137dd848285016137a4565b91505092915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006138276017836137e6565b9150613832826137f1565b601782019050919050565b60006138488261330c565b61385281856137e6565b9350613862818560208601612b8d565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006138a46011836137e6565b91506138af8261386e565b601182019050919050565b60006138c58261381a565b91506138d1828561383d565b91506138dc82613897565b91506138e8828461383d565b91508190509392505050565b60006138ff8261330c565b6139098185612ede565b9350613919818560208601612b8d565b613922816123b6565b840191505092915050565b6000602082019050818103600083015261394781846138f4565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613989826120e9565b9150613994836120e9565b92508282026139a2816120e9565b915082820484148315176139b9576139b861394f565b5b5092915050565b60006139cb826120e9565b91506139d6836120e9565b92508282019050808211156139ee576139ed61394f565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613a2e826120e9565b915060008203613a4157613a4061394f565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000613a82602083612ede565b9150613a8d82613a4c565b602082019050919050565b60006020820190508181036000830152613ab181613a75565b905091905056fea264697066735822122097b1daaafeaad3657b9082e63ef5e68b4d87fdd5c849274c09c8d4c4955ff5ca64736f6c63430008110033", - "deployedBytecode": "0x6080604052600436106101815760003560e01c8063704b6c02116100d1578063a217fddf1161008a578063c9b2874911610064578063c9b287491461061f578063d547741f1461065c578063d964a37514610685578063f48d60ca146106c257610181565b8063a217fddf1461058e578063a2f42104146105b9578063b6e7f4d2146105f657610181565b8063704b6c021461045857806375b238fc14610481578063880bc4e6146104ac57806391d14854146104e95780639dca003214610526578063a05b775f1461055157610181565b806339c7639c1161013e5780635530adf8116101185780635530adf8146103715780635b045724146103a15780636a3000c4146103de5780636f50cd971461041b57610181565b806339c7639c146102cc57806349fcbc541461030957806350d17b5e1461034657610181565b806301c6d0351461018657806301ffc9a7146101c357806315d4647414610200578063248a9ca31461023d5780632f2ff15d1461027a57806336568abe146102a3575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a8919061211f565b6106ff565b6040516101ba9190612167565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e591906121da565b61078e565b6040516101f79190612167565b60405180910390f35b34801561020c57600080fd5b506102276004803603810190610222919061211f565b610808565b6040516102349190612167565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f919061223d565b6109a1565b6040516102719190612279565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c91906122f2565b6109c0565b005b3480156102af57600080fd5b506102ca60048036038101906102c591906122f2565b6109e1565b005b3480156102d857600080fd5b506102f360048036038101906102ee919061211f565b610a64565b6040516103009190612167565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b919061211f565b610af3565b60405161033d9190612167565b60405180910390f35b34801561035257600080fd5b5061035b610c14565b6040516103689190612391565b60405180910390f35b61038b600480360381019061038691906128fe565b610c3a565b6040516103989190612a87565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190612aa2565b610eaa565b6040516103d59190612a87565b60405180910390f35b3480156103ea57600080fd5b506104056004803603810190610400919061211f565b6110cd565b6040516104129190612bf0565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190612c12565b611162565b60405161044f9190612a87565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190612c5b565b6111f1565b005b34801561048d57600080fd5b50610496611249565b6040516104a39190612279565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce919061211f565b61126d565b6040516104e09190612cab565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b91906122f2565b6112fc565b60405161051d9190612167565b60405180910390f35b34801561053257600080fd5b5061053b611366565b6040516105489190612d3d565b60405180910390f35b34801561055d57600080fd5b506105786004803603810190610573919061211f565b611379565b6040516105859190612a87565b60405180910390f35b34801561059a57600080fd5b506105a3611408565b6040516105b09190612279565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190612d84565b61140f565b6040516105ed9190612a87565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190612db1565b61149e565b005b34801561062b57600080fd5b5061064660048036038101906106419190612e0d565b6115ab565b6040516106539190612167565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e91906122f2565b6116cf565b005b34801561069157600080fd5b506106ac60048036038101906106a7919061211f565b6116f0565b6040516106b99190612167565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e4919061211f565b611889565b6040516106f69190612167565b60405180910390f35b60008061070a611918565b90508073ffffffffffffffffffffffffffffffffffffffff166301c6d035846040518263ffffffff1660e01b81526004016107459190612a87565b602060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107869190612e79565b915050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610801575061080082611a5c565b5b9050919050565b60006108347fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b61089957600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401610890929190612eb5565b60405180910390fd5b60006108a3611918565b905060006108af611ac6565b90508073ffffffffffffffffffffffffffffffffffffffff16632b553551856040518263ffffffff1660e01b81526004016108ea9190612a87565b600060405180830381600087803b15801561090457600080fd5b505af1158015610918573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff166315d46474856040518263ffffffff1660e01b81526004016109559190612a87565b6020604051808303816000875af1158015610974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109989190612e79565b92505050919050565b6000806000838152602001908152602001600020600101549050919050565b6109c9826109a1565b6109d281611c0a565b6109dc8383611c1e565b505050565b6109e9611cfe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90612f61565b60405180910390fd5b610a608282611d06565b5050565b600080610a6f611918565b90508073ffffffffffffffffffffffffffffffffffffffff166339c7639c846040518263ffffffff1660e01b8152600401610aaa9190612a87565b602060405180830381865afa158015610ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aeb9190612e79565b915050919050565b6000610b1f7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b610b8457600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401610b7b929190612eb5565b60405180910390fd5b6000610b8e611918565b90508073ffffffffffffffffffffffffffffffffffffffff166349fcbc54846040518263ffffffff1660e01b8152600401610bc99190612a87565b6020604051808303816000875af1158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c9190612e79565b915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c667fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b610ccb57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401610cc2929190612eb5565b60405180910390fd5b6000610cd5611918565b90506000610ce1611ac6565b90508173ffffffffffffffffffffffffffffffffffffffff166327bd069e8b6040518263ffffffff1660e01b8152600401610d1c9190612bf0565b60006040518083038186803b158015610d3457600080fd5b505afa158015610d48573d6000803e3d6000fd5b505050506002845114610d9657835160026040517f216aeb3f000000000000000000000000000000000000000000000000000000008152600401610d8d929190612fbc565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663ffc833253460028c8c8c8c8c6001806040518a63ffffffff1660e01b8152600401610de29897969594939291906133f7565b60206040518083038185885af1158015610e00573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e2591906134ad565b90508273ffffffffffffffffffffffffffffffffffffffff16639a2056f48d8d848e6040518563ffffffff1660e01b8152600401610e6694939291906134da565b600060405180830381600087803b158015610e8057600080fd5b505af1158015610e94573d6000803e3d6000fd5b5050505080935050505098975050505050505050565b6000610ed67fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b610f3b57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401610f32929190612eb5565b60405180910390fd5b6002825114610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f76906135c5565b60405180910390fd5b6002825114610fc957815160026040517f216aeb3f000000000000000000000000000000000000000000000000000000008152600401610fc0929190612fbc565b60405180910390fd5b6000610fd3611918565b90506000610fdf611ac6565b90508173ffffffffffffffffffffffffffffffffffffffff16639a2056f48989888a6040518563ffffffff1660e01b815260040161102094939291906134da565b600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663782e2ea586866040518363ffffffff1660e01b815260040161108d9291906135e5565b600060405180830381600087803b1580156110a757600080fd5b505af11580156110bb573d6000803e3d6000fd5b50505050849250505095945050505050565b606060006110d9611918565b90508073ffffffffffffffffffffffffffffffffffffffff16636a3000c4846040518263ffffffff1660e01b81526004016111149190612a87565b600060405180830381865afa158015611131573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061115a9190613685565b915050919050565b60008061116d611918565b90508073ffffffffffffffffffffffffffffffffffffffff16636f50cd97846040518263ffffffff1660e01b81526004016111a89190612bf0565b602060405180830381865afa1580156111c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e991906134ad565b915050919050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261121b81611c0a565b6112457fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4283611c1e565b5050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b600080611278611918565b90508073ffffffffffffffffffffffffffffffffffffffff1663880bc4e6846040518263ffffffff1660e01b81526004016112b39190612a87565b602060405180830381865afa1580156112d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f491906136e3565b915050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600160149054906101000a900460ff1681565b600080611384611918565b90508073ffffffffffffffffffffffffffffffffffffffff1663a05b775f846040518263ffffffff1660e01b81526004016113bf9190612a87565b602060405180830381865afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140091906134ad565b915050919050565b6000801b81565b60008061141a611918565b90508073ffffffffffffffffffffffffffffffffffffffff1663a2f42104846040518263ffffffff1660e01b81526004016114559190612cab565b602060405180830381865afa158015611472573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149691906134ad565b915050919050565b6114c87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b61152d57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401611524929190612eb5565b60405180910390fd5b6000611537611ac6565b90508073ffffffffffffffffffffffffffffffffffffffff1663782e2ea584846040518363ffffffff1660e01b81526004016115749291906135e5565b600060405180830381600087803b15801561158e57600080fd5b505af11580156115a2573d6000803e3d6000fd5b50505050505050565b60006115d77fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b61163c57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401611633929190612eb5565b60405180910390fd5b6000611646611918565b90508073ffffffffffffffffffffffffffffffffffffffff1663c9b2874985856040518363ffffffff1660e01b8152600401611683929190613710565b6020604051808303816000875af11580156116a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c69190612e79565b91505092915050565b6116d8826109a1565b6116e181611c0a565b6116eb8383611d06565b505050565b600061171c7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336112fc565b61178157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517f34a54232000000000000000000000000000000000000000000000000000000008152600401611778929190612eb5565b60405180910390fd5b600061178b611918565b90506000611797611ac6565b90508073ffffffffffffffffffffffffffffffffffffffff16632b553551856040518263ffffffff1660e01b81526004016117d29190612a87565b600060405180830381600087803b1580156117ec57600080fd5b505af1158015611800573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663d964a375856040518263ffffffff1660e01b815260040161183d9190612a87565b6020604051808303816000875af115801561185c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118809190612e79565b92505050919050565b600080611894611918565b90508073ffffffffffffffffffffffffffffffffffffffff1663f48d60ca846040518263ffffffff1660e01b81526004016118cf9190612a87565b602060405180830381865afa1580156118ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119109190612e79565b915050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166372823fa76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e9919061374e565b600160149054906101000a900460ff166040518363ffffffff1660e01b8152600401611a1692919061377b565b602060405180830381865afa158015611a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5791906137b9565b905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663977a80706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b97919061374e565b600160149054906101000a900460ff166040518363ffffffff1660e01b8152600401611bc492919061377b565b602060405180830381865afa158015611be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0591906137b9565b905090565b611c1b81611c16611cfe565b611de7565b50565b611c2882826112fc565b611cfa57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c9f611cfe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b611d1082826112fc565b15611de357600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611d88611cfe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611df182826112fc565b611e6857611dfe81611e6c565b611e0c8360001c6020611e99565b604051602001611e1d9291906138ba565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f919061392d565b60405180910390fd5b5050565b6060611e928273ffffffffffffffffffffffffffffffffffffffff16601460ff16611e99565b9050919050565b606060006002836002611eac919061397e565b611eb691906139c0565b67ffffffffffffffff811115611ecf57611ece6123c7565b5b6040519080825280601f01601f191660200182016040528015611f015781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611f3957611f386139f4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611f9d57611f9c6139f4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611fdd919061397e565b611fe791906139c0565b90505b6001811115612087577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612029576120286139f4565b5b1a60f81b8282815181106120405761203f6139f4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061208090613a23565b9050611fea565b50600084146120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c290613a98565b60405180910390fd5b8091505092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6120fc816120e9565b811461210757600080fd5b50565b600081359050612119816120f3565b92915050565b600060208284031215612135576121346120df565b5b60006121438482850161210a565b91505092915050565b60008115159050919050565b6121618161214c565b82525050565b600060208201905061217c6000830184612158565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6121b781612182565b81146121c257600080fd5b50565b6000813590506121d4816121ae565b92915050565b6000602082840312156121f0576121ef6120df565b5b60006121fe848285016121c5565b91505092915050565b6000819050919050565b61221a81612207565b811461222557600080fd5b50565b60008135905061223781612211565b92915050565b600060208284031215612253576122526120df565b5b600061226184828501612228565b91505092915050565b61227381612207565b82525050565b600060208201905061228e600083018461226a565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122bf82612294565b9050919050565b6122cf816122b4565b81146122da57600080fd5b50565b6000813590506122ec816122c6565b92915050565b60008060408385031215612309576123086120df565b5b600061231785828601612228565b9250506020612328858286016122dd565b9150509250929050565b6000819050919050565b600061235761235261234d84612294565b612332565b612294565b9050919050565b60006123698261233c565b9050919050565b600061237b8261235e565b9050919050565b61238b81612370565b82525050565b60006020820190506123a66000830184612382565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6123ff826123b6565b810181811067ffffffffffffffff8211171561241e5761241d6123c7565b5b80604052505050565b60006124316120d5565b905061243d82826123f6565b919050565b600067ffffffffffffffff82111561245d5761245c6123c7565b5b612466826123b6565b9050602081019050919050565b82818337600083830152505050565b600061249561249084612442565b612427565b9050828152602081018484840111156124b1576124b06123b1565b5b6124bc848285612473565b509392505050565b600082601f8301126124d9576124d86123ac565b5b81356124e9848260208601612482565b91505092915050565b600067ffffffffffffffff82111561250d5761250c6123c7565b5b602082029050602081019050919050565b600080fd5b6000612536612531846124f2565b612427565b905080838252602082019050602084028301858111156125595761255861251e565b5b835b81811015612582578061256e888261210a565b84526020840193505060208101905061255b565b5050509392505050565b600082601f8301126125a1576125a06123ac565b5b81356125b1848260208601612523565b91505092915050565b600067ffffffffffffffff8211156125d5576125d46123c7565b5b602082029050602081019050919050565b60006125f96125f4846125ba565b612427565b9050808382526020820190506020840283018581111561261c5761261b61251e565b5b835b8181101561266357803567ffffffffffffffff811115612641576126406123ac565b5b80860161264e89826124c4565b8552602085019450505060208101905061261e565b5050509392505050565b600082601f830112612682576126816123ac565b5b81356126928482602086016125e6565b91505092915050565b600067ffffffffffffffff8211156126b6576126b56123c7565b5b602082029050602081019050919050565b60006126da6126d58461269b565b612427565b905080838252602082019050602084028301858111156126fd576126fc61251e565b5b835b8181101561274457803567ffffffffffffffff811115612722576127216123ac565b5b80860161272f898261258c565b855260208501945050506020810190506126ff565b5050509392505050565b600082601f830112612763576127626123ac565b5b81356127738482602086016126c7565b91505092915050565b600067ffffffffffffffff821115612797576127966123c7565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156127c3576127c26123c7565b5b6127cc826123b6565b9050602081019050919050565b60006127ec6127e7846127a8565b612427565b905082815260208101848484011115612808576128076123b1565b5b612813848285612473565b509392505050565b600082601f8301126128305761282f6123ac565b5b81356128408482602086016127d9565b91505092915050565b600061285c6128578461277c565b612427565b9050808382526020820190506020840283018581111561287f5761287e61251e565b5b835b818110156128c657803567ffffffffffffffff8111156128a4576128a36123ac565b5b8086016128b1898261281b565b85526020850194505050602081019050612881565b5050509392505050565b600082601f8301126128e5576128e46123ac565b5b81356128f5848260208601612849565b91505092915050565b600080600080600080600080610100898b03121561291f5761291e6120df565b5b600089013567ffffffffffffffff81111561293d5761293c6120e4565b5b6129498b828c016124c4565b985050602089013567ffffffffffffffff81111561296a576129696120e4565b5b6129768b828c016124c4565b97505060406129878b828c0161210a565b965050606089013567ffffffffffffffff8111156129a8576129a76120e4565b5b6129b48b828c0161258c565b955050608089013567ffffffffffffffff8111156129d5576129d46120e4565b5b6129e18b828c0161266d565b94505060a089013567ffffffffffffffff811115612a0257612a016120e4565b5b612a0e8b828c0161266d565b93505060c089013567ffffffffffffffff811115612a2f57612a2e6120e4565b5b612a3b8b828c0161274e565b92505060e089013567ffffffffffffffff811115612a5c57612a5b6120e4565b5b612a688b828c016128d0565b9150509295985092959890939650565b612a81816120e9565b82525050565b6000602082019050612a9c6000830184612a78565b92915050565b600080600080600060a08688031215612abe57612abd6120df565b5b600086013567ffffffffffffffff811115612adc57612adb6120e4565b5b612ae8888289016124c4565b955050602086013567ffffffffffffffff811115612b0957612b086120e4565b5b612b15888289016124c4565b9450506040612b268882890161210a565b9350506060612b378882890161210a565b925050608086013567ffffffffffffffff811115612b5857612b576120e4565b5b612b64888289016128d0565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b83811015612bab578082015181840152602081019050612b90565b60008484015250505050565b6000612bc282612b71565b612bcc8185612b7c565b9350612bdc818560208601612b8d565b612be5816123b6565b840191505092915050565b60006020820190508181036000830152612c0a8184612bb7565b905092915050565b600060208284031215612c2857612c276120df565b5b600082013567ffffffffffffffff811115612c4657612c456120e4565b5b612c52848285016124c4565b91505092915050565b600060208284031215612c7157612c706120df565b5b6000612c7f848285016122dd565b91505092915050565b600067ffffffffffffffff82169050919050565b612ca581612c88565b82525050565b6000602082019050612cc06000830184612c9c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110612d0657612d05612cc6565b5b50565b6000819050612d1782612cf5565b919050565b6000612d2782612d09565b9050919050565b612d3781612d1c565b82525050565b6000602082019050612d526000830184612d2e565b92915050565b612d6181612c88565b8114612d6c57600080fd5b50565b600081359050612d7e81612d58565b92915050565b600060208284031215612d9a57612d996120df565b5b6000612da884828501612d6f565b91505092915050565b60008060408385031215612dc857612dc76120df565b5b6000612dd68582860161210a565b925050602083013567ffffffffffffffff811115612df757612df66120e4565b5b612e03858286016128d0565b9150509250929050565b60008060408385031215612e2457612e236120df565b5b6000612e3285828601612d6f565b9250506020612e438582860161210a565b9150509250929050565b612e568161214c565b8114612e6157600080fd5b50565b600081519050612e7381612e4d565b92915050565b600060208284031215612e8f57612e8e6120df565b5b6000612e9d84828501612e64565b91505092915050565b612eaf816122b4565b82525050565b6000604082019050612eca6000830185612ea6565b612ed76020830184612ea6565b9392505050565b600082825260208201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612f4b602f83612ede565b9150612f5682612eef565b604082019050919050565b60006020820190508181036000830152612f7a81612f3e565b9050919050565b6000819050919050565b6000612fa6612fa1612f9c84612f81565b612332565b6120e9565b9050919050565b612fb681612f8b565b82525050565b6000604082019050612fd16000830185612a78565b612fde6020830184612fad565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61301a816120e9565b82525050565b600061302c8383613011565b60208301905092915050565b6000602082019050919050565b600061305082612fe5565b61305a8185612ff0565b935061306583613001565b8060005b8381101561309657815161307d8882613020565b975061308883613038565b925050600181019050613069565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006130eb82612b71565b6130f581856130cf565b9350613105818560208601612b8d565b61310e816123b6565b840191505092915050565b600061312583836130e0565b905092915050565b6000602082019050919050565b6000613145826130a3565b61314f81856130ae565b935083602082028501613161856130bf565b8060005b8581101561319d578484038952815161317e8582613119565b94506131898361312d565b925060208a01995050600181019050613165565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006131f782612fe5565b61320181856131db565b935061320c83613001565b8060005b8381101561323d5781516132248882613020565b975061322f83613038565b925050600181019050613210565b5085935050505092915050565b600061325683836131ec565b905092915050565b6000602082019050919050565b6000613276826131af565b61328081856131ba565b935083602082028501613292856131cb565b8060005b858110156132ce57848403895281516132af858261324a565b94506132ba8361325e565b925060208a01995050600181019050613296565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60006133338261330c565b61333d8185613317565b935061334d818560208601612b8d565b613356816123b6565b840191505092915050565b600061336d8383613328565b905092915050565b6000602082019050919050565b600061338d826132e0565b61339781856132eb565b9350836020820285016133a9856132fc565b8060005b858110156133e557848403895281516133c68582613361565b94506133d183613375565b925060208a019950506001810190506133ad565b50829750879550505050505092915050565b60006101008201905061340d600083018b612fad565b818103602083015261341f818a613045565b90508181036040830152613433818961313a565b90508181036060830152613447818861313a565b9050818103608083015261345b818761326b565b905081810360a083015261346f8186613382565b905061347e60c0830185612158565b61348b60e0830184612158565b9998505050505050505050565b6000815190506134a7816120f3565b92915050565b6000602082840312156134c3576134c26120df565b5b60006134d184828501613498565b91505092915050565b600060808201905081810360008301526134f48187612bb7565b905081810360208301526135088186612bb7565b90506135176040830185612a78565b6135246060830184612a78565b95945050505050565b7f446f6d61696e57616c6c657452656769737472793a206d65746164617461206e60008201527f616d6520616e642075726c206d7573742062652073657420696e206d6574616460208201527f6174610000000000000000000000000000000000000000000000000000000000604082015250565b60006135af604383612ede565b91506135ba8261352d565b606082019050919050565b600060208201905081810360008301526135de816135a2565b9050919050565b60006040820190506135fa6000830185612a78565b818103602083015261360c8184613382565b90509392505050565b600061362861362384612442565b612427565b905082815260208101848484011115613644576136436123b1565b5b61364f848285612b8d565b509392505050565b600082601f83011261366c5761366b6123ac565b5b815161367c848260208601613615565b91505092915050565b60006020828403121561369b5761369a6120df565b5b600082015167ffffffffffffffff8111156136b9576136b86120e4565b5b6136c584828501613657565b91505092915050565b6000815190506136dd81612d58565b92915050565b6000602082840312156136f9576136f86120df565b5b6000613707848285016136ce565b91505092915050565b60006040820190506137256000830185612c9c565b6137326020830184612a78565b9392505050565b60008151905061374881612211565b92915050565b600060208284031215613764576137636120df565b5b600061377284828501613739565b91505092915050565b6000604082019050613790600083018561226a565b61379d6020830184612d2e565b9392505050565b6000815190506137b3816122c6565b92915050565b6000602082840312156137cf576137ce6120df565b5b60006137dd848285016137a4565b91505092915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006138276017836137e6565b9150613832826137f1565b601782019050919050565b60006138488261330c565b61385281856137e6565b9350613862818560208601612b8d565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006138a46011836137e6565b91506138af8261386e565b601182019050919050565b60006138c58261381a565b91506138d1828561383d565b91506138dc82613897565b91506138e8828461383d565b91508190509392505050565b60006138ff8261330c565b6139098185612ede565b9350613919818560208601612b8d565b613922816123b6565b840191505092915050565b6000602082019050818103600083015261394781846138f4565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613989826120e9565b9150613994836120e9565b92508282026139a2816120e9565b915082820484148315176139b9576139b861394f565b5b5092915050565b60006139cb826120e9565b91506139d6836120e9565b92508282019050808211156139ee576139ed61394f565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613a2e826120e9565b915060008203613a4157613a4061394f565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000613a82602083612ede565b9150613a8d82613a4c565b602082019050919050565b60006020820190508181036000830152613ab181613a75565b905091905056fea264697066735822122097b1daaafeaad3657b9082e63ef5e68b4d87fdd5c849274c09c8d4c4955ff5ca64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/IKeyDeriver.json b/contracts/cayenne/IKeyDeriver.json deleted file mode 100644 index 89d7cb1..0000000 --- a/contracts/cayenne/IKeyDeriver.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IKeyDeriver", - "sourceName": "contracts/lit-node/HDKeyDeriver.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct IPubkeyRouter.RootKey[]", - "name": "rootHDKeys", - "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "computeHDPubKey", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/KeyDeriver.json b/contracts/cayenne/KeyDeriver.json deleted file mode 100644 index d27e200..0000000 --- a/contracts/cayenne/KeyDeriver.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "KeyDeriver", - "sourceName": "contracts/lit-node/HDKeyDeriver.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "HD_KDF", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct IPubkeyRouter.RootKey[]", - "name": "rootHDKeys", - "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "computeHDPubKey", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b506109c3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806362e4c4641461003b578063a32c2b9914610059575b600080fd5b61004361008a565b604051610050919061029b565b60405180910390f35b610073600480360381019061006e91906105d8565b61008f565b6040516100819291906106e1565b60405180910390f35b60f581565b6000606060006100a0868686610121565b905060008060f573ffffffffffffffffffffffffffffffffffffffff16836040516100cb919061074d565b600060405180830381855afa9150503d8060008114610106576040519150601f19603f3d011682016040523d82523d6000602084013e61010b565b606091505b5091509150818194509450505050935093915050565b606060008067ffffffffffffffff81111561013f5761013e610316565b5b6040519080825280601f01601f1916602001820160405280156101715781602001600182028036833780820191505090505b50905060005b84518110156101d5578185828151811061019457610193610764565b5b6020026020010151600001516040516020016101b1929190610793565b604051602081830303815290604052915080806101cd906107e6565b915050610177565b5060006040518060600160405280602b8152602001610963602b9139905060008460f81b90506000602060ff1660e01b90506000835160e01b90506000885160e01b9050600084848c8589868c60405160200161023897969594939291906108e9565b6040516020818303038152906040529050809750505050505050509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006102858261025a565b9050919050565b6102958161027a565b82525050565b60006020820190506102b0600083018461028c565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6102dd816102ca565b81146102e857600080fd5b50565b6000813590506102fa816102d4565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61034e82610305565b810181811067ffffffffffffffff8211171561036d5761036c610316565b5b80604052505050565b60006103806102b6565b905061038c8282610345565b919050565b600067ffffffffffffffff8211156103ac576103ab610316565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff8211156103ec576103eb610316565b5b6103f582610305565b9050602081019050919050565b82818337600083830152505050565b600061042461041f846103d1565b610376565b9050828152602081018484840111156104405761043f6103cc565b5b61044b848285610402565b509392505050565b600082601f83011261046857610467610300565b5b8135610478848260208601610411565b91505092915050565b6000819050919050565b61049481610481565b811461049f57600080fd5b50565b6000813590506104b18161048b565b92915050565b6000604082840312156104cd576104cc6103c2565b5b6104d76040610376565b9050600082013567ffffffffffffffff8111156104f7576104f66103c7565b5b61050384828501610453565b6000830152506020610517848285016104a2565b60208301525092915050565b600061053661053184610391565b610376565b90508083825260208201905060208402830185811115610559576105586103bd565b5b835b818110156105a057803567ffffffffffffffff81111561057e5761057d610300565b5b80860161058b89826104b7565b8552602085019450505060208101905061055b565b5050509392505050565b600082601f8301126105bf576105be610300565b5b81356105cf848260208601610523565b91505092915050565b6000806000606084860312156105f1576105f06102c0565b5b60006105ff868287016102eb565b935050602084013567ffffffffffffffff8111156106205761061f6102c5565b5b61062c868287016105aa565b925050604061063d868287016104a2565b9150509250925092565b60008115159050919050565b61065c81610647565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561069c578082015181840152602081019050610681565b60008484015250505050565b60006106b382610662565b6106bd818561066d565b93506106cd81856020860161067e565b6106d681610305565b840191505092915050565b60006040820190506106f66000830185610653565b818103602083015261070881846106a8565b90509392505050565b600081905092915050565b600061072782610662565b6107318185610711565b935061074181856020860161067e565b80840191505092915050565b6000610759828461071c565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061079f828561071c565b91506107ab828461071c565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006107f182610481565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610823576108226107b7565b5b600182019050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b6108756108708261082e565b61085a565b82525050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b6108c26108bd8261087b565b6108a7565b82525050565b6000819050919050565b6108e36108de826102ca565b6108c8565b82525050565b60006108f5828a610864565b60018201915061090582896108b1565b60048201915061091582886108d2565b60208201915061092582876108b1565b600482019150610935828661071c565b915061094182856108b1565b600482019150610951828461071c565b91508190509897505050505050505056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa2646970667358221220c238d7cb0b5fd2f9f9e8199e6da05a981315d9b205767ed3d30d4bf645fc7fbf64736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806362e4c4641461003b578063a32c2b9914610059575b600080fd5b61004361008a565b604051610050919061029b565b60405180910390f35b610073600480360381019061006e91906105d8565b61008f565b6040516100819291906106e1565b60405180910390f35b60f581565b6000606060006100a0868686610121565b905060008060f573ffffffffffffffffffffffffffffffffffffffff16836040516100cb919061074d565b600060405180830381855afa9150503d8060008114610106576040519150601f19603f3d011682016040523d82523d6000602084013e61010b565b606091505b5091509150818194509450505050935093915050565b606060008067ffffffffffffffff81111561013f5761013e610316565b5b6040519080825280601f01601f1916602001820160405280156101715781602001600182028036833780820191505090505b50905060005b84518110156101d5578185828151811061019457610193610764565b5b6020026020010151600001516040516020016101b1929190610793565b604051602081830303815290604052915080806101cd906107e6565b915050610177565b5060006040518060600160405280602b8152602001610963602b9139905060008460f81b90506000602060ff1660e01b90506000835160e01b90506000885160e01b9050600084848c8589868c60405160200161023897969594939291906108e9565b6040516020818303038152906040529050809750505050505050509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006102858261025a565b9050919050565b6102958161027a565b82525050565b60006020820190506102b0600083018461028c565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6102dd816102ca565b81146102e857600080fd5b50565b6000813590506102fa816102d4565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61034e82610305565b810181811067ffffffffffffffff8211171561036d5761036c610316565b5b80604052505050565b60006103806102b6565b905061038c8282610345565b919050565b600067ffffffffffffffff8211156103ac576103ab610316565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff8211156103ec576103eb610316565b5b6103f582610305565b9050602081019050919050565b82818337600083830152505050565b600061042461041f846103d1565b610376565b9050828152602081018484840111156104405761043f6103cc565b5b61044b848285610402565b509392505050565b600082601f83011261046857610467610300565b5b8135610478848260208601610411565b91505092915050565b6000819050919050565b61049481610481565b811461049f57600080fd5b50565b6000813590506104b18161048b565b92915050565b6000604082840312156104cd576104cc6103c2565b5b6104d76040610376565b9050600082013567ffffffffffffffff8111156104f7576104f66103c7565b5b61050384828501610453565b6000830152506020610517848285016104a2565b60208301525092915050565b600061053661053184610391565b610376565b90508083825260208201905060208402830185811115610559576105586103bd565b5b835b818110156105a057803567ffffffffffffffff81111561057e5761057d610300565b5b80860161058b89826104b7565b8552602085019450505060208101905061055b565b5050509392505050565b600082601f8301126105bf576105be610300565b5b81356105cf848260208601610523565b91505092915050565b6000806000606084860312156105f1576105f06102c0565b5b60006105ff868287016102eb565b935050602084013567ffffffffffffffff8111156106205761061f6102c5565b5b61062c868287016105aa565b925050604061063d868287016104a2565b9150509250925092565b60008115159050919050565b61065c81610647565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561069c578082015181840152602081019050610681565b60008484015250505050565b60006106b382610662565b6106bd818561066d565b93506106cd81856020860161067e565b6106d681610305565b840191505092915050565b60006040820190506106f66000830185610653565b818103602083015261070881846106a8565b90509392505050565b600081905092915050565b600061072782610662565b6107318185610711565b935061074181856020860161067e565b80840191505092915050565b6000610759828461071c565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061079f828561071c565b91506107ab828461071c565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006107f182610481565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610823576108226107b7565b5b600182019050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b6108756108708261082e565b61085a565b82525050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b6108c26108bd8261087b565b6108a7565b82525050565b6000819050919050565b6108e36108de826102ca565b6108c8565b82525050565b60006108f5828a610864565b60018201915061090582896108b1565b60048201915061091582886108d2565b60208201915061092582876108b1565b600482019150610935828661071c565b915061094182856108b1565b600482019150610951828461071c565b91508190509897505050505050505056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa2646970667358221220c238d7cb0b5fd2f9f9e8199e6da05a981315d9b205767ed3d30d4bf645fc7fbf64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/LITToken.json b/contracts/cayenne/LITToken.json deleted file mode 100644 index 0a2897d..0000000 --- a/contracts/cayenne/LITToken.json +++ /dev/null @@ -1,1054 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "LITToken", - "sourceName": "contracts/lit-node/LITToken.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "cap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "InvalidShortString", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "str", - "type": "string" - } - ], - "name": "StringTooLong", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromDelegate", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "toDelegate", - "type": "address" - } - ], - "name": "DelegateChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "previousBalance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newBalance", - "type": "uint256" - } - ], - "name": "DelegateVotesChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EIP712DomainChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "CLOCK_MODE", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MINTER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PAUSER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "cap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint32", - "name": "pos", - "type": "uint32" - } - ], - "name": "checkpoints", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "fromBlock", - "type": "uint32" - }, - { - "internalType": "uint224", - "name": "votes", - "type": "uint224" - } - ], - "internalType": "struct ERC20Votes.Checkpoint", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "clock", - "outputs": [ - { - "internalType": "uint48", - "name": "", - "type": "uint48" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "delegatee", - "type": "address" - } - ], - "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "delegatee", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "delegateBySig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "delegates", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "eip712Domain", - "outputs": [ - { - "internalType": "bytes1", - "name": "fields", - "type": "bytes1" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "version", - "type": "string" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifyingContract", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "extensions", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "timepoint", - "type": "uint256" - } - ], - "name": "getPastTotalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "timepoint", - "type": "uint256" - } - ], - "name": "getPastVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "numCheckpoints", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101806040523480156200001257600080fd5b506040516200686e3803806200686e83398181016040528101906200003891906200073e565b6040518060400160405280600c81526020017f4c69742050726f746f636f6c0000000000000000000000000000000000000000815250806040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250836040518060400160405280600c81526020017f4c69742050726f746f636f6c00000000000000000000000000000000000000008152506040518060400160405280600381526020017f4c495400000000000000000000000000000000000000000000000000000000008152508160049081620001239190620009e0565b508060059081620001359190620009e0565b505050600081116200017e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001759062000b28565b60405180910390fd5b8060808181525050506000600660006101000a81548160ff021916908315150217905550620001bd600783620003d160201b620017c61790919060201c565b6101408181525050620001e0600882620003d160201b620017c61790919060201c565b610160818152505081805190602001206101008181525050808051906020012061012081815250504660c08181525050620002206200042e60201b60201c565b60a081815250503073ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff1681525050505050620002907fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336200048c60201b60201c565b620002c27ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc9336200048c60201b60201c565b620002f47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336200048c60201b60201c565b620003467ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42620004a260201b60201c565b620003787fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4280620004a260201b60201c565b620003ca7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42620004a260201b60201c565b5062000d5c565b6000602083511015620003f757620003ef836200050560201b60201c565b905062000428565b826200040e836200057260201b6200180a1760201c565b60000190816200041f9190620009e0565b5060ff60001b90505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610100516101205146306040516020016200047195949392919062000bbb565b60405160208183030381529060405280519060200120905090565b6200049e82826200057c60201b60201c565b5050565b6000620004b5836200066d60201b60201c565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b600080829050601f815111156200055557826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016200054c919062000c96565b60405180910390fd5b805181620005639062000cec565b60001c1760001b915050919050565b6000819050919050565b6200058e82826200068c60201b60201c565b6200066957600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200060e620006f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000806000838152602001908152602001600020600101549050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b6000819050919050565b620007188162000703565b81146200072457600080fd5b50565b60008151905062000738816200070d565b92915050565b600060208284031215620007575762000756620006fe565b5b6000620007678482850162000727565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007f257607f821691505b602082108103620008085762000807620007aa565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000833565b6200087e868362000833565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008c1620008bb620008b58462000703565b62000896565b62000703565b9050919050565b6000819050919050565b620008dd83620008a0565b620008f5620008ec82620008c8565b84845462000840565b825550505050565b600090565b6200090c620008fd565b62000919818484620008d2565b505050565b5b8181101562000941576200093560008262000902565b6001810190506200091f565b5050565b601f82111562000990576200095a816200080e565b620009658462000823565b8101602085101562000975578190505b6200098d620009848562000823565b8301826200091e565b50505b505050565b600082821c905092915050565b6000620009b56000198460080262000995565b1980831691505092915050565b6000620009d08383620009a2565b9150826002028217905092915050565b620009eb8262000770565b67ffffffffffffffff81111562000a075762000a066200077b565b5b62000a138254620007d9565b62000a2082828562000945565b600060209050601f83116001811462000a58576000841562000a43578287015190505b62000a4f8582620009c2565b86555062000abf565b601f19841662000a68866200080e565b60005b8281101562000a925784890151825560018201915060208501945060208101905062000a6b565b8683101562000ab2578489015162000aae601f891682620009a2565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332304361707065643a2063617020697320300000000000000000000000600082015250565b600062000b1060158362000ac7565b915062000b1d8262000ad8565b602082019050919050565b6000602082019050818103600083015262000b438162000b01565b9050919050565b6000819050919050565b62000b5f8162000b4a565b82525050565b62000b708162000703565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ba38262000b76565b9050919050565b62000bb58162000b96565b82525050565b600060a08201905062000bd2600083018862000b54565b62000be1602083018762000b54565b62000bf0604083018662000b54565b62000bff606083018562000b65565b62000c0e608083018462000baa565b9695505050505050565b60005b8381101562000c3857808201518184015260208101905062000c1b565b60008484015250505050565b6000601f19601f8301169050919050565b600062000c628262000770565b62000c6e818562000ac7565b935062000c8081856020860162000c18565b62000c8b8162000c44565b840191505092915050565b6000602082019050818103600083015262000cb2818462000c55565b905092915050565b600081519050919050565b6000819050602082019050919050565b600062000ce3825162000b4a565b80915050919050565b600062000cf98262000cba565b8262000d058462000cc5565b905062000d128162000cd5565b9250602082101562000d555762000d507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080262000833565b831692505b5050919050565b60805160a05160c05160e05161010051610120516101405161016051615aac62000dc26000396000610fab01526000610f77015260006126800152600061265f01526000611e4c01526000611ea201526000611ecb01526000610a020152615aac6000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c806370a08231116101465780639ab24eb0116100c3578063d505accf11610087578063d505accf14610779578063d539139314610795578063d547741f146107b3578063dd62ed3e146107cf578063e63ab1e9146107ff578063f1127ed81461081d5761025e565b80639ab24eb0146106af578063a217fddf146106df578063a457c2d7146106fd578063a9059cbb1461072d578063c3cda5201461075d5761025e565b806384b0196e1161010a57806384b0196e146105ef5780638e539e8c1461061357806391d148541461064357806391ddadf41461067357806395d89b41146106915761025e565b806370a082311461054b57806375b238fc1461057b57806379cc6790146105995780637ecebe00146105b55780638456cb59146105e55761025e565b806336568abe116101df57806342966c68116101a357806342966c68146104775780634bf5d7e914610493578063587cde1e146104b15780635c19a95c146104e15780635c975abb146104fd5780636fcfff451461051b5761025e565b806336568abe146103d557806339509351146103f15780633a46b1a8146104215780633f4ba83a1461045157806340c10f191461045b5761025e565b8063248a9ca311610226578063248a9ca31461032f5780632f2ff15d1461035f578063313ce5671461037b578063355274ea146103995780633644e515146103b75761025e565b806301ffc9a71461026357806306fdde0314610293578063095ea7b3146102b157806318160ddd146102e157806323b872dd146102ff575b600080fd5b61027d60048036038101906102789190613a1f565b61084d565b60405161028a9190613a67565b60405180910390f35b61029b6108c7565b6040516102a89190613b12565b60405180910390f35b6102cb60048036038101906102c69190613bc8565b610959565b6040516102d89190613a67565b60405180910390f35b6102e961097c565b6040516102f69190613c17565b60405180910390f35b61031960048036038101906103149190613c32565b610986565b6040516103269190613a67565b60405180910390f35b61034960048036038101906103449190613cbb565b6109b5565b6040516103569190613cf7565b60405180910390f35b61037960048036038101906103749190613d12565b6109d4565b005b6103836109f5565b6040516103909190613d6e565b60405180910390f35b6103a16109fe565b6040516103ae9190613c17565b60405180910390f35b6103bf610a26565b6040516103cc9190613cf7565b60405180910390f35b6103ef60048036038101906103ea9190613d12565b610a35565b005b61040b60048036038101906104069190613bc8565b610ab8565b6040516104189190613a67565b60405180910390f35b61043b60048036038101906104369190613bc8565b610aef565b6040516104489190613c17565b60405180910390f35b610459610b92565b005b61047560048036038101906104709190613bc8565b610c0c565b005b610491600480360381019061048c9190613d89565b610c83565b005b61049b610c97565b6040516104a89190613b12565b60405180910390f35b6104cb60048036038101906104c69190613db6565b610d25565b6040516104d89190613df2565b60405180910390f35b6104fb60048036038101906104f69190613db6565b610d8e565b005b610505610da2565b6040516105129190613a67565b60405180910390f35b61053560048036038101906105309190613db6565b610db9565b6040516105429190613e2c565b60405180910390f35b61056560048036038101906105609190613db6565b610e0d565b6040516105729190613c17565b60405180910390f35b610583610e56565b6040516105909190613cf7565b60405180910390f35b6105b360048036038101906105ae9190613bc8565b610e7a565b005b6105cf60048036038101906105ca9190613db6565b610e9a565b6040516105dc9190613c17565b60405180910390f35b6105ed610eea565b005b6105f7610f64565b60405161060a9796959493929190613f40565b60405180910390f35b61062d60048036038101906106289190613d89565b611066565b60405161063a9190613c17565b60405180910390f35b61065d60048036038101906106589190613d12565b6110cb565b60405161066a9190613a67565b60405180910390f35b61067b611135565b6040516106889190613fe5565b60405180910390f35b610699611145565b6040516106a69190613b12565b60405180910390f35b6106c960048036038101906106c49190613db6565b6111d7565b6040516106d69190613c17565b60405180910390f35b6106e76112df565b6040516106f49190613cf7565b60405180910390f35b61071760048036038101906107129190613bc8565b6112e6565b6040516107249190613a67565b60405180910390f35b61074760048036038101906107429190613bc8565b61135d565b6040516107549190613a67565b60405180910390f35b6107776004803603810190610772919061402c565b611380565b005b610793600480360381019061078e91906140b9565b611484565b005b61079d6115c6565b6040516107aa9190613cf7565b60405180910390f35b6107cd60048036038101906107c89190613d12565b6115ea565b005b6107e960048036038101906107e4919061415b565b61160b565b6040516107f69190613c17565b60405180910390f35b610807611692565b6040516108149190613cf7565b60405180910390f35b610837600480360381019061083291906141c7565b6116b6565b604051610844919061427c565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c057506108bf82611814565b5b9050919050565b6060600480546108d6906142c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610902906142c6565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b5050505050905090565b60008061096461187e565b9050610971818585611886565b600191505092915050565b6000600354905090565b60008061099161187e565b905061099e858285611a4f565b6109a9858585611adb565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b6109dd826109b5565b6109e681611d54565b6109f08383611d68565b505050565b60006012905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6000610a30611e48565b905090565b610a3d61187e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa190614369565b60405180910390fd5b610ab48282611eff565b5050565b600080610ac361187e565b9050610ae4818585610ad5858961160b565b610adf91906143b8565b611886565b600191505092915050565b6000610af9611135565b65ffffffffffff168210610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990614438565b60405180910390fd5b610b8a600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083611fe0565b905092915050565b610bc37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bbe61187e565b6110cb565b610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf9906144ca565b60405180910390fd5b610c0a612128565b565b610c367ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc9336110cb565b610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90614536565b60405180910390fd5b610c7f828261218b565b5050565b610c94610c8e61187e565b82612199565b50565b606043610ca2611135565b65ffffffffffff1614610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce1906145a2565b60405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d9f610d9961187e565b826121a7565b50565b6000600660009054906101000a900460ff16905090565b6000610e06600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506122c1565b9050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b610e8c82610e8661187e565b83611a4f565b610e968282612199565b5050565b6000610ee3600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612314565b9050919050565b610f1b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610f1661187e565b6110cb565b610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190614634565b60405180910390fd5b610f62612322565b565b600060608060008060006060610fa460077f000000000000000000000000000000000000000000000000000000000000000061238590919063ffffffff16565b610fd860087f000000000000000000000000000000000000000000000000000000000000000061238590919063ffffffff16565b46306000801b600067ffffffffffffffff811115610ff957610ff8614654565b5b6040519080825280602002602001820160405280156110275781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b6000611070611135565b65ffffffffffff1682106110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090614438565b60405180910390fd5b6110c4600d83611fe0565b9050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061114043612435565b905090565b606060058054611154906142c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611180906142c6565b80156111cd5780601f106111a2576101008083540402835291602001916111cd565b820191906000526020600020905b8154815290600101906020018083116111b057829003601f168201915b5050505050905090565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600081146112b657600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182038154811061127b5761127a614683565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166112b9565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b6000801b81565b6000806112f161187e565b905060006112ff828661160b565b905083811015611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90614724565b60405180910390fd5b6113518286868403611886565b60019250505092915050565b60008061136861187e565b9050611375818585611adb565b600191505092915050565b834211156113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90614790565b60405180910390fd5b600061142561141d7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf89898960405160200161140294939291906147b0565b6040516020818303038152906040528051906020012061248a565b8585856124a4565b9050611430816124cf565b8614611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890614841565b60405180910390fd5b61147b81886121a7565b50505050505050565b834211156114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be906148ad565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886114f68c6124cf565b8960405160200161150c969594939291906148cd565b604051602081830303815290604052805190602001209050600061152f8261248a565b9050600061153f828787876124a4565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a69061497a565b60405180910390fd5b6115ba8a8a8a611886565b50505050505050505050565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b6115f3826109b5565b6115fc81611d54565b6116068383611eff565b505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6116be613984565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208263ffffffff168154811061171557611714614683565b5b906000526020600020016040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b60006020835110156117e2576117db8361252d565b9050611804565b826117ec8361180a565b60000190816117fb9190614b46565b5060ff60001b90505b92915050565b6000819050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90614c8a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90614d1c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a429190613c17565b60405180910390a3505050565b6000611a5b848461160b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ad55781811015611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe90614d88565b60405180910390fd5b611ad48484848403611886565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4190614e1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090614eac565b60405180910390fd5b611bc4838383612595565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4290614f3e565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d3b9190613c17565b60405180910390a3611d4e8484846125a5565b50505050565b611d6581611d6061187e565b6125b5565b50565b611d7282826110cb565b611e4457600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611de961187e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015611ec457507f000000000000000000000000000000000000000000000000000000000000000046145b15611ef1577f00000000000000000000000000000000000000000000000000000000000000009050611efc565b611ef961263a565b90505b90565b611f0982826110cb565b15611fdc57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611f8161187e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600080838054905090506000808290506005831115612056576000612004846126d0565b8461200f9190614f5e565b90508561201c88836127c9565b60000160009054906101000a900463ffffffff1663ffffffff16111561204457809150612054565b60018161205191906143b8565b92505b505b5b808210156120b657600061206b83836127de565b90508561207888836127c9565b60000160009054906101000a900463ffffffff1663ffffffff1611156120a0578091506120b0565b6001816120ad91906143b8565b92505b50612057565b600081146120fc576120cb86600183036127c9565b60000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166120ff565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935050505092915050565b612130612804565b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61217461187e565b6040516121819190613df2565b60405180910390a1565b612195828261284d565b5050565b6121a382826128da565b5050565b60006121b283610d25565b905060006121bf84610e0d565b905082600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46122bb8284836128f8565b50505050565b600063ffffffff801682111561230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390615004565b60405180910390fd5b819050919050565b600081600001549050919050565b61232a612af1565b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861236e61187e565b60405161237b9190613df2565b60405180910390a1565b606060ff60001b83146123a25761239b83612b3b565b905061242f565b8180546123ae906142c6565b80601f01602080910402602001604051908101604052809291908181526020018280546123da906142c6565b80156124275780601f106123fc57610100808354040283529160200191612427565b820191906000526020600020905b81548152906001019060200180831161240a57829003601f168201915b505050505090505b92915050565b600065ffffffffffff8016821115612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990615096565b60405180910390fd5b819050919050565b600061249d612497611e48565b83612baf565b9050919050565b60008060006124b587878787612bf0565b915091506124c281612cd2565b8192505050949350505050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061251c81612314565b915061252781612e38565b50919050565b600080829050601f8151111561257a57826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016125719190613b12565b60405180910390fd5b805181612586906150e6565b60001c1760001b915050919050565b6125a0838383612e4e565b505050565b6125b0838383612e4e565b505050565b6125bf82826110cb565b612636576125cc81612ea6565b6125da8360001c6020612ed3565b6040516020016125eb929190615221565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262d9190613b12565b60405180910390fd5b5050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016126b595949392919061525b565b60405160208183030381529060405280519060200120905090565b60008082036126e257600090506127c4565b600060016126ef8461310f565b901c6001901b90506001818481612709576127086152ae565b5b048201901c90506001818481612722576127216152ae565b5b048201901c9050600181848161273b5761273a6152ae565b5b048201901c90506001818481612754576127536152ae565b5b048201901c9050600181848161276d5761276c6152ae565b5b048201901c90506001818481612786576127856152ae565b5b048201901c9050600181848161279f5761279e6152ae565b5b048201901c90506127c0818285816127ba576127b96152ae565b5b046131f0565b9150505b919050565b60008260005281602060002001905092915050565b600060028284186127ef91906152dd565b8284166127fc91906143b8565b905092915050565b61280c610da2565b61284b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128429061535a565b60405180910390fd5b565b6128578282613209565b61285f613273565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661288561097c565b11156128c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bd906153ec565b60405180910390fd5b6128d4600d613297836132ad565b50505050565b6128e48282613588565b6128f2600d613757836132ad565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129345750600081115b15612aec57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a12576000806129bb600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613757856132ad565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612a0792919061540c565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612aeb57600080612a94600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613297856132ad565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612ae092919061540c565b60405180910390a250505b5b505050565b612af9610da2565b15612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3090615481565b60405180910390fd5b565b60606000612b488361376d565b90506000602067ffffffffffffffff811115612b6757612b66614654565b5b6040519080825280601f01601f191660200182016040528015612b995781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612c2b576000600391509150612cc9565b600060018787878760405160008152602001604052604051612c5094939291906154a1565b6020604051602081039080840390855afa158015612c72573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612cc057600060019250925050612cc9565b80600092509250505b94509492505050565b60006004811115612ce657612ce56154e6565b5b816004811115612cf957612cf86154e6565b5b0315612e355760016004811115612d1357612d126154e6565b5b816004811115612d2657612d256154e6565b5b03612d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5d90615561565b60405180910390fd5b60026004811115612d7a57612d796154e6565b5b816004811115612d8d57612d8c6154e6565b5b03612dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc4906155cd565b60405180910390fd5b60036004811115612de157612de06154e6565b5b816004811115612df457612df36154e6565b5b03612e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2b9061565f565b60405180910390fd5b5b50565b6001816000016000828254019250508190555050565b612e598383836137bd565b612e61610da2565b15612ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e98906156f1565b60405180910390fd5b505050565b6060612ecc8273ffffffffffffffffffffffffffffffffffffffff16601460ff16612ed3565b9050919050565b606060006002836002612ee69190615711565b612ef091906143b8565b67ffffffffffffffff811115612f0957612f08614654565b5b6040519080825280601f01601f191660200182016040528015612f3b5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612f7357612f72614683565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612fd757612fd6614683565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026130179190615711565b61302191906143b8565b90505b60018111156130c1577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061306357613062614683565b5b1a60f81b82828151811061307a57613079614683565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806130ba90615753565b9050613024565b5060008414613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fc906157c8565b60405180910390fd5b8091505092915050565b600080600090506000608084901c111561313157608083901c92506080810190505b6000604084901c111561314c57604083901c92506040810190505b6000602084901c111561316757602083901c92506020810190505b6000601084901c111561318257601083901c92506010810190505b6000600884901c111561319d57600883901c92506008810190505b6000600484901c11156131b857600483901c92506004810190505b6000600284901c11156131d357600283901c92506002810190505b6000600184901c11156131e7576001810190505b80915050919050565b60008183106131ff5781613201565b825b905092915050565b6132116109fe565b8161321a61097c565b61322491906143b8565b1115613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325c90615834565b60405180910390fd5b61326f82826137c2565b5050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b600081836132a591906143b8565b905092915050565b6000806000858054905090506000808214613373576132cf87600184036127c9565b6040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815250506133af565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152505b905080602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1693506133e484868863ffffffff16565b925060008211801561340e57506133f9611135565b65ffffffffffff16816000015163ffffffff16145b1561347f5761341c83613919565b61342988600185036127c9565b60000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555061357e565b8660405180604001604052806134a3613496611135565b65ffffffffffff166122c1565b63ffffffff1681526020016134b786613919565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b5050935093915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036135f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ee906158c6565b60405180910390fd5b61360382600083612595565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561368a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368190615958565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161373e9190613c17565b60405180910390a3613752836000846125a5565b505050565b600081836137659190614f5e565b905092915050565b60008060ff8360001c169050601f8111156137b4576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613828906159c4565b60405180910390fd5b61383d60008383612595565b806003600082825461384f91906143b8565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139019190613c17565b60405180910390a3613915600083836125a5565b5050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff801682111561397c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397390615a56565b60405180910390fd5b819050919050565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6139fc816139c7565b8114613a0757600080fd5b50565b600081359050613a19816139f3565b92915050565b600060208284031215613a3557613a346139c2565b5b6000613a4384828501613a0a565b91505092915050565b60008115159050919050565b613a6181613a4c565b82525050565b6000602082019050613a7c6000830184613a58565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613abc578082015181840152602081019050613aa1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ae482613a82565b613aee8185613a8d565b9350613afe818560208601613a9e565b613b0781613ac8565b840191505092915050565b60006020820190508181036000830152613b2c8184613ad9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b5f82613b34565b9050919050565b613b6f81613b54565b8114613b7a57600080fd5b50565b600081359050613b8c81613b66565b92915050565b6000819050919050565b613ba581613b92565b8114613bb057600080fd5b50565b600081359050613bc281613b9c565b92915050565b60008060408385031215613bdf57613bde6139c2565b5b6000613bed85828601613b7d565b9250506020613bfe85828601613bb3565b9150509250929050565b613c1181613b92565b82525050565b6000602082019050613c2c6000830184613c08565b92915050565b600080600060608486031215613c4b57613c4a6139c2565b5b6000613c5986828701613b7d565b9350506020613c6a86828701613b7d565b9250506040613c7b86828701613bb3565b9150509250925092565b6000819050919050565b613c9881613c85565b8114613ca357600080fd5b50565b600081359050613cb581613c8f565b92915050565b600060208284031215613cd157613cd06139c2565b5b6000613cdf84828501613ca6565b91505092915050565b613cf181613c85565b82525050565b6000602082019050613d0c6000830184613ce8565b92915050565b60008060408385031215613d2957613d286139c2565b5b6000613d3785828601613ca6565b9250506020613d4885828601613b7d565b9150509250929050565b600060ff82169050919050565b613d6881613d52565b82525050565b6000602082019050613d836000830184613d5f565b92915050565b600060208284031215613d9f57613d9e6139c2565b5b6000613dad84828501613bb3565b91505092915050565b600060208284031215613dcc57613dcb6139c2565b5b6000613dda84828501613b7d565b91505092915050565b613dec81613b54565b82525050565b6000602082019050613e076000830184613de3565b92915050565b600063ffffffff82169050919050565b613e2681613e0d565b82525050565b6000602082019050613e416000830184613e1d565b92915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b613e7c81613e47565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613eb781613b92565b82525050565b6000613ec98383613eae565b60208301905092915050565b6000602082019050919050565b6000613eed82613e82565b613ef78185613e8d565b9350613f0283613e9e565b8060005b83811015613f33578151613f1a8882613ebd565b9750613f2583613ed5565b925050600181019050613f06565b5085935050505092915050565b600060e082019050613f55600083018a613e73565b8181036020830152613f678189613ad9565b90508181036040830152613f7b8188613ad9565b9050613f8a6060830187613c08565b613f976080830186613de3565b613fa460a0830185613ce8565b81810360c0830152613fb68184613ee2565b905098975050505050505050565b600065ffffffffffff82169050919050565b613fdf81613fc4565b82525050565b6000602082019050613ffa6000830184613fd6565b92915050565b61400981613d52565b811461401457600080fd5b50565b60008135905061402681614000565b92915050565b60008060008060008060c08789031215614049576140486139c2565b5b600061405789828a01613b7d565b965050602061406889828a01613bb3565b955050604061407989828a01613bb3565b945050606061408a89828a01614017565b935050608061409b89828a01613ca6565b92505060a06140ac89828a01613ca6565b9150509295509295509295565b600080600080600080600060e0888a0312156140d8576140d76139c2565b5b60006140e68a828b01613b7d565b97505060206140f78a828b01613b7d565b96505060406141088a828b01613bb3565b95505060606141198a828b01613bb3565b945050608061412a8a828b01614017565b93505060a061413b8a828b01613ca6565b92505060c061414c8a828b01613ca6565b91505092959891949750929550565b60008060408385031215614172576141716139c2565b5b600061418085828601613b7d565b925050602061419185828601613b7d565b9150509250929050565b6141a481613e0d565b81146141af57600080fd5b50565b6000813590506141c18161419b565b92915050565b600080604083850312156141de576141dd6139c2565b5b60006141ec85828601613b7d565b92505060206141fd858286016141b2565b9150509250929050565b61421081613e0d565b82525050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b61424781614216565b82525050565b6040820160008201516142636000850182614207565b506020820151614276602085018261423e565b50505050565b6000604082019050614291600083018461424d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142de57607f821691505b6020821081036142f1576142f0614297565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000614353602f83613a8d565b915061435e826142f7565b604082019050919050565b6000602082019050818103600083015261438281614346565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143c382613b92565b91506143ce83613b92565b92508282019050808211156143e6576143e5614389565b5b92915050565b7f4552433230566f7465733a20667574757265206c6f6f6b757000000000000000600082015250565b6000614422601983613a8d565b915061442d826143ec565b602082019050919050565b6000602082019050818103600083015261445181614415565b9050919050565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f76652070617573657220726f6c6520746f20756e706175736500000000000000602082015250565b60006144b4603983613a8d565b91506144bf82614458565b604082019050919050565b600060208201905081810360008301526144e3816144a7565b9050919050565b7f4c4954546f6b656e3a206f6e6c79206d696e7465720000000000000000000000600082015250565b6000614520601583613a8d565b915061452b826144ea565b602082019050919050565b6000602082019050818103600083015261454f81614513565b9050919050565b7f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f6465000000600082015250565b600061458c601d83613a8d565b915061459782614556565b602082019050919050565b600060208201905081810360008301526145bb8161457f565b9050919050565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f76652070617573657220726f6c6520746f207061757365000000000000000000602082015250565b600061461e603783613a8d565b9150614629826145c2565b604082019050919050565b6000602082019050818103600083015261464d81614611565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061470e602583613a8d565b9150614719826146b2565b604082019050919050565b6000602082019050818103600083015261473d81614701565b9050919050565b7f4552433230566f7465733a207369676e61747572652065787069726564000000600082015250565b600061477a601d83613a8d565b915061478582614744565b602082019050919050565b600060208201905081810360008301526147a98161476d565b9050919050565b60006080820190506147c56000830187613ce8565b6147d26020830186613de3565b6147df6040830185613c08565b6147ec6060830184613c08565b95945050505050565b7f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000600082015250565b600061482b601983613a8d565b9150614836826147f5565b602082019050919050565b6000602082019050818103600083015261485a8161481e565b9050919050565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b6000614897601d83613a8d565b91506148a282614861565b602082019050919050565b600060208201905081810360008301526148c68161488a565b9050919050565b600060c0820190506148e26000830189613ce8565b6148ef6020830188613de3565b6148fc6040830187613de3565b6149096060830186613c08565b6149166080830185613c08565b61492360a0830184613c08565b979650505050505050565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b6000614964601e83613a8d565b915061496f8261492e565b602082019050919050565b6000602082019050818103600083015261499381614957565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026149fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826149bf565b614a0686836149bf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614a43614a3e614a3984613b92565b614a1e565b613b92565b9050919050565b6000819050919050565b614a5d83614a28565b614a71614a6982614a4a565b8484546149cc565b825550505050565b600090565b614a86614a79565b614a91818484614a54565b505050565b5b81811015614ab557614aaa600082614a7e565b600181019050614a97565b5050565b601f821115614afa57614acb8161499a565b614ad4846149af565b81016020851015614ae3578190505b614af7614aef856149af565b830182614a96565b50505b505050565b600082821c905092915050565b6000614b1d60001984600802614aff565b1980831691505092915050565b6000614b368383614b0c565b9150826002028217905092915050565b614b4f82613a82565b67ffffffffffffffff811115614b6857614b67614654565b5b614b7282546142c6565b614b7d828285614ab9565b600060209050601f831160018114614bb05760008415614b9e578287015190505b614ba88582614b2a565b865550614c10565b601f198416614bbe8661499a565b60005b82811015614be657848901518255600182019150602085019450602081019050614bc1565b86831015614c035784890151614bff601f891682614b0c565b8355505b6001600288020188555050505b505050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c74602483613a8d565b9150614c7f82614c18565b604082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d06602283613a8d565b9150614d1182614caa565b604082019050919050565b60006020820190508181036000830152614d3581614cf9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614d72601d83613a8d565b9150614d7d82614d3c565b602082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e04602583613a8d565b9150614e0f82614da8565b604082019050919050565b60006020820190508181036000830152614e3381614df7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e96602383613a8d565b9150614ea182614e3a565b604082019050919050565b60006020820190508181036000830152614ec581614e89565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f28602683613a8d565b9150614f3382614ecc565b604082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b6000614f6982613b92565b9150614f7483613b92565b9250828203905081811115614f8c57614f8b614389565b5b92915050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203360008201527f3220626974730000000000000000000000000000000000000000000000000000602082015250565b6000614fee602683613a8d565b9150614ff982614f92565b604082019050919050565b6000602082019050818103600083015261501d81614fe1565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203460008201527f3820626974730000000000000000000000000000000000000000000000000000602082015250565b6000615080602683613a8d565b915061508b82615024565b604082019050919050565b600060208201905081810360008301526150af81615073565b9050919050565b600081519050919050565b6000819050602082019050919050565b60006150dd8251613c85565b80915050919050565b60006150f1826150b6565b826150fb846150c1565b9050615106816150d1565b92506020821015615146576151417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026149bf565b831692505b5050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600061518e60178361514d565b915061519982615158565b601782019050919050565b60006151af82613a82565b6151b9818561514d565b93506151c9818560208601613a9e565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600061520b60118361514d565b9150615216826151d5565b601182019050919050565b600061522c82615181565b915061523882856151a4565b9150615243826151fe565b915061524f82846151a4565b91508190509392505050565b600060a0820190506152706000830188613ce8565b61527d6020830187613ce8565b61528a6040830186613ce8565b6152976060830185613c08565b6152a46080830184613de3565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006152e882613b92565b91506152f383613b92565b925082615303576153026152ae565b5b828204905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000615344601483613a8d565b915061534f8261530e565b602082019050919050565b6000602082019050818103600083015261537381615337565b9050919050565b7f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60008201527f766572666c6f77696e6720766f74657300000000000000000000000000000000602082015250565b60006153d6603083613a8d565b91506153e18261537a565b604082019050919050565b60006020820190508181036000830152615405816153c9565b9050919050565b60006040820190506154216000830185613c08565b61542e6020830184613c08565b9392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600061546b601083613a8d565b915061547682615435565b602082019050919050565b6000602082019050818103600083015261549a8161545e565b9050919050565b60006080820190506154b66000830187613ce8565b6154c36020830186613d5f565b6154d06040830185613ce8565b6154dd6060830184613ce8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061554b601883613a8d565b915061555682615515565b602082019050919050565b6000602082019050818103600083015261557a8161553e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006155b7601f83613a8d565b91506155c282615581565b602082019050919050565b600060208201905081810360008301526155e6816155aa565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615649602283613a8d565b9150615654826155ed565b604082019050919050565b600060208201905081810360008301526156788161563c565b9050919050565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b60006156db602a83613a8d565b91506156e68261567f565b604082019050919050565b6000602082019050818103600083015261570a816156ce565b9050919050565b600061571c82613b92565b915061572783613b92565b925082820261573581613b92565b9150828204841483151761574c5761574b614389565b5b5092915050565b600061575e82613b92565b91506000820361577157615770614389565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006157b2602083613a8d565b91506157bd8261577c565b602082019050919050565b600060208201905081810360008301526157e1816157a5565b9050919050565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b600061581e601983613a8d565b9150615829826157e8565b602082019050919050565b6000602082019050818103600083015261584d81615811565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006158b0602183613a8d565b91506158bb82615854565b604082019050919050565b600060208201905081810360008301526158df816158a3565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000615942602283613a8d565b915061594d826158e6565b604082019050919050565b6000602082019050818103600083015261597181615935565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006159ae601f83613a8d565b91506159b982615978565b602082019050919050565b600060208201905081810360008301526159dd816159a1565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203260008201527f3234206269747300000000000000000000000000000000000000000000000000602082015250565b6000615a40602783613a8d565b9150615a4b826159e4565b604082019050919050565b60006020820190508181036000830152615a6f81615a33565b905091905056fea2646970667358221220cf01948920f8430ca687b59c4f127d6b953eef98a1fc344197ab1a1aa00c4db264736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061025e5760003560e01c806370a08231116101465780639ab24eb0116100c3578063d505accf11610087578063d505accf14610779578063d539139314610795578063d547741f146107b3578063dd62ed3e146107cf578063e63ab1e9146107ff578063f1127ed81461081d5761025e565b80639ab24eb0146106af578063a217fddf146106df578063a457c2d7146106fd578063a9059cbb1461072d578063c3cda5201461075d5761025e565b806384b0196e1161010a57806384b0196e146105ef5780638e539e8c1461061357806391d148541461064357806391ddadf41461067357806395d89b41146106915761025e565b806370a082311461054b57806375b238fc1461057b57806379cc6790146105995780637ecebe00146105b55780638456cb59146105e55761025e565b806336568abe116101df57806342966c68116101a357806342966c68146104775780634bf5d7e914610493578063587cde1e146104b15780635c19a95c146104e15780635c975abb146104fd5780636fcfff451461051b5761025e565b806336568abe146103d557806339509351146103f15780633a46b1a8146104215780633f4ba83a1461045157806340c10f191461045b5761025e565b8063248a9ca311610226578063248a9ca31461032f5780632f2ff15d1461035f578063313ce5671461037b578063355274ea146103995780633644e515146103b75761025e565b806301ffc9a71461026357806306fdde0314610293578063095ea7b3146102b157806318160ddd146102e157806323b872dd146102ff575b600080fd5b61027d60048036038101906102789190613a1f565b61084d565b60405161028a9190613a67565b60405180910390f35b61029b6108c7565b6040516102a89190613b12565b60405180910390f35b6102cb60048036038101906102c69190613bc8565b610959565b6040516102d89190613a67565b60405180910390f35b6102e961097c565b6040516102f69190613c17565b60405180910390f35b61031960048036038101906103149190613c32565b610986565b6040516103269190613a67565b60405180910390f35b61034960048036038101906103449190613cbb565b6109b5565b6040516103569190613cf7565b60405180910390f35b61037960048036038101906103749190613d12565b6109d4565b005b6103836109f5565b6040516103909190613d6e565b60405180910390f35b6103a16109fe565b6040516103ae9190613c17565b60405180910390f35b6103bf610a26565b6040516103cc9190613cf7565b60405180910390f35b6103ef60048036038101906103ea9190613d12565b610a35565b005b61040b60048036038101906104069190613bc8565b610ab8565b6040516104189190613a67565b60405180910390f35b61043b60048036038101906104369190613bc8565b610aef565b6040516104489190613c17565b60405180910390f35b610459610b92565b005b61047560048036038101906104709190613bc8565b610c0c565b005b610491600480360381019061048c9190613d89565b610c83565b005b61049b610c97565b6040516104a89190613b12565b60405180910390f35b6104cb60048036038101906104c69190613db6565b610d25565b6040516104d89190613df2565b60405180910390f35b6104fb60048036038101906104f69190613db6565b610d8e565b005b610505610da2565b6040516105129190613a67565b60405180910390f35b61053560048036038101906105309190613db6565b610db9565b6040516105429190613e2c565b60405180910390f35b61056560048036038101906105609190613db6565b610e0d565b6040516105729190613c17565b60405180910390f35b610583610e56565b6040516105909190613cf7565b60405180910390f35b6105b360048036038101906105ae9190613bc8565b610e7a565b005b6105cf60048036038101906105ca9190613db6565b610e9a565b6040516105dc9190613c17565b60405180910390f35b6105ed610eea565b005b6105f7610f64565b60405161060a9796959493929190613f40565b60405180910390f35b61062d60048036038101906106289190613d89565b611066565b60405161063a9190613c17565b60405180910390f35b61065d60048036038101906106589190613d12565b6110cb565b60405161066a9190613a67565b60405180910390f35b61067b611135565b6040516106889190613fe5565b60405180910390f35b610699611145565b6040516106a69190613b12565b60405180910390f35b6106c960048036038101906106c49190613db6565b6111d7565b6040516106d69190613c17565b60405180910390f35b6106e76112df565b6040516106f49190613cf7565b60405180910390f35b61071760048036038101906107129190613bc8565b6112e6565b6040516107249190613a67565b60405180910390f35b61074760048036038101906107429190613bc8565b61135d565b6040516107549190613a67565b60405180910390f35b6107776004803603810190610772919061402c565b611380565b005b610793600480360381019061078e91906140b9565b611484565b005b61079d6115c6565b6040516107aa9190613cf7565b60405180910390f35b6107cd60048036038101906107c89190613d12565b6115ea565b005b6107e960048036038101906107e4919061415b565b61160b565b6040516107f69190613c17565b60405180910390f35b610807611692565b6040516108149190613cf7565b60405180910390f35b610837600480360381019061083291906141c7565b6116b6565b604051610844919061427c565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c057506108bf82611814565b5b9050919050565b6060600480546108d6906142c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610902906142c6565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b5050505050905090565b60008061096461187e565b9050610971818585611886565b600191505092915050565b6000600354905090565b60008061099161187e565b905061099e858285611a4f565b6109a9858585611adb565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b6109dd826109b5565b6109e681611d54565b6109f08383611d68565b505050565b60006012905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6000610a30611e48565b905090565b610a3d61187e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa190614369565b60405180910390fd5b610ab48282611eff565b5050565b600080610ac361187e565b9050610ae4818585610ad5858961160b565b610adf91906143b8565b611886565b600191505092915050565b6000610af9611135565b65ffffffffffff168210610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990614438565b60405180910390fd5b610b8a600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083611fe0565b905092915050565b610bc37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bbe61187e565b6110cb565b610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf9906144ca565b60405180910390fd5b610c0a612128565b565b610c367ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc9336110cb565b610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90614536565b60405180910390fd5b610c7f828261218b565b5050565b610c94610c8e61187e565b82612199565b50565b606043610ca2611135565b65ffffffffffff1614610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce1906145a2565b60405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d9f610d9961187e565b826121a7565b50565b6000600660009054906101000a900460ff16905090565b6000610e06600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506122c1565b9050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b610e8c82610e8661187e565b83611a4f565b610e968282612199565b5050565b6000610ee3600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612314565b9050919050565b610f1b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610f1661187e565b6110cb565b610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190614634565b60405180910390fd5b610f62612322565b565b600060608060008060006060610fa460077f000000000000000000000000000000000000000000000000000000000000000061238590919063ffffffff16565b610fd860087f000000000000000000000000000000000000000000000000000000000000000061238590919063ffffffff16565b46306000801b600067ffffffffffffffff811115610ff957610ff8614654565b5b6040519080825280602002602001820160405280156110275781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b6000611070611135565b65ffffffffffff1682106110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090614438565b60405180910390fd5b6110c4600d83611fe0565b9050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061114043612435565b905090565b606060058054611154906142c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611180906142c6565b80156111cd5780601f106111a2576101008083540402835291602001916111cd565b820191906000526020600020905b8154815290600101906020018083116111b057829003601f168201915b5050505050905090565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600081146112b657600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182038154811061127b5761127a614683565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166112b9565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b6000801b81565b6000806112f161187e565b905060006112ff828661160b565b905083811015611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90614724565b60405180910390fd5b6113518286868403611886565b60019250505092915050565b60008061136861187e565b9050611375818585611adb565b600191505092915050565b834211156113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90614790565b60405180910390fd5b600061142561141d7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf89898960405160200161140294939291906147b0565b6040516020818303038152906040528051906020012061248a565b8585856124a4565b9050611430816124cf565b8614611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890614841565b60405180910390fd5b61147b81886121a7565b50505050505050565b834211156114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be906148ad565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886114f68c6124cf565b8960405160200161150c969594939291906148cd565b604051602081830303815290604052805190602001209050600061152f8261248a565b9050600061153f828787876124a4565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a69061497a565b60405180910390fd5b6115ba8a8a8a611886565b50505050505050505050565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b6115f3826109b5565b6115fc81611d54565b6116068383611eff565b505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6116be613984565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208263ffffffff168154811061171557611714614683565b5b906000526020600020016040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b60006020835110156117e2576117db8361252d565b9050611804565b826117ec8361180a565b60000190816117fb9190614b46565b5060ff60001b90505b92915050565b6000819050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90614c8a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90614d1c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a429190613c17565b60405180910390a3505050565b6000611a5b848461160b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ad55781811015611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe90614d88565b60405180910390fd5b611ad48484848403611886565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4190614e1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090614eac565b60405180910390fd5b611bc4838383612595565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4290614f3e565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d3b9190613c17565b60405180910390a3611d4e8484846125a5565b50505050565b611d6581611d6061187e565b6125b5565b50565b611d7282826110cb565b611e4457600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611de961187e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015611ec457507f000000000000000000000000000000000000000000000000000000000000000046145b15611ef1577f00000000000000000000000000000000000000000000000000000000000000009050611efc565b611ef961263a565b90505b90565b611f0982826110cb565b15611fdc57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611f8161187e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600080838054905090506000808290506005831115612056576000612004846126d0565b8461200f9190614f5e565b90508561201c88836127c9565b60000160009054906101000a900463ffffffff1663ffffffff16111561204457809150612054565b60018161205191906143b8565b92505b505b5b808210156120b657600061206b83836127de565b90508561207888836127c9565b60000160009054906101000a900463ffffffff1663ffffffff1611156120a0578091506120b0565b6001816120ad91906143b8565b92505b50612057565b600081146120fc576120cb86600183036127c9565b60000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166120ff565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935050505092915050565b612130612804565b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61217461187e565b6040516121819190613df2565b60405180910390a1565b612195828261284d565b5050565b6121a382826128da565b5050565b60006121b283610d25565b905060006121bf84610e0d565b905082600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46122bb8284836128f8565b50505050565b600063ffffffff801682111561230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390615004565b60405180910390fd5b819050919050565b600081600001549050919050565b61232a612af1565b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861236e61187e565b60405161237b9190613df2565b60405180910390a1565b606060ff60001b83146123a25761239b83612b3b565b905061242f565b8180546123ae906142c6565b80601f01602080910402602001604051908101604052809291908181526020018280546123da906142c6565b80156124275780601f106123fc57610100808354040283529160200191612427565b820191906000526020600020905b81548152906001019060200180831161240a57829003601f168201915b505050505090505b92915050565b600065ffffffffffff8016821115612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990615096565b60405180910390fd5b819050919050565b600061249d612497611e48565b83612baf565b9050919050565b60008060006124b587878787612bf0565b915091506124c281612cd2565b8192505050949350505050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061251c81612314565b915061252781612e38565b50919050565b600080829050601f8151111561257a57826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016125719190613b12565b60405180910390fd5b805181612586906150e6565b60001c1760001b915050919050565b6125a0838383612e4e565b505050565b6125b0838383612e4e565b505050565b6125bf82826110cb565b612636576125cc81612ea6565b6125da8360001c6020612ed3565b6040516020016125eb929190615221565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262d9190613b12565b60405180910390fd5b5050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016126b595949392919061525b565b60405160208183030381529060405280519060200120905090565b60008082036126e257600090506127c4565b600060016126ef8461310f565b901c6001901b90506001818481612709576127086152ae565b5b048201901c90506001818481612722576127216152ae565b5b048201901c9050600181848161273b5761273a6152ae565b5b048201901c90506001818481612754576127536152ae565b5b048201901c9050600181848161276d5761276c6152ae565b5b048201901c90506001818481612786576127856152ae565b5b048201901c9050600181848161279f5761279e6152ae565b5b048201901c90506127c0818285816127ba576127b96152ae565b5b046131f0565b9150505b919050565b60008260005281602060002001905092915050565b600060028284186127ef91906152dd565b8284166127fc91906143b8565b905092915050565b61280c610da2565b61284b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128429061535a565b60405180910390fd5b565b6128578282613209565b61285f613273565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661288561097c565b11156128c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bd906153ec565b60405180910390fd5b6128d4600d613297836132ad565b50505050565b6128e48282613588565b6128f2600d613757836132ad565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129345750600081115b15612aec57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a12576000806129bb600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613757856132ad565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612a0792919061540c565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612aeb57600080612a94600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613297856132ad565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612ae092919061540c565b60405180910390a250505b5b505050565b612af9610da2565b15612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3090615481565b60405180910390fd5b565b60606000612b488361376d565b90506000602067ffffffffffffffff811115612b6757612b66614654565b5b6040519080825280601f01601f191660200182016040528015612b995781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612c2b576000600391509150612cc9565b600060018787878760405160008152602001604052604051612c5094939291906154a1565b6020604051602081039080840390855afa158015612c72573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612cc057600060019250925050612cc9565b80600092509250505b94509492505050565b60006004811115612ce657612ce56154e6565b5b816004811115612cf957612cf86154e6565b5b0315612e355760016004811115612d1357612d126154e6565b5b816004811115612d2657612d256154e6565b5b03612d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5d90615561565b60405180910390fd5b60026004811115612d7a57612d796154e6565b5b816004811115612d8d57612d8c6154e6565b5b03612dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc4906155cd565b60405180910390fd5b60036004811115612de157612de06154e6565b5b816004811115612df457612df36154e6565b5b03612e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2b9061565f565b60405180910390fd5b5b50565b6001816000016000828254019250508190555050565b612e598383836137bd565b612e61610da2565b15612ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e98906156f1565b60405180910390fd5b505050565b6060612ecc8273ffffffffffffffffffffffffffffffffffffffff16601460ff16612ed3565b9050919050565b606060006002836002612ee69190615711565b612ef091906143b8565b67ffffffffffffffff811115612f0957612f08614654565b5b6040519080825280601f01601f191660200182016040528015612f3b5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612f7357612f72614683565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612fd757612fd6614683565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026130179190615711565b61302191906143b8565b90505b60018111156130c1577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061306357613062614683565b5b1a60f81b82828151811061307a57613079614683565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806130ba90615753565b9050613024565b5060008414613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fc906157c8565b60405180910390fd5b8091505092915050565b600080600090506000608084901c111561313157608083901c92506080810190505b6000604084901c111561314c57604083901c92506040810190505b6000602084901c111561316757602083901c92506020810190505b6000601084901c111561318257601083901c92506010810190505b6000600884901c111561319d57600883901c92506008810190505b6000600484901c11156131b857600483901c92506004810190505b6000600284901c11156131d357600283901c92506002810190505b6000600184901c11156131e7576001810190505b80915050919050565b60008183106131ff5781613201565b825b905092915050565b6132116109fe565b8161321a61097c565b61322491906143b8565b1115613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325c90615834565b60405180910390fd5b61326f82826137c2565b5050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b600081836132a591906143b8565b905092915050565b6000806000858054905090506000808214613373576132cf87600184036127c9565b6040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815250506133af565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152505b905080602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1693506133e484868863ffffffff16565b925060008211801561340e57506133f9611135565b65ffffffffffff16816000015163ffffffff16145b1561347f5761341c83613919565b61342988600185036127c9565b60000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555061357e565b8660405180604001604052806134a3613496611135565b65ffffffffffff166122c1565b63ffffffff1681526020016134b786613919565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b5050935093915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036135f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ee906158c6565b60405180910390fd5b61360382600083612595565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561368a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368190615958565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161373e9190613c17565b60405180910390a3613752836000846125a5565b505050565b600081836137659190614f5e565b905092915050565b60008060ff8360001c169050601f8111156137b4576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613828906159c4565b60405180910390fd5b61383d60008383612595565b806003600082825461384f91906143b8565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139019190613c17565b60405180910390a3613915600083836125a5565b5050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff801682111561397c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397390615a56565b60405180910390fd5b819050919050565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6139fc816139c7565b8114613a0757600080fd5b50565b600081359050613a19816139f3565b92915050565b600060208284031215613a3557613a346139c2565b5b6000613a4384828501613a0a565b91505092915050565b60008115159050919050565b613a6181613a4c565b82525050565b6000602082019050613a7c6000830184613a58565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613abc578082015181840152602081019050613aa1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ae482613a82565b613aee8185613a8d565b9350613afe818560208601613a9e565b613b0781613ac8565b840191505092915050565b60006020820190508181036000830152613b2c8184613ad9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b5f82613b34565b9050919050565b613b6f81613b54565b8114613b7a57600080fd5b50565b600081359050613b8c81613b66565b92915050565b6000819050919050565b613ba581613b92565b8114613bb057600080fd5b50565b600081359050613bc281613b9c565b92915050565b60008060408385031215613bdf57613bde6139c2565b5b6000613bed85828601613b7d565b9250506020613bfe85828601613bb3565b9150509250929050565b613c1181613b92565b82525050565b6000602082019050613c2c6000830184613c08565b92915050565b600080600060608486031215613c4b57613c4a6139c2565b5b6000613c5986828701613b7d565b9350506020613c6a86828701613b7d565b9250506040613c7b86828701613bb3565b9150509250925092565b6000819050919050565b613c9881613c85565b8114613ca357600080fd5b50565b600081359050613cb581613c8f565b92915050565b600060208284031215613cd157613cd06139c2565b5b6000613cdf84828501613ca6565b91505092915050565b613cf181613c85565b82525050565b6000602082019050613d0c6000830184613ce8565b92915050565b60008060408385031215613d2957613d286139c2565b5b6000613d3785828601613ca6565b9250506020613d4885828601613b7d565b9150509250929050565b600060ff82169050919050565b613d6881613d52565b82525050565b6000602082019050613d836000830184613d5f565b92915050565b600060208284031215613d9f57613d9e6139c2565b5b6000613dad84828501613bb3565b91505092915050565b600060208284031215613dcc57613dcb6139c2565b5b6000613dda84828501613b7d565b91505092915050565b613dec81613b54565b82525050565b6000602082019050613e076000830184613de3565b92915050565b600063ffffffff82169050919050565b613e2681613e0d565b82525050565b6000602082019050613e416000830184613e1d565b92915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b613e7c81613e47565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613eb781613b92565b82525050565b6000613ec98383613eae565b60208301905092915050565b6000602082019050919050565b6000613eed82613e82565b613ef78185613e8d565b9350613f0283613e9e565b8060005b83811015613f33578151613f1a8882613ebd565b9750613f2583613ed5565b925050600181019050613f06565b5085935050505092915050565b600060e082019050613f55600083018a613e73565b8181036020830152613f678189613ad9565b90508181036040830152613f7b8188613ad9565b9050613f8a6060830187613c08565b613f976080830186613de3565b613fa460a0830185613ce8565b81810360c0830152613fb68184613ee2565b905098975050505050505050565b600065ffffffffffff82169050919050565b613fdf81613fc4565b82525050565b6000602082019050613ffa6000830184613fd6565b92915050565b61400981613d52565b811461401457600080fd5b50565b60008135905061402681614000565b92915050565b60008060008060008060c08789031215614049576140486139c2565b5b600061405789828a01613b7d565b965050602061406889828a01613bb3565b955050604061407989828a01613bb3565b945050606061408a89828a01614017565b935050608061409b89828a01613ca6565b92505060a06140ac89828a01613ca6565b9150509295509295509295565b600080600080600080600060e0888a0312156140d8576140d76139c2565b5b60006140e68a828b01613b7d565b97505060206140f78a828b01613b7d565b96505060406141088a828b01613bb3565b95505060606141198a828b01613bb3565b945050608061412a8a828b01614017565b93505060a061413b8a828b01613ca6565b92505060c061414c8a828b01613ca6565b91505092959891949750929550565b60008060408385031215614172576141716139c2565b5b600061418085828601613b7d565b925050602061419185828601613b7d565b9150509250929050565b6141a481613e0d565b81146141af57600080fd5b50565b6000813590506141c18161419b565b92915050565b600080604083850312156141de576141dd6139c2565b5b60006141ec85828601613b7d565b92505060206141fd858286016141b2565b9150509250929050565b61421081613e0d565b82525050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b61424781614216565b82525050565b6040820160008201516142636000850182614207565b506020820151614276602085018261423e565b50505050565b6000604082019050614291600083018461424d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142de57607f821691505b6020821081036142f1576142f0614297565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000614353602f83613a8d565b915061435e826142f7565b604082019050919050565b6000602082019050818103600083015261438281614346565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143c382613b92565b91506143ce83613b92565b92508282019050808211156143e6576143e5614389565b5b92915050565b7f4552433230566f7465733a20667574757265206c6f6f6b757000000000000000600082015250565b6000614422601983613a8d565b915061442d826143ec565b602082019050919050565b6000602082019050818103600083015261445181614415565b9050919050565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f76652070617573657220726f6c6520746f20756e706175736500000000000000602082015250565b60006144b4603983613a8d565b91506144bf82614458565b604082019050919050565b600060208201905081810360008301526144e3816144a7565b9050919050565b7f4c4954546f6b656e3a206f6e6c79206d696e7465720000000000000000000000600082015250565b6000614520601583613a8d565b915061452b826144ea565b602082019050919050565b6000602082019050818103600083015261454f81614513565b9050919050565b7f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f6465000000600082015250565b600061458c601d83613a8d565b915061459782614556565b602082019050919050565b600060208201905081810360008301526145bb8161457f565b9050919050565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f76652070617573657220726f6c6520746f207061757365000000000000000000602082015250565b600061461e603783613a8d565b9150614629826145c2565b604082019050919050565b6000602082019050818103600083015261464d81614611565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061470e602583613a8d565b9150614719826146b2565b604082019050919050565b6000602082019050818103600083015261473d81614701565b9050919050565b7f4552433230566f7465733a207369676e61747572652065787069726564000000600082015250565b600061477a601d83613a8d565b915061478582614744565b602082019050919050565b600060208201905081810360008301526147a98161476d565b9050919050565b60006080820190506147c56000830187613ce8565b6147d26020830186613de3565b6147df6040830185613c08565b6147ec6060830184613c08565b95945050505050565b7f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000600082015250565b600061482b601983613a8d565b9150614836826147f5565b602082019050919050565b6000602082019050818103600083015261485a8161481e565b9050919050565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b6000614897601d83613a8d565b91506148a282614861565b602082019050919050565b600060208201905081810360008301526148c68161488a565b9050919050565b600060c0820190506148e26000830189613ce8565b6148ef6020830188613de3565b6148fc6040830187613de3565b6149096060830186613c08565b6149166080830185613c08565b61492360a0830184613c08565b979650505050505050565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b6000614964601e83613a8d565b915061496f8261492e565b602082019050919050565b6000602082019050818103600083015261499381614957565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026149fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826149bf565b614a0686836149bf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614a43614a3e614a3984613b92565b614a1e565b613b92565b9050919050565b6000819050919050565b614a5d83614a28565b614a71614a6982614a4a565b8484546149cc565b825550505050565b600090565b614a86614a79565b614a91818484614a54565b505050565b5b81811015614ab557614aaa600082614a7e565b600181019050614a97565b5050565b601f821115614afa57614acb8161499a565b614ad4846149af565b81016020851015614ae3578190505b614af7614aef856149af565b830182614a96565b50505b505050565b600082821c905092915050565b6000614b1d60001984600802614aff565b1980831691505092915050565b6000614b368383614b0c565b9150826002028217905092915050565b614b4f82613a82565b67ffffffffffffffff811115614b6857614b67614654565b5b614b7282546142c6565b614b7d828285614ab9565b600060209050601f831160018114614bb05760008415614b9e578287015190505b614ba88582614b2a565b865550614c10565b601f198416614bbe8661499a565b60005b82811015614be657848901518255600182019150602085019450602081019050614bc1565b86831015614c035784890151614bff601f891682614b0c565b8355505b6001600288020188555050505b505050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c74602483613a8d565b9150614c7f82614c18565b604082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d06602283613a8d565b9150614d1182614caa565b604082019050919050565b60006020820190508181036000830152614d3581614cf9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614d72601d83613a8d565b9150614d7d82614d3c565b602082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e04602583613a8d565b9150614e0f82614da8565b604082019050919050565b60006020820190508181036000830152614e3381614df7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e96602383613a8d565b9150614ea182614e3a565b604082019050919050565b60006020820190508181036000830152614ec581614e89565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f28602683613a8d565b9150614f3382614ecc565b604082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b6000614f6982613b92565b9150614f7483613b92565b9250828203905081811115614f8c57614f8b614389565b5b92915050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203360008201527f3220626974730000000000000000000000000000000000000000000000000000602082015250565b6000614fee602683613a8d565b9150614ff982614f92565b604082019050919050565b6000602082019050818103600083015261501d81614fe1565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203460008201527f3820626974730000000000000000000000000000000000000000000000000000602082015250565b6000615080602683613a8d565b915061508b82615024565b604082019050919050565b600060208201905081810360008301526150af81615073565b9050919050565b600081519050919050565b6000819050602082019050919050565b60006150dd8251613c85565b80915050919050565b60006150f1826150b6565b826150fb846150c1565b9050615106816150d1565b92506020821015615146576151417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026149bf565b831692505b5050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600061518e60178361514d565b915061519982615158565b601782019050919050565b60006151af82613a82565b6151b9818561514d565b93506151c9818560208601613a9e565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600061520b60118361514d565b9150615216826151d5565b601182019050919050565b600061522c82615181565b915061523882856151a4565b9150615243826151fe565b915061524f82846151a4565b91508190509392505050565b600060a0820190506152706000830188613ce8565b61527d6020830187613ce8565b61528a6040830186613ce8565b6152976060830185613c08565b6152a46080830184613de3565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006152e882613b92565b91506152f383613b92565b925082615303576153026152ae565b5b828204905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000615344601483613a8d565b915061534f8261530e565b602082019050919050565b6000602082019050818103600083015261537381615337565b9050919050565b7f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60008201527f766572666c6f77696e6720766f74657300000000000000000000000000000000602082015250565b60006153d6603083613a8d565b91506153e18261537a565b604082019050919050565b60006020820190508181036000830152615405816153c9565b9050919050565b60006040820190506154216000830185613c08565b61542e6020830184613c08565b9392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600061546b601083613a8d565b915061547682615435565b602082019050919050565b6000602082019050818103600083015261549a8161545e565b9050919050565b60006080820190506154b66000830187613ce8565b6154c36020830186613d5f565b6154d06040830185613ce8565b6154dd6060830184613ce8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061554b601883613a8d565b915061555682615515565b602082019050919050565b6000602082019050818103600083015261557a8161553e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006155b7601f83613a8d565b91506155c282615581565b602082019050919050565b600060208201905081810360008301526155e6816155aa565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615649602283613a8d565b9150615654826155ed565b604082019050919050565b600060208201905081810360008301526156788161563c565b9050919050565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b60006156db602a83613a8d565b91506156e68261567f565b604082019050919050565b6000602082019050818103600083015261570a816156ce565b9050919050565b600061571c82613b92565b915061572783613b92565b925082820261573581613b92565b9150828204841483151761574c5761574b614389565b5b5092915050565b600061575e82613b92565b91506000820361577157615770614389565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006157b2602083613a8d565b91506157bd8261577c565b602082019050919050565b600060208201905081810360008301526157e1816157a5565b9050919050565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b600061581e601983613a8d565b9150615829826157e8565b602082019050919050565b6000602082019050818103600083015261584d81615811565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006158b0602183613a8d565b91506158bb82615854565b604082019050919050565b600060208201905081810360008301526158df816158a3565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000615942602283613a8d565b915061594d826158e6565b604082019050919050565b6000602082019050818103600083015261597181615935565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006159ae601f83613a8d565b91506159b982615978565b602082019050919050565b600060208201905081810360008301526159dd816159a1565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203260008201527f3234206269747300000000000000000000000000000000000000000000000000602082015250565b6000615a40602783613a8d565b9150615a4b826159e4565b604082019050919050565b60006020820190508181036000830152615a6f81615a33565b905091905056fea2646970667358221220cf01948920f8430ca687b59c4f127d6b953eef98a1fc344197ab1a1aa00c4db264736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "address": "0x5D42EBdBBa61412295D7b0302d6F50aC449Ddb4F" -} \ No newline at end of file diff --git a/contracts/cayenne/Multisender.json b/contracts/cayenne/Multisender.json deleted file mode 100644 index 26e45c6..0000000 --- a/contracts/cayenne/Multisender.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Multisender", - "sourceName": "contracts/lit-node/Multisender.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_recipients", - "type": "address[]" - } - ], - "name": "sendEth", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_recipients", - "type": "address[]" - }, - { - "internalType": "address", - "name": "tokenContract", - "type": "address" - } - ], - "name": "sendTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenContract", - "type": "address" - } - ], - "name": "withdrawTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610bf98061010d6000396000f3fe6080604052600436106100705760003560e01c80636ecf13861161004e5780636ecf1386146100d1578063715018a6146100fa5780638da5cb5b14610111578063f2fde38b1461013c57610070565b80633b2fe781146100755780633ccfd60b1461009157806349df728c146100a8575b600080fd5b61008f600480360381019061008a919061074c565b610165565b005b34801561009d57600080fd5b506100a661020d565b005b3480156100b457600080fd5b506100cf60048036038101906100ca91906107f7565b61025e565b005b3480156100dd57600080fd5b506100f860048036038101906100f39190610824565b61036d565b005b34801561010657600080fd5b5061010f6104d3565b005b34801561011d57600080fd5b506101266104e7565b6040516101339190610893565b60405180910390f35b34801561014857600080fd5b50610163600480360381019061015e91906107f7565b610510565b005b600082829050346101769190610916565b905060005b838390508110156102075783838281811061019957610198610947565b5b90506020020160208101906101ae91906107f7565b73ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101f3573d6000803e3d6000fd5b5080806101ff90610976565b91505061017b565b50505050565b610215610593565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561025b573d6000803e3d6000fd5b50565b610266610593565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016102a69190610893565b602060405180830381865afa1580156102c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e791906109ea565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610324929190610a26565b6020604051808303816000875af1158015610343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103679190610a87565b50505050565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103ad9190610893565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee91906109ea565b9050600085859050826104019190610916565b905060005b868690508110156104ca578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8888848181106104405761043f610947565b5b905060200201602081019061045591906107f7565b846040518363ffffffff1660e01b8152600401610473929190610a26565b6020604051808303816000875af1158015610492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b69190610a87565b5080806104c290610976565b915050610406565b50505050505050565b6104db610593565b6104e56000610611565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610518610593565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057e90610b37565b60405180910390fd5b61059081610611565b50565b61059b6106d5565b73ffffffffffffffffffffffffffffffffffffffff166105b96104e7565b73ffffffffffffffffffffffffffffffffffffffff161461060f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060690610ba3565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261070c5761070b6106e7565b5b8235905067ffffffffffffffff811115610729576107286106ec565b5b602083019150836020820283011115610745576107446106f1565b5b9250929050565b60008060208385031215610763576107626106dd565b5b600083013567ffffffffffffffff811115610781576107806106e2565b5b61078d858286016106f6565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107c482610799565b9050919050565b6107d4816107b9565b81146107df57600080fd5b50565b6000813590506107f1816107cb565b92915050565b60006020828403121561080d5761080c6106dd565b5b600061081b848285016107e2565b91505092915050565b60008060006040848603121561083d5761083c6106dd565b5b600084013567ffffffffffffffff81111561085b5761085a6106e2565b5b610867868287016106f6565b9350935050602061087a868287016107e2565b9150509250925092565b61088d816107b9565b82525050565b60006020820190506108a86000830184610884565b92915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610921826108ae565b915061092c836108ae565b92508261093c5761093b6108b8565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000610981826108ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036109b3576109b26108e7565b5b600182019050919050565b6109c7816108ae565b81146109d257600080fd5b50565b6000815190506109e4816109be565b92915050565b600060208284031215610a00576109ff6106dd565b5b6000610a0e848285016109d5565b91505092915050565b610a20816108ae565b82525050565b6000604082019050610a3b6000830185610884565b610a486020830184610a17565b9392505050565b60008115159050919050565b610a6481610a4f565b8114610a6f57600080fd5b50565b600081519050610a8181610a5b565b92915050565b600060208284031215610a9d57610a9c6106dd565b5b6000610aab84828501610a72565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610b21602683610ab4565b9150610b2c82610ac5565b604082019050919050565b60006020820190508181036000830152610b5081610b14565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610b8d602083610ab4565b9150610b9882610b57565b602082019050919050565b60006020820190508181036000830152610bbc81610b80565b905091905056fea2646970667358221220b32c42e20565b2eee6b85885fda98e5b09fe8ac74b908878c759ba7f540d3c5064736f6c63430008110033", - "deployedBytecode": "0x6080604052600436106100705760003560e01c80636ecf13861161004e5780636ecf1386146100d1578063715018a6146100fa5780638da5cb5b14610111578063f2fde38b1461013c57610070565b80633b2fe781146100755780633ccfd60b1461009157806349df728c146100a8575b600080fd5b61008f600480360381019061008a919061074c565b610165565b005b34801561009d57600080fd5b506100a661020d565b005b3480156100b457600080fd5b506100cf60048036038101906100ca91906107f7565b61025e565b005b3480156100dd57600080fd5b506100f860048036038101906100f39190610824565b61036d565b005b34801561010657600080fd5b5061010f6104d3565b005b34801561011d57600080fd5b506101266104e7565b6040516101339190610893565b60405180910390f35b34801561014857600080fd5b50610163600480360381019061015e91906107f7565b610510565b005b600082829050346101769190610916565b905060005b838390508110156102075783838281811061019957610198610947565b5b90506020020160208101906101ae91906107f7565b73ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101f3573d6000803e3d6000fd5b5080806101ff90610976565b91505061017b565b50505050565b610215610593565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561025b573d6000803e3d6000fd5b50565b610266610593565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016102a69190610893565b602060405180830381865afa1580156102c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e791906109ea565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610324929190610a26565b6020604051808303816000875af1158015610343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103679190610a87565b50505050565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103ad9190610893565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee91906109ea565b9050600085859050826104019190610916565b905060005b868690508110156104ca578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8888848181106104405761043f610947565b5b905060200201602081019061045591906107f7565b846040518363ffffffff1660e01b8152600401610473929190610a26565b6020604051808303816000875af1158015610492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b69190610a87565b5080806104c290610976565b915050610406565b50505050505050565b6104db610593565b6104e56000610611565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610518610593565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057e90610b37565b60405180910390fd5b61059081610611565b50565b61059b6106d5565b73ffffffffffffffffffffffffffffffffffffffff166105b96104e7565b73ffffffffffffffffffffffffffffffffffffffff161461060f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060690610ba3565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261070c5761070b6106e7565b5b8235905067ffffffffffffffff811115610729576107286106ec565b5b602083019150836020820283011115610745576107446106f1565b5b9250929050565b60008060208385031215610763576107626106dd565b5b600083013567ffffffffffffffff811115610781576107806106e2565b5b61078d858286016106f6565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107c482610799565b9050919050565b6107d4816107b9565b81146107df57600080fd5b50565b6000813590506107f1816107cb565b92915050565b60006020828403121561080d5761080c6106dd565b5b600061081b848285016107e2565b91505092915050565b60008060006040848603121561083d5761083c6106dd565b5b600084013567ffffffffffffffff81111561085b5761085a6106e2565b5b610867868287016106f6565b9350935050602061087a868287016107e2565b9150509250925092565b61088d816107b9565b82525050565b60006020820190506108a86000830184610884565b92915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610921826108ae565b915061092c836108ae565b92508261093c5761093b6108b8565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000610981826108ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036109b3576109b26108e7565b5b600182019050919050565b6109c7816108ae565b81146109d257600080fd5b50565b6000815190506109e4816109be565b92915050565b600060208284031215610a00576109ff6106dd565b5b6000610a0e848285016109d5565b91505092915050565b610a20816108ae565b82525050565b6000604082019050610a3b6000830185610884565b610a486020830184610a17565b9392505050565b60008115159050919050565b610a6481610a4f565b8114610a6f57600080fd5b50565b600081519050610a8181610a5b565b92915050565b600060208284031215610a9d57610a9c6106dd565b5b6000610aab84828501610a72565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610b21602683610ab4565b9150610b2c82610ac5565b604082019050919050565b60006020820190508181036000830152610b5081610b14565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610b8d602083610ab4565b9150610b9882610b57565b602082019050919050565b60006020820190508181036000830152610bbc81610b80565b905091905056fea2646970667358221220b32c42e20565b2eee6b85885fda98e5b09fe8ac74b908878c759ba7f540d3c5064736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/PKPHelper.json b/contracts/cayenne/PKPHelper.json deleted file mode 100644 index 37f9a20..0000000 --- a/contracts/cayenne/PKPHelper.json +++ /dev/null @@ -1,845 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_resolver", - "type": "address" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "_env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "ContractResolverAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct IPubkeyRouter.Signature[]", - "name": "signatures", - "type": "tuple[]" - } - ], - "internalType": "struct PKPNFT.ClaimMaterial", - "name": "claimMaterial", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes[]", - "name": "permittedIpfsCIDs", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedIpfsCIDScopes", - "type": "uint256[][]" - }, - { - "internalType": "address[]", - "name": "permittedAddresses", - "type": "address[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAddressScopes", - "type": "uint256[][]" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "internalType": "struct PKPHelper.AuthMethodData", - "name": "authMethodData", - "type": "tuple" - } - ], - "name": "claimAndMintNextAndAddAuthMethods", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct IPubkeyRouter.Signature[]", - "name": "signatures", - "type": "tuple[]" - } - ], - "internalType": "struct PKPNFT.ClaimMaterial", - "name": "claimMaterial", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes[]", - "name": "permittedIpfsCIDs", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedIpfsCIDScopes", - "type": "uint256[][]" - }, - { - "internalType": "address[]", - "name": "permittedAddresses", - "type": "address[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAddressScopes", - "type": "uint256[][]" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "internalType": "struct PKPHelper.AuthMethodData", - "name": "authMethodData", - "type": "tuple" - } - ], - "name": "claimAndMintNextAndAddAuthMethodsWithTypes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "contractResolver", - "outputs": [ - { - "internalType": "contract ContractResolver", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "env", - "outputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDomainWalletRegistry", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPKPNftMetdataAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpNftAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpPermissionsAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "name": "mintNextAndAddAuthMethods", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes[]", - "name": "permittedIpfsCIDs", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedIpfsCIDScopes", - "type": "uint256[][]" - }, - { - "internalType": "address[]", - "name": "permittedAddresses", - "type": "address[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAddressScopes", - "type": "uint256[][]" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "name": "mintNextAndAddAuthMethodsWithTypes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "string[]", - "name": "nftMetadata", - "type": "string[]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "name": "mintNextAndAddDomainWalletMetadata", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC721Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "removePkpMetadata", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "string[]", - "name": "nftMetadata", - "type": "string[]" - } - ], - "name": "setPkpMetadata", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/cayenne/PKPNFT.json b/contracts/cayenne/PKPNFT.json deleted file mode 100644 index 6b51674..0000000 --- a/contracts/cayenne/PKPNFT.json +++ /dev/null @@ -1,887 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "resolverAddress", - "type": "address" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "_env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "ContractResolverAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newFreeMintSigner", - "type": "address" - } - ], - "name": "FreeMintSignerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newMintCost", - "type": "uint256" - } - ], - "name": "MintCostSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - } - ], - "name": "PKPMinted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrew", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct IPubkeyRouter.Signature[]", - "name": "signatures", - "type": "tuple[]" - } - ], - "name": "claimAndMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "contractResolver", - "outputs": [ - { - "internalType": "contract ContractResolver", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "env", - "outputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "exists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "freeMintSigner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getEthAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getNextDerivedKeyId", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpNftMetadataAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpPermissionsAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPubkey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRouterAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mintCost", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - } - ], - "name": "mintGrantAndBurnNext", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "mintNext", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "prefixed", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "redeemedFreeMintIds", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newFreeMintSigner", - "type": "address" - } - ], - "name": "setFreeMintSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newMintCost", - "type": "uint256" - } - ], - "name": "setMintCost", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenOfOwnerByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] \ No newline at end of file diff --git a/contracts/cayenne/PKPNFTMetadata.json b/contracts/cayenne/PKPNFTMetadata.json deleted file mode 100644 index af70383..0000000 --- a/contracts/cayenne/PKPNFTMetadata.json +++ /dev/null @@ -1,406 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PKPNFTMetadata", - "sourceName": "contracts/lit-node/PKPNFTMetadata.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_resolver", - "type": "address" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "_env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WRITER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "buffer", - "type": "bytes" - } - ], - "name": "bytesToHex", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "contractResolver", - "outputs": [ - { - "internalType": "contract ContractResolver", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "env", - "outputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "removeProfileForPkp", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "removeUrlForPKP", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pkpHelperWriterAddress", - "type": "address" - } - ], - "name": "setPKPHelperWriterAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "string", - "name": "imgUrl", - "type": "string" - } - ], - "name": "setProfileForPKP", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "string", - "name": "url", - "type": "string" - } - ], - "name": "setUrlForPKP", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "pubKey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "ethAddress", - "type": "address" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b506040516200367c3803806200367c83398181016040528101906200003791906200013f565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260146101000a81548160ff02191690836002811115620000a0576200009f62000186565b5b02179055505050620001b5565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000df82620000b2565b9050919050565b620000f181620000d2565b8114620000fd57600080fd5b50565b6000815190506200011181620000e6565b92915050565b600381106200012557600080fd5b50565b600081519050620001398162000117565b92915050565b60008060408385031215620001595762000158620000ad565b5b6000620001698582860162000100565b92505060206200017c8582860162000128565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6134b780620001c56000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063855eec22116100a25780639beaab7b116100715780639beaab7b146102ef5780639dca00321461030d578063a217fddf1461032b578063b63a767714610349578063d547741f1461036557610116565b8063855eec22146102575780639000fee11461027357806391d148541461028f578063950462ee146102bf57610116565b806336568abe116100e957806336568abe146101b3578063451d89fa146101cf57806350d17b5e146101ff578063519a218e1461021d57806375b238fc1461023957610116565b806301ffc9a71461011b5780630fa8ae2f1461014b578063248a9ca3146101675780632f2ff15d14610197575b600080fd5b61013560048036038101906101309190611baa565b610381565b6040516101429190611bf2565b60405180910390f35b61016560048036038101906101609190611c6b565b6103fb565b005b610181600480360381019061017c9190611cce565b610491565b60405161018e9190611d0a565b60405180910390f35b6101b160048036038101906101ac9190611d25565b6104b0565b005b6101cd60048036038101906101c89190611d25565b6104d1565b005b6101e960048036038101906101e49190611eab565b610554565b6040516101f69190611f73565b60405180910390f35b610207610779565b6040516102149190611ff4565b60405180910390f35b61023760048036038101906102329190612045565b61079f565b005b61024161097c565b60405161024e9190611d0a565b60405180910390f35b610271600480360381019061026c9190612113565b6109a0565b005b61028d60048036038101906102889190612113565b610b6f565b005b6102a960048036038101906102a49190611d25565b610d3e565b6040516102b69190611bf2565b60405180910390f35b6102d960048036038101906102d4919061216f565b610da8565b6040516102e69190611f73565b60405180910390f35b6102f7610de3565b6040516103049190611d0a565b60405180910390f35b610315610e07565b6040516103229190612255565b60405180910390f35b610333610e1a565b6040516103409190611d0a565b60405180910390f35b610363600480360381019061035e9190612045565b610e21565b005b61037f600480360381019061037a9190611d25565b610ffe565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103f457506103f38261101f565b5b9050919050565b6104257fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610d3e565b610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045b906122e2565b60405180910390fd5b61048e7f73a9985316cd4cbfd13dadcaa0e6f773c85e933a0d88efbe60e4dc49da9176a082611089565b50565b6000806000838152602001908152602001600020600101549050919050565b6104b982610491565b6104c281611169565b6104cc8383611089565b505050565b6104d961117d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053d90612374565b60405180910390fd5b6105508282611185565b5050565b606060006002835161056691906123c3565b67ffffffffffffffff81111561057f5761057e611d80565b5b6040519080825280601f01601f1916602001820160405280156105b15781602001600182028036833780820191505090505b50905060006040518060400160405280601081526020017f3031323334353637383961626364656600000000000000000000000000000000815250905060005b845181101561074f578182518683815181106106105761060f612405565b5b602001015160f81c60f81b60f81c60ff1661062b9190612463565b8151811061063c5761063b612405565b5b602001015160f81c60f81b8360028361065591906123c3565b8151811061066657610665612405565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508182518683815181106106ab576106aa612405565b5b602001015160f81c60f81b60f81c60ff166106c69190612494565b815181106106d7576106d6612405565b5b602001015160f81c60f81b8360016002846106f291906123c3565b6106fc91906124c5565b8151811061070d5761070c612405565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080610747906124f9565b9150506105f1565b508160405160200161076191906125df565b60405160208183030381529060405292505050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663977a80706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e9190612616565b600260149054906101000a900460ff166040518363ffffffff1660e01b815260040161089b929190612643565b602060405180830381865afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190612681565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090612746565b60405180910390fd5b604051806020016040528060008152506003600083815260200190815260200160002090816109789190612968565b5050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663977a80706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6f9190612616565b600260149054906101000a900460ff166040518363ffffffff1660e01b8152600401610a9c929190612643565b602060405180830381865afa158015610ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610add9190612681565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4190612746565b60405180910390fd5b80600360008481526020019081526020016000209081610b6a9190612968565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663977a80706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3e9190612616565b600260149054906101000a900460ff166040518363ffffffff1660e01b8152600401610c6b929190612643565b602060405180830381865afa158015610c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cac9190612681565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090612746565b60405180910390fd5b80600460008481526020019081526020016000209081610d399190612968565b505050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606000610db7858585611266565b905080604051602001610dca9190612ab7565b6040516020818303038152906040529150509392505050565b7f73a9985316cd4cbfd13dadcaa0e6f773c85e933a0d88efbe60e4dc49da9176a081565b600260149054906101000a900460ff1681565b6000801b81565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663977a80706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef09190612616565b600260149054906101000a900460ff166040518363ffffffff1660e01b8152600401610f1d929190612643565b602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190612681565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc290612746565b60405180910390fd5b60405180602001604052806000815250600460008381526020019081526020016000209081610ffa9190612968565b5050565b61100782610491565b61101081611169565b61101a8383611185565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6110938282610d3e565b61116557600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061110a61117d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61117a8161117561117d565b6114cc565b50565b600033905090565b61118f8282610d3e565b1561126257600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061120761117d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b606060006040518061048001604052806104568152602001612fec61045691399050600061129385610554565b905060006112a085611551565b905060006112ad8861157e565b90506000600360008a815260200190815260200160002080546112cf90612795565b80601f01602080910402602001604051908101604052809291908181526020018280546112fb90612795565b80156113485780601f1061131d57610100808354040283529160200191611348565b820191906000526020600020905b81548152906001019060200180831161132b57829003601f168201915b505050505090506000600460008b8152602001908152602001600020805461136f90612795565b80601f016020809104026020016040519081016040528092919081815260200182805461139b90612795565b80156113e85780601f106113bd576101008083540402835291602001916113e8565b820191906000526020600020905b8154815290600101906020018083116113cb57829003601f168201915b505050505090506000825114801561140257506000815114155b1561142e57826040516020016114189190612aff565b604051602081830303815290604052915061148d565b6000825114158015611441575060008151145b1561144e5785905061148c565b60008251148015611460575060008151145b1561148b57826040516020016114769190612aff565b60405160208183030381529060405291508590505b5b5b6114bd82828787876040516020016114a9959493929190612df7565b60405160208183030381529060405261164c565b96505050505050509392505050565b6114d68282610d3e565b61154d576114e381611551565b6114f18360001c60206117af565b604051602001611502929190612f1c565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115449190611f73565b60405180910390fd5b5050565b60606115778273ffffffffffffffffffffffffffffffffffffffff16601460ff166117af565b9050919050565b60606000600161158d846119eb565b01905060008167ffffffffffffffff8111156115ac576115ab611d80565b5b6040519080825280601f01601f1916602001820160405280156115de5781602001600182028036833780820191505090505b509050600082602001820190505b600115611641578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161163557611634612434565b5b049450600085036115ec575b819350505050919050565b6060600082510361166e576040518060200160405280600081525090506117aa565b6000604051806060016040528060408152602001613442604091399050600060036002855161169d91906124c5565b6116a79190612463565b60046116b391906123c3565b67ffffffffffffffff8111156116cc576116cb611d80565b5b6040519080825280601f01601f1916602001820160405280156116fe5781602001600182028036833780820191505090505b509050600182016020820185865187015b8082101561176a576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f811685015184536001840193505061170f565b50506003865106600181146117865760028114611799576117a1565b603d6001830353603d60028303536117a1565b603d60018303535b50505080925050505b919050565b6060600060028360026117c291906123c3565b6117cc91906124c5565b67ffffffffffffffff8111156117e5576117e4611d80565b5b6040519080825280601f01601f1916602001820160405280156118175781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061184f5761184e612405565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106118b3576118b2612405565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026118f391906123c3565b6118fd91906124c5565b90505b600181111561199d577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061193f5761193e612405565b5b1a60f81b82828151811061195657611955612405565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061199690612f56565b9050611900565b50600084146119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890612fcb565b60405180910390fd5b8091505092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611a49577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611a3f57611a3e612434565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611a86576d04ee2d6d415b85acef81000000008381611a7c57611a7b612434565b5b0492506020810190505b662386f26fc100008310611ab557662386f26fc100008381611aab57611aaa612434565b5b0492506010810190505b6305f5e1008310611ade576305f5e1008381611ad457611ad3612434565b5b0492506008810190505b6127108310611b03576127108381611af957611af8612434565b5b0492506004810190505b60648310611b265760648381611b1c57611b1b612434565b5b0492506002810190505b600a8310611b35576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611b8781611b52565b8114611b9257600080fd5b50565b600081359050611ba481611b7e565b92915050565b600060208284031215611bc057611bbf611b48565b5b6000611bce84828501611b95565b91505092915050565b60008115159050919050565b611bec81611bd7565b82525050565b6000602082019050611c076000830184611be3565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c3882611c0d565b9050919050565b611c4881611c2d565b8114611c5357600080fd5b50565b600081359050611c6581611c3f565b92915050565b600060208284031215611c8157611c80611b48565b5b6000611c8f84828501611c56565b91505092915050565b6000819050919050565b611cab81611c98565b8114611cb657600080fd5b50565b600081359050611cc881611ca2565b92915050565b600060208284031215611ce457611ce3611b48565b5b6000611cf284828501611cb9565b91505092915050565b611d0481611c98565b82525050565b6000602082019050611d1f6000830184611cfb565b92915050565b60008060408385031215611d3c57611d3b611b48565b5b6000611d4a85828601611cb9565b9250506020611d5b85828601611c56565b9150509250929050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611db882611d6f565b810181811067ffffffffffffffff82111715611dd757611dd6611d80565b5b80604052505050565b6000611dea611b3e565b9050611df68282611daf565b919050565b600067ffffffffffffffff821115611e1657611e15611d80565b5b611e1f82611d6f565b9050602081019050919050565b82818337600083830152505050565b6000611e4e611e4984611dfb565b611de0565b905082815260208101848484011115611e6a57611e69611d6a565b5b611e75848285611e2c565b509392505050565b600082601f830112611e9257611e91611d65565b5b8135611ea2848260208601611e3b565b91505092915050565b600060208284031215611ec157611ec0611b48565b5b600082013567ffffffffffffffff811115611edf57611ede611b4d565b5b611eeb84828501611e7d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f2e578082015181840152602081019050611f13565b60008484015250505050565b6000611f4582611ef4565b611f4f8185611eff565b9350611f5f818560208601611f10565b611f6881611d6f565b840191505092915050565b60006020820190508181036000830152611f8d8184611f3a565b905092915050565b6000819050919050565b6000611fba611fb5611fb084611c0d565b611f95565b611c0d565b9050919050565b6000611fcc82611f9f565b9050919050565b6000611fde82611fc1565b9050919050565b611fee81611fd3565b82525050565b60006020820190506120096000830184611fe5565b92915050565b6000819050919050565b6120228161200f565b811461202d57600080fd5b50565b60008135905061203f81612019565b92915050565b60006020828403121561205b5761205a611b48565b5b600061206984828501612030565b91505092915050565b600067ffffffffffffffff82111561208d5761208c611d80565b5b61209682611d6f565b9050602081019050919050565b60006120b66120b184612072565b611de0565b9050828152602081018484840111156120d2576120d1611d6a565b5b6120dd848285611e2c565b509392505050565b600082601f8301126120fa576120f9611d65565b5b813561210a8482602086016120a3565b91505092915050565b6000806040838503121561212a57612129611b48565b5b600061213885828601612030565b925050602083013567ffffffffffffffff81111561215957612158611b4d565b5b612165858286016120e5565b9150509250929050565b60008060006060848603121561218857612187611b48565b5b600061219686828701612030565b935050602084013567ffffffffffffffff8111156121b7576121b6611b4d565b5b6121c386828701611e7d565b92505060406121d486828701611c56565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061221e5761221d6121de565b5b50565b600081905061222f8261220d565b919050565b600061223f82612221565b9050919050565b61224f81612234565b82525050565b600060208201905061226a6000830184612246565b92915050565b7f504b504e46544d657461646174613a206d757374206861642061646d696e207260008201527f6f6c650000000000000000000000000000000000000000000000000000000000602082015250565b60006122cc602383611eff565b91506122d782612270565b604082019050919050565b600060208201905081810360008301526122fb816122bf565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061235e602f83611eff565b915061236982612302565b604082019050919050565b6000602082019050818103600083015261238d81612351565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123ce8261200f565b91506123d98361200f565b92508282026123e78161200f565b915082820484148315176123fe576123fd612394565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061246e8261200f565b91506124798361200f565b92508261248957612488612434565b5b828204905092915050565b600061249f8261200f565b91506124aa8361200f565b9250826124ba576124b9612434565b5b828206905092915050565b60006124d08261200f565b91506124db8361200f565b92508282019050808211156124f3576124f2612394565b5b92915050565b60006125048261200f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361253657612535612394565b5b600182019050919050565b600081905092915050565b7f3078000000000000000000000000000000000000000000000000000000000000600082015250565b6000612582600283612541565b915061258d8261254c565b600282019050919050565b600081519050919050565b600081905092915050565b60006125b982612598565b6125c381856125a3565b93506125d3818560208601611f10565b80840191505092915050565b60006125ea82612575565b91506125f682846125ae565b915081905092915050565b60008151905061261081611ca2565b92915050565b60006020828403121561262c5761262b611b48565b5b600061263a84828501612601565b91505092915050565b60006040820190506126586000830185611cfb565b6126656020830184612246565b9392505050565b60008151905061267b81611c3f565b92915050565b60006020828403121561269757612696611b48565b5b60006126a58482850161266c565b91505092915050565b7f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560008201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f60208201527f6d61696e2077616c6c6574732c2077686f2061726520796f753f000000000000604082015250565b6000612730605a83611eff565b915061273b826126ae565b606082019050919050565b6000602082019050818103600083015261275f81612723565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806127ad57607f821691505b6020821081036127c0576127bf612766565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026128287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826127eb565b61283286836127eb565b95508019841693508086168417925050509392505050565b600061286561286061285b8461200f565b611f95565b61200f565b9050919050565b6000819050919050565b61287f8361284a565b61289361288b8261286c565b8484546127f8565b825550505050565b600090565b6128a861289b565b6128b3818484612876565b505050565b5b818110156128d7576128cc6000826128a0565b6001810190506128b9565b5050565b601f82111561291c576128ed816127c6565b6128f6846127db565b81016020851015612905578190505b612919612911856127db565b8301826128b8565b50505b505050565b600082821c905092915050565b600061293f60001984600802612921565b1980831691505092915050565b6000612958838361292e565b9150826002028217905092915050565b61297182611ef4565b67ffffffffffffffff81111561298a57612989611d80565b5b6129948254612795565b61299f8282856128db565b600060209050601f8311600181146129d257600084156129c0578287015190505b6129ca858261294c565b865550612a32565b601f1984166129e0866127c6565b60005b82811015612a08578489015182556001820191506020850194506020810190506129e3565b86831015612a255784890151612a21601f89168261292e565b8355505b6001600288020188555050505b505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000612a70601d83612541565b9150612a7b82612a3a565b601d82019050919050565b6000612a9182611ef4565b612a9b8185612541565b9350612aab818560208601611f10565b80840191505092915050565b6000612ac282612a63565b9150612ace8284612a86565b915081905092915050565b7f4c697420504b5020230000000000000000000000000000000000000000000000815250565b6000612b0a82612ad9565b600982019150612b1a8284612a86565b915081905092915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000600082015250565b6000612b5b600983612541565b9150612b6682612b25565b600982019050919050565b7f222c20226465736372697074696f6e223a202254686973204e465420656e746960008201527f746c65732074686520686f6c64657220746f207573652061204c69742050726f60208201527f746f636f6c20504b502c20616e6420746f206772616e7420616363657373207460408201527f6f206f7468657220757365727320616e64204c697420416374696f6e7320746f60608201527f20757365207468697320504b50222c22696d6167655f64617461223a20220000608082015250565b6000612c3f609e83612541565b9150612c4a82612b71565b609e82019050919050565b7f222c2261747472696275746573223a205b7b2274726169745f74797065223a2060008201527f225075626c6963204b6579222c202276616c7565223a20220000000000000000602082015250565b6000612cb1603883612541565b9150612cbc82612c55565b603882019050919050565b7f227d2c207b2274726169745f74797065223a20224554482057616c6c6574204160008201527f646472657373222c202276616c7565223a202200000000000000000000000000602082015250565b6000612d23603383612541565b9150612d2e82612cc7565b603382019050919050565b7f227d2c207b2274726169745f74797065223a2022546f6b656e204944222c202260008201527f76616c7565223a20220000000000000000000000000000000000000000000000602082015250565b6000612d95602983612541565b9150612da082612d39565b602982019050919050565b7f227d5d7d00000000000000000000000000000000000000000000000000000000600082015250565b6000612de1600483612541565b9150612dec82612dab565b600482019050919050565b6000612e0282612b4e565b9150612e0e8288612a86565b9150612e1982612c32565b9150612e2582876125ae565b9150612e3082612ca4565b9150612e3c8286612a86565b9150612e4782612d16565b9150612e538285612a86565b9150612e5e82612d88565b9150612e6a8284612a86565b9150612e7582612dd4565b91508190509695505050505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612eba601783612541565b9150612ec582612e84565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612f06601183612541565b9150612f1182612ed0565b601182019050919050565b6000612f2782612ead565b9150612f338285612a86565b9150612f3e82612ef9565b9150612f4a8284612a86565b91508190509392505050565b6000612f618261200f565b915060008203612f7457612f73612394565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612fb5602083611eff565b9150612fc082612f7f565b602082019050919050565b60006020820190508181036000830152612fe481612fa8565b905091905056fe3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272077696474683d273130383027206865696768743d2731303830272066696c6c3d276e6f6e652720786d6c6e733a763d2768747470733a2f2f76656374612e696f2f6e616e6f273e3c7061746820643d274d3336332e303736203339322e323237732d2e3937372031382e3532342d33362e3837342037382e393437632d34312e3537362037302e3031382d34352e343831203135312e3937382d332e303137203232302e342038392e353231203134342e323435203333322e343831203134312e3532203432322e3535362e3038392033342e3833322d35342e3730372034342e3831362d3131372e3437392033322e3932342d3138312e323438203020302d32382e3831392d3133332e3134342d3132372e3233372d3231372e30393920312e35353320312e33303820352e3336392031392e31323220362e3130312032362e37323220322e3234312032332e3335342e3034352034372e3833382d372e3738372037302e3036322d352e3734362031362e33332d31332e3731312033302e3436372d32372e3137382034312e33363820302d332e3831312d2e3935342d31302e3633352d2e3937362d31322e3931382d2e3634342d34362e3530382d31382e3635392d38392e3538322d34382e3031312d3132352e3734332d32352e3634372d33312e3535322d36302e3831322d35332e3038392d39372e38342d36382e3933322e39333120332e31393120322e3636322031362e34313920322e3930362031392e30333320312e3930382032312e39353820322e3236332035322e3731332d2e3632312037342e363439732d372e3833322033332e3837382d31342e3535342035342e343431632d31302e3138342033312e3137352d32342e30352035342e3238352d34312e3632312038322e3030342d332e323420352e3039362d31322e3931332031392e3037382d31382e3038322032362e313436203020302d382e3839372d35362e3139312d34302e3636372d38372e393231682d2e3032327a272066696c6c3d2723303030272f3e3c7061746820643d274d3536322e352032372e32386c3431302e323739203233362e3837346331332e39323320382e3033392032322e352032322e3839352032322e352033382e393731763437332e373563302031362e3037362d382e3537372033302e3933322d32322e352033382e3937314c3536322e3520313035322e3732632d31332e39323320382e30342d33312e30373720382e30342d343520304c3130372e323231203831352e383436632d31332e3932332d382e3033392d32322e352d32322e3839352d32322e352d33382e393731762d3437332e37356134352034352030203020312032322e352d33382e3937314c3531372e352032372e323861343520343520302030203120343520307a27207374726f6b653d272330303027207374726f6b652d77696474683d2732342e3735272f3e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220b2d6085fe511ee7bd66df9a059a837829d19726706c7427d1f20fa568fec0ef464736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063855eec22116100a25780639beaab7b116100715780639beaab7b146102ef5780639dca00321461030d578063a217fddf1461032b578063b63a767714610349578063d547741f1461036557610116565b8063855eec22146102575780639000fee11461027357806391d148541461028f578063950462ee146102bf57610116565b806336568abe116100e957806336568abe146101b3578063451d89fa146101cf57806350d17b5e146101ff578063519a218e1461021d57806375b238fc1461023957610116565b806301ffc9a71461011b5780630fa8ae2f1461014b578063248a9ca3146101675780632f2ff15d14610197575b600080fd5b61013560048036038101906101309190611baa565b610381565b6040516101429190611bf2565b60405180910390f35b61016560048036038101906101609190611c6b565b6103fb565b005b610181600480360381019061017c9190611cce565b610491565b60405161018e9190611d0a565b60405180910390f35b6101b160048036038101906101ac9190611d25565b6104b0565b005b6101cd60048036038101906101c89190611d25565b6104d1565b005b6101e960048036038101906101e49190611eab565b610554565b6040516101f69190611f73565b60405180910390f35b610207610779565b6040516102149190611ff4565b60405180910390f35b61023760048036038101906102329190612045565b61079f565b005b61024161097c565b60405161024e9190611d0a565b60405180910390f35b610271600480360381019061026c9190612113565b6109a0565b005b61028d60048036038101906102889190612113565b610b6f565b005b6102a960048036038101906102a49190611d25565b610d3e565b6040516102b69190611bf2565b60405180910390f35b6102d960048036038101906102d4919061216f565b610da8565b6040516102e69190611f73565b60405180910390f35b6102f7610de3565b6040516103049190611d0a565b60405180910390f35b610315610e07565b6040516103229190612255565b60405180910390f35b610333610e1a565b6040516103409190611d0a565b60405180910390f35b610363600480360381019061035e9190612045565b610e21565b005b61037f600480360381019061037a9190611d25565b610ffe565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103f457506103f38261101f565b5b9050919050565b6104257fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610d3e565b610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045b906122e2565b60405180910390fd5b61048e7f73a9985316cd4cbfd13dadcaa0e6f773c85e933a0d88efbe60e4dc49da9176a082611089565b50565b6000806000838152602001908152602001600020600101549050919050565b6104b982610491565b6104c281611169565b6104cc8383611089565b505050565b6104d961117d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053d90612374565b60405180910390fd5b6105508282611185565b5050565b606060006002835161056691906123c3565b67ffffffffffffffff81111561057f5761057e611d80565b5b6040519080825280601f01601f1916602001820160405280156105b15781602001600182028036833780820191505090505b50905060006040518060400160405280601081526020017f3031323334353637383961626364656600000000000000000000000000000000815250905060005b845181101561074f578182518683815181106106105761060f612405565b5b602001015160f81c60f81b60f81c60ff1661062b9190612463565b8151811061063c5761063b612405565b5b602001015160f81c60f81b8360028361065591906123c3565b8151811061066657610665612405565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508182518683815181106106ab576106aa612405565b5b602001015160f81c60f81b60f81c60ff166106c69190612494565b815181106106d7576106d6612405565b5b602001015160f81c60f81b8360016002846106f291906123c3565b6106fc91906124c5565b8151811061070d5761070c612405565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080610747906124f9565b9150506105f1565b508160405160200161076191906125df565b60405160208183030381529060405292505050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663977a80706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e9190612616565b600260149054906101000a900460ff166040518363ffffffff1660e01b815260040161089b929190612643565b602060405180830381865afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190612681565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090612746565b60405180910390fd5b604051806020016040528060008152506003600083815260200190815260200160002090816109789190612968565b5050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663977a80706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6f9190612616565b600260149054906101000a900460ff166040518363ffffffff1660e01b8152600401610a9c929190612643565b602060405180830381865afa158015610ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610add9190612681565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4190612746565b60405180910390fd5b80600360008481526020019081526020016000209081610b6a9190612968565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663977a80706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3e9190612616565b600260149054906101000a900460ff166040518363ffffffff1660e01b8152600401610c6b929190612643565b602060405180830381865afa158015610c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cac9190612681565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090612746565b60405180910390fd5b80600460008481526020019081526020016000209081610d399190612968565b505050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606000610db7858585611266565b905080604051602001610dca9190612ab7565b6040516020818303038152906040529150509392505050565b7f73a9985316cd4cbfd13dadcaa0e6f773c85e933a0d88efbe60e4dc49da9176a081565b600260149054906101000a900460ff1681565b6000801b81565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663977a80706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef09190612616565b600260149054906101000a900460ff166040518363ffffffff1660e01b8152600401610f1d929190612643565b602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190612681565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc290612746565b60405180910390fd5b60405180602001604052806000815250600460008381526020019081526020016000209081610ffa9190612968565b5050565b61100782610491565b61101081611169565b61101a8383611185565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6110938282610d3e565b61116557600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061110a61117d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61117a8161117561117d565b6114cc565b50565b600033905090565b61118f8282610d3e565b1561126257600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061120761117d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b606060006040518061048001604052806104568152602001612fec61045691399050600061129385610554565b905060006112a085611551565b905060006112ad8861157e565b90506000600360008a815260200190815260200160002080546112cf90612795565b80601f01602080910402602001604051908101604052809291908181526020018280546112fb90612795565b80156113485780601f1061131d57610100808354040283529160200191611348565b820191906000526020600020905b81548152906001019060200180831161132b57829003601f168201915b505050505090506000600460008b8152602001908152602001600020805461136f90612795565b80601f016020809104026020016040519081016040528092919081815260200182805461139b90612795565b80156113e85780601f106113bd576101008083540402835291602001916113e8565b820191906000526020600020905b8154815290600101906020018083116113cb57829003601f168201915b505050505090506000825114801561140257506000815114155b1561142e57826040516020016114189190612aff565b604051602081830303815290604052915061148d565b6000825114158015611441575060008151145b1561144e5785905061148c565b60008251148015611460575060008151145b1561148b57826040516020016114769190612aff565b60405160208183030381529060405291508590505b5b5b6114bd82828787876040516020016114a9959493929190612df7565b60405160208183030381529060405261164c565b96505050505050509392505050565b6114d68282610d3e565b61154d576114e381611551565b6114f18360001c60206117af565b604051602001611502929190612f1c565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115449190611f73565b60405180910390fd5b5050565b60606115778273ffffffffffffffffffffffffffffffffffffffff16601460ff166117af565b9050919050565b60606000600161158d846119eb565b01905060008167ffffffffffffffff8111156115ac576115ab611d80565b5b6040519080825280601f01601f1916602001820160405280156115de5781602001600182028036833780820191505090505b509050600082602001820190505b600115611641578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161163557611634612434565b5b049450600085036115ec575b819350505050919050565b6060600082510361166e576040518060200160405280600081525090506117aa565b6000604051806060016040528060408152602001613442604091399050600060036002855161169d91906124c5565b6116a79190612463565b60046116b391906123c3565b67ffffffffffffffff8111156116cc576116cb611d80565b5b6040519080825280601f01601f1916602001820160405280156116fe5781602001600182028036833780820191505090505b509050600182016020820185865187015b8082101561176a576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f811685015184536001840193505061170f565b50506003865106600181146117865760028114611799576117a1565b603d6001830353603d60028303536117a1565b603d60018303535b50505080925050505b919050565b6060600060028360026117c291906123c3565b6117cc91906124c5565b67ffffffffffffffff8111156117e5576117e4611d80565b5b6040519080825280601f01601f1916602001820160405280156118175781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061184f5761184e612405565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106118b3576118b2612405565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026118f391906123c3565b6118fd91906124c5565b90505b600181111561199d577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061193f5761193e612405565b5b1a60f81b82828151811061195657611955612405565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061199690612f56565b9050611900565b50600084146119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890612fcb565b60405180910390fd5b8091505092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611a49577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611a3f57611a3e612434565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611a86576d04ee2d6d415b85acef81000000008381611a7c57611a7b612434565b5b0492506020810190505b662386f26fc100008310611ab557662386f26fc100008381611aab57611aaa612434565b5b0492506010810190505b6305f5e1008310611ade576305f5e1008381611ad457611ad3612434565b5b0492506008810190505b6127108310611b03576127108381611af957611af8612434565b5b0492506004810190505b60648310611b265760648381611b1c57611b1b612434565b5b0492506002810190505b600a8310611b35576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611b8781611b52565b8114611b9257600080fd5b50565b600081359050611ba481611b7e565b92915050565b600060208284031215611bc057611bbf611b48565b5b6000611bce84828501611b95565b91505092915050565b60008115159050919050565b611bec81611bd7565b82525050565b6000602082019050611c076000830184611be3565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c3882611c0d565b9050919050565b611c4881611c2d565b8114611c5357600080fd5b50565b600081359050611c6581611c3f565b92915050565b600060208284031215611c8157611c80611b48565b5b6000611c8f84828501611c56565b91505092915050565b6000819050919050565b611cab81611c98565b8114611cb657600080fd5b50565b600081359050611cc881611ca2565b92915050565b600060208284031215611ce457611ce3611b48565b5b6000611cf284828501611cb9565b91505092915050565b611d0481611c98565b82525050565b6000602082019050611d1f6000830184611cfb565b92915050565b60008060408385031215611d3c57611d3b611b48565b5b6000611d4a85828601611cb9565b9250506020611d5b85828601611c56565b9150509250929050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611db882611d6f565b810181811067ffffffffffffffff82111715611dd757611dd6611d80565b5b80604052505050565b6000611dea611b3e565b9050611df68282611daf565b919050565b600067ffffffffffffffff821115611e1657611e15611d80565b5b611e1f82611d6f565b9050602081019050919050565b82818337600083830152505050565b6000611e4e611e4984611dfb565b611de0565b905082815260208101848484011115611e6a57611e69611d6a565b5b611e75848285611e2c565b509392505050565b600082601f830112611e9257611e91611d65565b5b8135611ea2848260208601611e3b565b91505092915050565b600060208284031215611ec157611ec0611b48565b5b600082013567ffffffffffffffff811115611edf57611ede611b4d565b5b611eeb84828501611e7d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f2e578082015181840152602081019050611f13565b60008484015250505050565b6000611f4582611ef4565b611f4f8185611eff565b9350611f5f818560208601611f10565b611f6881611d6f565b840191505092915050565b60006020820190508181036000830152611f8d8184611f3a565b905092915050565b6000819050919050565b6000611fba611fb5611fb084611c0d565b611f95565b611c0d565b9050919050565b6000611fcc82611f9f565b9050919050565b6000611fde82611fc1565b9050919050565b611fee81611fd3565b82525050565b60006020820190506120096000830184611fe5565b92915050565b6000819050919050565b6120228161200f565b811461202d57600080fd5b50565b60008135905061203f81612019565b92915050565b60006020828403121561205b5761205a611b48565b5b600061206984828501612030565b91505092915050565b600067ffffffffffffffff82111561208d5761208c611d80565b5b61209682611d6f565b9050602081019050919050565b60006120b66120b184612072565b611de0565b9050828152602081018484840111156120d2576120d1611d6a565b5b6120dd848285611e2c565b509392505050565b600082601f8301126120fa576120f9611d65565b5b813561210a8482602086016120a3565b91505092915050565b6000806040838503121561212a57612129611b48565b5b600061213885828601612030565b925050602083013567ffffffffffffffff81111561215957612158611b4d565b5b612165858286016120e5565b9150509250929050565b60008060006060848603121561218857612187611b48565b5b600061219686828701612030565b935050602084013567ffffffffffffffff8111156121b7576121b6611b4d565b5b6121c386828701611e7d565b92505060406121d486828701611c56565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061221e5761221d6121de565b5b50565b600081905061222f8261220d565b919050565b600061223f82612221565b9050919050565b61224f81612234565b82525050565b600060208201905061226a6000830184612246565b92915050565b7f504b504e46544d657461646174613a206d757374206861642061646d696e207260008201527f6f6c650000000000000000000000000000000000000000000000000000000000602082015250565b60006122cc602383611eff565b91506122d782612270565b604082019050919050565b600060208201905081810360008301526122fb816122bf565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061235e602f83611eff565b915061236982612302565b604082019050919050565b6000602082019050818103600083015261238d81612351565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123ce8261200f565b91506123d98361200f565b92508282026123e78161200f565b915082820484148315176123fe576123fd612394565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061246e8261200f565b91506124798361200f565b92508261248957612488612434565b5b828204905092915050565b600061249f8261200f565b91506124aa8361200f565b9250826124ba576124b9612434565b5b828206905092915050565b60006124d08261200f565b91506124db8361200f565b92508282019050808211156124f3576124f2612394565b5b92915050565b60006125048261200f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361253657612535612394565b5b600182019050919050565b600081905092915050565b7f3078000000000000000000000000000000000000000000000000000000000000600082015250565b6000612582600283612541565b915061258d8261254c565b600282019050919050565b600081519050919050565b600081905092915050565b60006125b982612598565b6125c381856125a3565b93506125d3818560208601611f10565b80840191505092915050565b60006125ea82612575565b91506125f682846125ae565b915081905092915050565b60008151905061261081611ca2565b92915050565b60006020828403121561262c5761262b611b48565b5b600061263a84828501612601565b91505092915050565b60006040820190506126586000830185611cfb565b6126656020830184612246565b9392505050565b60008151905061267b81611c3f565b92915050565b60006020828403121561269757612696611b48565b5b60006126a58482850161266c565b91505092915050565b7f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560008201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f60208201527f6d61696e2077616c6c6574732c2077686f2061726520796f753f000000000000604082015250565b6000612730605a83611eff565b915061273b826126ae565b606082019050919050565b6000602082019050818103600083015261275f81612723565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806127ad57607f821691505b6020821081036127c0576127bf612766565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026128287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826127eb565b61283286836127eb565b95508019841693508086168417925050509392505050565b600061286561286061285b8461200f565b611f95565b61200f565b9050919050565b6000819050919050565b61287f8361284a565b61289361288b8261286c565b8484546127f8565b825550505050565b600090565b6128a861289b565b6128b3818484612876565b505050565b5b818110156128d7576128cc6000826128a0565b6001810190506128b9565b5050565b601f82111561291c576128ed816127c6565b6128f6846127db565b81016020851015612905578190505b612919612911856127db565b8301826128b8565b50505b505050565b600082821c905092915050565b600061293f60001984600802612921565b1980831691505092915050565b6000612958838361292e565b9150826002028217905092915050565b61297182611ef4565b67ffffffffffffffff81111561298a57612989611d80565b5b6129948254612795565b61299f8282856128db565b600060209050601f8311600181146129d257600084156129c0578287015190505b6129ca858261294c565b865550612a32565b601f1984166129e0866127c6565b60005b82811015612a08578489015182556001820191506020850194506020810190506129e3565b86831015612a255784890151612a21601f89168261292e565b8355505b6001600288020188555050505b505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000612a70601d83612541565b9150612a7b82612a3a565b601d82019050919050565b6000612a9182611ef4565b612a9b8185612541565b9350612aab818560208601611f10565b80840191505092915050565b6000612ac282612a63565b9150612ace8284612a86565b915081905092915050565b7f4c697420504b5020230000000000000000000000000000000000000000000000815250565b6000612b0a82612ad9565b600982019150612b1a8284612a86565b915081905092915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000600082015250565b6000612b5b600983612541565b9150612b6682612b25565b600982019050919050565b7f222c20226465736372697074696f6e223a202254686973204e465420656e746960008201527f746c65732074686520686f6c64657220746f207573652061204c69742050726f60208201527f746f636f6c20504b502c20616e6420746f206772616e7420616363657373207460408201527f6f206f7468657220757365727320616e64204c697420416374696f6e7320746f60608201527f20757365207468697320504b50222c22696d6167655f64617461223a20220000608082015250565b6000612c3f609e83612541565b9150612c4a82612b71565b609e82019050919050565b7f222c2261747472696275746573223a205b7b2274726169745f74797065223a2060008201527f225075626c6963204b6579222c202276616c7565223a20220000000000000000602082015250565b6000612cb1603883612541565b9150612cbc82612c55565b603882019050919050565b7f227d2c207b2274726169745f74797065223a20224554482057616c6c6574204160008201527f646472657373222c202276616c7565223a202200000000000000000000000000602082015250565b6000612d23603383612541565b9150612d2e82612cc7565b603382019050919050565b7f227d2c207b2274726169745f74797065223a2022546f6b656e204944222c202260008201527f76616c7565223a20220000000000000000000000000000000000000000000000602082015250565b6000612d95602983612541565b9150612da082612d39565b602982019050919050565b7f227d5d7d00000000000000000000000000000000000000000000000000000000600082015250565b6000612de1600483612541565b9150612dec82612dab565b600482019050919050565b6000612e0282612b4e565b9150612e0e8288612a86565b9150612e1982612c32565b9150612e2582876125ae565b9150612e3082612ca4565b9150612e3c8286612a86565b9150612e4782612d16565b9150612e538285612a86565b9150612e5e82612d88565b9150612e6a8284612a86565b9150612e7582612dd4565b91508190509695505050505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612eba601783612541565b9150612ec582612e84565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612f06601183612541565b9150612f1182612ed0565b601182019050919050565b6000612f2782612ead565b9150612f338285612a86565b9150612f3e82612ef9565b9150612f4a8284612a86565b91508190509392505050565b6000612f618261200f565b915060008203612f7457612f73612394565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612fb5602083611eff565b9150612fc082612f7f565b602082019050919050565b60006020820190508181036000830152612fe481612fa8565b905091905056fe3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272077696474683d273130383027206865696768743d2731303830272066696c6c3d276e6f6e652720786d6c6e733a763d2768747470733a2f2f76656374612e696f2f6e616e6f273e3c7061746820643d274d3336332e303736203339322e323237732d2e3937372031382e3532342d33362e3837342037382e393437632d34312e3537362037302e3031382d34352e343831203135312e3937382d332e303137203232302e342038392e353231203134342e323435203333322e343831203134312e3532203432322e3535362e3038392033342e3833322d35342e3730372034342e3831362d3131372e3437392033322e3932342d3138312e323438203020302d32382e3831392d3133332e3134342d3132372e3233372d3231372e30393920312e35353320312e33303820352e3336392031392e31323220362e3130312032362e37323220322e3234312032332e3335342e3034352034372e3833382d372e3738372037302e3036322d352e3734362031362e33332d31332e3731312033302e3436372d32372e3137382034312e33363820302d332e3831312d2e3935342d31302e3633352d2e3937362d31322e3931382d2e3634342d34362e3530382d31382e3635392d38392e3538322d34382e3031312d3132352e3734332d32352e3634372d33312e3535322d36302e3831322d35332e3038392d39372e38342d36382e3933322e39333120332e31393120322e3636322031362e34313920322e3930362031392e30333320312e3930382032312e39353820322e3236332035322e3731332d2e3632312037342e363439732d372e3833322033332e3837382d31342e3535342035342e343431632d31302e3138342033312e3137352d32342e30352035342e3238352d34312e3632312038322e3030342d332e323420352e3039362d31322e3931332031392e3037382d31382e3038322032362e313436203020302d382e3839372d35362e3139312d34302e3636372d38372e393231682d2e3032327a272066696c6c3d2723303030272f3e3c7061746820643d274d3536322e352032372e32386c3431302e323739203233362e3837346331332e39323320382e3033392032322e352032322e3839352032322e352033382e393731763437332e373563302031362e3037362d382e3537372033302e3933322d32322e352033382e3937314c3536322e3520313035322e3732632d31332e39323320382e30342d33312e30373720382e30342d343520304c3130372e323231203831352e383436632d31332e3932332d382e3033392d32322e352d32322e3839352d32322e352d33382e393731762d3437332e37356134352034352030203020312032322e352d33382e3937314c3531372e352032372e323861343520343520302030203120343520307a27207374726f6b653d272330303027207374726f6b652d77696474683d2732342e3735272f3e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220b2d6085fe511ee7bd66df9a059a837829d19726706c7427d1f20fa568fec0ef464736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/PKPPermissions.json b/contracts/cayenne/PKPPermissions.json deleted file mode 100644 index 145a8de..0000000 --- a/contracts/cayenne/PKPPermissions.json +++ /dev/null @@ -1,989 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_resolver", - "type": "address" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "_env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "ContractResolverAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "userPubkey", - "type": "bytes" - } - ], - "name": "PermittedAuthMethodAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "PermittedAuthMethodRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "PermittedAuthMethodScopeAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "PermittedAuthMethodScopeRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "group", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "RootHashUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "scopes", - "type": "uint256[]" - } - ], - "name": "addPermittedAction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "user", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "scopes", - "type": "uint256[]" - } - ], - "name": "addPermittedAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "userPubkey", - "type": "bytes" - } - ], - "internalType": "struct PKPPermissions.AuthMethod", - "name": "authMethod", - "type": "tuple" - }, - { - "internalType": "uint256[]", - "name": "scopes", - "type": "uint256[]" - } - ], - "name": "addPermittedAuthMethod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "addPermittedAuthMethodScope", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "authMethods", - "outputs": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "userPubkey", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypesToAdd", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIdsToAdd", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeysToAdd", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopesToAdd", - "type": "uint256[][]" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypesToRemove", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIdsToRemove", - "type": "bytes[]" - } - ], - "name": "batchAddRemoveAuthMethods", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "contractResolver", - "outputs": [ - { - "internalType": "contract ContractResolver", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "env", - "outputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "getAuthMethodId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getEthAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPermittedActions", - "outputs": [ - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPermittedAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "maxScopeId", - "type": "uint256" - } - ], - "name": "getPermittedAuthMethodScopes", - "outputs": [ - { - "internalType": "bool[]", - "name": "", - "type": "bool[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPermittedAuthMethods", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "userPubkey", - "type": "bytes" - } - ], - "internalType": "struct PKPPermissions.AuthMethod[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpNftAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPubkey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRouterAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "getTokenIdsForAuthMethod", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "getUserPubkeyForAuthMethod", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - } - ], - "name": "isPermittedAction", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "isPermittedAddress", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "isPermittedAuthMethod", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "isPermittedAuthMethodScopePresent", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - } - ], - "name": "removePermittedAction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "removePermittedAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "removePermittedAuthMethod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "removePermittedAuthMethodScope", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "group", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "setRootHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "group", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "verifyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "group", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "bool[]", - "name": "proofFlags", - "type": "bool[]" - }, - { - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "verifyStates", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/cayenne/PubkeyRouter.json b/contracts/cayenne/PubkeyRouter.json deleted file mode 100644 index 4ff543d..0000000 --- a/contracts/cayenne/PubkeyRouter.json +++ /dev/null @@ -1,778 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_resolver", - "type": "address" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "_env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "ContractResolverAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - } - ], - "name": "PubkeyRoutingDataSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct IPubkeyRouter.RootKey", - "name": "rootKey", - "type": "tuple" - } - ], - "name": "RootKeySet", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct IPubkeyRouter.Signature[]", - "name": "signatures", - "type": "tuple[]" - }, - { - "internalType": "bytes", - "name": "signedMessage", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContractAddress", - "type": "address" - } - ], - "name": "checkNodeSignatures", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "contractResolver", - "outputs": [ - { - "internalType": "contract ContractResolver", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - } - ], - "name": "deriveEthAddressFromPubkey", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "env", - "outputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "ethAddressToPkpId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - } - ], - "name": "getDerivedPubkey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getEthAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpNftAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPubkey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakingContract", - "type": "address" - } - ], - "name": "getRootKeys", - "outputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct IPubkeyRouter.RootKey[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getRoutingData", - "outputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - } - ], - "internalType": "struct PubkeyRouter.PubkeyRoutingData", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "isRouted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pubkeys", - "outputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "rootKeys", - "outputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContractAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - } - ], - "name": "setRoutingData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - } - ], - "name": "setRoutingDataAsAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakingContractAddress", - "type": "address" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct IPubkeyRouter.RootKey[]", - "name": "newRootKeys", - "type": "tuple[]" - } - ], - "name": "voteForRootKeys", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "votesToRegisterRootKeys", - "outputs": [ - { - "internalType": "uint256", - "name": "votes", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/cayenne/RateLimitNFT.json b/contracts/cayenne/RateLimitNFT.json deleted file mode 100644 index 588b18e..0000000 --- a/contracts/cayenne/RateLimitNFT.json +++ /dev/null @@ -1,925 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "RateLimitNFT", - "sourceName": "contracts/lit-node/RateLimitNFT.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdditionalRequestsPerKilosecondCost", - "type": "uint256" - } - ], - "name": "AdditionalRequestsPerKilosecondCostSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newFreeMintSigner", - "type": "address" - } - ], - "name": "FreeMintSignerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newFreeRequestsPerRateLimitWindow", - "type": "uint256" - } - ], - "name": "FreeRequestsPerRateLimitWindowSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newRLIHolderRateLimitWindowSeconds", - "type": "uint256" - } - ], - "name": "RLIHolderRateLimitWindowSecondsSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newRateLimitWindowSeconds", - "type": "uint256" - } - ], - "name": "RateLimitWindowSecondsSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrew", - "type": "event" - }, - { - "inputs": [], - "name": "RLIHolderRateLimitWindowSeconds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "additionalRequestsPerKilosecondCost", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requestsPerKilosecond", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expiresAt", - "type": "uint256" - } - ], - "name": "calculateCost", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "payingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expiresAt", - "type": "uint256" - } - ], - "name": "calculateRequestsPerKilosecond", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "capacity", - "outputs": [ - { - "internalType": "uint256", - "name": "requestsPerKilosecond", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expiresAt", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "defaultRateLimitWindowSeconds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expiresAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "requestsPerKilosecond", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "freeMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expiresAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "requestsPerKilosecond", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "freeMintSigTest", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "freeMintSigner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "freeRequestsPerRateLimitWindow", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "isExpired", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expiresAt", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "prefixed", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "redeemedFreeMints", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newAdditionalRequestsPerKilosecondCost", - "type": "uint256" - } - ], - "name": "setAdditionalRequestsPerKilosecondCost", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newFreeMintSigner", - "type": "address" - } - ], - "name": "setFreeMintSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newFreeRequestsPerRateLimitWindow", - "type": "uint256" - } - ], - "name": "setFreeRequestsPerRateLimitWindow", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newRLIHolderRateLimitWindowSeconds", - "type": "uint256" - } - ], - "name": "setRLIHolderRateLimitWindowSeconds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newRateLimitWindowSeconds", - "type": "uint256" - } - ], - "name": "setRateLimitWindowSeconds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tokenIdCounter", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenOfOwnerByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6080604052610e10600f5561012c601055600a6011553480156200002257600080fd5b506040518060600160405280602481526020016200586d602491396040518060400160405280600381526020017f524c490000000000000000000000000000000000000000000000000000000000815250816000908162000084919062000419565b50806001908162000096919062000419565b505050620000b9620000ad620000d160201b60201c565b620000d960201b60201c565b6001600b81905550620f4240600d8190555062000500565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200022157607f821691505b602082108103620002375762000236620001d9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000262565b620002ad868362000262565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002fa620002f4620002ee84620002c5565b620002cf565b620002c5565b9050919050565b6000819050919050565b6200031683620002d9565b6200032e620003258262000301565b8484546200026f565b825550505050565b600090565b6200034562000336565b620003528184846200030b565b505050565b5b818110156200037a576200036e6000826200033b565b60018101905062000358565b5050565b601f821115620003c95762000393816200023d565b6200039e8462000252565b81016020851015620003ae578190505b620003c6620003bd8562000252565b83018262000357565b50505b505050565b600082821c905092915050565b6000620003ee60001984600802620003ce565b1980831691505092915050565b6000620004098383620003db565b9150826002028217905092915050565b62000424826200019f565b67ffffffffffffffff81111562000440576200043f620001aa565b5b6200044c825462000208565b620004598282856200037e565b600060209050601f8311600181146200049157600084156200047c578287015190505b620004888582620003fb565b865550620004f8565b601f198416620004a1866200023d565b60005b82811015620004cb57848901518255600182019150602085019450602081019050620004a4565b86831015620004eb5784890151620004e7601f891682620003db565b8355505b6001600288020188555050505b505050505050565b61535d80620005106000396000f3fe6080604052600436106102465760003560e01c80634f6ccce711610139578063ab1bbeca116100b6578063ce3946961161007a578063ce394696146108cc578063d9548e5314610909578063e62a219514610946578063e985e9c51461096f578063f2fde38b146109ac578063fb24b22e146109d557610246565b8063ab1bbeca146107c0578063b88d4fde146107fe578063b94a210214610827578063ba45b2ba14610852578063c87b56dd1461088f57610246565b806395d89b41116100fd57806395d89b41146106d457806398bdf6f5146106ff578063995eebab1461072a578063a0712d6814610767578063a22cb4651461079757610246565b80634f6ccce7146105db5780636352211e1461061857806370a0823114610655578063715018a6146106925780638da5cb5b146106a957610246565b80632f745c59116101c75780633ccfd60b1161018b5780633ccfd60b1461051c57806342842e0e1461053357806342966c681461055c5780634659470d146105855780634a5f3acd146105b057610246565b80632f745c59146104275780633488ab131461046457806339f1a4f11461048d5780633b189852146104b65780633b1a72cc146104df57610246565b806318160ddd1161020e57806318160ddd146103425780631f2757131461036d57806323b872dd146103aa57806326894764146103d357806328b9b37c146103fe57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806311fc456214610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613215565b610a00565b60405161027f919061325d565b60405180910390f35b34801561029457600080fd5b5061029d610b3a565b6040516102aa9190613308565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613360565b610bcc565b6040516102e791906133ce565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613415565b610c12565b005b34801561032557600080fd5b50610340600480360381019061033b9190613360565b610d29565b005b34801561034e57600080fd5b50610357610d72565b6040516103649190613464565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f91906134b5565b610d7f565b6040516103a191906134f1565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc919061350c565b610daf565b005b3480156103df57600080fd5b506103e8610e0f565b6040516103f59190613464565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190613360565b610e15565b005b34801561043357600080fd5b5061044e60048036038101906104499190613415565b610e5e565b60405161045b9190613464565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190613598565b610f03565b005b34801561049957600080fd5b506104b460048036038101906104af9190613360565b6110c8565b005b3480156104c257600080fd5b506104dd60048036038101906104d89190613625565b611111565b005b3480156104eb57600080fd5b50610506600480360381019061050191906134b5565b6111a0565b604051610513919061325d565b60405180910390f35b34801561052857600080fd5b506105316111c0565b005b34801561053f57600080fd5b5061055a6004803603810190610555919061350c565b61128e565b005b34801561056857600080fd5b50610583600480360381019061057e9190613360565b6112ae565b005b34801561059157600080fd5b5061059a61130a565b6040516105a79190613464565b60405180910390f35b3480156105bc57600080fd5b506105c5611310565b6040516105d29190613464565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613360565b611316565b60405161060f9190613464565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613360565b611387565b60405161064c91906133ce565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190613625565b61140d565b6040516106899190613464565b60405180910390f35b34801561069e57600080fd5b506106a76114c4565b005b3480156106b557600080fd5b506106be6114d8565b6040516106cb91906133ce565b60405180910390f35b3480156106e057600080fd5b506106e9611502565b6040516106f69190613308565b60405180910390f35b34801561070b57600080fd5b50610714611594565b6040516107219190613464565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190613598565b61159a565b60405161075e9190613464565b60405180910390f35b610781600480360381019061077c9190613360565b61160e565b60405161078e9190613464565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b9919061367e565b6116f3565b005b3480156107cc57600080fd5b506107e760048036038101906107e29190613360565b611709565b6040516107f59291906136be565b60405180910390f35b34801561080a57600080fd5b506108256004803603810190610820919061381c565b61172d565b005b34801561083357600080fd5b5061083c61178f565b60405161084991906133ce565b60405180910390f35b34801561085e57600080fd5b506108796004803603810190610874919061389f565b6117b5565b6040516108869190613464565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190613360565b61183e565b6040516108c39190613308565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee919061389f565b6118f5565b6040516109009190613464565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190613360565b6119c1565b60405161093d919061325d565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190613360565b6119e4565b005b34801561097b57600080fd5b50610996600480360381019061099191906138df565b611a2d565b6040516109a3919061325d565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190613625565b611ac1565b005b3480156109e157600080fd5b506109ea611b44565b6040516109f79190613464565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610acb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b3357507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060008054610b499061394e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b759061394e565b8015610bc25780601f10610b9757610100808354040283529160200191610bc2565b820191906000526020600020905b815481529060010190602001808311610ba557829003601f168201915b5050505050905090565b6000610bd782611b4a565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c1d82611387565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c84906139f1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cac611b95565b73ffffffffffffffffffffffffffffffffffffffff161480610cdb5750610cda81610cd5611b95565b611a2d565b5b610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1190613a83565b60405180910390fd5b610d248383611b9d565b505050565b610d31611c56565b80600f819055507f8113757de54f756eb308220e3f035727188560fd3230aaf1fbc24e5610fea1f881604051610d679190613464565b60405180910390a150565b6000600980549050905090565b600081604051602001610d929190613b1b565b604051602081830303815290604052805190602001209050919050565b610dc0610dba611b95565b82611cd4565b610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df690613bb3565b60405180910390fd5b610e0a838383611d69565b505050565b60115481565b610e1d611c56565b806011819055507fce84f3dad126a2cb9d67cdca12c64dc079f7a9a1a0728c5c4e16e4b5b2e4bc4d81604051610e539190613464565b60405180910390a150565b6000610e698361140d565b8210610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190613c45565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000610f368787604051602001610f1b929190613c86565b60405160208183030381529060405280519060200120610d7f565b9050848114610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190613d4a565b60405180910390fd5b600060018686868660405160008152602001604052604051610f9f9493929190613d79565b6020604051602081039080840390855afa158015610fc1573d6000803e3d6000fd5b505050602060405103519050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490613e56565b60405180910390fd5b6013600087815260200190815260200160002060009054906101000a900460ff16156110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590613ee8565b60405180910390fd5b5050505050505050565b6110d0611c56565b806010819055507fad40b1be79d0692234d4fb1d25a47b916b4754dda8187fc0aa1271b7d7adb040816040516111069190613464565b60405180910390a150565b611119611c56565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f65d3e06a561c77a07da59b8b2ca10214ae08fe21cc2953a90db0ac8b5b7c437160405160405180910390a250565b60136020528060005260406000206000915054906101000a900460ff1681565b6111c8611c56565b6111d0612062565b600047905060003373ffffffffffffffffffffffffffffffffffffffff16826040516111fb90613f39565b60006040518083038185875af1925050503d8060008114611238576040519150601f19603f3d011682016040523d82523d6000602084013e61123d565b606091505b505090508061124b57600080fd5b7fb6b476da71cea8275cac6b1720c04966afaff5e637472cedb6cbd32c43a232518260405161127a9190613464565b60405180910390a1505061128c6120b1565b565b6112a98383836040518060200160405280600081525061172d565b505050565b6112bf6112b9611b95565b82611cd4565b6112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590613bb3565b60405180910390fd5b611307816120bb565b50565b600d5481565b60105481565b6000611320610d72565b8210611361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135890613fc0565b60405180910390fd5b6009828154811061137557611374613fe0565b5b90600052602060002001549050919050565b60008061139383612209565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb9061405b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361147d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611474906140ed565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114cc611c56565b6114d66000612246565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115119061394e565b80601f016020809104026020016040519081016040528092919081815260200182805461153d9061394e565b801561158a5780601f1061155f5761010080835404028352916020019161158a565b820191906000526020600020905b81548152906001019060200180831161156d57829003601f168201915b5050505050905090565b600e5481565b6000600e60008154809291906115af9061413c565b91905055506000600e5490506115c9888888888888610f03565b60016013600088815260200190815260200160002060006101000a81548160ff02191690831515021790555061160081888a61230c565b809150509695505050505050565b6000600e60008154809291906116239061413c565b91905055506000600e549050600061163b34856117b5565b9050600061164982866118f5565b905060003411801561165b5750803410155b61169a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169190614242565b60405180910390fd5b600081116116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d4906142ae565b60405180910390fd5b6116e883838761230c565b829350505050919050565b6117056116fe611b95565b838361235a565b5050565b60126020528060005260406000206000915090508060000154908060010154905082565b61173e611738611b95565b83611cd4565b61177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490613bb3565b60405180910390fd5b611789848484846124c6565b50505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60004282116117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f090614340565b60405180910390fd5b600042836118079190614360565b905060006103e8600d548361181c9190614394565b6118269190614405565b856118319190614405565b9050809250505092915050565b606060006040518061048001604052806104568152602001614e926104569139905060006118ca826118856012600088815260200190815260200160002060010154612522565b6118a46012600089815260200190815260200160002060000154612522565b6040516020016118b693929190614703565b6040516020818303038152906040526125f0565b9050806040516020016118dd91906147ac565b60405160208183030381529060405292505050919050565b6000428211611939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193090614340565b60405180910390fd5b6000831161197c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197390614840565b60405180910390fd5b6000428361198a9190614360565b905060006103e8600d5483876119a09190614394565b6119aa9190614394565b6119b49190614405565b9050809250505092915050565b600042601260008481526020019081526020016000206001015411159050919050565b6119ec611c56565b80600d819055507f33e576b8e54523be9c9684e33c7144d859acb615dddc3874462fc0cc73f1ebe381604051611a229190613464565b60405180910390a150565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ac9611c56565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2f906148d2565b60405180910390fd5b611b4181612246565b50565b600f5481565b611b5381612753565b611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b899061405b565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c1083611387565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611c5e611b95565b73ffffffffffffffffffffffffffffffffffffffff16611c7c6114d8565b73ffffffffffffffffffffffffffffffffffffffff1614611cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc99061493e565b60405180910390fd5b565b600080611ce083611387565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d225750611d218185611a2d565b5b80611d6057508373ffffffffffffffffffffffffffffffffffffffff16611d4884610bcc565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d8982611387565b73ffffffffffffffffffffffffffffffffffffffff1614611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd6906149d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590614a62565b60405180910390fd5b611e5b8383836001612794565b8273ffffffffffffffffffffffffffffffffffffffff16611e7b82611387565b73ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec8906149d0565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461205d83838360016127a6565b505050565b6002600b54036120a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209e90614ace565b60405180910390fd5b6002600b81905550565b6001600b81905550565b60006120c682611387565b90506120d6816000846001612794565b6120df82611387565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122058160008460016127a6565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61231633846127ac565b604051806040016040528083815260200182815250601260008581526020019081526020016000206000820151816000015560208201518160010155905050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf90614b3a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124b9919061325d565b60405180910390a3505050565b6124d1848484611d69565b6124dd848484846127ca565b61251c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251390614bcc565b60405180910390fd5b50505050565b60606000600161253184612951565b01905060008167ffffffffffffffff8111156125505761254f6136f1565b5b6040519080825280601f01601f1916602001820160405280156125825781602001600182028036833780820191505090505b509050600082602001820190505b6001156125e5578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816125d9576125d86143d6565b5b04945060008503612590575b819350505050919050565b606060008251036126125760405180602001604052806000815250905061274e565b60006040518060600160405280604081526020016152e860409139905060006003600285516126419190614bec565b61264b9190614405565b60046126579190614394565b67ffffffffffffffff8111156126705761266f6136f1565b5b6040519080825280601f01601f1916602001820160405280156126a25781602001600182028036833780820191505090505b509050600182016020820185865187015b8082101561270e576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453600184019350506126b3565b505060038651066001811461272a576002811461273d57612745565b603d6001830353603d6002830353612745565b603d60018303535b50505080925050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff1661277583612209565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6127a084848484612aa4565b50505050565b50505050565b6127c6828260405180602001604052806000815250612c02565b5050565b60006127eb8473ffffffffffffffffffffffffffffffffffffffff16612c5d565b15612944578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612814611b95565b8786866040518563ffffffff1660e01b81526004016128369493929190614c6a565b6020604051808303816000875af192505050801561287257506040513d601f19601f8201168201806040525081019061286f9190614ccb565b60015b6128f4573d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5060008151036128ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e390614bcc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612949565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106129af577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816129a5576129a46143d6565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106129ec576d04ee2d6d415b85acef810000000083816129e2576129e16143d6565b5b0492506020810190505b662386f26fc100008310612a1b57662386f26fc100008381612a1157612a106143d6565b5b0492506010810190505b6305f5e1008310612a44576305f5e1008381612a3a57612a396143d6565b5b0492506008810190505b6127108310612a69576127108381612a5f57612a5e6143d6565b5b0492506004810190505b60648310612a8c5760648381612a8257612a816143d6565b5b0492506002810190505b600a8310612a9b576001810190505b80915050919050565b612ab084848484612c80565b6001811115612af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aeb90614d6a565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612b3b57612b3681612c86565b612b7a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612b7957612b788582612ccf565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612bbc57612bb781612e3c565b612bfb565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612bfa57612bf98482612f0d565b5b5b5050505050565b612c0c8383612f8c565b612c1960008484846127ca565b612c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4f90614bcc565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b50505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cdc8461140d565b612ce69190614360565b9050600060086000848152602001908152602001600020549050818114612dcb576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612e509190614360565b90506000600a6000848152602001908152602001600020549050600060098381548110612e8057612e7f613fe0565b5b906000526020600020015490508060098381548110612ea257612ea1613fe0565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612ef157612ef0614d8a565b5b6001900381819060005260206000200160009055905550505050565b6000612f188361140d565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff290614e05565b60405180910390fd5b61300481612753565b15613044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303b90614e71565b60405180910390fd5b613052600083836001612794565b61305b81612753565b1561309b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309290614e71565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131a56000838360016127a6565b5050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131f2816131bd565b81146131fd57600080fd5b50565b60008135905061320f816131e9565b92915050565b60006020828403121561322b5761322a6131b3565b5b600061323984828501613200565b91505092915050565b60008115159050919050565b61325781613242565b82525050565b6000602082019050613272600083018461324e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132b2578082015181840152602081019050613297565b60008484015250505050565b6000601f19601f8301169050919050565b60006132da82613278565b6132e48185613283565b93506132f4818560208601613294565b6132fd816132be565b840191505092915050565b6000602082019050818103600083015261332281846132cf565b905092915050565b6000819050919050565b61333d8161332a565b811461334857600080fd5b50565b60008135905061335a81613334565b92915050565b600060208284031215613376576133756131b3565b5b60006133848482850161334b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133b88261338d565b9050919050565b6133c8816133ad565b82525050565b60006020820190506133e360008301846133bf565b92915050565b6133f2816133ad565b81146133fd57600080fd5b50565b60008135905061340f816133e9565b92915050565b6000806040838503121561342c5761342b6131b3565b5b600061343a85828601613400565b925050602061344b8582860161334b565b9150509250929050565b61345e8161332a565b82525050565b60006020820190506134796000830184613455565b92915050565b6000819050919050565b6134928161347f565b811461349d57600080fd5b50565b6000813590506134af81613489565b92915050565b6000602082840312156134cb576134ca6131b3565b5b60006134d9848285016134a0565b91505092915050565b6134eb8161347f565b82525050565b600060208201905061350660008301846134e2565b92915050565b600080600060608486031215613525576135246131b3565b5b600061353386828701613400565b935050602061354486828701613400565b92505060406135558682870161334b565b9150509250925092565b600060ff82169050919050565b6135758161355f565b811461358057600080fd5b50565b6000813590506135928161356c565b92915050565b60008060008060008060c087890312156135b5576135b46131b3565b5b60006135c389828a0161334b565b96505060206135d489828a0161334b565b95505060406135e589828a016134a0565b94505060606135f689828a01613583565b935050608061360789828a016134a0565b92505060a061361889828a016134a0565b9150509295509295509295565b60006020828403121561363b5761363a6131b3565b5b600061364984828501613400565b91505092915050565b61365b81613242565b811461366657600080fd5b50565b60008135905061367881613652565b92915050565b60008060408385031215613695576136946131b3565b5b60006136a385828601613400565b92505060206136b485828601613669565b9150509250929050565b60006040820190506136d36000830185613455565b6136e06020830184613455565b9392505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613729826132be565b810181811067ffffffffffffffff82111715613748576137476136f1565b5b80604052505050565b600061375b6131a9565b90506137678282613720565b919050565b600067ffffffffffffffff821115613787576137866136f1565b5b613790826132be565b9050602081019050919050565b82818337600083830152505050565b60006137bf6137ba8461376c565b613751565b9050828152602081018484840111156137db576137da6136ec565b5b6137e684828561379d565b509392505050565b600082601f830112613803576138026136e7565b5b81356138138482602086016137ac565b91505092915050565b60008060008060808587031215613836576138356131b3565b5b600061384487828801613400565b945050602061385587828801613400565b93505060406138668782880161334b565b925050606085013567ffffffffffffffff811115613887576138866131b8565b5b613893878288016137ee565b91505092959194509250565b600080604083850312156138b6576138b56131b3565b5b60006138c48582860161334b565b92505060206138d58582860161334b565b9150509250929050565b600080604083850312156138f6576138f56131b3565b5b600061390485828601613400565b925050602061391585828601613400565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061396657607f821691505b6020821081036139795761397861391f565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006139db602183613283565b91506139e68261397f565b604082019050919050565b60006020820190508181036000830152613a0a816139ce565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613a6d603d83613283565b9150613a7882613a11565b604082019050919050565b60006020820190508181036000830152613a9c81613a60565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613ae4601c83613aa3565b9150613aef82613aae565b601c82019050919050565b6000819050919050565b613b15613b108261347f565b613afa565b82525050565b6000613b2682613ad7565b9150613b328284613b04565b60208201915081905092915050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613b9d602d83613283565b9150613ba882613b41565b604082019050919050565b60006020820190508181036000830152613bcc81613b90565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613c2f602b83613283565b9150613c3a82613bd3565b604082019050919050565b60006020820190508181036000830152613c5e81613c22565b9050919050565b6000819050919050565b613c80613c7b8261332a565b613c65565b82525050565b6000613c928285613c6f565b602082019150613ca28284613c6f565b6020820191508190509392505050565b7f546865206d736748617368206973206e6f7420612068617368206f662074686560008201527f20657870697265734174202b2072657175657374735065724b696c6f7365636f60208201527f6e642e20204578706c61696e20796f757273656c662100000000000000000000604082015250565b6000613d34605683613283565b9150613d3f82613cb2565b606082019050919050565b60006020820190508181036000830152613d6381613d27565b9050919050565b613d738161355f565b82525050565b6000608082019050613d8e60008301876134e2565b613d9b6020830186613d6a565b613da860408301856134e2565b613db560608301846134e2565b95945050505050565b7f5468697320667265654d696e7420776173206e6f74207369676e65642062792060008201527f667265654d696e745369676e65722e2020486f7720656d626172617373696e6760208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b6000613e40604183613283565b9150613e4b82613dbe565b606082019050919050565b60006020820190508181036000830152613e6f81613e33565b9050919050565b7f5468697320667265654d696e742068617320616c7265616479206265656e207260008201527f656465656d65642e2020486f7720656d626172617373696e672e000000000000602082015250565b6000613ed2603a83613283565b9150613edd82613e76565b604082019050919050565b60006020820190508181036000830152613f0181613ec5565b9050919050565b600081905092915050565b50565b6000613f23600083613f08565b9150613f2e82613f13565b600082019050919050565b6000613f4482613f16565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613faa602c83613283565b9150613fb582613f4e565b604082019050919050565b60006020820190508181036000830152613fd981613f9d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000614045601883613283565b91506140508261400f565b602082019050919050565b6000602082019050818103600083015261407481614038565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006140d7602983613283565b91506140e28261407b565b604082019050919050565b60006020820190508181036000830152614106816140ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141478261332a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141795761417861410d565b5b600182019050919050565b7f596f75206d7573742073656e642074686520636f7374206f662074686973207260008201527f617465206c696d697420696e6372656173652e2020546f20636865636b20746860208201527f6520636f73742c20757365207468652063616c63756c617465436f737420667560408201527f6e6374696f6e2e00000000000000000000000000000000000000000000000000606082015250565b600061422c606783613283565b915061423782614184565b608082019050919050565b6000602082019050818103600083015261425b8161421f565b9050919050565b7f54686520636f7374206d7573742062652067726561746572207468616e203000600082015250565b6000614298601f83613283565b91506142a382614262565b602082019050919050565b600060208201905081810360008301526142c78161428b565b9050919050565b7f54686520657870697265734174206d75737420626520696e207468652066757460008201527f7572650000000000000000000000000000000000000000000000000000000000602082015250565b600061432a602383613283565b9150614335826142ce565b604082019050919050565b600060208201905081810360008301526143598161431d565b9050919050565b600061436b8261332a565b91506143768361332a565b925082820390508181111561438e5761438d61410d565b5b92915050565b600061439f8261332a565b91506143aa8361332a565b92508282026143b88161332a565b915082820484148315176143cf576143ce61410d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144108261332a565b915061441b8361332a565b92508261442b5761442a6143d6565b5b828204905092915050565b7f7b226e616d65223a20224c69742050726f746f636f6c2052617465204c696d6960008201527f7420496e637265617365222c20226465736372697074696f6e223a202254686960208201527f73204e465420656e7469746c65732074686520686f6c64657220746f2061207260408201527f617465206c696d697420696e637265617365206f6e20746865204c697420507260608201527f6f746f636f6c204e6574776f726b222c2022696d6167655f64617461223a2022608082015250565b600061450460a083613aa3565b915061450f82614436565b60a082019050919050565b600081519050919050565b60006145308261451a565b61453a8185613f08565b935061454a818560208601613294565b80840191505092915050565b7f222c2261747472696275746573223a205b7b22646973706c61795f747970652260008201527f3a202264617465222c202274726169745f74797065223a20224578706972617460208201527f696f6e2044617465222c202276616c7565223a20000000000000000000000000604082015250565b60006145d8605483613aa3565b91506145e382614556565b605482019050919050565b60006145f982613278565b6146038185613aa3565b9350614613818560208601613294565b80840191505092915050565b7f7d2c207b22646973706c61795f74797065223a20226e756d626572222c20227460008201527f726169745f74797065223a20224d696c6c69726571756573747320506572205360208201527f65636f6e64222c202276616c7565223a20000000000000000000000000000000604082015250565b60006146a1605183613aa3565b91506146ac8261461f565b605182019050919050565b7f7d5d7d0000000000000000000000000000000000000000000000000000000000600082015250565b60006146ed600383613aa3565b91506146f8826146b7565b600382019050919050565b600061470e826144f7565b915061471a8286614525565b9150614725826145cb565b915061473182856145ee565b915061473c82614694565b915061474882846145ee565b9150614753826146e0565b9150819050949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614796601d83613aa3565b91506147a182614760565b601d82019050919050565b60006147b782614789565b91506147c382846145ee565b915081905092915050565b7f5468652072657175657374735065724b696c6f7365636f6e64206d757374206260008201527f652067726561746572207468616e203000000000000000000000000000000000602082015250565b600061482a603083613283565b9150614835826147ce565b604082019050919050565b600060208201905081810360008301526148598161481d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148bc602683613283565b91506148c782614860565b604082019050919050565b600060208201905081810360008301526148eb816148af565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614928602083613283565b9150614933826148f2565b602082019050919050565b600060208201905081810360008301526149578161491b565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006149ba602583613283565b91506149c58261495e565b604082019050919050565b600060208201905081810360008301526149e9816149ad565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a4c602483613283565b9150614a57826149f0565b604082019050919050565b60006020820190508181036000830152614a7b81614a3f565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614ab8601f83613283565b9150614ac382614a82565b602082019050919050565b60006020820190508181036000830152614ae781614aab565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614b24601983613283565b9150614b2f82614aee565b602082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614bb6603283613283565b9150614bc182614b5a565b604082019050919050565b60006020820190508181036000830152614be581614ba9565b9050919050565b6000614bf78261332a565b9150614c028361332a565b9250828201905080821115614c1a57614c1961410d565b5b92915050565b600082825260208201905092915050565b6000614c3c8261451a565b614c468185614c20565b9350614c56818560208601613294565b614c5f816132be565b840191505092915050565b6000608082019050614c7f60008301876133bf565b614c8c60208301866133bf565b614c996040830185613455565b8181036060830152614cab8184614c31565b905095945050505050565b600081519050614cc5816131e9565b92915050565b600060208284031215614ce157614ce06131b3565b5b6000614cef84828501614cb6565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000614d54603583613283565b9150614d5f82614cf8565b604082019050919050565b60006020820190508181036000830152614d8381614d47565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614def602083613283565b9150614dfa82614db9565b602082019050919050565b60006020820190508181036000830152614e1e81614de2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614e5b601c83613283565b9150614e6682614e25565b602082019050919050565b60006020820190508181036000830152614e8a81614e4e565b905091905056fe3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272077696474683d273130383027206865696768743d2731303830272066696c6c3d276e6f6e652720786d6c6e733a763d2768747470733a2f2f76656374612e696f2f6e616e6f273e3c7061746820643d274d3336332e303736203339322e323237732d2e3937372031382e3532342d33362e3837342037382e393437632d34312e3537362037302e3031382d34352e343831203135312e3937382d332e303137203232302e342038392e353231203134342e323435203333322e343831203134312e3532203432322e3535362e3038392033342e3833322d35342e3730372034342e3831362d3131372e3437392033322e3932342d3138312e323438203020302d32382e3831392d3133332e3134342d3132372e3233372d3231372e30393920312e35353320312e33303820352e3336392031392e31323220362e3130312032362e37323220322e3234312032332e3335342e3034352034372e3833382d372e3738372037302e3036322d352e3734362031362e33332d31332e3731312033302e3436372d32372e3137382034312e33363820302d332e3831312d2e3935342d31302e3633352d2e3937362d31322e3931382d2e3634342d34362e3530382d31382e3635392d38392e3538322d34382e3031312d3132352e3734332d32352e3634372d33312e3535322d36302e3831322d35332e3038392d39372e38342d36382e3933322e39333120332e31393120322e3636322031362e34313920322e3930362031392e30333320312e3930382032312e39353820322e3236332035322e3731332d2e3632312037342e363439732d372e3833322033332e3837382d31342e3535342035342e343431632d31302e3138342033312e3137352d32342e30352035342e3238352d34312e3632312038322e3030342d332e323420352e3039362d31322e3931332031392e3037382d31382e3038322032362e313436203020302d382e3839372d35362e3139312d34302e3636372d38372e393231682d2e3032327a272066696c6c3d2723303030272f3e3c7061746820643d274d3536322e352032372e32386c3431302e323739203233362e3837346331332e39323320382e3033392032322e352032322e3839352032322e352033382e393731763437332e373563302031362e3037362d382e3537372033302e3933322d32322e352033382e3937314c3536322e3520313035322e3732632d31332e39323320382e30342d33312e30373720382e30342d343520304c3130372e323231203831352e383436632d31332e3932332d382e3033392d32322e352d32322e3839352d32322e352d33382e393731762d3437332e37356134352034352030203020312032322e352d33382e3937314c3531372e352032372e323861343520343520302030203120343520307a27207374726f6b653d272330303027207374726f6b652d77696474683d2732342e3735272f3e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212208206962addcc8798e08fd602c7eedb60f30030d558ad1e05a0c2dfe9d8932ad264736f6c6343000811003352617465204c696d697420496e63726561736573206f6e204c69742050726f746f636f6c", - "deployedBytecode": "0x6080604052600436106102465760003560e01c80634f6ccce711610139578063ab1bbeca116100b6578063ce3946961161007a578063ce394696146108cc578063d9548e5314610909578063e62a219514610946578063e985e9c51461096f578063f2fde38b146109ac578063fb24b22e146109d557610246565b8063ab1bbeca146107c0578063b88d4fde146107fe578063b94a210214610827578063ba45b2ba14610852578063c87b56dd1461088f57610246565b806395d89b41116100fd57806395d89b41146106d457806398bdf6f5146106ff578063995eebab1461072a578063a0712d6814610767578063a22cb4651461079757610246565b80634f6ccce7146105db5780636352211e1461061857806370a0823114610655578063715018a6146106925780638da5cb5b146106a957610246565b80632f745c59116101c75780633ccfd60b1161018b5780633ccfd60b1461051c57806342842e0e1461053357806342966c681461055c5780634659470d146105855780634a5f3acd146105b057610246565b80632f745c59146104275780633488ab131461046457806339f1a4f11461048d5780633b189852146104b65780633b1a72cc146104df57610246565b806318160ddd1161020e57806318160ddd146103425780631f2757131461036d57806323b872dd146103aa57806326894764146103d357806328b9b37c146103fe57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806311fc456214610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613215565b610a00565b60405161027f919061325d565b60405180910390f35b34801561029457600080fd5b5061029d610b3a565b6040516102aa9190613308565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613360565b610bcc565b6040516102e791906133ce565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613415565b610c12565b005b34801561032557600080fd5b50610340600480360381019061033b9190613360565b610d29565b005b34801561034e57600080fd5b50610357610d72565b6040516103649190613464565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f91906134b5565b610d7f565b6040516103a191906134f1565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc919061350c565b610daf565b005b3480156103df57600080fd5b506103e8610e0f565b6040516103f59190613464565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190613360565b610e15565b005b34801561043357600080fd5b5061044e60048036038101906104499190613415565b610e5e565b60405161045b9190613464565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190613598565b610f03565b005b34801561049957600080fd5b506104b460048036038101906104af9190613360565b6110c8565b005b3480156104c257600080fd5b506104dd60048036038101906104d89190613625565b611111565b005b3480156104eb57600080fd5b50610506600480360381019061050191906134b5565b6111a0565b604051610513919061325d565b60405180910390f35b34801561052857600080fd5b506105316111c0565b005b34801561053f57600080fd5b5061055a6004803603810190610555919061350c565b61128e565b005b34801561056857600080fd5b50610583600480360381019061057e9190613360565b6112ae565b005b34801561059157600080fd5b5061059a61130a565b6040516105a79190613464565b60405180910390f35b3480156105bc57600080fd5b506105c5611310565b6040516105d29190613464565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613360565b611316565b60405161060f9190613464565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613360565b611387565b60405161064c91906133ce565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190613625565b61140d565b6040516106899190613464565b60405180910390f35b34801561069e57600080fd5b506106a76114c4565b005b3480156106b557600080fd5b506106be6114d8565b6040516106cb91906133ce565b60405180910390f35b3480156106e057600080fd5b506106e9611502565b6040516106f69190613308565b60405180910390f35b34801561070b57600080fd5b50610714611594565b6040516107219190613464565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190613598565b61159a565b60405161075e9190613464565b60405180910390f35b610781600480360381019061077c9190613360565b61160e565b60405161078e9190613464565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b9919061367e565b6116f3565b005b3480156107cc57600080fd5b506107e760048036038101906107e29190613360565b611709565b6040516107f59291906136be565b60405180910390f35b34801561080a57600080fd5b506108256004803603810190610820919061381c565b61172d565b005b34801561083357600080fd5b5061083c61178f565b60405161084991906133ce565b60405180910390f35b34801561085e57600080fd5b506108796004803603810190610874919061389f565b6117b5565b6040516108869190613464565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190613360565b61183e565b6040516108c39190613308565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee919061389f565b6118f5565b6040516109009190613464565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190613360565b6119c1565b60405161093d919061325d565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190613360565b6119e4565b005b34801561097b57600080fd5b50610996600480360381019061099191906138df565b611a2d565b6040516109a3919061325d565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190613625565b611ac1565b005b3480156109e157600080fd5b506109ea611b44565b6040516109f79190613464565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610acb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b3357507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060008054610b499061394e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b759061394e565b8015610bc25780601f10610b9757610100808354040283529160200191610bc2565b820191906000526020600020905b815481529060010190602001808311610ba557829003601f168201915b5050505050905090565b6000610bd782611b4a565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c1d82611387565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c84906139f1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cac611b95565b73ffffffffffffffffffffffffffffffffffffffff161480610cdb5750610cda81610cd5611b95565b611a2d565b5b610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1190613a83565b60405180910390fd5b610d248383611b9d565b505050565b610d31611c56565b80600f819055507f8113757de54f756eb308220e3f035727188560fd3230aaf1fbc24e5610fea1f881604051610d679190613464565b60405180910390a150565b6000600980549050905090565b600081604051602001610d929190613b1b565b604051602081830303815290604052805190602001209050919050565b610dc0610dba611b95565b82611cd4565b610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df690613bb3565b60405180910390fd5b610e0a838383611d69565b505050565b60115481565b610e1d611c56565b806011819055507fce84f3dad126a2cb9d67cdca12c64dc079f7a9a1a0728c5c4e16e4b5b2e4bc4d81604051610e539190613464565b60405180910390a150565b6000610e698361140d565b8210610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190613c45565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000610f368787604051602001610f1b929190613c86565b60405160208183030381529060405280519060200120610d7f565b9050848114610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190613d4a565b60405180910390fd5b600060018686868660405160008152602001604052604051610f9f9493929190613d79565b6020604051602081039080840390855afa158015610fc1573d6000803e3d6000fd5b505050602060405103519050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490613e56565b60405180910390fd5b6013600087815260200190815260200160002060009054906101000a900460ff16156110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590613ee8565b60405180910390fd5b5050505050505050565b6110d0611c56565b806010819055507fad40b1be79d0692234d4fb1d25a47b916b4754dda8187fc0aa1271b7d7adb040816040516111069190613464565b60405180910390a150565b611119611c56565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f65d3e06a561c77a07da59b8b2ca10214ae08fe21cc2953a90db0ac8b5b7c437160405160405180910390a250565b60136020528060005260406000206000915054906101000a900460ff1681565b6111c8611c56565b6111d0612062565b600047905060003373ffffffffffffffffffffffffffffffffffffffff16826040516111fb90613f39565b60006040518083038185875af1925050503d8060008114611238576040519150601f19603f3d011682016040523d82523d6000602084013e61123d565b606091505b505090508061124b57600080fd5b7fb6b476da71cea8275cac6b1720c04966afaff5e637472cedb6cbd32c43a232518260405161127a9190613464565b60405180910390a1505061128c6120b1565b565b6112a98383836040518060200160405280600081525061172d565b505050565b6112bf6112b9611b95565b82611cd4565b6112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590613bb3565b60405180910390fd5b611307816120bb565b50565b600d5481565b60105481565b6000611320610d72565b8210611361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135890613fc0565b60405180910390fd5b6009828154811061137557611374613fe0565b5b90600052602060002001549050919050565b60008061139383612209565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb9061405b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361147d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611474906140ed565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114cc611c56565b6114d66000612246565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115119061394e565b80601f016020809104026020016040519081016040528092919081815260200182805461153d9061394e565b801561158a5780601f1061155f5761010080835404028352916020019161158a565b820191906000526020600020905b81548152906001019060200180831161156d57829003601f168201915b5050505050905090565b600e5481565b6000600e60008154809291906115af9061413c565b91905055506000600e5490506115c9888888888888610f03565b60016013600088815260200190815260200160002060006101000a81548160ff02191690831515021790555061160081888a61230c565b809150509695505050505050565b6000600e60008154809291906116239061413c565b91905055506000600e549050600061163b34856117b5565b9050600061164982866118f5565b905060003411801561165b5750803410155b61169a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169190614242565b60405180910390fd5b600081116116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d4906142ae565b60405180910390fd5b6116e883838761230c565b829350505050919050565b6117056116fe611b95565b838361235a565b5050565b60126020528060005260406000206000915090508060000154908060010154905082565b61173e611738611b95565b83611cd4565b61177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490613bb3565b60405180910390fd5b611789848484846124c6565b50505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60004282116117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f090614340565b60405180910390fd5b600042836118079190614360565b905060006103e8600d548361181c9190614394565b6118269190614405565b856118319190614405565b9050809250505092915050565b606060006040518061048001604052806104568152602001614e926104569139905060006118ca826118856012600088815260200190815260200160002060010154612522565b6118a46012600089815260200190815260200160002060000154612522565b6040516020016118b693929190614703565b6040516020818303038152906040526125f0565b9050806040516020016118dd91906147ac565b60405160208183030381529060405292505050919050565b6000428211611939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193090614340565b60405180910390fd5b6000831161197c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197390614840565b60405180910390fd5b6000428361198a9190614360565b905060006103e8600d5483876119a09190614394565b6119aa9190614394565b6119b49190614405565b9050809250505092915050565b600042601260008481526020019081526020016000206001015411159050919050565b6119ec611c56565b80600d819055507f33e576b8e54523be9c9684e33c7144d859acb615dddc3874462fc0cc73f1ebe381604051611a229190613464565b60405180910390a150565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ac9611c56565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2f906148d2565b60405180910390fd5b611b4181612246565b50565b600f5481565b611b5381612753565b611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b899061405b565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c1083611387565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611c5e611b95565b73ffffffffffffffffffffffffffffffffffffffff16611c7c6114d8565b73ffffffffffffffffffffffffffffffffffffffff1614611cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc99061493e565b60405180910390fd5b565b600080611ce083611387565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d225750611d218185611a2d565b5b80611d6057508373ffffffffffffffffffffffffffffffffffffffff16611d4884610bcc565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d8982611387565b73ffffffffffffffffffffffffffffffffffffffff1614611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd6906149d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590614a62565b60405180910390fd5b611e5b8383836001612794565b8273ffffffffffffffffffffffffffffffffffffffff16611e7b82611387565b73ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec8906149d0565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461205d83838360016127a6565b505050565b6002600b54036120a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209e90614ace565b60405180910390fd5b6002600b81905550565b6001600b81905550565b60006120c682611387565b90506120d6816000846001612794565b6120df82611387565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122058160008460016127a6565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61231633846127ac565b604051806040016040528083815260200182815250601260008581526020019081526020016000206000820151816000015560208201518160010155905050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf90614b3a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124b9919061325d565b60405180910390a3505050565b6124d1848484611d69565b6124dd848484846127ca565b61251c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251390614bcc565b60405180910390fd5b50505050565b60606000600161253184612951565b01905060008167ffffffffffffffff8111156125505761254f6136f1565b5b6040519080825280601f01601f1916602001820160405280156125825781602001600182028036833780820191505090505b509050600082602001820190505b6001156125e5578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816125d9576125d86143d6565b5b04945060008503612590575b819350505050919050565b606060008251036126125760405180602001604052806000815250905061274e565b60006040518060600160405280604081526020016152e860409139905060006003600285516126419190614bec565b61264b9190614405565b60046126579190614394565b67ffffffffffffffff8111156126705761266f6136f1565b5b6040519080825280601f01601f1916602001820160405280156126a25781602001600182028036833780820191505090505b509050600182016020820185865187015b8082101561270e576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453600184019350506126b3565b505060038651066001811461272a576002811461273d57612745565b603d6001830353603d6002830353612745565b603d60018303535b50505080925050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff1661277583612209565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6127a084848484612aa4565b50505050565b50505050565b6127c6828260405180602001604052806000815250612c02565b5050565b60006127eb8473ffffffffffffffffffffffffffffffffffffffff16612c5d565b15612944578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612814611b95565b8786866040518563ffffffff1660e01b81526004016128369493929190614c6a565b6020604051808303816000875af192505050801561287257506040513d601f19601f8201168201806040525081019061286f9190614ccb565b60015b6128f4573d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5060008151036128ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e390614bcc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612949565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106129af577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816129a5576129a46143d6565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106129ec576d04ee2d6d415b85acef810000000083816129e2576129e16143d6565b5b0492506020810190505b662386f26fc100008310612a1b57662386f26fc100008381612a1157612a106143d6565b5b0492506010810190505b6305f5e1008310612a44576305f5e1008381612a3a57612a396143d6565b5b0492506008810190505b6127108310612a69576127108381612a5f57612a5e6143d6565b5b0492506004810190505b60648310612a8c5760648381612a8257612a816143d6565b5b0492506002810190505b600a8310612a9b576001810190505b80915050919050565b612ab084848484612c80565b6001811115612af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aeb90614d6a565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612b3b57612b3681612c86565b612b7a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612b7957612b788582612ccf565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612bbc57612bb781612e3c565b612bfb565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612bfa57612bf98482612f0d565b5b5b5050505050565b612c0c8383612f8c565b612c1960008484846127ca565b612c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4f90614bcc565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b50505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cdc8461140d565b612ce69190614360565b9050600060086000848152602001908152602001600020549050818114612dcb576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612e509190614360565b90506000600a6000848152602001908152602001600020549050600060098381548110612e8057612e7f613fe0565b5b906000526020600020015490508060098381548110612ea257612ea1613fe0565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612ef157612ef0614d8a565b5b6001900381819060005260206000200160009055905550505050565b6000612f188361140d565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff290614e05565b60405180910390fd5b61300481612753565b15613044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303b90614e71565b60405180910390fd5b613052600083836001612794565b61305b81612753565b1561309b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309290614e71565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131a56000838360016127a6565b5050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131f2816131bd565b81146131fd57600080fd5b50565b60008135905061320f816131e9565b92915050565b60006020828403121561322b5761322a6131b3565b5b600061323984828501613200565b91505092915050565b60008115159050919050565b61325781613242565b82525050565b6000602082019050613272600083018461324e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132b2578082015181840152602081019050613297565b60008484015250505050565b6000601f19601f8301169050919050565b60006132da82613278565b6132e48185613283565b93506132f4818560208601613294565b6132fd816132be565b840191505092915050565b6000602082019050818103600083015261332281846132cf565b905092915050565b6000819050919050565b61333d8161332a565b811461334857600080fd5b50565b60008135905061335a81613334565b92915050565b600060208284031215613376576133756131b3565b5b60006133848482850161334b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133b88261338d565b9050919050565b6133c8816133ad565b82525050565b60006020820190506133e360008301846133bf565b92915050565b6133f2816133ad565b81146133fd57600080fd5b50565b60008135905061340f816133e9565b92915050565b6000806040838503121561342c5761342b6131b3565b5b600061343a85828601613400565b925050602061344b8582860161334b565b9150509250929050565b61345e8161332a565b82525050565b60006020820190506134796000830184613455565b92915050565b6000819050919050565b6134928161347f565b811461349d57600080fd5b50565b6000813590506134af81613489565b92915050565b6000602082840312156134cb576134ca6131b3565b5b60006134d9848285016134a0565b91505092915050565b6134eb8161347f565b82525050565b600060208201905061350660008301846134e2565b92915050565b600080600060608486031215613525576135246131b3565b5b600061353386828701613400565b935050602061354486828701613400565b92505060406135558682870161334b565b9150509250925092565b600060ff82169050919050565b6135758161355f565b811461358057600080fd5b50565b6000813590506135928161356c565b92915050565b60008060008060008060c087890312156135b5576135b46131b3565b5b60006135c389828a0161334b565b96505060206135d489828a0161334b565b95505060406135e589828a016134a0565b94505060606135f689828a01613583565b935050608061360789828a016134a0565b92505060a061361889828a016134a0565b9150509295509295509295565b60006020828403121561363b5761363a6131b3565b5b600061364984828501613400565b91505092915050565b61365b81613242565b811461366657600080fd5b50565b60008135905061367881613652565b92915050565b60008060408385031215613695576136946131b3565b5b60006136a385828601613400565b92505060206136b485828601613669565b9150509250929050565b60006040820190506136d36000830185613455565b6136e06020830184613455565b9392505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613729826132be565b810181811067ffffffffffffffff82111715613748576137476136f1565b5b80604052505050565b600061375b6131a9565b90506137678282613720565b919050565b600067ffffffffffffffff821115613787576137866136f1565b5b613790826132be565b9050602081019050919050565b82818337600083830152505050565b60006137bf6137ba8461376c565b613751565b9050828152602081018484840111156137db576137da6136ec565b5b6137e684828561379d565b509392505050565b600082601f830112613803576138026136e7565b5b81356138138482602086016137ac565b91505092915050565b60008060008060808587031215613836576138356131b3565b5b600061384487828801613400565b945050602061385587828801613400565b93505060406138668782880161334b565b925050606085013567ffffffffffffffff811115613887576138866131b8565b5b613893878288016137ee565b91505092959194509250565b600080604083850312156138b6576138b56131b3565b5b60006138c48582860161334b565b92505060206138d58582860161334b565b9150509250929050565b600080604083850312156138f6576138f56131b3565b5b600061390485828601613400565b925050602061391585828601613400565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061396657607f821691505b6020821081036139795761397861391f565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006139db602183613283565b91506139e68261397f565b604082019050919050565b60006020820190508181036000830152613a0a816139ce565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613a6d603d83613283565b9150613a7882613a11565b604082019050919050565b60006020820190508181036000830152613a9c81613a60565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613ae4601c83613aa3565b9150613aef82613aae565b601c82019050919050565b6000819050919050565b613b15613b108261347f565b613afa565b82525050565b6000613b2682613ad7565b9150613b328284613b04565b60208201915081905092915050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613b9d602d83613283565b9150613ba882613b41565b604082019050919050565b60006020820190508181036000830152613bcc81613b90565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613c2f602b83613283565b9150613c3a82613bd3565b604082019050919050565b60006020820190508181036000830152613c5e81613c22565b9050919050565b6000819050919050565b613c80613c7b8261332a565b613c65565b82525050565b6000613c928285613c6f565b602082019150613ca28284613c6f565b6020820191508190509392505050565b7f546865206d736748617368206973206e6f7420612068617368206f662074686560008201527f20657870697265734174202b2072657175657374735065724b696c6f7365636f60208201527f6e642e20204578706c61696e20796f757273656c662100000000000000000000604082015250565b6000613d34605683613283565b9150613d3f82613cb2565b606082019050919050565b60006020820190508181036000830152613d6381613d27565b9050919050565b613d738161355f565b82525050565b6000608082019050613d8e60008301876134e2565b613d9b6020830186613d6a565b613da860408301856134e2565b613db560608301846134e2565b95945050505050565b7f5468697320667265654d696e7420776173206e6f74207369676e65642062792060008201527f667265654d696e745369676e65722e2020486f7720656d626172617373696e6760208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b6000613e40604183613283565b9150613e4b82613dbe565b606082019050919050565b60006020820190508181036000830152613e6f81613e33565b9050919050565b7f5468697320667265654d696e742068617320616c7265616479206265656e207260008201527f656465656d65642e2020486f7720656d626172617373696e672e000000000000602082015250565b6000613ed2603a83613283565b9150613edd82613e76565b604082019050919050565b60006020820190508181036000830152613f0181613ec5565b9050919050565b600081905092915050565b50565b6000613f23600083613f08565b9150613f2e82613f13565b600082019050919050565b6000613f4482613f16565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613faa602c83613283565b9150613fb582613f4e565b604082019050919050565b60006020820190508181036000830152613fd981613f9d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000614045601883613283565b91506140508261400f565b602082019050919050565b6000602082019050818103600083015261407481614038565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006140d7602983613283565b91506140e28261407b565b604082019050919050565b60006020820190508181036000830152614106816140ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141478261332a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141795761417861410d565b5b600182019050919050565b7f596f75206d7573742073656e642074686520636f7374206f662074686973207260008201527f617465206c696d697420696e6372656173652e2020546f20636865636b20746860208201527f6520636f73742c20757365207468652063616c63756c617465436f737420667560408201527f6e6374696f6e2e00000000000000000000000000000000000000000000000000606082015250565b600061422c606783613283565b915061423782614184565b608082019050919050565b6000602082019050818103600083015261425b8161421f565b9050919050565b7f54686520636f7374206d7573742062652067726561746572207468616e203000600082015250565b6000614298601f83613283565b91506142a382614262565b602082019050919050565b600060208201905081810360008301526142c78161428b565b9050919050565b7f54686520657870697265734174206d75737420626520696e207468652066757460008201527f7572650000000000000000000000000000000000000000000000000000000000602082015250565b600061432a602383613283565b9150614335826142ce565b604082019050919050565b600060208201905081810360008301526143598161431d565b9050919050565b600061436b8261332a565b91506143768361332a565b925082820390508181111561438e5761438d61410d565b5b92915050565b600061439f8261332a565b91506143aa8361332a565b92508282026143b88161332a565b915082820484148315176143cf576143ce61410d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144108261332a565b915061441b8361332a565b92508261442b5761442a6143d6565b5b828204905092915050565b7f7b226e616d65223a20224c69742050726f746f636f6c2052617465204c696d6960008201527f7420496e637265617365222c20226465736372697074696f6e223a202254686960208201527f73204e465420656e7469746c65732074686520686f6c64657220746f2061207260408201527f617465206c696d697420696e637265617365206f6e20746865204c697420507260608201527f6f746f636f6c204e6574776f726b222c2022696d6167655f64617461223a2022608082015250565b600061450460a083613aa3565b915061450f82614436565b60a082019050919050565b600081519050919050565b60006145308261451a565b61453a8185613f08565b935061454a818560208601613294565b80840191505092915050565b7f222c2261747472696275746573223a205b7b22646973706c61795f747970652260008201527f3a202264617465222c202274726169745f74797065223a20224578706972617460208201527f696f6e2044617465222c202276616c7565223a20000000000000000000000000604082015250565b60006145d8605483613aa3565b91506145e382614556565b605482019050919050565b60006145f982613278565b6146038185613aa3565b9350614613818560208601613294565b80840191505092915050565b7f7d2c207b22646973706c61795f74797065223a20226e756d626572222c20227460008201527f726169745f74797065223a20224d696c6c69726571756573747320506572205360208201527f65636f6e64222c202276616c7565223a20000000000000000000000000000000604082015250565b60006146a1605183613aa3565b91506146ac8261461f565b605182019050919050565b7f7d5d7d0000000000000000000000000000000000000000000000000000000000600082015250565b60006146ed600383613aa3565b91506146f8826146b7565b600382019050919050565b600061470e826144f7565b915061471a8286614525565b9150614725826145cb565b915061473182856145ee565b915061473c82614694565b915061474882846145ee565b9150614753826146e0565b9150819050949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614796601d83613aa3565b91506147a182614760565b601d82019050919050565b60006147b782614789565b91506147c382846145ee565b915081905092915050565b7f5468652072657175657374735065724b696c6f7365636f6e64206d757374206260008201527f652067726561746572207468616e203000000000000000000000000000000000602082015250565b600061482a603083613283565b9150614835826147ce565b604082019050919050565b600060208201905081810360008301526148598161481d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148bc602683613283565b91506148c782614860565b604082019050919050565b600060208201905081810360008301526148eb816148af565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614928602083613283565b9150614933826148f2565b602082019050919050565b600060208201905081810360008301526149578161491b565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006149ba602583613283565b91506149c58261495e565b604082019050919050565b600060208201905081810360008301526149e9816149ad565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a4c602483613283565b9150614a57826149f0565b604082019050919050565b60006020820190508181036000830152614a7b81614a3f565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614ab8601f83613283565b9150614ac382614a82565b602082019050919050565b60006020820190508181036000830152614ae781614aab565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614b24601983613283565b9150614b2f82614aee565b602082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614bb6603283613283565b9150614bc182614b5a565b604082019050919050565b60006020820190508181036000830152614be581614ba9565b9050919050565b6000614bf78261332a565b9150614c028361332a565b9250828201905080821115614c1a57614c1961410d565b5b92915050565b600082825260208201905092915050565b6000614c3c8261451a565b614c468185614c20565b9350614c56818560208601613294565b614c5f816132be565b840191505092915050565b6000608082019050614c7f60008301876133bf565b614c8c60208301866133bf565b614c996040830185613455565b8181036060830152614cab8184614c31565b905095945050505050565b600081519050614cc5816131e9565b92915050565b600060208284031215614ce157614ce06131b3565b5b6000614cef84828501614cb6565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000614d54603583613283565b9150614d5f82614cf8565b604082019050919050565b60006020820190508181036000830152614d8381614d47565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614def602083613283565b9150614dfa82614db9565b602082019050919050565b60006020820190508181036000830152614e1e81614de2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614e5b601c83613283565b9150614e6682614e25565b602082019050919050565b60006020820190508181036000830152614e8a81614e4e565b905091905056fe3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272077696474683d273130383027206865696768743d2731303830272066696c6c3d276e6f6e652720786d6c6e733a763d2768747470733a2f2f76656374612e696f2f6e616e6f273e3c7061746820643d274d3336332e303736203339322e323237732d2e3937372031382e3532342d33362e3837342037382e393437632d34312e3537362037302e3031382d34352e343831203135312e3937382d332e303137203232302e342038392e353231203134342e323435203333322e343831203134312e3532203432322e3535362e3038392033342e3833322d35342e3730372034342e3831362d3131372e3437392033322e3932342d3138312e323438203020302d32382e3831392d3133332e3134342d3132372e3233372d3231372e30393920312e35353320312e33303820352e3336392031392e31323220362e3130312032362e37323220322e3234312032332e3335342e3034352034372e3833382d372e3738372037302e3036322d352e3734362031362e33332d31332e3731312033302e3436372d32372e3137382034312e33363820302d332e3831312d2e3935342d31302e3633352d2e3937362d31322e3931382d2e3634342d34362e3530382d31382e3635392d38392e3538322d34382e3031312d3132352e3734332d32352e3634372d33312e3535322d36302e3831322d35332e3038392d39372e38342d36382e3933322e39333120332e31393120322e3636322031362e34313920322e3930362031392e30333320312e3930382032312e39353820322e3236332035322e3731332d2e3632312037342e363439732d372e3833322033332e3837382d31342e3535342035342e343431632d31302e3138342033312e3137352d32342e30352035342e3238352d34312e3632312038322e3030342d332e323420352e3039362d31322e3931332031392e3037382d31382e3038322032362e313436203020302d382e3839372d35362e3139312d34302e3636372d38372e393231682d2e3032327a272066696c6c3d2723303030272f3e3c7061746820643d274d3536322e352032372e32386c3431302e323739203233362e3837346331332e39323320382e3033392032322e352032322e3839352032322e352033382e393731763437332e373563302031362e3037362d382e3537372033302e3933322d32322e352033382e3937314c3536322e3520313035322e3732632d31332e39323320382e30342d33312e30373720382e30342d343520304c3130372e323231203831352e383436632d31332e3932332d382e3033392d32322e352d32322e3839352d32322e352d33382e393731762d3437332e37356134352034352030203020312032322e352d33382e3937314c3531372e352032372e323861343520343520302030203120343520307a27207374726f6b653d272330303027207374726f6b652d77696474683d2732342e3735272f3e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212208206962addcc8798e08fd602c7eedb60f30030d558ad1e05a0c2dfe9d8932ad264736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/ReleaseRegister.json b/contracts/cayenne/ReleaseRegister.json deleted file mode 100644 index d8738a5..0000000 --- a/contracts/cayenne/ReleaseRegister.json +++ /dev/null @@ -1,1018 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ReleaseRegister", - "sourceName": "contracts/lit-core/ReleaseRegister.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "enum ReleaseRegister.Env", - "name": "env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ActivatorRoleRequired", - "type": "error" - }, - { - "inputs": [], - "name": "AdminRoleRequired", - "type": "error" - }, - { - "inputs": [], - "name": "BurnerRoleRequired", - "type": "error" - }, - { - "inputs": [], - "name": "CreatorRoleRequired", - "type": "error" - }, - { - "inputs": [], - "name": "DeactivatorRoleRequired", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidEnv", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidStatus", - "type": "error" - }, - { - "inputs": [], - "name": "ReleaseNotFound", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "pubKey", - "type": "bytes" - } - ], - "name": "AllowedAdminSigningPublicKeyAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "pubKey", - "type": "bytes" - } - ], - "name": "AllowedAdminSigningPublicKeyRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "digest", - "type": "bytes" - } - ], - "name": "AllowedAuthorKeyDigestAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "digest", - "type": "bytes" - } - ], - "name": "AllowedAuthorKeyDigestRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ReleaseRegister.Env", - "name": "env", - "type": "uint8" - } - ], - "name": "AllowedEnvAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ReleaseRegister.Env", - "name": "env", - "type": "uint8" - } - ], - "name": "AllowedEnvRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "subnet", - "type": "address" - } - ], - "name": "AllowedSubnetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "subnet", - "type": "address" - } - ], - "name": "AllowedSubnetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "domain", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "authorKeyDigest", - "type": "bytes" - } - ], - "name": "InitCreator", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "releaseId", - "type": "bytes32" - } - ], - "name": "ReleaseBurned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "releaseId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "enum ReleaseRegister.Status", - "name": "status", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "enum ReleaseRegister.Env", - "name": "env", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "enum ReleaseRegister.Type", - "name": "typ", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "kind", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "date", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum ReleaseRegister.Platform", - "name": "platform", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "options", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id_key_digest", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "public_key", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "cid", - "type": "bytes" - } - ], - "name": "ReleaseCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "releaseId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "enum ReleaseRegister.Status", - "name": "status", - "type": "uint8" - } - ], - "name": "ReleaseStatusChange", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [], - "name": "ACTIVATOR_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BURNER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "CREATOR_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEACTIVATOR_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RELEASE_OPTION_RO", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RELEASE_OPTION_SSH", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RELEASE_OPTION_USERS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubKey", - "type": "bytes" - } - ], - "name": "addAllowedAdminSigningPublicKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum ReleaseRegister.Env", - "name": "env", - "type": "uint8" - } - ], - "name": "addAllowedEnv", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "subnet", - "type": "address" - } - ], - "name": "addAllowedSubnet", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "releaseId", - "type": "bytes32" - } - ], - "name": "burnRelease", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "releaseId", - "type": "bytes32" - }, - { - "internalType": "enum ReleaseRegister.Status", - "name": "status", - "type": "uint8" - }, - { - "internalType": "enum ReleaseRegister.Env", - "name": "env", - "type": "uint8" - }, - { - "internalType": "enum ReleaseRegister.Type", - "name": "typ", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "kind", - "type": "bytes" - }, - { - "internalType": "enum ReleaseRegister.Platform", - "name": "platform", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "options", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id_key_digest", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "public_key", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "cid", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "date", - "type": "uint256" - } - ], - "name": "createRelease", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum ReleaseRegister.Env", - "name": "env", - "type": "uint8" - }, - { - "internalType": "enum ReleaseRegister.Type", - "name": "typ", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "kind", - "type": "bytes" - }, - { - "internalType": "enum ReleaseRegister.Platform", - "name": "platform", - "type": "uint8" - } - ], - "name": "getActiveRelease", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getActiveReleases", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCreatorDomain", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "releaseId", - "type": "bytes32" - } - ], - "name": "getRelease", - "outputs": [ - { - "components": [ - { - "internalType": "enum ReleaseRegister.Status", - "name": "status", - "type": "uint8" - }, - { - "internalType": "enum ReleaseRegister.Env", - "name": "env", - "type": "uint8" - }, - { - "internalType": "enum ReleaseRegister.Type", - "name": "typ", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "kind", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "date", - "type": "uint256" - }, - { - "internalType": "enum ReleaseRegister.Platform", - "name": "platform", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "options", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id_key_digest", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "public_key", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "cid", - "type": "bytes" - } - ], - "internalType": "struct ReleaseRegister.Release", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubKey", - "type": "bytes" - } - ], - "name": "hasAllowedAdminSigningPublicKey", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "digest", - "type": "bytes" - } - ], - "name": "hasAllowedAuthorKeyDigest", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum ReleaseRegister.Env", - "name": "env", - "type": "uint8" - } - ], - "name": "hasAllowedEnv", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "subnet", - "type": "address" - } - ], - "name": "hasAllowedSubnet", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "hasCreatorInit", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum ReleaseRegister.Env", - "name": "env", - "type": "uint8" - }, - { - "internalType": "address", - "name": "subnetId", - "type": "address" - }, - { - "internalType": "bytes", - "name": "domain", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "authorKeyDigest", - "type": "bytes" - } - ], - "name": "initCreator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubKey", - "type": "bytes" - } - ], - "name": "removeAllowedAdminSigningPublicKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum ReleaseRegister.Env", - "name": "env", - "type": "uint8" - } - ], - "name": "removeAllowedEnv", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "subnet", - "type": "address" - } - ], - "name": "removeAllowedSubnet", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "releaseId", - "type": "bytes32" - }, - { - "internalType": "enum ReleaseRegister.Status", - "name": "status", - "type": "uint8" - } - ], - "name": "setReleaseStatus", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162005274380380620052748339818101604052810190620000379190620004a1565b620000697fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336200027960201b60201c565b6200009b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42806200028f60201b60201c565b620000ed7f3c2519c4487d47714872f92cf90a50c25f5deaec2789dc2a497b1272df611db67fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec426200028f60201b60201c565b6200013f7fce1f15692823e8a9d77ca8c1b7a2cc145ffd008750ee9d3f8604f9c52eeea73c7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec426200028f60201b60201c565b620001917f50a3dccc47363872dd46de62b59273989edb72901adea0b961d5232bf9a1febf7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec426200028f60201b60201c565b620001e37f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c87fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec426200028f60201b60201c565b600160036000836002811115620001ff57620001fe620004d3565b5b6002811115620002145762000213620004d3565b5b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece8015816040516200026a919062000553565b60405180910390a15062000570565b6200028b8282620002f260201b60201c565b5050565b6000620002a283620003e360201b60201c565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b6200030482826200040260201b60201c565b620003df57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003846200046c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000806000838152602001908152602001600020600101549050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600381106200048757600080fd5b50565b6000815190506200049b8162000479565b92915050565b600060208284031215620004ba57620004b962000474565b5b6000620004ca848285016200048a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110620005165762000515620004d3565b5b50565b6000819050620005298262000502565b919050565b60006200053b8262000519565b9050919050565b6200054d816200052e565b82525050565b60006020820190506200056a600083018462000542565b92915050565b614cf480620005806000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806370e65a451161011a578063a0908300116100ad578063d547741f1161007c578063d547741f146105ef578063d6bc626d1461060b578063db2d303b1461063b578063e1c0af0814610657578063f2dc99161461067357610206565b8063a090830014610567578063a217fddf14610597578063ad769394146105b5578063bc7ca317146105d357610206565b80638aeda25a116100e95780638aeda25a146104df5780638deb3893146104fd57806391d14854146105195780639bb4e2f71461054957610206565b806370e65a451461045957806374bc81391461047557806375b238fc146104915780637f698e92146104af57610206565b80632609e5861161019d5780632f2ff15d1161016c5780632f2ff15d146103c757806336568abe146103e35780633acd1ea3146103ff5780633dc6c8581461041d578063458be7dc1461043b57610206565b80632609e5861461033f578063277dceaf1461035b578063282c51f3146103795780632ae79b6d1461039757610206565b80630e1e59dd116101d95780630e1e59dd146102a757806319724065146102c35780631bd564dc146102df578063248a9ca31461030f57610206565b806301ffc9a71461020b578063023e92881461023b57806308740a3b146102595780630e092b1814610277575b600080fd5b610225600480360381019061022091906134a1565b61068f565b60405161023291906134e9565b60405180910390f35b610243610709565b60405161025091906135cc565b60405180910390f35b61026161071a565b60405161026e91906135fd565b60405180910390f35b610291600480360381019061028c919061375e565b61073e565b60405161029e91906134e9565b60405180910390f35b6102c160048036038101906102bc91906137f8565b610773565b005b6102dd60048036038101906102d891906138dd565b610e09565b005b6102f960048036038101906102f49190613a41565b6114ab565b60405161030691906134e9565b60405180910390f35b61032960048036038101906103249190613a6e565b6114f9565b60405161033691906135fd565b60405180910390f35b61035960048036038101906103549190613a6e565b611518565b005b6103636116fe565b6040516103709190613aaa565b60405180910390f35b610381611703565b60405161038e91906135fd565b60405180910390f35b6103b160048036038101906103ac9190613ac5565b611727565b6040516103be91906135fd565b60405180910390f35b6103e160048036038101906103dc9190613ba6565b611778565b005b6103fd60048036038101906103f89190613ba6565b611799565b005b61040761181c565b6040516104149190613aaa565b60405180910390f35b610425611821565b60405161043291906134e9565b60405180910390f35b610443611838565b60405161045091906135fd565b60405180910390f35b610473600480360381019061046e919061375e565b61185c565b005b61048f600480360381019061048a9190613a41565b61192d565b005b610499611a17565b6040516104a691906135fd565b60405180910390f35b6104c960048036038101906104c49190613a6e565b611a3b565b6040516104d69190613eb2565b60405180910390f35b6104e7611db1565b6040516104f491906135fd565b60405180910390f35b61051760048036038101906105129190613a41565b611dd5565b005b610533600480360381019061052e9190613ba6565b611eb6565b60405161054091906134e9565b60405180910390f35b610551611f20565b60405161055e9190613f1e565b60405180910390f35b610581600480360381019061057c9190613f40565b611fb2565b60405161058e91906134e9565b60405180910390f35b61059f612008565b6040516105ac91906135fd565b60405180910390f35b6105bd61200f565b6040516105ca9190613aaa565b60405180910390f35b6105ed60048036038101906105e89190613f6d565b612014565b005b61060960048036038101906106049190613ba6565b61230c565b005b6106256004803603810190610620919061375e565b61232d565b60405161063291906134e9565b60405180910390f35b61065560048036038101906106509190613f40565b612362565b005b610671600480360381019061066c919061375e565b61244b565b005b61068d60048036038101906106889190613f40565b612513565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610702575061070182612605565b5b9050919050565b6060610715600961266f565b905090565b7fce1f15692823e8a9d77ca8c1b7a2cc145ffd008750ee9d3f8604f9c52eeea73c81565b60006005826040516107509190614048565b908152602001604051809103902060009054906101000a900460ff169050919050565b6002600381111561078757610786613be6565b5b81600381111561079a57610799613be6565b5b03610804576107c97fce1f15692823e8a9d77ca8c1b7a2cc145ffd008750ee9d3f8604f9c52eeea73c33611eb6565b6107ff576040517f5c21123e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c7565b60038081111561081757610816613be6565b5b81600381111561082a57610829613be6565b5b03610894576108597f50a3dccc47363872dd46de62b59273989edb72901adea0b961d5232bf9a1febf33611eb6565b61088f576040517f093efaf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c6565b6040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600060038111156108db576108da613be6565b5b6007600084815260200190815260200160002060000160009054906101000a900460ff16600381111561091157610910613be6565b5b03610948576040517f28663ff800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060076000848152602001908152602001600020604051806101400160405290816000820160009054906101000a900460ff16600381111561098e5761098d613be6565b5b60038111156109a05761099f613be6565b5b81526020016000820160019054906101000a900460ff1660028111156109c9576109c8613be6565b5b60028111156109db576109da613be6565b5b81526020016000820160029054906101000a900460ff166003811115610a0457610a03613be6565b5b6003811115610a1657610a15613be6565b5b8152602001600182018054610a2a9061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a569061408e565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b50505050508152602001600282015481526020016003820160009054906101000a900460ff166000811115610adb57610ada613be6565b5b6000811115610aed57610aec613be6565b5b815260200160048201548152602001600582018054610b0b9061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b379061408e565b8015610b845780601f10610b5957610100808354040283529160200191610b84565b820191906000526020600020905b815481529060010190602001808311610b6757829003601f168201915b50505050508152602001600682018054610b9d9061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc99061408e565b8015610c165780601f10610beb57610100808354040283529160200191610c16565b820191906000526020600020905b815481529060010190602001808311610bf957829003601f168201915b50505050508152602001600782018054610c2f9061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5b9061408e565b8015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b820191906000526020600020905b815481529060010190602001808311610c8b57829003601f168201915b505050505081525050905060026003811115610cc757610cc6613be6565b5b826003811115610cda57610cd9613be6565b5b14610d3d5782610cfc8260200151836040015184606001518560a00151611727565b03610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3390614142565b60405180910390fd5b5b816007600085815260200190815260200160002060000160006101000a81548160ff02191690836003811115610d7657610d75613be6565b5b02179055507f6ae24fa3345cd7488c35e11c5278059a0a545fd008c33d2d396d917b69bed5bf8383604051610dac929190614171565b60405180910390a160026003811115610dc857610dc7613be6565b5b826003811115610ddb57610dda613be6565b5b03610dee57610de983612690565b610e04565b610e02836009612bb590919063ffffffff16565b505b505050565b610e337f3c2519c4487d47714872f92cf90a50c25f5deaec2789dc2a497b1272df611db633611eb6565b610e69576040517f80510fe100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115610e7d57610e7c613be6565b5b8a6003811115610e9057610e8f613be6565b5b03610efa57610ebf7fce1f15692823e8a9d77ca8c1b7a2cc145ffd008750ee9d3f8604f9c52eeea73c33611eb6565b610ef5576040517f5c21123e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f8b565b60016003811115610f0e57610f0d613be6565b5b8a6003811115610f2157610f20613be6565b5b14158015610f535750600380811115610f3d57610f3c613be6565b5b8a6003811115610f5057610f4f613be6565b5b14155b15610f8a576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b60011515600360008b6002811115610fa657610fa5613be6565b5b6002811115610fb857610fb7613be6565b5b815260200190815260200160002060009054906101000a900460ff1615151461100d576040517fc8e7a97c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60011515600460006110208e6004612bcc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a190614232565b60405180910390fd5b600060028111156110be576110bd613be6565b5b8960028111156110d1576110d0613be6565b5b141580156111045750600160028111156110ee576110ed613be6565b5b89600281111561110157611100613be6565b5b14155b15611194576000600381111561111d5761111c613be6565b5b600760008d815260200190815260200160002060000160009054906101000a900460ff16600381111561115357611152613be6565b5b14611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a906142c4565b60405180910390fd5b5b6002808111156111a7576111a6613be6565b5b8960028111156111ba576111b9613be6565b5b036112065760006002861603611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc90614356565b60405180910390fd5b5b60008103611212574290505b6040518061014001604052808b600381111561123157611230613be6565b5b81526020018a600281111561124957611248613be6565b5b815260200189600381111561126157611260613be6565b5b815260200188815260200182815260200187600081111561128557611284613be6565b5b815260200186815260200185815260200184815260200183815250600760008d815260200190815260200160002060008201518160000160006101000a81548160ff021916908360038111156112de576112dd613be6565b5b021790555060208201518160000160016101000a81548160ff0219169083600281111561130e5761130d613be6565b5b021790555060408201518160000160026101000a81548160ff0219169083600381111561133e5761133d613be6565b5b021790555060608201518160010190816113589190614522565b506080820151816002015560a08201518160030160006101000a81548160ff0219169083600081111561138e5761138d613be6565b5b021790555060c0820151816004015560e08201518160050190816113b29190614522565b506101008201518160060190816113c99190614522565b506101208201518160070190816113e09190614522565b509050507f90a862cc16ebcb9b549c932013f77c422df117e24d48d7d26a7d90fbc43c3c8f8b8b8b8b8b868c8c8c8c8c6040516114279b9a99989796959493929190614621565b60405180910390a16002600381111561144357611442613be6565b5b8a600381111561145657611455613be6565b5b0361149e576114648b612690565b7f6ae24fa3345cd7488c35e11c5278059a0a545fd008c33d2d396d917b69bed5bf8b8b604051611495929190614171565b60405180910390a15b5050505050505050505050565b6000600360008360028111156114c4576114c3613be6565b5b60028111156114d6576114d5613be6565b5b815260200190815260200160002060009054906101000a900460ff169050919050565b6000806000838152602001908152602001600020600101549050919050565b6115427f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c833611eb6565b611578576040517ff4ecad6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600381111561158c5761158b613be6565b5b6007600083815260200190815260200160002060000160009054906101000a900460ff1660038111156115c2576115c1613be6565b5b036115f9576040517f28663ff800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076000828152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549060ff02191690556000820160026101000a81549060ff0219169055600182016000611659919061333e565b60028201600090556003820160006101000a81549060ff0219169055600482016000905560058201600061168d919061333e565b60068201600061169d919061333e565b6007820160006116ad919061333e565b50506116c3816009612bb590919063ffffffff16565b507fe4a7f7b48251ad70e63f800758a445b00386e2fa98d5afce96a546e8fce2114e816040516116f391906135fd565b60405180910390a150565b600481565b7f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b60008085858585604051602001611741949392919061474c565b6040516020818303038152906040528051906020012090506008600082815260200190815260200160002054915050949350505050565b611781826114f9565b61178a81612c59565b6117948383612c6d565b505050565b6117a1612d4d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180590614808565b60405180910390fd5b6118188282612d55565b5050565b600881565b6000600160009054906101000a900460ff16905090565b7f50a3dccc47363872dd46de62b59273989edb72901adea0b961d5232bf9a1febf81565b6118867fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611eb6565b6118bc576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016005826040516118ce9190614048565b908152602001604051809103902060006101000a81548160ff0219169083151502179055507fe7735e9f569fe61671662a8829db77de38ef614c77b1b136c958aff781df7c75816040516119229190613f1e565b60405180910390a150565b6119577fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611eb6565b61198d576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600360008360028111156119a6576119a5613be6565b5b60028111156119b8576119b7613be6565b5b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051611a0c9190614828565b60405180910390a150565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b611a4361337e565b60076000838152602001908152602001600020604051806101400160405290816000820160009054906101000a900460ff166003811115611a8757611a86613be6565b5b6003811115611a9957611a98613be6565b5b81526020016000820160019054906101000a900460ff166002811115611ac257611ac1613be6565b5b6002811115611ad457611ad3613be6565b5b81526020016000820160029054906101000a900460ff166003811115611afd57611afc613be6565b5b6003811115611b0f57611b0e613be6565b5b8152602001600182018054611b239061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4f9061408e565b8015611b9c5780601f10611b7157610100808354040283529160200191611b9c565b820191906000526020600020905b815481529060010190602001808311611b7f57829003601f168201915b50505050508152602001600282015481526020016003820160009054906101000a900460ff166000811115611bd457611bd3613be6565b5b6000811115611be657611be5613be6565b5b815260200160048201548152602001600582018054611c049061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054611c309061408e565b8015611c7d5780601f10611c5257610100808354040283529160200191611c7d565b820191906000526020600020905b815481529060010190602001808311611c6057829003601f168201915b50505050508152602001600682018054611c969061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc29061408e565b8015611d0f5780601f10611ce457610100808354040283529160200191611d0f565b820191906000526020600020905b815481529060010190602001808311611cf257829003601f168201915b50505050508152602001600782018054611d289061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d549061408e565b8015611da15780601f10611d7657610100808354040283529160200191611da1565b820191906000526020600020905b815481529060010190602001808311611d8457829003601f168201915b5050505050815250509050919050565b7f3c2519c4487d47714872f92cf90a50c25f5deaec2789dc2a497b1272df611db681565b611dff7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611eb6565b611e35576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036000826002811115611e4c57611e4b613be6565b5b6002811115611e5e57611e5d613be6565b5b815260200190815260200160002060006101000a81549060ff02191690557f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4781604051611eab9190614828565b60405180910390a150565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060028054611f2f9061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5b9061408e565b8015611fa85780601f10611f7d57610100808354040283529160200191611fa8565b820191906000526020600020905b815481529060010190602001808311611f8b57829003601f168201915b5050505050905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000801b81565b600281565b61203e7f3c2519c4487d47714872f92cf90a50c25f5deaec2789dc2a497b1272df611db633611eb6565b612074576040517f80510fe100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600115156003600086600281111561208f5761208e613be6565b5b60028111156120a1576120a0613be6565b5b815260200190815260200160002060009054906101000a900460ff161515146120f6576040517fc8e7a97c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600281111561210a57612109613be6565b5b84600281111561211d5761211c613be6565b5b1415801561215057506001600281111561213a57612139613be6565b5b84600281111561214d5761214c613be6565b5b14155b156121a657600160009054906101000a900460ff16156121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219c906148b5565b60405180910390fd5b5b60018060006101000a81548160ff02191690831515021790555081600290816121cf9190614522565b506001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160068260405161223a9190614048565b908152602001604051809103902060006101000a81548160ff0219169083151502179055507f18f0396c6d01876d7610d96877b44f017ab4ca2265b13079b10e0be6b6af30d48160405161228e9190613f1e565b60405180910390a17f1a7b784416b53672844a12947a59696e835a6d8dffbb0c4630a4d04812bd6278836040516122c591906148e4565b60405180910390a17f5b590cceabbeb28cd16e41a811ba46df5bb82c98920d5e7ff77e4fa9db709b3382826040516122fe9291906148ff565b60405180910390a150505050565b612315826114f9565b61231e81612c59565b6123288383612d55565b505050565b600060068260405161233f9190614048565b908152602001604051809103902060009054906101000a900460ff169050919050565b61238c7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611eb6565b6123c2576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690557ff580a1ea01c0ed3ec5e4797c560ee7046c3591588c0feb814f5f2d4eca50272c8160405161244091906148e4565b60405180910390a150565b6124757fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611eb6565b6124ab576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005816040516124bb9190614048565b908152602001604051809103902060006101000a81549060ff02191690557ff13042255d0b58f7acc82c201a0cd4d834b0783dd7b3c29cca9b96840d633f74816040516125089190613f1e565b60405180910390a150565b61253d7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611eb6565b612573576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f1a7b784416b53672844a12947a59696e835a6d8dffbb0c4630a4d04812bd6278816040516125fa91906148e4565b60405180910390a150565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600061267f83600001612e36565b905060608190508092505050919050565b600060038111156126a4576126a3613be6565b5b6007600083815260200190815260200160002060000160009054906101000a900460ff1660038111156126da576126d9613be6565b5b03612711576040517f28663ff800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060076000838152602001908152602001600020604051806101400160405290816000820160009054906101000a900460ff16600381111561275757612756613be6565b5b600381111561276957612768613be6565b5b81526020016000820160019054906101000a900460ff16600281111561279257612791613be6565b5b60028111156127a4576127a3613be6565b5b81526020016000820160029054906101000a900460ff1660038111156127cd576127cc613be6565b5b60038111156127df576127de613be6565b5b81526020016001820180546127f39061408e565b80601f016020809104026020016040519081016040528092919081815260200182805461281f9061408e565b801561286c5780601f106128415761010080835404028352916020019161286c565b820191906000526020600020905b81548152906001019060200180831161284f57829003601f168201915b50505050508152602001600282015481526020016003820160009054906101000a900460ff1660008111156128a4576128a3613be6565b5b60008111156128b6576128b5613be6565b5b8152602001600482015481526020016005820180546128d49061408e565b80601f01602080910402602001604051908101604052809291908181526020018280546129009061408e565b801561294d5780601f106129225761010080835404028352916020019161294d565b820191906000526020600020905b81548152906001019060200180831161293057829003601f168201915b505050505081526020016006820180546129669061408e565b80601f01602080910402602001604051908101604052809291908181526020018280546129929061408e565b80156129df5780601f106129b4576101008083540402835291602001916129df565b820191906000526020600020905b8154815290600101906020018083116129c257829003601f168201915b505050505081526020016007820180546129f89061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054612a249061408e565b8015612a715780601f10612a4657610100808354040283529160200191612a71565b820191906000526020600020905b815481529060010190602001808311612a5457829003601f168201915b505050505081525050905060026003811115612a9057612a8f613be6565b5b81600001516003811115612aa757612aa6613be6565b5b14612ade576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008160200151826040015183606001518460a00151604051602001612b07949392919061474c565b6040516020818303038152906040528051906020012090506000600860008381526020019081526020016000205490506000801b8114612b8157600760008281526020019081526020016000206002015483608001511115612b7c578360086000848152602001908152602001600020819055505b612b9a565b8360086000848152602001908152602001600020819055505b612bae846009612e9290919063ffffffff16565b5050505050565b6000612bc48360000183612ea9565b905092915050565b60008060005b6014811015612c4b57600881612be89190614965565b60ff60f81b868387612bfa91906149a7565b60208110612c0b57612c0a6149db565b5b1a60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c821791508080612c4390614a0a565b915050612bd2565b508060601c91505092915050565b612c6a81612c65612d4d565b612fbd565b50565b612c778282611eb6565b612d4957600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612cee612d4d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b612d5f8282611eb6565b15612e3257600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612dd7612d4d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b606081600001805480602002602001604051908101604052809291908181526020018280548015612e8657602002820191906000526020600020905b815481526020019060010190808311612e72575b50505050509050919050565b6000612ea18360000183613042565b905092915050565b60008083600101600084815260200190815260200160002054905060008114612fb1576000600182612edb9190614a52565b9050600060018660000180549050612ef39190614a52565b9050818114612f62576000866000018281548110612f1457612f136149db565b5b9060005260206000200154905080876000018481548110612f3857612f376149db565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480612f7657612f75614a86565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612fb7565b60009150505b92915050565b612fc78282611eb6565b61303e57612fd4816130b2565b612fe28360001c60206130df565b604051602001612ff3929190614b94565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130359190614c07565b60405180910390fd5b5050565b600061304e838361331b565b6130a75782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506130ac565b600090505b92915050565b60606130d88273ffffffffffffffffffffffffffffffffffffffff16601460ff166130df565b9050919050565b6060600060028360026130f29190614965565b6130fc91906149a7565b67ffffffffffffffff81111561311557613114613633565b5b6040519080825280601f01601f1916602001820160405280156131475781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061317f5761317e6149db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106131e3576131e26149db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026132239190614965565b61322d91906149a7565b90505b60018111156132cd577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061326f5761326e6149db565b5b1a60f81b828281518110613286576132856149db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806132c690614c29565b9050613230565b5060008414613311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330890614c9e565b60405180910390fd5b8091505092915050565b600080836001016000848152602001908152602001600020541415905092915050565b50805461334a9061408e565b6000825580601f1061335c575061337b565b601f01602090049060005260206000209081019061337a9190613418565b5b50565b6040518061014001604052806000600381111561339e5761339d613be6565b5b8152602001600060028111156133b7576133b6613be6565b5b8152602001600060038111156133d0576133cf613be6565b5b815260200160608152602001600081526020016000808111156133f6576133f5613be6565b5b8152602001600081526020016060815260200160608152602001606081525090565b5b80821115613431576000816000905550600101613419565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61347e81613449565b811461348957600080fd5b50565b60008135905061349b81613475565b92915050565b6000602082840312156134b7576134b661343f565b5b60006134c58482850161348c565b91505092915050565b60008115159050919050565b6134e3816134ce565b82525050565b60006020820190506134fe60008301846134da565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61354381613530565b82525050565b6000613555838361353a565b60208301905092915050565b6000602082019050919050565b600061357982613504565b613583818561350f565b935061358e83613520565b8060005b838110156135bf5781516135a68882613549565b97506135b183613561565b925050600181019050613592565b5085935050505092915050565b600060208201905081810360008301526135e6818461356e565b905092915050565b6135f781613530565b82525050565b600060208201905061361260008301846135ee565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61366b82613622565b810181811067ffffffffffffffff8211171561368a57613689613633565b5b80604052505050565b600061369d613435565b90506136a98282613662565b919050565b600067ffffffffffffffff8211156136c9576136c8613633565b5b6136d282613622565b9050602081019050919050565b82818337600083830152505050565b60006137016136fc846136ae565b613693565b90508281526020810184848401111561371d5761371c61361d565b5b6137288482856136df565b509392505050565b600082601f83011261374557613744613618565b5b81356137558482602086016136ee565b91505092915050565b6000602082840312156137745761377361343f565b5b600082013567ffffffffffffffff81111561379257613791613444565b5b61379e84828501613730565b91505092915050565b6137b081613530565b81146137bb57600080fd5b50565b6000813590506137cd816137a7565b92915050565b600481106137e057600080fd5b50565b6000813590506137f2816137d3565b92915050565b6000806040838503121561380f5761380e61343f565b5b600061381d858286016137be565b925050602061382e858286016137e3565b9150509250929050565b6003811061384557600080fd5b50565b60008135905061385781613838565b92915050565b6004811061386a57600080fd5b50565b60008135905061387c8161385d565b92915050565b6001811061388f57600080fd5b50565b6000813590506138a181613882565b92915050565b6000819050919050565b6138ba816138a7565b81146138c557600080fd5b50565b6000813590506138d7816138b1565b92915050565b60008060008060008060008060008060006101608c8e0312156139035761390261343f565b5b60006139118e828f016137be565b9b505060206139228e828f016137e3565b9a505060406139338e828f01613848565b99505060606139448e828f0161386d565b98505060808c013567ffffffffffffffff81111561396557613964613444565b5b6139718e828f01613730565b97505060a06139828e828f01613892565b96505060c06139938e828f016138c8565b95505060e08c013567ffffffffffffffff8111156139b4576139b3613444565b5b6139c08e828f01613730565b9450506101008c013567ffffffffffffffff8111156139e2576139e1613444565b5b6139ee8e828f01613730565b9350506101208c013567ffffffffffffffff811115613a1057613a0f613444565b5b613a1c8e828f01613730565b925050610140613a2e8e828f016138c8565b9150509295989b509295989b9093969950565b600060208284031215613a5757613a5661343f565b5b6000613a6584828501613848565b91505092915050565b600060208284031215613a8457613a8361343f565b5b6000613a92848285016137be565b91505092915050565b613aa4816138a7565b82525050565b6000602082019050613abf6000830184613a9b565b92915050565b60008060008060808587031215613adf57613ade61343f565b5b6000613aed87828801613848565b9450506020613afe8782880161386d565b935050604085013567ffffffffffffffff811115613b1f57613b1e613444565b5b613b2b87828801613730565b9250506060613b3c87828801613892565b91505092959194509250565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b7382613b48565b9050919050565b613b8381613b68565b8114613b8e57600080fd5b50565b600081359050613ba081613b7a565b92915050565b60008060408385031215613bbd57613bbc61343f565b5b6000613bcb858286016137be565b9250506020613bdc85828601613b91565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110613c2657613c25613be6565b5b50565b6000819050613c3782613c15565b919050565b6000613c4782613c29565b9050919050565b613c5781613c3c565b82525050565b60038110613c6e57613c6d613be6565b5b50565b6000819050613c7f82613c5d565b919050565b6000613c8f82613c71565b9050919050565b613c9f81613c84565b82525050565b60048110613cb657613cb5613be6565b5b50565b6000819050613cc782613ca5565b919050565b6000613cd782613cb9565b9050919050565b613ce781613ccc565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d27578082015181840152602081019050613d0c565b60008484015250505050565b6000613d3e82613ced565b613d488185613cf8565b9350613d58818560208601613d09565b613d6181613622565b840191505092915050565b613d75816138a7565b82525050565b60018110613d8c57613d8b613be6565b5b50565b6000819050613d9d82613d7b565b919050565b6000613dad82613d8f565b9050919050565b613dbd81613da2565b82525050565b600061014083016000830151613ddc6000860182613c4e565b506020830151613def6020860182613c96565b506040830151613e026040860182613cde565b5060608301518482036060860152613e1a8282613d33565b9150506080830151613e2f6080860182613d6c565b5060a0830151613e4260a0860182613db4565b5060c0830151613e5560c0860182613d6c565b5060e083015184820360e0860152613e6d8282613d33565b915050610100830151848203610100860152613e898282613d33565b915050610120830151848203610120860152613ea58282613d33565b9150508091505092915050565b60006020820190508181036000830152613ecc8184613dc3565b905092915050565b600082825260208201905092915050565b6000613ef082613ced565b613efa8185613ed4565b9350613f0a818560208601613d09565b613f1381613622565b840191505092915050565b60006020820190508181036000830152613f388184613ee5565b905092915050565b600060208284031215613f5657613f5561343f565b5b6000613f6484828501613b91565b91505092915050565b60008060008060808587031215613f8757613f8661343f565b5b6000613f9587828801613848565b9450506020613fa687828801613b91565b935050604085013567ffffffffffffffff811115613fc757613fc6613444565b5b613fd387828801613730565b925050606085013567ffffffffffffffff811115613ff457613ff3613444565b5b61400087828801613730565b91505092959194509250565b600081905092915050565b600061402282613ced565b61402c818561400c565b935061403c818560208601613d09565b80840191505092915050565b60006140548284614017565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140a657607f821691505b6020821081036140b9576140b861405f565b5b50919050565b600082825260208201905092915050565b7f4d757374207265706c616365206163746976652072656c65617365206265666f60008201527f7265206368616e67696e67207374617475732066726f6d204163746976650000602082015250565b600061412c603e836140bf565b9150614137826140d0565b604082019050919050565b6000602082019050818103600083015261415b8161411f565b9050919050565b61416b81613c3c565b82525050565b600060408201905061418660008301856135ee565b6141936020830184614162565b9392505050565b7f5468652070726f7669646564207375626e6574202877697468696e207468652060008201527f72656c6561736520696429206973206e6f742076616c696420666f722074686960208201527f7320636f6e747261637400000000000000000000000000000000000000000000604082015250565b600061421c604a836140bf565b91506142278261419a565b606082019050919050565b6000602082019050818103600083015261424b8161420f565b9050919050565b7f412072656c656173652077697468207468697320494420616c7265616479206560008201527f7869737473000000000000000000000000000000000000000000000000000000602082015250565b60006142ae6025836140bf565b91506142b982614252565b604082019050919050565b600060208201905081810360008301526142dd816142a1565b9050919050565b7f54686520524f206f7074696f6e20697320726571756972656420666f7220707260008201527f6f642072656c6561736573000000000000000000000000000000000000000000602082015250565b6000614340602b836140bf565b915061434b826142e4565b604082019050919050565b6000602082019050818103600083015261436f81614333565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026143d87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261439b565b6143e2868361439b565b95508019841693508086168417925050509392505050565b6000819050919050565b600061441f61441a614415846138a7565b6143fa565b6138a7565b9050919050565b6000819050919050565b61443983614404565b61444d61444582614426565b8484546143a8565b825550505050565b600090565b614462614455565b61446d818484614430565b505050565b5b818110156144915761448660008261445a565b600181019050614473565b5050565b601f8211156144d6576144a781614376565b6144b08461438b565b810160208510156144bf578190505b6144d36144cb8561438b565b830182614472565b50505b505050565b600082821c905092915050565b60006144f9600019846008026144db565b1980831691505092915050565b600061451283836144e8565b9150826002028217905092915050565b61452b82613ced565b67ffffffffffffffff81111561454457614543613633565b5b61454e825461408e565b614559828285614495565b600060209050601f83116001811461458c576000841561457a578287015190505b6145848582614506565b8655506145ec565b601f19841661459a86614376565b60005b828110156145c25784890151825560018201915060208501945060208101905061459d565b868310156145df57848901516145db601f8916826144e8565b8355505b6001600288020188555050505b505050505050565b6145fd81613c84565b82525050565b61460c81613ccc565b82525050565b61461b81613da2565b82525050565b600061016082019050614637600083018e6135ee565b614644602083018d614162565b614651604083018c6145f4565b61465e606083018b614603565b8181036080830152614670818a613ee5565b905061467f60a0830189613a9b565b61468c60c0830188614612565b61469960e0830187613a9b565b8181036101008301526146ac8186613ee5565b90508181036101208301526146c18185613ee5565b90508181036101408301526146d68184613ee5565b90509c9b505050505050505050505050565b60008160f81b9050919050565b6000614700826146e8565b9050919050565b61471861471382613c84565b6146f5565b82525050565b61472f61472a82613ccc565b6146f5565b82525050565b61474661474182613da2565b6146f5565b82525050565b60006147588287614707565b600182019150614768828661471e565b6001820191506147788285614017565b91506147848284614735565b60018201915081905095945050505050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006147f2602f836140bf565b91506147fd82614796565b604082019050919050565b60006020820190508181036000830152614821816147e5565b9050919050565b600060208201905061483d60008301846145f4565b92915050565b7f696e697443726561746f722829206d6179206f6e6c792062652063616c6c656460008201527f206f6e6365000000000000000000000000000000000000000000000000000000602082015250565b600061489f6025836140bf565b91506148aa82614843565b604082019050919050565b600060208201905081810360008301526148ce81614892565b9050919050565b6148de81613b68565b82525050565b60006020820190506148f960008301846148d5565b92915050565b600060408201905081810360008301526149198185613ee5565b9050818103602083015261492d8184613ee5565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614970826138a7565b915061497b836138a7565b9250828202614989816138a7565b915082820484148315176149a05761499f614936565b5b5092915050565b60006149b2826138a7565b91506149bd836138a7565b92508282019050808211156149d5576149d4614936565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a15826138a7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a4757614a46614936565b5b600182019050919050565b6000614a5d826138a7565b9150614a68836138a7565b9250828203905081811115614a8057614a7f614936565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614af6601783614ab5565b9150614b0182614ac0565b601782019050919050565b600081519050919050565b6000614b2282614b0c565b614b2c8185614ab5565b9350614b3c818560208601613d09565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614b7e601183614ab5565b9150614b8982614b48565b601182019050919050565b6000614b9f82614ae9565b9150614bab8285614b17565b9150614bb682614b71565b9150614bc28284614b17565b91508190509392505050565b6000614bd982614b0c565b614be381856140bf565b9350614bf3818560208601613d09565b614bfc81613622565b840191505092915050565b60006020820190508181036000830152614c218184614bce565b905092915050565b6000614c34826138a7565b915060008203614c4757614c46614936565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614c886020836140bf565b9150614c9382614c52565b602082019050919050565b60006020820190508181036000830152614cb781614c7b565b905091905056fea2646970667358221220b7a2f5cdf3d6597bcc03148af3dcabe43029e122783c0f81506bcc481ea031c164736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102065760003560e01c806370e65a451161011a578063a0908300116100ad578063d547741f1161007c578063d547741f146105ef578063d6bc626d1461060b578063db2d303b1461063b578063e1c0af0814610657578063f2dc99161461067357610206565b8063a090830014610567578063a217fddf14610597578063ad769394146105b5578063bc7ca317146105d357610206565b80638aeda25a116100e95780638aeda25a146104df5780638deb3893146104fd57806391d14854146105195780639bb4e2f71461054957610206565b806370e65a451461045957806374bc81391461047557806375b238fc146104915780637f698e92146104af57610206565b80632609e5861161019d5780632f2ff15d1161016c5780632f2ff15d146103c757806336568abe146103e35780633acd1ea3146103ff5780633dc6c8581461041d578063458be7dc1461043b57610206565b80632609e5861461033f578063277dceaf1461035b578063282c51f3146103795780632ae79b6d1461039757610206565b80630e1e59dd116101d95780630e1e59dd146102a757806319724065146102c35780631bd564dc146102df578063248a9ca31461030f57610206565b806301ffc9a71461020b578063023e92881461023b57806308740a3b146102595780630e092b1814610277575b600080fd5b610225600480360381019061022091906134a1565b61068f565b60405161023291906134e9565b60405180910390f35b610243610709565b60405161025091906135cc565b60405180910390f35b61026161071a565b60405161026e91906135fd565b60405180910390f35b610291600480360381019061028c919061375e565b61073e565b60405161029e91906134e9565b60405180910390f35b6102c160048036038101906102bc91906137f8565b610773565b005b6102dd60048036038101906102d891906138dd565b610e09565b005b6102f960048036038101906102f49190613a41565b6114ab565b60405161030691906134e9565b60405180910390f35b61032960048036038101906103249190613a6e565b6114f9565b60405161033691906135fd565b60405180910390f35b61035960048036038101906103549190613a6e565b611518565b005b6103636116fe565b6040516103709190613aaa565b60405180910390f35b610381611703565b60405161038e91906135fd565b60405180910390f35b6103b160048036038101906103ac9190613ac5565b611727565b6040516103be91906135fd565b60405180910390f35b6103e160048036038101906103dc9190613ba6565b611778565b005b6103fd60048036038101906103f89190613ba6565b611799565b005b61040761181c565b6040516104149190613aaa565b60405180910390f35b610425611821565b60405161043291906134e9565b60405180910390f35b610443611838565b60405161045091906135fd565b60405180910390f35b610473600480360381019061046e919061375e565b61185c565b005b61048f600480360381019061048a9190613a41565b61192d565b005b610499611a17565b6040516104a691906135fd565b60405180910390f35b6104c960048036038101906104c49190613a6e565b611a3b565b6040516104d69190613eb2565b60405180910390f35b6104e7611db1565b6040516104f491906135fd565b60405180910390f35b61051760048036038101906105129190613a41565b611dd5565b005b610533600480360381019061052e9190613ba6565b611eb6565b60405161054091906134e9565b60405180910390f35b610551611f20565b60405161055e9190613f1e565b60405180910390f35b610581600480360381019061057c9190613f40565b611fb2565b60405161058e91906134e9565b60405180910390f35b61059f612008565b6040516105ac91906135fd565b60405180910390f35b6105bd61200f565b6040516105ca9190613aaa565b60405180910390f35b6105ed60048036038101906105e89190613f6d565b612014565b005b61060960048036038101906106049190613ba6565b61230c565b005b6106256004803603810190610620919061375e565b61232d565b60405161063291906134e9565b60405180910390f35b61065560048036038101906106509190613f40565b612362565b005b610671600480360381019061066c919061375e565b61244b565b005b61068d60048036038101906106889190613f40565b612513565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610702575061070182612605565b5b9050919050565b6060610715600961266f565b905090565b7fce1f15692823e8a9d77ca8c1b7a2cc145ffd008750ee9d3f8604f9c52eeea73c81565b60006005826040516107509190614048565b908152602001604051809103902060009054906101000a900460ff169050919050565b6002600381111561078757610786613be6565b5b81600381111561079a57610799613be6565b5b03610804576107c97fce1f15692823e8a9d77ca8c1b7a2cc145ffd008750ee9d3f8604f9c52eeea73c33611eb6565b6107ff576040517f5c21123e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c7565b60038081111561081757610816613be6565b5b81600381111561082a57610829613be6565b5b03610894576108597f50a3dccc47363872dd46de62b59273989edb72901adea0b961d5232bf9a1febf33611eb6565b61088f576040517f093efaf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c6565b6040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600060038111156108db576108da613be6565b5b6007600084815260200190815260200160002060000160009054906101000a900460ff16600381111561091157610910613be6565b5b03610948576040517f28663ff800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060076000848152602001908152602001600020604051806101400160405290816000820160009054906101000a900460ff16600381111561098e5761098d613be6565b5b60038111156109a05761099f613be6565b5b81526020016000820160019054906101000a900460ff1660028111156109c9576109c8613be6565b5b60028111156109db576109da613be6565b5b81526020016000820160029054906101000a900460ff166003811115610a0457610a03613be6565b5b6003811115610a1657610a15613be6565b5b8152602001600182018054610a2a9061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a569061408e565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b50505050508152602001600282015481526020016003820160009054906101000a900460ff166000811115610adb57610ada613be6565b5b6000811115610aed57610aec613be6565b5b815260200160048201548152602001600582018054610b0b9061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b379061408e565b8015610b845780601f10610b5957610100808354040283529160200191610b84565b820191906000526020600020905b815481529060010190602001808311610b6757829003601f168201915b50505050508152602001600682018054610b9d9061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc99061408e565b8015610c165780601f10610beb57610100808354040283529160200191610c16565b820191906000526020600020905b815481529060010190602001808311610bf957829003601f168201915b50505050508152602001600782018054610c2f9061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5b9061408e565b8015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b820191906000526020600020905b815481529060010190602001808311610c8b57829003601f168201915b505050505081525050905060026003811115610cc757610cc6613be6565b5b826003811115610cda57610cd9613be6565b5b14610d3d5782610cfc8260200151836040015184606001518560a00151611727565b03610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3390614142565b60405180910390fd5b5b816007600085815260200190815260200160002060000160006101000a81548160ff02191690836003811115610d7657610d75613be6565b5b02179055507f6ae24fa3345cd7488c35e11c5278059a0a545fd008c33d2d396d917b69bed5bf8383604051610dac929190614171565b60405180910390a160026003811115610dc857610dc7613be6565b5b826003811115610ddb57610dda613be6565b5b03610dee57610de983612690565b610e04565b610e02836009612bb590919063ffffffff16565b505b505050565b610e337f3c2519c4487d47714872f92cf90a50c25f5deaec2789dc2a497b1272df611db633611eb6565b610e69576040517f80510fe100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115610e7d57610e7c613be6565b5b8a6003811115610e9057610e8f613be6565b5b03610efa57610ebf7fce1f15692823e8a9d77ca8c1b7a2cc145ffd008750ee9d3f8604f9c52eeea73c33611eb6565b610ef5576040517f5c21123e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f8b565b60016003811115610f0e57610f0d613be6565b5b8a6003811115610f2157610f20613be6565b5b14158015610f535750600380811115610f3d57610f3c613be6565b5b8a6003811115610f5057610f4f613be6565b5b14155b15610f8a576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b60011515600360008b6002811115610fa657610fa5613be6565b5b6002811115610fb857610fb7613be6565b5b815260200190815260200160002060009054906101000a900460ff1615151461100d576040517fc8e7a97c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60011515600460006110208e6004612bcc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a190614232565b60405180910390fd5b600060028111156110be576110bd613be6565b5b8960028111156110d1576110d0613be6565b5b141580156111045750600160028111156110ee576110ed613be6565b5b89600281111561110157611100613be6565b5b14155b15611194576000600381111561111d5761111c613be6565b5b600760008d815260200190815260200160002060000160009054906101000a900460ff16600381111561115357611152613be6565b5b14611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a906142c4565b60405180910390fd5b5b6002808111156111a7576111a6613be6565b5b8960028111156111ba576111b9613be6565b5b036112065760006002861603611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc90614356565b60405180910390fd5b5b60008103611212574290505b6040518061014001604052808b600381111561123157611230613be6565b5b81526020018a600281111561124957611248613be6565b5b815260200189600381111561126157611260613be6565b5b815260200188815260200182815260200187600081111561128557611284613be6565b5b815260200186815260200185815260200184815260200183815250600760008d815260200190815260200160002060008201518160000160006101000a81548160ff021916908360038111156112de576112dd613be6565b5b021790555060208201518160000160016101000a81548160ff0219169083600281111561130e5761130d613be6565b5b021790555060408201518160000160026101000a81548160ff0219169083600381111561133e5761133d613be6565b5b021790555060608201518160010190816113589190614522565b506080820151816002015560a08201518160030160006101000a81548160ff0219169083600081111561138e5761138d613be6565b5b021790555060c0820151816004015560e08201518160050190816113b29190614522565b506101008201518160060190816113c99190614522565b506101208201518160070190816113e09190614522565b509050507f90a862cc16ebcb9b549c932013f77c422df117e24d48d7d26a7d90fbc43c3c8f8b8b8b8b8b868c8c8c8c8c6040516114279b9a99989796959493929190614621565b60405180910390a16002600381111561144357611442613be6565b5b8a600381111561145657611455613be6565b5b0361149e576114648b612690565b7f6ae24fa3345cd7488c35e11c5278059a0a545fd008c33d2d396d917b69bed5bf8b8b604051611495929190614171565b60405180910390a15b5050505050505050505050565b6000600360008360028111156114c4576114c3613be6565b5b60028111156114d6576114d5613be6565b5b815260200190815260200160002060009054906101000a900460ff169050919050565b6000806000838152602001908152602001600020600101549050919050565b6115427f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c833611eb6565b611578576040517ff4ecad6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600381111561158c5761158b613be6565b5b6007600083815260200190815260200160002060000160009054906101000a900460ff1660038111156115c2576115c1613be6565b5b036115f9576040517f28663ff800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076000828152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549060ff02191690556000820160026101000a81549060ff0219169055600182016000611659919061333e565b60028201600090556003820160006101000a81549060ff0219169055600482016000905560058201600061168d919061333e565b60068201600061169d919061333e565b6007820160006116ad919061333e565b50506116c3816009612bb590919063ffffffff16565b507fe4a7f7b48251ad70e63f800758a445b00386e2fa98d5afce96a546e8fce2114e816040516116f391906135fd565b60405180910390a150565b600481565b7f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b60008085858585604051602001611741949392919061474c565b6040516020818303038152906040528051906020012090506008600082815260200190815260200160002054915050949350505050565b611781826114f9565b61178a81612c59565b6117948383612c6d565b505050565b6117a1612d4d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180590614808565b60405180910390fd5b6118188282612d55565b5050565b600881565b6000600160009054906101000a900460ff16905090565b7f50a3dccc47363872dd46de62b59273989edb72901adea0b961d5232bf9a1febf81565b6118867fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611eb6565b6118bc576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016005826040516118ce9190614048565b908152602001604051809103902060006101000a81548160ff0219169083151502179055507fe7735e9f569fe61671662a8829db77de38ef614c77b1b136c958aff781df7c75816040516119229190613f1e565b60405180910390a150565b6119577fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611eb6565b61198d576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600360008360028111156119a6576119a5613be6565b5b60028111156119b8576119b7613be6565b5b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051611a0c9190614828565b60405180910390a150565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b611a4361337e565b60076000838152602001908152602001600020604051806101400160405290816000820160009054906101000a900460ff166003811115611a8757611a86613be6565b5b6003811115611a9957611a98613be6565b5b81526020016000820160019054906101000a900460ff166002811115611ac257611ac1613be6565b5b6002811115611ad457611ad3613be6565b5b81526020016000820160029054906101000a900460ff166003811115611afd57611afc613be6565b5b6003811115611b0f57611b0e613be6565b5b8152602001600182018054611b239061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4f9061408e565b8015611b9c5780601f10611b7157610100808354040283529160200191611b9c565b820191906000526020600020905b815481529060010190602001808311611b7f57829003601f168201915b50505050508152602001600282015481526020016003820160009054906101000a900460ff166000811115611bd457611bd3613be6565b5b6000811115611be657611be5613be6565b5b815260200160048201548152602001600582018054611c049061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054611c309061408e565b8015611c7d5780601f10611c5257610100808354040283529160200191611c7d565b820191906000526020600020905b815481529060010190602001808311611c6057829003601f168201915b50505050508152602001600682018054611c969061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc29061408e565b8015611d0f5780601f10611ce457610100808354040283529160200191611d0f565b820191906000526020600020905b815481529060010190602001808311611cf257829003601f168201915b50505050508152602001600782018054611d289061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d549061408e565b8015611da15780601f10611d7657610100808354040283529160200191611da1565b820191906000526020600020905b815481529060010190602001808311611d8457829003601f168201915b5050505050815250509050919050565b7f3c2519c4487d47714872f92cf90a50c25f5deaec2789dc2a497b1272df611db681565b611dff7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611eb6565b611e35576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036000826002811115611e4c57611e4b613be6565b5b6002811115611e5e57611e5d613be6565b5b815260200190815260200160002060006101000a81549060ff02191690557f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4781604051611eab9190614828565b60405180910390a150565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060028054611f2f9061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5b9061408e565b8015611fa85780601f10611f7d57610100808354040283529160200191611fa8565b820191906000526020600020905b815481529060010190602001808311611f8b57829003601f168201915b5050505050905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000801b81565b600281565b61203e7f3c2519c4487d47714872f92cf90a50c25f5deaec2789dc2a497b1272df611db633611eb6565b612074576040517f80510fe100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600115156003600086600281111561208f5761208e613be6565b5b60028111156120a1576120a0613be6565b5b815260200190815260200160002060009054906101000a900460ff161515146120f6576040517fc8e7a97c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600281111561210a57612109613be6565b5b84600281111561211d5761211c613be6565b5b1415801561215057506001600281111561213a57612139613be6565b5b84600281111561214d5761214c613be6565b5b14155b156121a657600160009054906101000a900460ff16156121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219c906148b5565b60405180910390fd5b5b60018060006101000a81548160ff02191690831515021790555081600290816121cf9190614522565b506001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160068260405161223a9190614048565b908152602001604051809103902060006101000a81548160ff0219169083151502179055507f18f0396c6d01876d7610d96877b44f017ab4ca2265b13079b10e0be6b6af30d48160405161228e9190613f1e565b60405180910390a17f1a7b784416b53672844a12947a59696e835a6d8dffbb0c4630a4d04812bd6278836040516122c591906148e4565b60405180910390a17f5b590cceabbeb28cd16e41a811ba46df5bb82c98920d5e7ff77e4fa9db709b3382826040516122fe9291906148ff565b60405180910390a150505050565b612315826114f9565b61231e81612c59565b6123288383612d55565b505050565b600060068260405161233f9190614048565b908152602001604051809103902060009054906101000a900460ff169050919050565b61238c7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611eb6565b6123c2576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690557ff580a1ea01c0ed3ec5e4797c560ee7046c3591588c0feb814f5f2d4eca50272c8160405161244091906148e4565b60405180910390a150565b6124757fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611eb6565b6124ab576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005816040516124bb9190614048565b908152602001604051809103902060006101000a81549060ff02191690557ff13042255d0b58f7acc82c201a0cd4d834b0783dd7b3c29cca9b96840d633f74816040516125089190613f1e565b60405180910390a150565b61253d7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233611eb6565b612573576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f1a7b784416b53672844a12947a59696e835a6d8dffbb0c4630a4d04812bd6278816040516125fa91906148e4565b60405180910390a150565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600061267f83600001612e36565b905060608190508092505050919050565b600060038111156126a4576126a3613be6565b5b6007600083815260200190815260200160002060000160009054906101000a900460ff1660038111156126da576126d9613be6565b5b03612711576040517f28663ff800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060076000838152602001908152602001600020604051806101400160405290816000820160009054906101000a900460ff16600381111561275757612756613be6565b5b600381111561276957612768613be6565b5b81526020016000820160019054906101000a900460ff16600281111561279257612791613be6565b5b60028111156127a4576127a3613be6565b5b81526020016000820160029054906101000a900460ff1660038111156127cd576127cc613be6565b5b60038111156127df576127de613be6565b5b81526020016001820180546127f39061408e565b80601f016020809104026020016040519081016040528092919081815260200182805461281f9061408e565b801561286c5780601f106128415761010080835404028352916020019161286c565b820191906000526020600020905b81548152906001019060200180831161284f57829003601f168201915b50505050508152602001600282015481526020016003820160009054906101000a900460ff1660008111156128a4576128a3613be6565b5b60008111156128b6576128b5613be6565b5b8152602001600482015481526020016005820180546128d49061408e565b80601f01602080910402602001604051908101604052809291908181526020018280546129009061408e565b801561294d5780601f106129225761010080835404028352916020019161294d565b820191906000526020600020905b81548152906001019060200180831161293057829003601f168201915b505050505081526020016006820180546129669061408e565b80601f01602080910402602001604051908101604052809291908181526020018280546129929061408e565b80156129df5780601f106129b4576101008083540402835291602001916129df565b820191906000526020600020905b8154815290600101906020018083116129c257829003601f168201915b505050505081526020016007820180546129f89061408e565b80601f0160208091040260200160405190810160405280929190818152602001828054612a249061408e565b8015612a715780601f10612a4657610100808354040283529160200191612a71565b820191906000526020600020905b815481529060010190602001808311612a5457829003601f168201915b505050505081525050905060026003811115612a9057612a8f613be6565b5b81600001516003811115612aa757612aa6613be6565b5b14612ade576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008160200151826040015183606001518460a00151604051602001612b07949392919061474c565b6040516020818303038152906040528051906020012090506000600860008381526020019081526020016000205490506000801b8114612b8157600760008281526020019081526020016000206002015483608001511115612b7c578360086000848152602001908152602001600020819055505b612b9a565b8360086000848152602001908152602001600020819055505b612bae846009612e9290919063ffffffff16565b5050505050565b6000612bc48360000183612ea9565b905092915050565b60008060005b6014811015612c4b57600881612be89190614965565b60ff60f81b868387612bfa91906149a7565b60208110612c0b57612c0a6149db565b5b1a60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c821791508080612c4390614a0a565b915050612bd2565b508060601c91505092915050565b612c6a81612c65612d4d565b612fbd565b50565b612c778282611eb6565b612d4957600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612cee612d4d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b612d5f8282611eb6565b15612e3257600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612dd7612d4d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b606081600001805480602002602001604051908101604052809291908181526020018280548015612e8657602002820191906000526020600020905b815481526020019060010190808311612e72575b50505050509050919050565b6000612ea18360000183613042565b905092915050565b60008083600101600084815260200190815260200160002054905060008114612fb1576000600182612edb9190614a52565b9050600060018660000180549050612ef39190614a52565b9050818114612f62576000866000018281548110612f1457612f136149db565b5b9060005260206000200154905080876000018481548110612f3857612f376149db565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480612f7657612f75614a86565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612fb7565b60009150505b92915050565b612fc78282611eb6565b61303e57612fd4816130b2565b612fe28360001c60206130df565b604051602001612ff3929190614b94565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130359190614c07565b60405180910390fd5b5050565b600061304e838361331b565b6130a75782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506130ac565b600090505b92915050565b60606130d88273ffffffffffffffffffffffffffffffffffffffff16601460ff166130df565b9050919050565b6060600060028360026130f29190614965565b6130fc91906149a7565b67ffffffffffffffff81111561311557613114613633565b5b6040519080825280601f01601f1916602001820160405280156131475781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061317f5761317e6149db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106131e3576131e26149db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026132239190614965565b61322d91906149a7565b90505b60018111156132cd577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061326f5761326e6149db565b5b1a60f81b828281518110613286576132856149db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806132c690614c29565b9050613230565b5060008414613311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330890614c9e565b60405180910390fd5b8091505092915050565b600080836001016000848152602001908152602001600020541415905092915050565b50805461334a9061408e565b6000825580601f1061335c575061337b565b601f01602090049060005260206000209081019061337a9190613418565b5b50565b6040518061014001604052806000600381111561339e5761339d613be6565b5b8152602001600060028111156133b7576133b6613be6565b5b8152602001600060038111156133d0576133cf613be6565b5b815260200160608152602001600081526020016000808111156133f6576133f5613be6565b5b8152602001600081526020016060815260200160608152602001606081525090565b5b80821115613431576000816000905550600101613419565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61347e81613449565b811461348957600080fd5b50565b60008135905061349b81613475565b92915050565b6000602082840312156134b7576134b661343f565b5b60006134c58482850161348c565b91505092915050565b60008115159050919050565b6134e3816134ce565b82525050565b60006020820190506134fe60008301846134da565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61354381613530565b82525050565b6000613555838361353a565b60208301905092915050565b6000602082019050919050565b600061357982613504565b613583818561350f565b935061358e83613520565b8060005b838110156135bf5781516135a68882613549565b97506135b183613561565b925050600181019050613592565b5085935050505092915050565b600060208201905081810360008301526135e6818461356e565b905092915050565b6135f781613530565b82525050565b600060208201905061361260008301846135ee565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61366b82613622565b810181811067ffffffffffffffff8211171561368a57613689613633565b5b80604052505050565b600061369d613435565b90506136a98282613662565b919050565b600067ffffffffffffffff8211156136c9576136c8613633565b5b6136d282613622565b9050602081019050919050565b82818337600083830152505050565b60006137016136fc846136ae565b613693565b90508281526020810184848401111561371d5761371c61361d565b5b6137288482856136df565b509392505050565b600082601f83011261374557613744613618565b5b81356137558482602086016136ee565b91505092915050565b6000602082840312156137745761377361343f565b5b600082013567ffffffffffffffff81111561379257613791613444565b5b61379e84828501613730565b91505092915050565b6137b081613530565b81146137bb57600080fd5b50565b6000813590506137cd816137a7565b92915050565b600481106137e057600080fd5b50565b6000813590506137f2816137d3565b92915050565b6000806040838503121561380f5761380e61343f565b5b600061381d858286016137be565b925050602061382e858286016137e3565b9150509250929050565b6003811061384557600080fd5b50565b60008135905061385781613838565b92915050565b6004811061386a57600080fd5b50565b60008135905061387c8161385d565b92915050565b6001811061388f57600080fd5b50565b6000813590506138a181613882565b92915050565b6000819050919050565b6138ba816138a7565b81146138c557600080fd5b50565b6000813590506138d7816138b1565b92915050565b60008060008060008060008060008060006101608c8e0312156139035761390261343f565b5b60006139118e828f016137be565b9b505060206139228e828f016137e3565b9a505060406139338e828f01613848565b99505060606139448e828f0161386d565b98505060808c013567ffffffffffffffff81111561396557613964613444565b5b6139718e828f01613730565b97505060a06139828e828f01613892565b96505060c06139938e828f016138c8565b95505060e08c013567ffffffffffffffff8111156139b4576139b3613444565b5b6139c08e828f01613730565b9450506101008c013567ffffffffffffffff8111156139e2576139e1613444565b5b6139ee8e828f01613730565b9350506101208c013567ffffffffffffffff811115613a1057613a0f613444565b5b613a1c8e828f01613730565b925050610140613a2e8e828f016138c8565b9150509295989b509295989b9093969950565b600060208284031215613a5757613a5661343f565b5b6000613a6584828501613848565b91505092915050565b600060208284031215613a8457613a8361343f565b5b6000613a92848285016137be565b91505092915050565b613aa4816138a7565b82525050565b6000602082019050613abf6000830184613a9b565b92915050565b60008060008060808587031215613adf57613ade61343f565b5b6000613aed87828801613848565b9450506020613afe8782880161386d565b935050604085013567ffffffffffffffff811115613b1f57613b1e613444565b5b613b2b87828801613730565b9250506060613b3c87828801613892565b91505092959194509250565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b7382613b48565b9050919050565b613b8381613b68565b8114613b8e57600080fd5b50565b600081359050613ba081613b7a565b92915050565b60008060408385031215613bbd57613bbc61343f565b5b6000613bcb858286016137be565b9250506020613bdc85828601613b91565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110613c2657613c25613be6565b5b50565b6000819050613c3782613c15565b919050565b6000613c4782613c29565b9050919050565b613c5781613c3c565b82525050565b60038110613c6e57613c6d613be6565b5b50565b6000819050613c7f82613c5d565b919050565b6000613c8f82613c71565b9050919050565b613c9f81613c84565b82525050565b60048110613cb657613cb5613be6565b5b50565b6000819050613cc782613ca5565b919050565b6000613cd782613cb9565b9050919050565b613ce781613ccc565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d27578082015181840152602081019050613d0c565b60008484015250505050565b6000613d3e82613ced565b613d488185613cf8565b9350613d58818560208601613d09565b613d6181613622565b840191505092915050565b613d75816138a7565b82525050565b60018110613d8c57613d8b613be6565b5b50565b6000819050613d9d82613d7b565b919050565b6000613dad82613d8f565b9050919050565b613dbd81613da2565b82525050565b600061014083016000830151613ddc6000860182613c4e565b506020830151613def6020860182613c96565b506040830151613e026040860182613cde565b5060608301518482036060860152613e1a8282613d33565b9150506080830151613e2f6080860182613d6c565b5060a0830151613e4260a0860182613db4565b5060c0830151613e5560c0860182613d6c565b5060e083015184820360e0860152613e6d8282613d33565b915050610100830151848203610100860152613e898282613d33565b915050610120830151848203610120860152613ea58282613d33565b9150508091505092915050565b60006020820190508181036000830152613ecc8184613dc3565b905092915050565b600082825260208201905092915050565b6000613ef082613ced565b613efa8185613ed4565b9350613f0a818560208601613d09565b613f1381613622565b840191505092915050565b60006020820190508181036000830152613f388184613ee5565b905092915050565b600060208284031215613f5657613f5561343f565b5b6000613f6484828501613b91565b91505092915050565b60008060008060808587031215613f8757613f8661343f565b5b6000613f9587828801613848565b9450506020613fa687828801613b91565b935050604085013567ffffffffffffffff811115613fc757613fc6613444565b5b613fd387828801613730565b925050606085013567ffffffffffffffff811115613ff457613ff3613444565b5b61400087828801613730565b91505092959194509250565b600081905092915050565b600061402282613ced565b61402c818561400c565b935061403c818560208601613d09565b80840191505092915050565b60006140548284614017565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140a657607f821691505b6020821081036140b9576140b861405f565b5b50919050565b600082825260208201905092915050565b7f4d757374207265706c616365206163746976652072656c65617365206265666f60008201527f7265206368616e67696e67207374617475732066726f6d204163746976650000602082015250565b600061412c603e836140bf565b9150614137826140d0565b604082019050919050565b6000602082019050818103600083015261415b8161411f565b9050919050565b61416b81613c3c565b82525050565b600060408201905061418660008301856135ee565b6141936020830184614162565b9392505050565b7f5468652070726f7669646564207375626e6574202877697468696e207468652060008201527f72656c6561736520696429206973206e6f742076616c696420666f722074686960208201527f7320636f6e747261637400000000000000000000000000000000000000000000604082015250565b600061421c604a836140bf565b91506142278261419a565b606082019050919050565b6000602082019050818103600083015261424b8161420f565b9050919050565b7f412072656c656173652077697468207468697320494420616c7265616479206560008201527f7869737473000000000000000000000000000000000000000000000000000000602082015250565b60006142ae6025836140bf565b91506142b982614252565b604082019050919050565b600060208201905081810360008301526142dd816142a1565b9050919050565b7f54686520524f206f7074696f6e20697320726571756972656420666f7220707260008201527f6f642072656c6561736573000000000000000000000000000000000000000000602082015250565b6000614340602b836140bf565b915061434b826142e4565b604082019050919050565b6000602082019050818103600083015261436f81614333565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026143d87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261439b565b6143e2868361439b565b95508019841693508086168417925050509392505050565b6000819050919050565b600061441f61441a614415846138a7565b6143fa565b6138a7565b9050919050565b6000819050919050565b61443983614404565b61444d61444582614426565b8484546143a8565b825550505050565b600090565b614462614455565b61446d818484614430565b505050565b5b818110156144915761448660008261445a565b600181019050614473565b5050565b601f8211156144d6576144a781614376565b6144b08461438b565b810160208510156144bf578190505b6144d36144cb8561438b565b830182614472565b50505b505050565b600082821c905092915050565b60006144f9600019846008026144db565b1980831691505092915050565b600061451283836144e8565b9150826002028217905092915050565b61452b82613ced565b67ffffffffffffffff81111561454457614543613633565b5b61454e825461408e565b614559828285614495565b600060209050601f83116001811461458c576000841561457a578287015190505b6145848582614506565b8655506145ec565b601f19841661459a86614376565b60005b828110156145c25784890151825560018201915060208501945060208101905061459d565b868310156145df57848901516145db601f8916826144e8565b8355505b6001600288020188555050505b505050505050565b6145fd81613c84565b82525050565b61460c81613ccc565b82525050565b61461b81613da2565b82525050565b600061016082019050614637600083018e6135ee565b614644602083018d614162565b614651604083018c6145f4565b61465e606083018b614603565b8181036080830152614670818a613ee5565b905061467f60a0830189613a9b565b61468c60c0830188614612565b61469960e0830187613a9b565b8181036101008301526146ac8186613ee5565b90508181036101208301526146c18185613ee5565b90508181036101408301526146d68184613ee5565b90509c9b505050505050505050505050565b60008160f81b9050919050565b6000614700826146e8565b9050919050565b61471861471382613c84565b6146f5565b82525050565b61472f61472a82613ccc565b6146f5565b82525050565b61474661474182613da2565b6146f5565b82525050565b60006147588287614707565b600182019150614768828661471e565b6001820191506147788285614017565b91506147848284614735565b60018201915081905095945050505050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006147f2602f836140bf565b91506147fd82614796565b604082019050919050565b60006020820190508181036000830152614821816147e5565b9050919050565b600060208201905061483d60008301846145f4565b92915050565b7f696e697443726561746f722829206d6179206f6e6c792062652063616c6c656460008201527f206f6e6365000000000000000000000000000000000000000000000000000000602082015250565b600061489f6025836140bf565b91506148aa82614843565b604082019050919050565b600060208201905081810360008301526148ce81614892565b9050919050565b6148de81613b68565b82525050565b60006020820190506148f960008301846148d5565b92915050565b600060408201905081810360008301526149198185613ee5565b9050818103602083015261492d8184613ee5565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614970826138a7565b915061497b836138a7565b9250828202614989816138a7565b915082820484148315176149a05761499f614936565b5b5092915050565b60006149b2826138a7565b91506149bd836138a7565b92508282019050808211156149d5576149d4614936565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a15826138a7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a4757614a46614936565b5b600182019050919050565b6000614a5d826138a7565b9150614a68836138a7565b9250828203905081811115614a8057614a7f614936565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614af6601783614ab5565b9150614b0182614ac0565b601782019050919050565b600081519050919050565b6000614b2282614b0c565b614b2c8185614ab5565b9350614b3c818560208601613d09565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614b7e601183614ab5565b9150614b8982614b48565b601182019050919050565b6000614b9f82614ae9565b9150614bab8285614b17565b9150614bb682614b71565b9150614bc28284614b17565b91508190509392505050565b6000614bd982614b0c565b614be381856140bf565b9350614bf3818560208601613d09565b614bfc81613622565b840191505092915050565b60006020820190508181036000830152614c218184614bce565b905092915050565b6000614c34826138a7565b915060008203614c4757614c46614936565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614c886020836140bf565b9150614c9382614c52565b602082019050919050565b60006020820190508181036000830152614cb781614c7b565b905091905056fea2646970667358221220b7a2f5cdf3d6597bcc03148af3dcabe43029e122783c0f81506bcc481ea031c164736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/SoloNetPKP.json b/contracts/cayenne/SoloNetPKP.json deleted file mode 100644 index 064a8dc..0000000 --- a/contracts/cayenne/SoloNetPKP.json +++ /dev/null @@ -1,1074 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SoloNetPKP", - "sourceName": "contracts/lit-node/SoloNetPKP.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newFreeMintSigner", - "type": "address" - } - ], - "name": "FreeMintSignerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newMintCost", - "type": "uint256" - } - ], - "name": "MintCostSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "minter", - "type": "address" - } - ], - "name": "MinterPermitted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "minter", - "type": "address" - } - ], - "name": "MinterRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "pkpNftMetadataAddress", - "type": "address" - } - ], - "name": "PkpNftMetadataAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "pkpPermissionsAddress", - "type": "address" - } - ], - "name": "PkpPermissionsAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "PkpRouted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "stakingAddress", - "type": "address" - } - ], - "name": "StakingAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrew", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - } - ], - "name": "_getTokenIdToMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPermittedMinter", - "type": "address" - } - ], - "name": "addPermittedMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "ethAddressToPkpId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "exists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "freeMintId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "freeMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "freeMintId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "freeMintGrantAndBurn", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "freeMintId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "freeMintSigTest", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "freeMintSigner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getEthAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPubkey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "mintCost", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - } - ], - "name": "mintGrantAndBurn", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpNftMetadata", - "outputs": [ - { - "internalType": "contract PKPNFTMetadata", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpPermissions", - "outputs": [ - { - "internalType": "contract PKPPermissions", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "prefixed", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pubkeys", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "redeemedFreeMintIds", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPermittedMinter", - "type": "address" - } - ], - "name": "removePermittedMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newFreeMintSigner", - "type": "address" - } - ], - "name": "setFreeMintSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newMintCost", - "type": "uint256" - } - ], - "name": "setMintCost", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pkpNftMetadataAddress", - "type": "address" - } - ], - "name": "setPkpNftMetadataAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pkpPermissionsAddress", - "type": "address" - } - ], - "name": "setPkpPermissionsAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakingAddress", - "type": "address" - } - ], - "name": "setStakingAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "staking", - "outputs": [ - { - "internalType": "contract Staking", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenOfOwnerByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280601481526020017f50726f6772616d6d61626c65204b6579706169720000000000000000000000008152506040518060400160405280600381526020017f504b50000000000000000000000000000000000000000000000000000000000081525081600090816200008f919062000554565b508060019081620000a1919062000554565b505050620000c4620000b86200013760201b60201c565b6200013f60201b60201c565b6001600b819055506001600e8190555033600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001303360116200020560201b6200239d1790919060201c565b506200063b565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600062000235836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200023d60201b60201c565b905092915050565b6000620002518383620002b760201b60201c565b620002ac578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050620002b1565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200035c57607f821691505b60208210810362000372576200037162000314565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003dc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200039d565b620003e886836200039d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004356200042f620004298462000400565b6200040a565b62000400565b9050919050565b6000819050919050565b620004518362000414565b6200046962000460826200043c565b848454620003aa565b825550505050565b600090565b6200048062000471565b6200048d81848462000446565b505050565b5b81811015620004b557620004a960008262000476565b60018101905062000493565b5050565b601f8211156200050457620004ce8162000378565b620004d9846200038d565b81016020851015620004e9578190505b62000501620004f8856200038d565b83018262000492565b50505b505050565b600082821c905092915050565b6000620005296000198460080262000509565b1980831691505092915050565b600062000544838362000516565b9150826002028217905092915050565b6200055f82620002da565b67ffffffffffffffff8111156200057b576200057a620002e5565b5b62000587825462000343565b62000594828285620004b9565b600060209050601f831160018114620005cc5760008415620005b7578287015190505b620005c3858262000536565b86555062000633565b601f198416620005dc8662000378565b60005b828110156200060657848901518255600182019150602085019450602081019050620005df565b8683101562000626578489015162000622601f89168262000516565b8355505b6001600288020188555050505b505050505050565b615b70806200064b6000396000f3fe60806040526004361061027d5760003560e01c8063715018a61161014f578063a22cb465116100c1578063cc293a2d1161007a578063cc293a2d14610a0b578063de18a50814610a3b578063e985e9c514610a78578063ef6fd87814610ab5578063f2fde38b14610af2578063f4e0d9ac14610b1b5761027d565b8063a22cb465146108e9578063b88d4fde14610912578063b94a21021461093b578063bd4986a014610966578063bdb4b848146109a3578063c87b56dd146109ce5761027d565b80638545f4ea116101135780638545f4ea146107d75780638da5cb5b146108005780639004525f1461082b5780639388f12e1461086857806395d89b411461089357806397016f3f146108be5761027d565b8063715018a6146106ed57806371c9ce13146107045780637ba0e2e7146107415780637bd3e3f614610771578063831324ea146107ae5761027d565b806342842e0e116101f357806356e3a1ae116101ac57806356e3a1ae146105a75780635f49663c146105e45780636352211e1461060d57806364c7605e1461064a5780636f2096371461068757806370a08231146106b05761027d565b806342842e0e1461048757806342966c68146104b05780634c19eae6146104d95780634cf088d9146105025780634f558e791461052d5780634f6ccce71461056a5761027d565b80631ea89a22116102455780631ea89a221461037b5780631f275713146103a457806323b872dd146103e15780632f745c591461040a5780633b189852146104475780633ccfd60b146104705761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063095ea7b31461032757806318160ddd14610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613be9565b610b44565b6040516102b69190613c31565b60405180910390f35b3480156102cb57600080fd5b506102d4610c7e565b6040516102e19190613cdc565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613d34565b610d10565b60405161031e9190613da2565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190613de9565b610d56565b005b34801561035c57600080fd5b50610365610e6d565b6040516103729190613e38565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613e53565b610e7a565b005b3480156103b057600080fd5b506103cb60048036038101906103c69190613eb6565b610f09565b6040516103d89190613ef2565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190613f0d565b610f39565b005b34801561041657600080fd5b50610431600480360381019061042c9190613de9565b610f99565b60405161043e9190613e38565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613e53565b61103e565b005b34801561047c57600080fd5b506104856110cd565b005b34801561049357600080fd5b506104ae60048036038101906104a99190613f0d565b61119b565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190613d34565b6111bb565b005b3480156104e557600080fd5b5061050060048036038101906104fb9190613f99565b611217565b005b34801561050e57600080fd5b506105176113e1565b6040516105249190614073565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613d34565b611407565b6040516105619190613c31565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190613d34565b611419565b60405161059e9190613e38565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190613d34565b61148a565b6040516105db9190613c31565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613e53565b6114aa565b005b34801561061957600080fd5b50610634600480360381019061062f9190613d34565b611539565b6040516106419190613da2565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c91906141c3565b6115bf565b60405161067e9190613e38565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190613e53565b61174d565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190613e53565b6117b0565b6040516106e49190613e38565b60405180910390f35b3480156106f957600080fd5b50610702611867565b005b34801561071057600080fd5b5061072b6004803603810190610726919061429d565b61187b565b6040516107389190613e38565b60405180910390f35b61075b6004803603810190610756919061429d565b6118f6565b6040516107689190613e38565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190613d34565b6119b0565b6040516107a5919061433b565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613e53565b611a50565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190613d34565b611ab3565b005b34801561080c57600080fd5b50610815611afc565b6040516108229190613da2565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d919061435d565b611b26565b60405161085f9190613e38565b60405180910390f35b34801561087457600080fd5b5061087d611bd0565b60405161088a9190614427565b60405180910390f35b34801561089f57600080fd5b506108a8611bf6565b6040516108b59190613cdc565b60405180910390f35b3480156108ca57600080fd5b506108d3611c88565b6040516108e09190614463565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b91906144aa565b611cae565b005b34801561091e57600080fd5b50610939600480360381019061093491906144ea565b611cc4565b005b34801561094757600080fd5b50610950611d26565b60405161095d9190613da2565b60405180910390f35b34801561097257600080fd5b5061098d60048036038101906109889190613d34565b611d4c565b60405161099a9190613da2565b60405180910390f35b3480156109af57600080fd5b506109b8611e1c565b6040516109c59190613e38565b60405180910390f35b3480156109da57600080fd5b506109f560048036038101906109f09190613d34565b611e22565b604051610a029190613cdc565b60405180910390f35b610a256004803603810190610a20919061456d565b611fa6565b604051610a329190613e38565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d9190613e53565b61213a565b604051610a6f9190613e38565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a91906145e5565b612152565b604051610aac9190613c31565b60405180910390f35b348015610ac157600080fd5b50610adc6004803603810190610ad79190613d34565b6121e6565b604051610ae9919061433b565b60405180910390f35b348015610afe57600080fd5b50610b196004803603810190610b149190613e53565b61228b565b005b348015610b2757600080fd5b50610b426004803603810190610b3d9190613e53565b61230e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c0f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c7757507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060008054610c8d90614654565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb990614654565b8015610d065780601f10610cdb57610100808354040283529160200191610d06565b820191906000526020600020905b815481529060010190602001808311610ce957829003601f168201915b5050505050905090565b6000610d1b826123cd565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d6182611539565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc8906146f7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610df0612418565b73ffffffffffffffffffffffffffffffffffffffff161480610e1f5750610e1e81610e19612418565b612152565b5b610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5590614789565b60405180910390fd5b610e688383612420565b505050565b6000600980549050905090565b610e826124d9565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f42d2ac2cd8a457cf976d513bacdc167baa2ff2cd2706c98d222bb035b89d496960405160405180910390a250565b600081604051602001610f1c9190614821565b604051602081830303815290604052805190602001209050919050565b610f4a610f44612418565b82612557565b610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f80906148b9565b60405180910390fd5b610f948383836125ec565b505050565b6000610fa4836117b0565b8210610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc9061494b565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6110466124d9565b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f65d3e06a561c77a07da59b8b2ca10214ae08fe21cc2953a90db0ac8b5b7c437160405160405180910390a250565b6110d56124d9565b6110dd6128e5565b600047905060003373ffffffffffffffffffffffffffffffffffffffff16826040516111089061499c565b60006040518083038185875af1925050503d8060008114611145576040519150601f19603f3d011682016040523d82523d6000602084013e61114a565b606091505b505090508061115857600080fd5b7fb6b476da71cea8275cac6b1720c04966afaff5e637472cedb6cbd32c43a23251826040516111879190613e38565b60405180910390a15050611199612934565b565b6111b683838360405180602001604052806000815250611cc4565b505050565b6111cc6111c6612418565b82612557565b61120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906148b9565b60405180910390fd5b6112148161293e565b50565b600061124a308760405160200161122f929190614a1a565b60405160208183030381529060405280519060200120610f09565b905084811461128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128590614ab8565b60405180910390fd5b6000600186868686604051600081526020016040526040516112b39493929190614ae7565b6020604051602081039080840390855afa1580156112d5573d6000803e3d6000fd5b505050602060405103519050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136890614bc4565b60405180910390fd5b600015156015600089815260200190815260200160002060009054906101000a900460ff161515146113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf90614c56565b60405180910390fd5b50505050505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061141282612a8c565b9050919050565b6000611423610e6d565b8210611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90614ce8565b60405180910390fd5b6009828154811061147857611477614d08565b5b90600052602060002001549050919050565b60156020528060005260406000206000915054906101000a900460ff1681565b6114b26124d9565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f446c3422d569626abc16e1497dfa8270f1192bd56ea9ec8890b09705ddc275ad60405160405180910390a250565b60008061154583612acd565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90614d83565b60405180910390fd5b80915050919050565b60006115d5326011612b0a90919063ffffffff16565b611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b90614def565b60405180910390fd5b6116218786868686611217565b600061162d8930612b3a565b90506001601560008a815260200190815260200160002060006101000a81548160ff021916908315150217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a4315788289600067ffffffffffffffff8111156116b6576116b5614098565b5b6040519080825280602002602001820160405280156116e45781602001602082028036833780820191505090505b506040518463ffffffff1660e01b815260040161170393929190614ecd565b600060405180830381600087803b15801561171d57600080fd5b505af1158015611731573d6000803e3d6000fd5b5050505061173e8161293e565b80915050979650505050505050565b6117556124d9565b611769816011612c7690919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167f44f4322f8daa225d5f4877ad0f7d3dfba248a774396f3ca99405ed40a044fe8160405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790614f84565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61186f6124d9565b6118796000612ca6565b565b600080828051906020012060001c905060006013600083815260200190815260200160002080546118ab90614654565b9050146118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e490614ff0565b60405180910390fd5b80915050919050565b6000600e54341461193c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119339061505c565b60405180910390fd5b611950326011612b0a90919063ffffffff16565b61198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690614def565b60405180910390fd5b600061199a8361187b565b90506119a68333612b3a565b5080915050919050565b601360205280600052604060002060009150905080546119cf90614654565b80601f01602080910402602001604051908101604052809291908181526020018280546119fb90614654565b8015611a485780601f10611a1d57610100808354040283529160200191611a48565b820191906000526020600020905b815481529060010190602001808311611a2b57829003601f168201915b505050505081565b611a586124d9565b611a6c81601161239d90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167fcddac40078270fda4a2cd64a6089b372413df61e8de795e484d9c054c44ce16f60405160405180910390a250565b611abb6124d9565b80600e819055507f653b8b44976b2e5c016e082d134653d04dea9dbef92055038cca38c93007035581604051611af19190613e38565b60405180910390a150565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611b3c326011612b0a90919063ffffffff16565b611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7290614def565b60405180910390fd5b611b888686868686611217565b6000611b948833612b3a565b905060016015600089815260200190815260200160002060006101000a81548160ff021916908315150217905550809150509695505050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611c0590614654565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3190614654565b8015611c7e5780601f10611c5357610100808354040283529160200191611c7e565b820191906000526020600020905b815481529060010190602001808311611c6157829003601f168201915b5050505050905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cc0611cb9612418565b8383612d6c565b5050565b611cd5611ccf612418565b83612557565b611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b906148b9565b60405180910390fd5b611d2084848484612ed8565b50505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611e0160016040601360008781526020019081526020016000208054611d7490614654565b80601f0160208091040260200160405190810160405280929190818152602001828054611da090614654565b8015611ded5780601f10611dc257610100808354040283529160200191611ded565b820191906000526020600020905b815481529060010190602001808311611dd057829003601f168201915b5050505050612f349092919063ffffffff16565b90506000818051906020012090508060001c92505050919050565b600e5481565b6060611e626040518060400160405280601181526020017f67657474696e6720746f6b656e20757269000000000000000000000000000000815250613052565b6000611e6d836121e6565b9050611ead6040518060400160405280601f81526020017f676f74207075626b65792c2067657474696e6720657468206164647265737300815250613052565b6000611eb884611d4c565b9050611ef86040518060400160405280601081526020017f63616c6c696e6720746f6b656e55524900000000000000000000000000000000815250613052565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663950462ee8584846040518463ffffffff1660e01b8152600401611f579392919061507c565b600060405180830381865afa158015611f74573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611f9d919061515b565b92505050919050565b6000600e543414611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe39061505c565b60405180910390fd5b612000326011612b0a90919063ffffffff16565b61203f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203690614def565b60405180910390fd5b600061204b8430612b3a565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a4315788285600067ffffffffffffffff8111156120a8576120a7614098565b5b6040519080825280602002602001820160405280156120d65781602001602082028036833780820191505090505b506040518463ffffffff1660e01b81526004016120f593929190614ecd565b600060405180830381600087803b15801561210f57600080fd5b505af1158015612123573d6000803e3d6000fd5b505050506121308161293e565b8091505092915050565b60146020528060005260406000206000915090505481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060136000838152602001908152602001600020805461220690614654565b80601f016020809104026020016040519081016040528092919081815260200182805461223290614654565b801561227f5780601f106122545761010080835404028352916020019161227f565b820191906000526020600020905b81548152906001019060200180831161226257829003601f168201915b50505050509050919050565b6122936124d9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f990615216565b60405180910390fd5b61230b81612ca6565b50565b6123166124d9565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f524b317898d91e941d8311edbdd1bf568e07309f08e11f7ef94c053a9e35f91860405160405180910390a250565b60006123c5836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6130eb565b905092915050565b6123d681612a8c565b612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c90614d83565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661249383611539565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6124e1612418565b73ffffffffffffffffffffffffffffffffffffffff166124ff611afc565b73ffffffffffffffffffffffffffffffffffffffff1614612555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254c90615282565b60405180910390fd5b565b60008061256383611539565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125a557506125a48185612152565b5b806125e357508373ffffffffffffffffffffffffffffffffffffffff166125cb84610d10565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661260c82611539565b73ffffffffffffffffffffffffffffffffffffffff1614612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990615314565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c8906153a6565b60405180910390fd5b6126de838383600161315b565b8273ffffffffffffffffffffffffffffffffffffffff166126fe82611539565b73ffffffffffffffffffffffffffffffffffffffff1614612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b90615314565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128e0838383600161316d565b505050565b6002600b540361292a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292190615412565b60405180910390fd5b6002600b81905550565b6001600b81905550565b600061294982611539565b905061295981600084600161315b565b61296282611539565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a8881600084600161316d565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff16612aae83612acd565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000612b32836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613173565b905092915050565b600080838051906020012060001c90506000601360008381526020019081526020016000208054612b6a90614654565b905014612bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba390614ff0565b60405180910390fd5b83601360008381526020019081526020016000209081612bcc91906155d4565b506000612bd882611d4c565b905081601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c6057612c5b8483613196565b612c6b565b612c6a84836133b3565b5b819250505092915050565b6000612c9e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6133d1565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd1906156f2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612ecb9190613c31565b60405180910390a3505050565b612ee38484846125ec565b612eef848484846134e5565b612f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2590615784565b60405180910390fd5b50505050565b606081601f83612f4491906157d3565b1015612f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7c90615853565b60405180910390fd5b8183612f9191906157d3565b84511015612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcb906158bf565b60405180910390fd5b6060821560008114612ff55760405191506000825260208201604052613046565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156130335780518352602083019250602081019050613016565b50868552601f19601f8301166040525050505b50809150509392505050565b6130e8816040516024016130669190613cdc565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061366c565b50565b60006130f78383613173565b613150578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050613155565b600090505b92915050565b61316784848484613695565b50505050565b50505050565b600080836001016000848152602001908152602001600020541415905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fc9061592b565b60405180910390fd5b61320e81612a8c565b1561324e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324590615997565b60405180910390fd5b61325c60008383600161315b565b61326581612a8c565b156132a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329c90615997565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133af60008383600161316d565b5050565b6133cd8282604051806020016040528060008152506137f3565b5050565b600080836001016000848152602001908152602001600020549050600081146134d957600060018261340391906159b7565b905060006001866000018054905061341b91906159b7565b905081811461348a57600086600001828154811061343c5761343b614d08565b5b90600052602060002001549050808760000184815481106134605761345f614d08565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061349e5761349d6159eb565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506134df565b60009150505b92915050565b60006135068473ffffffffffffffffffffffffffffffffffffffff1661384e565b1561365f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261352f612418565b8786866040518563ffffffff1660e01b81526004016135519493929190615a1a565b6020604051808303816000875af192505050801561358d57506040513d601f19601f8201168201806040525081019061358a9190615a7b565b60015b61360f573d80600081146135bd576040519150601f19603f3d011682016040523d82523d6000602084013e6135c2565b606091505b506000815103613607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fe90615784565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613664565b600190505b949350505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b6136a184848484613871565b60018111156136e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136dc90615b1a565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361372c5761372781613877565b61376b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461376a5761376985826138c0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036137ad576137a881613a2d565b6137ec565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146137eb576137ea8482613afe565b5b5b5050505050565b6137fd8383613196565b61380a60008484846134e5565b613849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384090615784565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b50505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016138cd846117b0565b6138d791906159b7565b90506000600860008481526020019081526020016000205490508181146139bc576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050613a4191906159b7565b90506000600a6000848152602001908152602001600020549050600060098381548110613a7157613a70614d08565b5b906000526020600020015490508060098381548110613a9357613a92614d08565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480613ae257613ae16159eb565b5b6001900381819060005260206000200160009055905550505050565b6000613b09836117b0565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613bc681613b91565b8114613bd157600080fd5b50565b600081359050613be381613bbd565b92915050565b600060208284031215613bff57613bfe613b87565b5b6000613c0d84828501613bd4565b91505092915050565b60008115159050919050565b613c2b81613c16565b82525050565b6000602082019050613c466000830184613c22565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c86578082015181840152602081019050613c6b565b60008484015250505050565b6000601f19601f8301169050919050565b6000613cae82613c4c565b613cb88185613c57565b9350613cc8818560208601613c68565b613cd181613c92565b840191505092915050565b60006020820190508181036000830152613cf68184613ca3565b905092915050565b6000819050919050565b613d1181613cfe565b8114613d1c57600080fd5b50565b600081359050613d2e81613d08565b92915050565b600060208284031215613d4a57613d49613b87565b5b6000613d5884828501613d1f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d8c82613d61565b9050919050565b613d9c81613d81565b82525050565b6000602082019050613db76000830184613d93565b92915050565b613dc681613d81565b8114613dd157600080fd5b50565b600081359050613de381613dbd565b92915050565b60008060408385031215613e0057613dff613b87565b5b6000613e0e85828601613dd4565b9250506020613e1f85828601613d1f565b9150509250929050565b613e3281613cfe565b82525050565b6000602082019050613e4d6000830184613e29565b92915050565b600060208284031215613e6957613e68613b87565b5b6000613e7784828501613dd4565b91505092915050565b6000819050919050565b613e9381613e80565b8114613e9e57600080fd5b50565b600081359050613eb081613e8a565b92915050565b600060208284031215613ecc57613ecb613b87565b5b6000613eda84828501613ea1565b91505092915050565b613eec81613e80565b82525050565b6000602082019050613f076000830184613ee3565b92915050565b600080600060608486031215613f2657613f25613b87565b5b6000613f3486828701613dd4565b9350506020613f4586828701613dd4565b9250506040613f5686828701613d1f565b9150509250925092565b600060ff82169050919050565b613f7681613f60565b8114613f8157600080fd5b50565b600081359050613f9381613f6d565b92915050565b600080600080600060a08688031215613fb557613fb4613b87565b5b6000613fc388828901613d1f565b9550506020613fd488828901613ea1565b9450506040613fe588828901613f84565b9350506060613ff688828901613ea1565b925050608061400788828901613ea1565b9150509295509295909350565b6000819050919050565b600061403961403461402f84613d61565b614014565b613d61565b9050919050565b600061404b8261401e565b9050919050565b600061405d82614040565b9050919050565b61406d81614052565b82525050565b60006020820190506140886000830184614064565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140d082613c92565b810181811067ffffffffffffffff821117156140ef576140ee614098565b5b80604052505050565b6000614102613b7d565b905061410e82826140c7565b919050565b600067ffffffffffffffff82111561412e5761412d614098565b5b61413782613c92565b9050602081019050919050565b82818337600083830152505050565b600061416661416184614113565b6140f8565b90508281526020810184848401111561418257614181614093565b5b61418d848285614144565b509392505050565b600082601f8301126141aa576141a961408e565b5b81356141ba848260208601614153565b91505092915050565b600080600080600080600060e0888a0312156141e2576141e1613b87565b5b600088013567ffffffffffffffff811115614200576141ff613b8c565b5b61420c8a828b01614195565b975050602061421d8a828b01613d1f565b965050604088013567ffffffffffffffff81111561423e5761423d613b8c565b5b61424a8a828b01614195565b955050606061425b8a828b01613ea1565b945050608061426c8a828b01613f84565b93505060a061427d8a828b01613ea1565b92505060c061428e8a828b01613ea1565b91505092959891949750929550565b6000602082840312156142b3576142b2613b87565b5b600082013567ffffffffffffffff8111156142d1576142d0613b8c565b5b6142dd84828501614195565b91505092915050565b600081519050919050565b600082825260208201905092915050565b600061430d826142e6565b61431781856142f1565b9350614327818560208601613c68565b61433081613c92565b840191505092915050565b600060208201905081810360008301526143558184614302565b905092915050565b60008060008060008060c0878903121561437a57614379613b87565b5b600087013567ffffffffffffffff81111561439857614397613b8c565b5b6143a489828a01614195565b96505060206143b589828a01613d1f565b95505060406143c689828a01613ea1565b94505060606143d789828a01613f84565b93505060806143e889828a01613ea1565b92505060a06143f989828a01613ea1565b9150509295509295509295565b600061441182614040565b9050919050565b61442181614406565b82525050565b600060208201905061443c6000830184614418565b92915050565b600061444d82614040565b9050919050565b61445d81614442565b82525050565b60006020820190506144786000830184614454565b92915050565b61448781613c16565b811461449257600080fd5b50565b6000813590506144a48161447e565b92915050565b600080604083850312156144c1576144c0613b87565b5b60006144cf85828601613dd4565b92505060206144e085828601614495565b9150509250929050565b6000806000806080858703121561450457614503613b87565b5b600061451287828801613dd4565b945050602061452387828801613dd4565b935050604061453487828801613d1f565b925050606085013567ffffffffffffffff81111561455557614554613b8c565b5b61456187828801614195565b91505092959194509250565b6000806040838503121561458457614583613b87565b5b600083013567ffffffffffffffff8111156145a2576145a1613b8c565b5b6145ae85828601614195565b925050602083013567ffffffffffffffff8111156145cf576145ce613b8c565b5b6145db85828601614195565b9150509250929050565b600080604083850312156145fc576145fb613b87565b5b600061460a85828601613dd4565b925050602061461b85828601613dd4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061466c57607f821691505b60208210810361467f5761467e614625565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006146e1602183613c57565b91506146ec82614685565b604082019050919050565b60006020820190508181036000830152614710816146d4565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000614773603d83613c57565b915061477e82614717565b604082019050919050565b600060208201905081810360008301526147a281614766565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006147ea601c836147a9565b91506147f5826147b4565b601c82019050919050565b6000819050919050565b61481b61481682613e80565b614800565b82525050565b600061482c826147dd565b9150614838828461480a565b60208201915081905092915050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006148a3602d83613c57565b91506148ae82614847565b604082019050919050565b600060208201905081810360008301526148d281614896565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614935602b83613c57565b9150614940826148d9565b604082019050919050565b6000602082019050818103600083015261496481614928565b9050919050565b600081905092915050565b50565b600061498660008361496b565b915061499182614976565b600082019050919050565b60006149a782614979565b9150819050919050565b60008160601b9050919050565b60006149c9826149b1565b9050919050565b60006149db826149be565b9050919050565b6149f36149ee82613d81565b6149d0565b82525050565b6000819050919050565b614a14614a0f82613cfe565b6149f9565b82525050565b6000614a2682856149e2565b601482019150614a368284614a03565b6020820191508190509392505050565b7f546865206d736748617368206973206e6f7420612068617368206f662074686560008201527f20746f6b656e49642e20204578706c61696e20796f757273656c662100000000602082015250565b6000614aa2603c83613c57565b9150614aad82614a46565b604082019050919050565b60006020820190508181036000830152614ad181614a95565b9050919050565b614ae181613f60565b82525050565b6000608082019050614afc6000830187613ee3565b614b096020830186614ad8565b614b166040830185613ee3565b614b236060830184613ee3565b95945050505050565b7f5468697320667265654d696e7420776173206e6f74207369676e65642062792060008201527f667265654d696e745369676e65722e2020486f7720656d626172617373696e6760208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b6000614bae604183613c57565b9150614bb982614b2c565b606082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b7f546869732066726565206d696e742049442068617320616c726561647920626560008201527f656e2072656465656d6564000000000000000000000000000000000000000000602082015250565b6000614c40602b83613c57565b9150614c4b82614be4565b604082019050919050565b60006020820190508181036000830152614c6f81614c33565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614cd2602c83613c57565b9150614cdd82614c76565b604082019050919050565b60006020820190508181036000830152614d0181614cc5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000614d6d601883613c57565b9150614d7882614d37565b602082019050919050565b60006020820190508181036000830152614d9c81614d60565b9050919050565b7f596f7520617265206e6f74207065726d697474656420746f206d696e74000000600082015250565b6000614dd9601d83613c57565b9150614de482614da3565b602082019050919050565b60006020820190508181036000830152614e0881614dcc565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e4481613cfe565b82525050565b6000614e568383614e3b565b60208301905092915050565b6000602082019050919050565b6000614e7a82614e0f565b614e848185614e1a565b9350614e8f83614e2b565b8060005b83811015614ec0578151614ea78882614e4a565b9750614eb283614e62565b925050600181019050614e93565b5085935050505092915050565b6000606082019050614ee26000830186613e29565b8181036020830152614ef48185614302565b90508181036040830152614f088184614e6f565b9050949350505050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000614f6e602983613c57565b9150614f7982614f12565b604082019050919050565b60006020820190508181036000830152614f9d81614f61565b9050919050565b7f54686973207075626b657920616c726561647920657869737473000000000000600082015250565b6000614fda601a83613c57565b9150614fe582614fa4565b602082019050919050565b6000602082019050818103600083015261500981614fcd565b9050919050565b7f596f75206d757374207061792065786163746c79206d696e7420636f73740000600082015250565b6000615046601e83613c57565b915061505182615010565b602082019050919050565b6000602082019050818103600083015261507581615039565b9050919050565b60006060820190506150916000830186613e29565b81810360208301526150a38185614302565b90506150b26040830184613d93565b949350505050565b600067ffffffffffffffff8211156150d5576150d4614098565b5b6150de82613c92565b9050602081019050919050565b60006150fe6150f9846150ba565b6140f8565b90508281526020810184848401111561511a57615119614093565b5b615125848285613c68565b509392505050565b600082601f8301126151425761514161408e565b5b81516151528482602086016150eb565b91505092915050565b60006020828403121561517157615170613b87565b5b600082015167ffffffffffffffff81111561518f5761518e613b8c565b5b61519b8482850161512d565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615200602683613c57565b915061520b826151a4565b604082019050919050565b6000602082019050818103600083015261522f816151f3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061526c602083613c57565b915061527782615236565b602082019050919050565b6000602082019050818103600083015261529b8161525f565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006152fe602583613c57565b9150615309826152a2565b604082019050919050565b6000602082019050818103600083015261532d816152f1565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615390602483613c57565b915061539b82615334565b604082019050919050565b600060208201905081810360008301526153bf81615383565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006153fc601f83613c57565b9150615407826153c6565b602082019050919050565b6000602082019050818103600083015261542b816153ef565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026154947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615457565b61549e8683615457565b95508019841693508086168417925050509392505050565b60006154d16154cc6154c784613cfe565b614014565b613cfe565b9050919050565b6000819050919050565b6154eb836154b6565b6154ff6154f7826154d8565b848454615464565b825550505050565b600090565b615514615507565b61551f8184846154e2565b505050565b5b818110156155435761553860008261550c565b600181019050615525565b5050565b601f8211156155885761555981615432565b61556284615447565b81016020851015615571578190505b61558561557d85615447565b830182615524565b50505b505050565b600082821c905092915050565b60006155ab6000198460080261558d565b1980831691505092915050565b60006155c4838361559a565b9150826002028217905092915050565b6155dd826142e6565b67ffffffffffffffff8111156155f6576155f5614098565b5b6156008254614654565b61560b828285615547565b600060209050601f83116001811461563e576000841561562c578287015190505b61563685826155b8565b86555061569e565b601f19841661564c86615432565b60005b828110156156745784890151825560018201915060208501945060208101905061564f565b86831015615691578489015161568d601f89168261559a565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006156dc601983613c57565b91506156e7826156a6565b602082019050919050565b6000602082019050818103600083015261570b816156cf565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061576e603283613c57565b915061577982615712565b604082019050919050565b6000602082019050818103600083015261579d81615761565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006157de82613cfe565b91506157e983613cfe565b9250828201905080821115615801576158006157a4565b5b92915050565b7f736c6963655f6f766572666c6f77000000000000000000000000000000000000600082015250565b600061583d600e83613c57565b915061584882615807565b602082019050919050565b6000602082019050818103600083015261586c81615830565b9050919050565b7f736c6963655f6f75744f66426f756e6473000000000000000000000000000000600082015250565b60006158a9601183613c57565b91506158b482615873565b602082019050919050565b600060208201905081810360008301526158d88161589c565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615915602083613c57565b9150615920826158df565b602082019050919050565b6000602082019050818103600083015261594481615908565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615981601c83613c57565b915061598c8261594b565b602082019050919050565b600060208201905081810360008301526159b081615974565b9050919050565b60006159c282613cfe565b91506159cd83613cfe565b92508282039050818111156159e5576159e46157a4565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000608082019050615a2f6000830187613d93565b615a3c6020830186613d93565b615a496040830185613e29565b8181036060830152615a5b8184614302565b905095945050505050565b600081519050615a7581613bbd565b92915050565b600060208284031215615a9157615a90613b87565b5b6000615a9f84828501615a66565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000615b04603583613c57565b9150615b0f82615aa8565b604082019050919050565b60006020820190508181036000830152615b3381615af7565b905091905056fea26469706673582212201cc65dd2f4cc79db46807c646ae037456b3e6cdb172239e1669f0d80a3f8f5cd64736f6c63430008110033", - "deployedBytecode": "0x60806040526004361061027d5760003560e01c8063715018a61161014f578063a22cb465116100c1578063cc293a2d1161007a578063cc293a2d14610a0b578063de18a50814610a3b578063e985e9c514610a78578063ef6fd87814610ab5578063f2fde38b14610af2578063f4e0d9ac14610b1b5761027d565b8063a22cb465146108e9578063b88d4fde14610912578063b94a21021461093b578063bd4986a014610966578063bdb4b848146109a3578063c87b56dd146109ce5761027d565b80638545f4ea116101135780638545f4ea146107d75780638da5cb5b146108005780639004525f1461082b5780639388f12e1461086857806395d89b411461089357806397016f3f146108be5761027d565b8063715018a6146106ed57806371c9ce13146107045780637ba0e2e7146107415780637bd3e3f614610771578063831324ea146107ae5761027d565b806342842e0e116101f357806356e3a1ae116101ac57806356e3a1ae146105a75780635f49663c146105e45780636352211e1461060d57806364c7605e1461064a5780636f2096371461068757806370a08231146106b05761027d565b806342842e0e1461048757806342966c68146104b05780634c19eae6146104d95780634cf088d9146105025780634f558e791461052d5780634f6ccce71461056a5761027d565b80631ea89a22116102455780631ea89a221461037b5780631f275713146103a457806323b872dd146103e15780632f745c591461040a5780633b189852146104475780633ccfd60b146104705761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063095ea7b31461032757806318160ddd14610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613be9565b610b44565b6040516102b69190613c31565b60405180910390f35b3480156102cb57600080fd5b506102d4610c7e565b6040516102e19190613cdc565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613d34565b610d10565b60405161031e9190613da2565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190613de9565b610d56565b005b34801561035c57600080fd5b50610365610e6d565b6040516103729190613e38565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613e53565b610e7a565b005b3480156103b057600080fd5b506103cb60048036038101906103c69190613eb6565b610f09565b6040516103d89190613ef2565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190613f0d565b610f39565b005b34801561041657600080fd5b50610431600480360381019061042c9190613de9565b610f99565b60405161043e9190613e38565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613e53565b61103e565b005b34801561047c57600080fd5b506104856110cd565b005b34801561049357600080fd5b506104ae60048036038101906104a99190613f0d565b61119b565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190613d34565b6111bb565b005b3480156104e557600080fd5b5061050060048036038101906104fb9190613f99565b611217565b005b34801561050e57600080fd5b506105176113e1565b6040516105249190614073565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613d34565b611407565b6040516105619190613c31565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190613d34565b611419565b60405161059e9190613e38565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190613d34565b61148a565b6040516105db9190613c31565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613e53565b6114aa565b005b34801561061957600080fd5b50610634600480360381019061062f9190613d34565b611539565b6040516106419190613da2565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c91906141c3565b6115bf565b60405161067e9190613e38565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190613e53565b61174d565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190613e53565b6117b0565b6040516106e49190613e38565b60405180910390f35b3480156106f957600080fd5b50610702611867565b005b34801561071057600080fd5b5061072b6004803603810190610726919061429d565b61187b565b6040516107389190613e38565b60405180910390f35b61075b6004803603810190610756919061429d565b6118f6565b6040516107689190613e38565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190613d34565b6119b0565b6040516107a5919061433b565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613e53565b611a50565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190613d34565b611ab3565b005b34801561080c57600080fd5b50610815611afc565b6040516108229190613da2565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d919061435d565b611b26565b60405161085f9190613e38565b60405180910390f35b34801561087457600080fd5b5061087d611bd0565b60405161088a9190614427565b60405180910390f35b34801561089f57600080fd5b506108a8611bf6565b6040516108b59190613cdc565b60405180910390f35b3480156108ca57600080fd5b506108d3611c88565b6040516108e09190614463565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b91906144aa565b611cae565b005b34801561091e57600080fd5b50610939600480360381019061093491906144ea565b611cc4565b005b34801561094757600080fd5b50610950611d26565b60405161095d9190613da2565b60405180910390f35b34801561097257600080fd5b5061098d60048036038101906109889190613d34565b611d4c565b60405161099a9190613da2565b60405180910390f35b3480156109af57600080fd5b506109b8611e1c565b6040516109c59190613e38565b60405180910390f35b3480156109da57600080fd5b506109f560048036038101906109f09190613d34565b611e22565b604051610a029190613cdc565b60405180910390f35b610a256004803603810190610a20919061456d565b611fa6565b604051610a329190613e38565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d9190613e53565b61213a565b604051610a6f9190613e38565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a91906145e5565b612152565b604051610aac9190613c31565b60405180910390f35b348015610ac157600080fd5b50610adc6004803603810190610ad79190613d34565b6121e6565b604051610ae9919061433b565b60405180910390f35b348015610afe57600080fd5b50610b196004803603810190610b149190613e53565b61228b565b005b348015610b2757600080fd5b50610b426004803603810190610b3d9190613e53565b61230e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c0f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c7757507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060008054610c8d90614654565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb990614654565b8015610d065780601f10610cdb57610100808354040283529160200191610d06565b820191906000526020600020905b815481529060010190602001808311610ce957829003601f168201915b5050505050905090565b6000610d1b826123cd565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d6182611539565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc8906146f7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610df0612418565b73ffffffffffffffffffffffffffffffffffffffff161480610e1f5750610e1e81610e19612418565b612152565b5b610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5590614789565b60405180910390fd5b610e688383612420565b505050565b6000600980549050905090565b610e826124d9565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f42d2ac2cd8a457cf976d513bacdc167baa2ff2cd2706c98d222bb035b89d496960405160405180910390a250565b600081604051602001610f1c9190614821565b604051602081830303815290604052805190602001209050919050565b610f4a610f44612418565b82612557565b610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f80906148b9565b60405180910390fd5b610f948383836125ec565b505050565b6000610fa4836117b0565b8210610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc9061494b565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6110466124d9565b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f65d3e06a561c77a07da59b8b2ca10214ae08fe21cc2953a90db0ac8b5b7c437160405160405180910390a250565b6110d56124d9565b6110dd6128e5565b600047905060003373ffffffffffffffffffffffffffffffffffffffff16826040516111089061499c565b60006040518083038185875af1925050503d8060008114611145576040519150601f19603f3d011682016040523d82523d6000602084013e61114a565b606091505b505090508061115857600080fd5b7fb6b476da71cea8275cac6b1720c04966afaff5e637472cedb6cbd32c43a23251826040516111879190613e38565b60405180910390a15050611199612934565b565b6111b683838360405180602001604052806000815250611cc4565b505050565b6111cc6111c6612418565b82612557565b61120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906148b9565b60405180910390fd5b6112148161293e565b50565b600061124a308760405160200161122f929190614a1a565b60405160208183030381529060405280519060200120610f09565b905084811461128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128590614ab8565b60405180910390fd5b6000600186868686604051600081526020016040526040516112b39493929190614ae7565b6020604051602081039080840390855afa1580156112d5573d6000803e3d6000fd5b505050602060405103519050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136890614bc4565b60405180910390fd5b600015156015600089815260200190815260200160002060009054906101000a900460ff161515146113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf90614c56565b60405180910390fd5b50505050505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061141282612a8c565b9050919050565b6000611423610e6d565b8210611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90614ce8565b60405180910390fd5b6009828154811061147857611477614d08565b5b90600052602060002001549050919050565b60156020528060005260406000206000915054906101000a900460ff1681565b6114b26124d9565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f446c3422d569626abc16e1497dfa8270f1192bd56ea9ec8890b09705ddc275ad60405160405180910390a250565b60008061154583612acd565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90614d83565b60405180910390fd5b80915050919050565b60006115d5326011612b0a90919063ffffffff16565b611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b90614def565b60405180910390fd5b6116218786868686611217565b600061162d8930612b3a565b90506001601560008a815260200190815260200160002060006101000a81548160ff021916908315150217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a4315788289600067ffffffffffffffff8111156116b6576116b5614098565b5b6040519080825280602002602001820160405280156116e45781602001602082028036833780820191505090505b506040518463ffffffff1660e01b815260040161170393929190614ecd565b600060405180830381600087803b15801561171d57600080fd5b505af1158015611731573d6000803e3d6000fd5b5050505061173e8161293e565b80915050979650505050505050565b6117556124d9565b611769816011612c7690919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167f44f4322f8daa225d5f4877ad0f7d3dfba248a774396f3ca99405ed40a044fe8160405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790614f84565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61186f6124d9565b6118796000612ca6565b565b600080828051906020012060001c905060006013600083815260200190815260200160002080546118ab90614654565b9050146118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e490614ff0565b60405180910390fd5b80915050919050565b6000600e54341461193c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119339061505c565b60405180910390fd5b611950326011612b0a90919063ffffffff16565b61198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690614def565b60405180910390fd5b600061199a8361187b565b90506119a68333612b3a565b5080915050919050565b601360205280600052604060002060009150905080546119cf90614654565b80601f01602080910402602001604051908101604052809291908181526020018280546119fb90614654565b8015611a485780601f10611a1d57610100808354040283529160200191611a48565b820191906000526020600020905b815481529060010190602001808311611a2b57829003601f168201915b505050505081565b611a586124d9565b611a6c81601161239d90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167fcddac40078270fda4a2cd64a6089b372413df61e8de795e484d9c054c44ce16f60405160405180910390a250565b611abb6124d9565b80600e819055507f653b8b44976b2e5c016e082d134653d04dea9dbef92055038cca38c93007035581604051611af19190613e38565b60405180910390a150565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611b3c326011612b0a90919063ffffffff16565b611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7290614def565b60405180910390fd5b611b888686868686611217565b6000611b948833612b3a565b905060016015600089815260200190815260200160002060006101000a81548160ff021916908315150217905550809150509695505050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611c0590614654565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3190614654565b8015611c7e5780601f10611c5357610100808354040283529160200191611c7e565b820191906000526020600020905b815481529060010190602001808311611c6157829003601f168201915b5050505050905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cc0611cb9612418565b8383612d6c565b5050565b611cd5611ccf612418565b83612557565b611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b906148b9565b60405180910390fd5b611d2084848484612ed8565b50505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611e0160016040601360008781526020019081526020016000208054611d7490614654565b80601f0160208091040260200160405190810160405280929190818152602001828054611da090614654565b8015611ded5780601f10611dc257610100808354040283529160200191611ded565b820191906000526020600020905b815481529060010190602001808311611dd057829003601f168201915b5050505050612f349092919063ffffffff16565b90506000818051906020012090508060001c92505050919050565b600e5481565b6060611e626040518060400160405280601181526020017f67657474696e6720746f6b656e20757269000000000000000000000000000000815250613052565b6000611e6d836121e6565b9050611ead6040518060400160405280601f81526020017f676f74207075626b65792c2067657474696e6720657468206164647265737300815250613052565b6000611eb884611d4c565b9050611ef86040518060400160405280601081526020017f63616c6c696e6720746f6b656e55524900000000000000000000000000000000815250613052565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663950462ee8584846040518463ffffffff1660e01b8152600401611f579392919061507c565b600060405180830381865afa158015611f74573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611f9d919061515b565b92505050919050565b6000600e543414611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe39061505c565b60405180910390fd5b612000326011612b0a90919063ffffffff16565b61203f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203690614def565b60405180910390fd5b600061204b8430612b3a565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a4315788285600067ffffffffffffffff8111156120a8576120a7614098565b5b6040519080825280602002602001820160405280156120d65781602001602082028036833780820191505090505b506040518463ffffffff1660e01b81526004016120f593929190614ecd565b600060405180830381600087803b15801561210f57600080fd5b505af1158015612123573d6000803e3d6000fd5b505050506121308161293e565b8091505092915050565b60146020528060005260406000206000915090505481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060136000838152602001908152602001600020805461220690614654565b80601f016020809104026020016040519081016040528092919081815260200182805461223290614654565b801561227f5780601f106122545761010080835404028352916020019161227f565b820191906000526020600020905b81548152906001019060200180831161226257829003601f168201915b50505050509050919050565b6122936124d9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f990615216565b60405180910390fd5b61230b81612ca6565b50565b6123166124d9565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f524b317898d91e941d8311edbdd1bf568e07309f08e11f7ef94c053a9e35f91860405160405180910390a250565b60006123c5836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6130eb565b905092915050565b6123d681612a8c565b612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c90614d83565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661249383611539565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6124e1612418565b73ffffffffffffffffffffffffffffffffffffffff166124ff611afc565b73ffffffffffffffffffffffffffffffffffffffff1614612555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254c90615282565b60405180910390fd5b565b60008061256383611539565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125a557506125a48185612152565b5b806125e357508373ffffffffffffffffffffffffffffffffffffffff166125cb84610d10565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661260c82611539565b73ffffffffffffffffffffffffffffffffffffffff1614612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990615314565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c8906153a6565b60405180910390fd5b6126de838383600161315b565b8273ffffffffffffffffffffffffffffffffffffffff166126fe82611539565b73ffffffffffffffffffffffffffffffffffffffff1614612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b90615314565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128e0838383600161316d565b505050565b6002600b540361292a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292190615412565b60405180910390fd5b6002600b81905550565b6001600b81905550565b600061294982611539565b905061295981600084600161315b565b61296282611539565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a8881600084600161316d565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff16612aae83612acd565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000612b32836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613173565b905092915050565b600080838051906020012060001c90506000601360008381526020019081526020016000208054612b6a90614654565b905014612bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba390614ff0565b60405180910390fd5b83601360008381526020019081526020016000209081612bcc91906155d4565b506000612bd882611d4c565b905081601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c6057612c5b8483613196565b612c6b565b612c6a84836133b3565b5b819250505092915050565b6000612c9e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6133d1565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd1906156f2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612ecb9190613c31565b60405180910390a3505050565b612ee38484846125ec565b612eef848484846134e5565b612f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2590615784565b60405180910390fd5b50505050565b606081601f83612f4491906157d3565b1015612f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7c90615853565b60405180910390fd5b8183612f9191906157d3565b84511015612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcb906158bf565b60405180910390fd5b6060821560008114612ff55760405191506000825260208201604052613046565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156130335780518352602083019250602081019050613016565b50868552601f19601f8301166040525050505b50809150509392505050565b6130e8816040516024016130669190613cdc565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061366c565b50565b60006130f78383613173565b613150578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050613155565b600090505b92915050565b61316784848484613695565b50505050565b50505050565b600080836001016000848152602001908152602001600020541415905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fc9061592b565b60405180910390fd5b61320e81612a8c565b1561324e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324590615997565b60405180910390fd5b61325c60008383600161315b565b61326581612a8c565b156132a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329c90615997565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133af60008383600161316d565b5050565b6133cd8282604051806020016040528060008152506137f3565b5050565b600080836001016000848152602001908152602001600020549050600081146134d957600060018261340391906159b7565b905060006001866000018054905061341b91906159b7565b905081811461348a57600086600001828154811061343c5761343b614d08565b5b90600052602060002001549050808760000184815481106134605761345f614d08565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061349e5761349d6159eb565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506134df565b60009150505b92915050565b60006135068473ffffffffffffffffffffffffffffffffffffffff1661384e565b1561365f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261352f612418565b8786866040518563ffffffff1660e01b81526004016135519493929190615a1a565b6020604051808303816000875af192505050801561358d57506040513d601f19601f8201168201806040525081019061358a9190615a7b565b60015b61360f573d80600081146135bd576040519150601f19603f3d011682016040523d82523d6000602084013e6135c2565b606091505b506000815103613607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fe90615784565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613664565b600190505b949350505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b6136a184848484613871565b60018111156136e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136dc90615b1a565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361372c5761372781613877565b61376b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461376a5761376985826138c0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036137ad576137a881613a2d565b6137ec565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146137eb576137ea8482613afe565b5b5b5050505050565b6137fd8383613196565b61380a60008484846134e5565b613849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384090615784565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b50505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016138cd846117b0565b6138d791906159b7565b90506000600860008481526020019081526020016000205490508181146139bc576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050613a4191906159b7565b90506000600a6000848152602001908152602001600020549050600060098381548110613a7157613a70614d08565b5b906000526020600020015490508060098381548110613a9357613a92614d08565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480613ae257613ae16159eb565b5b6001900381819060005260206000200160009055905550505050565b6000613b09836117b0565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613bc681613b91565b8114613bd157600080fd5b50565b600081359050613be381613bbd565b92915050565b600060208284031215613bff57613bfe613b87565b5b6000613c0d84828501613bd4565b91505092915050565b60008115159050919050565b613c2b81613c16565b82525050565b6000602082019050613c466000830184613c22565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c86578082015181840152602081019050613c6b565b60008484015250505050565b6000601f19601f8301169050919050565b6000613cae82613c4c565b613cb88185613c57565b9350613cc8818560208601613c68565b613cd181613c92565b840191505092915050565b60006020820190508181036000830152613cf68184613ca3565b905092915050565b6000819050919050565b613d1181613cfe565b8114613d1c57600080fd5b50565b600081359050613d2e81613d08565b92915050565b600060208284031215613d4a57613d49613b87565b5b6000613d5884828501613d1f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d8c82613d61565b9050919050565b613d9c81613d81565b82525050565b6000602082019050613db76000830184613d93565b92915050565b613dc681613d81565b8114613dd157600080fd5b50565b600081359050613de381613dbd565b92915050565b60008060408385031215613e0057613dff613b87565b5b6000613e0e85828601613dd4565b9250506020613e1f85828601613d1f565b9150509250929050565b613e3281613cfe565b82525050565b6000602082019050613e4d6000830184613e29565b92915050565b600060208284031215613e6957613e68613b87565b5b6000613e7784828501613dd4565b91505092915050565b6000819050919050565b613e9381613e80565b8114613e9e57600080fd5b50565b600081359050613eb081613e8a565b92915050565b600060208284031215613ecc57613ecb613b87565b5b6000613eda84828501613ea1565b91505092915050565b613eec81613e80565b82525050565b6000602082019050613f076000830184613ee3565b92915050565b600080600060608486031215613f2657613f25613b87565b5b6000613f3486828701613dd4565b9350506020613f4586828701613dd4565b9250506040613f5686828701613d1f565b9150509250925092565b600060ff82169050919050565b613f7681613f60565b8114613f8157600080fd5b50565b600081359050613f9381613f6d565b92915050565b600080600080600060a08688031215613fb557613fb4613b87565b5b6000613fc388828901613d1f565b9550506020613fd488828901613ea1565b9450506040613fe588828901613f84565b9350506060613ff688828901613ea1565b925050608061400788828901613ea1565b9150509295509295909350565b6000819050919050565b600061403961403461402f84613d61565b614014565b613d61565b9050919050565b600061404b8261401e565b9050919050565b600061405d82614040565b9050919050565b61406d81614052565b82525050565b60006020820190506140886000830184614064565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140d082613c92565b810181811067ffffffffffffffff821117156140ef576140ee614098565b5b80604052505050565b6000614102613b7d565b905061410e82826140c7565b919050565b600067ffffffffffffffff82111561412e5761412d614098565b5b61413782613c92565b9050602081019050919050565b82818337600083830152505050565b600061416661416184614113565b6140f8565b90508281526020810184848401111561418257614181614093565b5b61418d848285614144565b509392505050565b600082601f8301126141aa576141a961408e565b5b81356141ba848260208601614153565b91505092915050565b600080600080600080600060e0888a0312156141e2576141e1613b87565b5b600088013567ffffffffffffffff811115614200576141ff613b8c565b5b61420c8a828b01614195565b975050602061421d8a828b01613d1f565b965050604088013567ffffffffffffffff81111561423e5761423d613b8c565b5b61424a8a828b01614195565b955050606061425b8a828b01613ea1565b945050608061426c8a828b01613f84565b93505060a061427d8a828b01613ea1565b92505060c061428e8a828b01613ea1565b91505092959891949750929550565b6000602082840312156142b3576142b2613b87565b5b600082013567ffffffffffffffff8111156142d1576142d0613b8c565b5b6142dd84828501614195565b91505092915050565b600081519050919050565b600082825260208201905092915050565b600061430d826142e6565b61431781856142f1565b9350614327818560208601613c68565b61433081613c92565b840191505092915050565b600060208201905081810360008301526143558184614302565b905092915050565b60008060008060008060c0878903121561437a57614379613b87565b5b600087013567ffffffffffffffff81111561439857614397613b8c565b5b6143a489828a01614195565b96505060206143b589828a01613d1f565b95505060406143c689828a01613ea1565b94505060606143d789828a01613f84565b93505060806143e889828a01613ea1565b92505060a06143f989828a01613ea1565b9150509295509295509295565b600061441182614040565b9050919050565b61442181614406565b82525050565b600060208201905061443c6000830184614418565b92915050565b600061444d82614040565b9050919050565b61445d81614442565b82525050565b60006020820190506144786000830184614454565b92915050565b61448781613c16565b811461449257600080fd5b50565b6000813590506144a48161447e565b92915050565b600080604083850312156144c1576144c0613b87565b5b60006144cf85828601613dd4565b92505060206144e085828601614495565b9150509250929050565b6000806000806080858703121561450457614503613b87565b5b600061451287828801613dd4565b945050602061452387828801613dd4565b935050604061453487828801613d1f565b925050606085013567ffffffffffffffff81111561455557614554613b8c565b5b61456187828801614195565b91505092959194509250565b6000806040838503121561458457614583613b87565b5b600083013567ffffffffffffffff8111156145a2576145a1613b8c565b5b6145ae85828601614195565b925050602083013567ffffffffffffffff8111156145cf576145ce613b8c565b5b6145db85828601614195565b9150509250929050565b600080604083850312156145fc576145fb613b87565b5b600061460a85828601613dd4565b925050602061461b85828601613dd4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061466c57607f821691505b60208210810361467f5761467e614625565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006146e1602183613c57565b91506146ec82614685565b604082019050919050565b60006020820190508181036000830152614710816146d4565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000614773603d83613c57565b915061477e82614717565b604082019050919050565b600060208201905081810360008301526147a281614766565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006147ea601c836147a9565b91506147f5826147b4565b601c82019050919050565b6000819050919050565b61481b61481682613e80565b614800565b82525050565b600061482c826147dd565b9150614838828461480a565b60208201915081905092915050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006148a3602d83613c57565b91506148ae82614847565b604082019050919050565b600060208201905081810360008301526148d281614896565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614935602b83613c57565b9150614940826148d9565b604082019050919050565b6000602082019050818103600083015261496481614928565b9050919050565b600081905092915050565b50565b600061498660008361496b565b915061499182614976565b600082019050919050565b60006149a782614979565b9150819050919050565b60008160601b9050919050565b60006149c9826149b1565b9050919050565b60006149db826149be565b9050919050565b6149f36149ee82613d81565b6149d0565b82525050565b6000819050919050565b614a14614a0f82613cfe565b6149f9565b82525050565b6000614a2682856149e2565b601482019150614a368284614a03565b6020820191508190509392505050565b7f546865206d736748617368206973206e6f7420612068617368206f662074686560008201527f20746f6b656e49642e20204578706c61696e20796f757273656c662100000000602082015250565b6000614aa2603c83613c57565b9150614aad82614a46565b604082019050919050565b60006020820190508181036000830152614ad181614a95565b9050919050565b614ae181613f60565b82525050565b6000608082019050614afc6000830187613ee3565b614b096020830186614ad8565b614b166040830185613ee3565b614b236060830184613ee3565b95945050505050565b7f5468697320667265654d696e7420776173206e6f74207369676e65642062792060008201527f667265654d696e745369676e65722e2020486f7720656d626172617373696e6760208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b6000614bae604183613c57565b9150614bb982614b2c565b606082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b7f546869732066726565206d696e742049442068617320616c726561647920626560008201527f656e2072656465656d6564000000000000000000000000000000000000000000602082015250565b6000614c40602b83613c57565b9150614c4b82614be4565b604082019050919050565b60006020820190508181036000830152614c6f81614c33565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614cd2602c83613c57565b9150614cdd82614c76565b604082019050919050565b60006020820190508181036000830152614d0181614cc5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000614d6d601883613c57565b9150614d7882614d37565b602082019050919050565b60006020820190508181036000830152614d9c81614d60565b9050919050565b7f596f7520617265206e6f74207065726d697474656420746f206d696e74000000600082015250565b6000614dd9601d83613c57565b9150614de482614da3565b602082019050919050565b60006020820190508181036000830152614e0881614dcc565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e4481613cfe565b82525050565b6000614e568383614e3b565b60208301905092915050565b6000602082019050919050565b6000614e7a82614e0f565b614e848185614e1a565b9350614e8f83614e2b565b8060005b83811015614ec0578151614ea78882614e4a565b9750614eb283614e62565b925050600181019050614e93565b5085935050505092915050565b6000606082019050614ee26000830186613e29565b8181036020830152614ef48185614302565b90508181036040830152614f088184614e6f565b9050949350505050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000614f6e602983613c57565b9150614f7982614f12565b604082019050919050565b60006020820190508181036000830152614f9d81614f61565b9050919050565b7f54686973207075626b657920616c726561647920657869737473000000000000600082015250565b6000614fda601a83613c57565b9150614fe582614fa4565b602082019050919050565b6000602082019050818103600083015261500981614fcd565b9050919050565b7f596f75206d757374207061792065786163746c79206d696e7420636f73740000600082015250565b6000615046601e83613c57565b915061505182615010565b602082019050919050565b6000602082019050818103600083015261507581615039565b9050919050565b60006060820190506150916000830186613e29565b81810360208301526150a38185614302565b90506150b26040830184613d93565b949350505050565b600067ffffffffffffffff8211156150d5576150d4614098565b5b6150de82613c92565b9050602081019050919050565b60006150fe6150f9846150ba565b6140f8565b90508281526020810184848401111561511a57615119614093565b5b615125848285613c68565b509392505050565b600082601f8301126151425761514161408e565b5b81516151528482602086016150eb565b91505092915050565b60006020828403121561517157615170613b87565b5b600082015167ffffffffffffffff81111561518f5761518e613b8c565b5b61519b8482850161512d565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615200602683613c57565b915061520b826151a4565b604082019050919050565b6000602082019050818103600083015261522f816151f3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061526c602083613c57565b915061527782615236565b602082019050919050565b6000602082019050818103600083015261529b8161525f565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006152fe602583613c57565b9150615309826152a2565b604082019050919050565b6000602082019050818103600083015261532d816152f1565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615390602483613c57565b915061539b82615334565b604082019050919050565b600060208201905081810360008301526153bf81615383565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006153fc601f83613c57565b9150615407826153c6565b602082019050919050565b6000602082019050818103600083015261542b816153ef565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026154947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615457565b61549e8683615457565b95508019841693508086168417925050509392505050565b60006154d16154cc6154c784613cfe565b614014565b613cfe565b9050919050565b6000819050919050565b6154eb836154b6565b6154ff6154f7826154d8565b848454615464565b825550505050565b600090565b615514615507565b61551f8184846154e2565b505050565b5b818110156155435761553860008261550c565b600181019050615525565b5050565b601f8211156155885761555981615432565b61556284615447565b81016020851015615571578190505b61558561557d85615447565b830182615524565b50505b505050565b600082821c905092915050565b60006155ab6000198460080261558d565b1980831691505092915050565b60006155c4838361559a565b9150826002028217905092915050565b6155dd826142e6565b67ffffffffffffffff8111156155f6576155f5614098565b5b6156008254614654565b61560b828285615547565b600060209050601f83116001811461563e576000841561562c578287015190505b61563685826155b8565b86555061569e565b601f19841661564c86615432565b60005b828110156156745784890151825560018201915060208501945060208101905061564f565b86831015615691578489015161568d601f89168261559a565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006156dc601983613c57565b91506156e7826156a6565b602082019050919050565b6000602082019050818103600083015261570b816156cf565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061576e603283613c57565b915061577982615712565b604082019050919050565b6000602082019050818103600083015261579d81615761565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006157de82613cfe565b91506157e983613cfe565b9250828201905080821115615801576158006157a4565b5b92915050565b7f736c6963655f6f766572666c6f77000000000000000000000000000000000000600082015250565b600061583d600e83613c57565b915061584882615807565b602082019050919050565b6000602082019050818103600083015261586c81615830565b9050919050565b7f736c6963655f6f75744f66426f756e6473000000000000000000000000000000600082015250565b60006158a9601183613c57565b91506158b482615873565b602082019050919050565b600060208201905081810360008301526158d88161589c565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615915602083613c57565b9150615920826158df565b602082019050919050565b6000602082019050818103600083015261594481615908565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615981601c83613c57565b915061598c8261594b565b602082019050919050565b600060208201905081810360008301526159b081615974565b9050919050565b60006159c282613cfe565b91506159cd83613cfe565b92508282039050818111156159e5576159e46157a4565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000608082019050615a2f6000830187613d93565b615a3c6020830186613d93565b615a496040830185613e29565b8181036060830152615a5b8184614302565b905095945050505050565b600081519050615a7581613bbd565b92915050565b600060208284031215615a9157615a90613b87565b5b6000615a9f84828501615a66565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000615b04603583613c57565b9150615b0f82615aa8565b604082019050919050565b60006020820190508181036000830152615b3381615af7565b905091905056fea26469706673582212201cc65dd2f4cc79db46807c646ae037456b3e6cdb172239e1669f0d80a3f8f5cd64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/contracts/cayenne/SoloNetPKPHelper.json b/contracts/cayenne/SoloNetPKPHelper.json deleted file mode 100644 index b4f2c43..0000000 --- a/contracts/cayenne/SoloNetPKPHelper.json +++ /dev/null @@ -1,283 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SoloNetPKPHelper", - "sourceName": "contracts/lit-node/SoloNetPKPHelper.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_pkpNft", - "type": "address" - }, - { - "internalType": "address", - "name": "_pkpPermissions", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "name": "mintAndAddAuthMethods", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "bytes[]", - "name": "permittedIpfsCIDs", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedIpfsCIDScopes", - "type": "uint256[][]" - }, - { - "internalType": "address[]", - "name": "permittedAddresses", - "type": "address[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAddressScopes", - "type": "uint256[][]" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "name": "mintAndAddAuthMethodsWithTypes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC721Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpNFT", - "outputs": [ - { - "internalType": "contract SoloNetPKP", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpPermissions", - "outputs": [ - { - "internalType": "contract PKPPermissions", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPkpNftAddress", - "type": "address" - } - ], - "name": "setPkpNftAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPkpPermissionsAddress", - "type": "address" - } - ], - "name": "setPkpPermissionsAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b506040516200254d3803806200254d833981810160405281019062000037919062000217565b620000576200004b620000e160201b60201c565b620000e960201b60201c565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200025e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001df82620001b2565b9050919050565b620001f181620001d2565b8114620001fd57600080fd5b50565b6000815190506200021181620001e6565b92915050565b60008060408385031215620002315762000230620001ad565b5b6000620002418582860162000200565b9250506020620002548582860162000200565b9150509250929050565b6122df806200026e6000396000f3fe6080604052600436106100915760003560e01c8063715018a611610059578063715018a6146101855780638da5cb5b1461019c57806397016f3f146101c7578063f2fde38b146101f2578063ffa2e9531461021b57610091565b8063150b7a0214610096578063176354fd146100d35780631ea89a22146100fc578063208f08c41461012557806358176bce14610155575b600080fd5b3480156100a257600080fd5b506100bd60048036038101906100b89190611011565b610246565b6040516100ca91906110d4565b60405180910390f35b3480156100df57600080fd5b506100fa60048036038101906100f591906110ef565b6102eb565b005b34801561010857600080fd5b50610123600480360381019061011e91906110ef565b610337565b005b61013f600480360381019061013a91906115dd565b610383565b60405161014c91906117dc565b60405180910390f35b61016f600480360381019061016a91906117f7565b610b59565b60405161017c91906117dc565b60405180910390f35b34801561019157600080fd5b5061019a610cae565b005b3480156101a857600080fd5b506101b1610cc2565b6040516101be9190611934565b60405180910390f35b3480156101d357600080fd5b506101dc610ceb565b6040516101e991906119ae565b60405180910390f35b3480156101fe57600080fd5b50610219600480360381019061021491906110ef565b610d11565b005b34801561022757600080fd5b50610230610d94565b60405161023d91906119ea565b60405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102cf90611a88565b60405180910390fd5b63150b7a0260e01b905095945050505050565b6102f3610dba565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61033f610dba565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ba0e2e7348f6040518363ffffffff1660e01b81526004016103e29190611b27565b60206040518083038185885af1158015610400573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906104259190611b5e565b90508a518c511461046b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046290611bfd565b60405180910390fd5b88518a51146104af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a690611c8f565b60405180910390fd5b86518851146104f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ea90611d21565b60405180910390fd5b8551885114610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611db3565b60405180910390fd5b845188511461057b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057290611e45565b60405180910390fd5b60008c511461066a5760005b8c5181101561066857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a431578838f84815181106105e2576105e1611e65565b5b60200260200101518f85815181106105fd576105fc611e65565b5b60200260200101516040518463ffffffff1660e01b815260040161062393929190611f52565b600060405180830381600087803b15801561063d57600080fd5b505af1158015610651573d6000803e3d6000fd5b50505050808061066090611fc6565b915050610587565b505b60008a51146107595760005b8a5181101561075757600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631663c121838d84815181106106d1576106d0611e65565b5b60200260200101518d85815181106106ec576106eb611e65565b5b60200260200101516040518463ffffffff1660e01b81526004016107129392919061200e565b600060405180830381600087803b15801561072c57600080fd5b505af1158015610740573d6000803e3d6000fd5b50505050808061074f90611fc6565b915050610676565b505b60008851146108965760005b885181101561089457600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dd4349b8360405180606001604052808d86815181106107cb576107ca611e65565b5b602002602001015181526020018c86815181106107eb576107ea611e65565b5b602002602001015181526020018b868151811061080b5761080a611e65565b5b602002602001015181525089858151811061082957610828611e65565b5b60200260200101516040518463ffffffff1660e01b815260040161084f939291906120ed565b600060405180830381600087803b15801561086957600080fd5b505af115801561087d573d6000803e3d6000fd5b50505050808061088c90611fc6565b915050610765565b505b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd4986a0836040518263ffffffff1660e01b81526004016108f391906117dc565b602060405180830381865afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109349190612147565b90508415610a1757600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631663c1218383600067ffffffffffffffff81111561099757610996611132565b5b6040519080825280602002602001820160405280156109c55781602001602082028036833780820191505090505b506040518463ffffffff1660e01b81526004016109e49392919061200e565b600060405180830381600087803b1580156109fe57600080fd5b505af1158015610a12573d6000803e3d6000fd5b505050505b8315610ab357600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401610a7c93929190612174565b600060405180830381600087803b158015610a9657600080fd5b505af1158015610aaa573d6000803e3d6000fd5b50505050610b45565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033856040518463ffffffff1660e01b8152600401610b1293929190612174565b600060405180830381600087803b158015610b2c57600080fd5b505af1158015610b40573d6000803e3d6000fd5b505050505b81925050509b9a5050505050505050505050565b6000610ca188600067ffffffffffffffff811115610b7a57610b79611132565b5b604051908082528060200260200182016040528015610bad57816020015b6060815260200190600190039081610b985790505b50600067ffffffffffffffff811115610bc957610bc8611132565b5b604051908082528060200260200182016040528015610bfc57816020015b6060815260200190600190039081610be75790505b50600067ffffffffffffffff811115610c1857610c17611132565b5b604051908082528060200260200182016040528015610c465781602001602082028036833780820191505090505b50600067ffffffffffffffff811115610c6257610c61611132565b5b604051908082528060200260200182016040528015610c9557816020015b6060815260200190600190039081610c805790505b508c8c8c8c8c8c610383565b9050979650505050505050565b610cb6610dba565b610cc06000610e38565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d19610dba565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f9061221d565b60405180910390fd5b610d9181610e38565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610dc2610efc565b73ffffffffffffffffffffffffffffffffffffffff16610de0610cc2565b73ffffffffffffffffffffffffffffffffffffffff1614610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90612289565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f4382610f18565b9050919050565b610f5381610f38565b8114610f5e57600080fd5b50565b600081359050610f7081610f4a565b92915050565b6000819050919050565b610f8981610f76565b8114610f9457600080fd5b50565b600081359050610fa681610f80565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610fd157610fd0610fac565b5b8235905067ffffffffffffffff811115610fee57610fed610fb1565b5b60208301915083600182028301111561100a57611009610fb6565b5b9250929050565b60008060008060006080868803121561102d5761102c610f0e565b5b600061103b88828901610f61565b955050602061104c88828901610f61565b945050604061105d88828901610f97565b935050606086013567ffffffffffffffff81111561107e5761107d610f13565b5b61108a88828901610fbb565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6110ce81611099565b82525050565b60006020820190506110e960008301846110c5565b92915050565b60006020828403121561110557611104610f0e565b5b600061111384828501610f61565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61116a82611121565b810181811067ffffffffffffffff8211171561118957611188611132565b5b80604052505050565b600061119c610f04565b90506111a88282611161565b919050565b600067ffffffffffffffff8211156111c8576111c7611132565b5b6111d182611121565b9050602081019050919050565b82818337600083830152505050565b60006112006111fb846111ad565b611192565b90508281526020810184848401111561121c5761121b61111c565b5b6112278482856111de565b509392505050565b600082601f83011261124457611243610fac565b5b81356112548482602086016111ed565b91505092915050565b600067ffffffffffffffff82111561127857611277611132565b5b602082029050602081019050919050565b600061129c6112978461125d565b611192565b905080838252602082019050602084028301858111156112bf576112be610fb6565b5b835b8181101561130657803567ffffffffffffffff8111156112e4576112e3610fac565b5b8086016112f1898261122f565b855260208501945050506020810190506112c1565b5050509392505050565b600082601f83011261132557611324610fac565b5b8135611335848260208601611289565b91505092915050565b600067ffffffffffffffff82111561135957611358611132565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561138557611384611132565b5b602082029050602081019050919050565b60006113a96113a48461136a565b611192565b905080838252602082019050602084028301858111156113cc576113cb610fb6565b5b835b818110156113f557806113e18882610f97565b8452602084019350506020810190506113ce565b5050509392505050565b600082601f83011261141457611413610fac565b5b8135611424848260208601611396565b91505092915050565b600061144061143b8461133e565b611192565b9050808382526020820190506020840283018581111561146357611462610fb6565b5b835b818110156114aa57803567ffffffffffffffff81111561148857611487610fac565b5b80860161149589826113ff565b85526020850194505050602081019050611465565b5050509392505050565b600082601f8301126114c9576114c8610fac565b5b81356114d984826020860161142d565b91505092915050565b600067ffffffffffffffff8211156114fd576114fc611132565b5b602082029050602081019050919050565b600061152161151c846114e2565b611192565b9050808382526020820190506020840283018581111561154457611543610fb6565b5b835b8181101561156d57806115598882610f61565b845260208401935050602081019050611546565b5050509392505050565b600082601f83011261158c5761158b610fac565b5b813561159c84826020860161150e565b91505092915050565b60008115159050919050565b6115ba816115a5565b81146115c557600080fd5b50565b6000813590506115d7816115b1565b92915050565b60008060008060008060008060008060006101608c8e03121561160357611602610f0e565b5b60008c013567ffffffffffffffff81111561162157611620610f13565b5b61162d8e828f0161122f565b9b505060208c013567ffffffffffffffff81111561164e5761164d610f13565b5b61165a8e828f01611310565b9a505060408c013567ffffffffffffffff81111561167b5761167a610f13565b5b6116878e828f016114b4565b99505060608c013567ffffffffffffffff8111156116a8576116a7610f13565b5b6116b48e828f01611577565b98505060808c013567ffffffffffffffff8111156116d5576116d4610f13565b5b6116e18e828f016114b4565b97505060a08c013567ffffffffffffffff81111561170257611701610f13565b5b61170e8e828f016113ff565b96505060c08c013567ffffffffffffffff81111561172f5761172e610f13565b5b61173b8e828f01611310565b95505060e08c013567ffffffffffffffff81111561175c5761175b610f13565b5b6117688e828f01611310565b9450506101008c013567ffffffffffffffff81111561178a57611789610f13565b5b6117968e828f016114b4565b9350506101206117a88e828f016115c8565b9250506101406117ba8e828f016115c8565b9150509295989b509295989b9093969950565b6117d681610f76565b82525050565b60006020820190506117f160008301846117cd565b92915050565b600080600080600080600060e0888a03121561181657611815610f0e565b5b600088013567ffffffffffffffff81111561183457611833610f13565b5b6118408a828b0161122f565b975050602088013567ffffffffffffffff81111561186157611860610f13565b5b61186d8a828b016113ff565b965050604088013567ffffffffffffffff81111561188e5761188d610f13565b5b61189a8a828b01611310565b955050606088013567ffffffffffffffff8111156118bb576118ba610f13565b5b6118c78a828b01611310565b945050608088013567ffffffffffffffff8111156118e8576118e7610f13565b5b6118f48a828b016114b4565b93505060a06119058a828b016115c8565b92505060c06119168a828b016115c8565b91505092959891949750929550565b61192e81610f38565b82525050565b60006020820190506119496000830184611925565b92915050565b6000819050919050565b600061197461196f61196a84610f18565b61194f565b610f18565b9050919050565b600061198682611959565b9050919050565b60006119988261197b565b9050919050565b6119a88161198d565b82525050565b60006020820190506119c3600083018461199f565b92915050565b60006119d48261197b565b9050919050565b6119e4816119c9565b82525050565b60006020820190506119ff60008301846119db565b92915050565b600082825260208201905092915050565b7f504b5048656c7065723a206f6e6c792061636365707473207472616e7366657260008201527f732066726f6d2074686520504b504e465420636f6e7472616374000000000000602082015250565b6000611a72603a83611a05565b9150611a7d82611a16565b604082019050919050565b60006020820190508181036000830152611aa181611a65565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ae2578082015181840152602081019050611ac7565b60008484015250505050565b6000611af982611aa8565b611b038185611ab3565b9350611b13818560208601611ac4565b611b1c81611121565b840191505092915050565b60006020820190508181036000830152611b418184611aee565b905092915050565b600081519050611b5881610f80565b92915050565b600060208284031215611b7457611b73610f0e565b5b6000611b8284828501611b49565b91505092915050565b7f504b5048656c7065723a20697066732063696420616e642073636f706520617260008201527f726179206c656e67746873206d757374206d6174636800000000000000000000602082015250565b6000611be7603683611a05565b9150611bf282611b8b565b604082019050919050565b60006020820190508181036000830152611c1681611bda565b9050919050565b7f504b5048656c7065723a206164647265737320616e642073636f70652061727260008201527f6179206c656e67746873206d757374206d617463680000000000000000000000602082015250565b6000611c79603583611a05565b9150611c8482611c1d565b604082019050919050565b60006020820190508181036000830152611ca881611c6c565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f6964206172726179206c656e67746873206d757374206d617463680000000000602082015250565b6000611d0b603b83611a05565b9150611d1682611caf565b604082019050919050565b60006020820190508181036000830152611d3a81611cfe565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800602082015250565b6000611d9d603f83611a05565b9150611da882611d41565b604082019050919050565b60006020820190508181036000830152611dcc81611d90565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f73636f706573206172726179206c656e67746873206d757374206d6174636800602082015250565b6000611e2f603f83611a05565b9150611e3a82611dd3565b604082019050919050565b60006020820190508181036000830152611e5e81611e22565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611ec981610f76565b82525050565b6000611edb8383611ec0565b60208301905092915050565b6000602082019050919050565b6000611eff82611e94565b611f098185611e9f565b9350611f1483611eb0565b8060005b83811015611f45578151611f2c8882611ecf565b9750611f3783611ee7565b925050600181019050611f18565b5085935050505092915050565b6000606082019050611f6760008301866117cd565b8181036020830152611f798185611aee565b90508181036040830152611f8d8184611ef4565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611fd182610f76565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361200357612002611f97565b5b600182019050919050565b600060608201905061202360008301866117cd565b6120306020830185611925565b81810360408301526120428184611ef4565b9050949350505050565b600082825260208201905092915050565b600061206882611aa8565b612072818561204c565b9350612082818560208601611ac4565b61208b81611121565b840191505092915050565b60006060830160008301516120ae6000860182611ec0565b50602083015184820360208601526120c6828261205d565b915050604083015184820360408601526120e0828261205d565b9150508091505092915050565b600060608201905061210260008301866117cd565b81810360208301526121148185612096565b905081810360408301526121288184611ef4565b9050949350505050565b60008151905061214181610f4a565b92915050565b60006020828403121561215d5761215c610f0e565b5b600061216b84828501612132565b91505092915050565b60006060820190506121896000830186611925565b6121966020830185611925565b6121a360408301846117cd565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612207602683611a05565b9150612212826121ab565b604082019050919050565b60006020820190508181036000830152612236816121fa565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612273602083611a05565b915061227e8261223d565b602082019050919050565b600060208201905081810360008301526122a281612266565b905091905056fea264697066735822122090079f0b3bed973232b9c152868afe25957743699355a172a4fe6a5534afb08864736f6c63430008110033", - "deployedBytecode": "0x6080604052600436106100915760003560e01c8063715018a611610059578063715018a6146101855780638da5cb5b1461019c57806397016f3f146101c7578063f2fde38b146101f2578063ffa2e9531461021b57610091565b8063150b7a0214610096578063176354fd146100d35780631ea89a22146100fc578063208f08c41461012557806358176bce14610155575b600080fd5b3480156100a257600080fd5b506100bd60048036038101906100b89190611011565b610246565b6040516100ca91906110d4565b60405180910390f35b3480156100df57600080fd5b506100fa60048036038101906100f591906110ef565b6102eb565b005b34801561010857600080fd5b50610123600480360381019061011e91906110ef565b610337565b005b61013f600480360381019061013a91906115dd565b610383565b60405161014c91906117dc565b60405180910390f35b61016f600480360381019061016a91906117f7565b610b59565b60405161017c91906117dc565b60405180910390f35b34801561019157600080fd5b5061019a610cae565b005b3480156101a857600080fd5b506101b1610cc2565b6040516101be9190611934565b60405180910390f35b3480156101d357600080fd5b506101dc610ceb565b6040516101e991906119ae565b60405180910390f35b3480156101fe57600080fd5b50610219600480360381019061021491906110ef565b610d11565b005b34801561022757600080fd5b50610230610d94565b60405161023d91906119ea565b60405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102cf90611a88565b60405180910390fd5b63150b7a0260e01b905095945050505050565b6102f3610dba565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61033f610dba565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ba0e2e7348f6040518363ffffffff1660e01b81526004016103e29190611b27565b60206040518083038185885af1158015610400573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906104259190611b5e565b90508a518c511461046b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046290611bfd565b60405180910390fd5b88518a51146104af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a690611c8f565b60405180910390fd5b86518851146104f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ea90611d21565b60405180910390fd5b8551885114610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611db3565b60405180910390fd5b845188511461057b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057290611e45565b60405180910390fd5b60008c511461066a5760005b8c5181101561066857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a431578838f84815181106105e2576105e1611e65565b5b60200260200101518f85815181106105fd576105fc611e65565b5b60200260200101516040518463ffffffff1660e01b815260040161062393929190611f52565b600060405180830381600087803b15801561063d57600080fd5b505af1158015610651573d6000803e3d6000fd5b50505050808061066090611fc6565b915050610587565b505b60008a51146107595760005b8a5181101561075757600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631663c121838d84815181106106d1576106d0611e65565b5b60200260200101518d85815181106106ec576106eb611e65565b5b60200260200101516040518463ffffffff1660e01b81526004016107129392919061200e565b600060405180830381600087803b15801561072c57600080fd5b505af1158015610740573d6000803e3d6000fd5b50505050808061074f90611fc6565b915050610676565b505b60008851146108965760005b885181101561089457600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dd4349b8360405180606001604052808d86815181106107cb576107ca611e65565b5b602002602001015181526020018c86815181106107eb576107ea611e65565b5b602002602001015181526020018b868151811061080b5761080a611e65565b5b602002602001015181525089858151811061082957610828611e65565b5b60200260200101516040518463ffffffff1660e01b815260040161084f939291906120ed565b600060405180830381600087803b15801561086957600080fd5b505af115801561087d573d6000803e3d6000fd5b50505050808061088c90611fc6565b915050610765565b505b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd4986a0836040518263ffffffff1660e01b81526004016108f391906117dc565b602060405180830381865afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109349190612147565b90508415610a1757600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631663c1218383600067ffffffffffffffff81111561099757610996611132565b5b6040519080825280602002602001820160405280156109c55781602001602082028036833780820191505090505b506040518463ffffffff1660e01b81526004016109e49392919061200e565b600060405180830381600087803b1580156109fe57600080fd5b505af1158015610a12573d6000803e3d6000fd5b505050505b8315610ab357600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401610a7c93929190612174565b600060405180830381600087803b158015610a9657600080fd5b505af1158015610aaa573d6000803e3d6000fd5b50505050610b45565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033856040518463ffffffff1660e01b8152600401610b1293929190612174565b600060405180830381600087803b158015610b2c57600080fd5b505af1158015610b40573d6000803e3d6000fd5b505050505b81925050509b9a5050505050505050505050565b6000610ca188600067ffffffffffffffff811115610b7a57610b79611132565b5b604051908082528060200260200182016040528015610bad57816020015b6060815260200190600190039081610b985790505b50600067ffffffffffffffff811115610bc957610bc8611132565b5b604051908082528060200260200182016040528015610bfc57816020015b6060815260200190600190039081610be75790505b50600067ffffffffffffffff811115610c1857610c17611132565b5b604051908082528060200260200182016040528015610c465781602001602082028036833780820191505090505b50600067ffffffffffffffff811115610c6257610c61611132565b5b604051908082528060200260200182016040528015610c9557816020015b6060815260200190600190039081610c805790505b508c8c8c8c8c8c610383565b9050979650505050505050565b610cb6610dba565b610cc06000610e38565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d19610dba565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f9061221d565b60405180910390fd5b610d9181610e38565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610dc2610efc565b73ffffffffffffffffffffffffffffffffffffffff16610de0610cc2565b73ffffffffffffffffffffffffffffffffffffffff1614610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90612289565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f4382610f18565b9050919050565b610f5381610f38565b8114610f5e57600080fd5b50565b600081359050610f7081610f4a565b92915050565b6000819050919050565b610f8981610f76565b8114610f9457600080fd5b50565b600081359050610fa681610f80565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610fd157610fd0610fac565b5b8235905067ffffffffffffffff811115610fee57610fed610fb1565b5b60208301915083600182028301111561100a57611009610fb6565b5b9250929050565b60008060008060006080868803121561102d5761102c610f0e565b5b600061103b88828901610f61565b955050602061104c88828901610f61565b945050604061105d88828901610f97565b935050606086013567ffffffffffffffff81111561107e5761107d610f13565b5b61108a88828901610fbb565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6110ce81611099565b82525050565b60006020820190506110e960008301846110c5565b92915050565b60006020828403121561110557611104610f0e565b5b600061111384828501610f61565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61116a82611121565b810181811067ffffffffffffffff8211171561118957611188611132565b5b80604052505050565b600061119c610f04565b90506111a88282611161565b919050565b600067ffffffffffffffff8211156111c8576111c7611132565b5b6111d182611121565b9050602081019050919050565b82818337600083830152505050565b60006112006111fb846111ad565b611192565b90508281526020810184848401111561121c5761121b61111c565b5b6112278482856111de565b509392505050565b600082601f83011261124457611243610fac565b5b81356112548482602086016111ed565b91505092915050565b600067ffffffffffffffff82111561127857611277611132565b5b602082029050602081019050919050565b600061129c6112978461125d565b611192565b905080838252602082019050602084028301858111156112bf576112be610fb6565b5b835b8181101561130657803567ffffffffffffffff8111156112e4576112e3610fac565b5b8086016112f1898261122f565b855260208501945050506020810190506112c1565b5050509392505050565b600082601f83011261132557611324610fac565b5b8135611335848260208601611289565b91505092915050565b600067ffffffffffffffff82111561135957611358611132565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561138557611384611132565b5b602082029050602081019050919050565b60006113a96113a48461136a565b611192565b905080838252602082019050602084028301858111156113cc576113cb610fb6565b5b835b818110156113f557806113e18882610f97565b8452602084019350506020810190506113ce565b5050509392505050565b600082601f83011261141457611413610fac565b5b8135611424848260208601611396565b91505092915050565b600061144061143b8461133e565b611192565b9050808382526020820190506020840283018581111561146357611462610fb6565b5b835b818110156114aa57803567ffffffffffffffff81111561148857611487610fac565b5b80860161149589826113ff565b85526020850194505050602081019050611465565b5050509392505050565b600082601f8301126114c9576114c8610fac565b5b81356114d984826020860161142d565b91505092915050565b600067ffffffffffffffff8211156114fd576114fc611132565b5b602082029050602081019050919050565b600061152161151c846114e2565b611192565b9050808382526020820190506020840283018581111561154457611543610fb6565b5b835b8181101561156d57806115598882610f61565b845260208401935050602081019050611546565b5050509392505050565b600082601f83011261158c5761158b610fac565b5b813561159c84826020860161150e565b91505092915050565b60008115159050919050565b6115ba816115a5565b81146115c557600080fd5b50565b6000813590506115d7816115b1565b92915050565b60008060008060008060008060008060006101608c8e03121561160357611602610f0e565b5b60008c013567ffffffffffffffff81111561162157611620610f13565b5b61162d8e828f0161122f565b9b505060208c013567ffffffffffffffff81111561164e5761164d610f13565b5b61165a8e828f01611310565b9a505060408c013567ffffffffffffffff81111561167b5761167a610f13565b5b6116878e828f016114b4565b99505060608c013567ffffffffffffffff8111156116a8576116a7610f13565b5b6116b48e828f01611577565b98505060808c013567ffffffffffffffff8111156116d5576116d4610f13565b5b6116e18e828f016114b4565b97505060a08c013567ffffffffffffffff81111561170257611701610f13565b5b61170e8e828f016113ff565b96505060c08c013567ffffffffffffffff81111561172f5761172e610f13565b5b61173b8e828f01611310565b95505060e08c013567ffffffffffffffff81111561175c5761175b610f13565b5b6117688e828f01611310565b9450506101008c013567ffffffffffffffff81111561178a57611789610f13565b5b6117968e828f016114b4565b9350506101206117a88e828f016115c8565b9250506101406117ba8e828f016115c8565b9150509295989b509295989b9093969950565b6117d681610f76565b82525050565b60006020820190506117f160008301846117cd565b92915050565b600080600080600080600060e0888a03121561181657611815610f0e565b5b600088013567ffffffffffffffff81111561183457611833610f13565b5b6118408a828b0161122f565b975050602088013567ffffffffffffffff81111561186157611860610f13565b5b61186d8a828b016113ff565b965050604088013567ffffffffffffffff81111561188e5761188d610f13565b5b61189a8a828b01611310565b955050606088013567ffffffffffffffff8111156118bb576118ba610f13565b5b6118c78a828b01611310565b945050608088013567ffffffffffffffff8111156118e8576118e7610f13565b5b6118f48a828b016114b4565b93505060a06119058a828b016115c8565b92505060c06119168a828b016115c8565b91505092959891949750929550565b61192e81610f38565b82525050565b60006020820190506119496000830184611925565b92915050565b6000819050919050565b600061197461196f61196a84610f18565b61194f565b610f18565b9050919050565b600061198682611959565b9050919050565b60006119988261197b565b9050919050565b6119a88161198d565b82525050565b60006020820190506119c3600083018461199f565b92915050565b60006119d48261197b565b9050919050565b6119e4816119c9565b82525050565b60006020820190506119ff60008301846119db565b92915050565b600082825260208201905092915050565b7f504b5048656c7065723a206f6e6c792061636365707473207472616e7366657260008201527f732066726f6d2074686520504b504e465420636f6e7472616374000000000000602082015250565b6000611a72603a83611a05565b9150611a7d82611a16565b604082019050919050565b60006020820190508181036000830152611aa181611a65565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ae2578082015181840152602081019050611ac7565b60008484015250505050565b6000611af982611aa8565b611b038185611ab3565b9350611b13818560208601611ac4565b611b1c81611121565b840191505092915050565b60006020820190508181036000830152611b418184611aee565b905092915050565b600081519050611b5881610f80565b92915050565b600060208284031215611b7457611b73610f0e565b5b6000611b8284828501611b49565b91505092915050565b7f504b5048656c7065723a20697066732063696420616e642073636f706520617260008201527f726179206c656e67746873206d757374206d6174636800000000000000000000602082015250565b6000611be7603683611a05565b9150611bf282611b8b565b604082019050919050565b60006020820190508181036000830152611c1681611bda565b9050919050565b7f504b5048656c7065723a206164647265737320616e642073636f70652061727260008201527f6179206c656e67746873206d757374206d617463680000000000000000000000602082015250565b6000611c79603583611a05565b9150611c8482611c1d565b604082019050919050565b60006020820190508181036000830152611ca881611c6c565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f6964206172726179206c656e67746873206d757374206d617463680000000000602082015250565b6000611d0b603b83611a05565b9150611d1682611caf565b604082019050919050565b60006020820190508181036000830152611d3a81611cfe565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800602082015250565b6000611d9d603f83611a05565b9150611da882611d41565b604082019050919050565b60006020820190508181036000830152611dcc81611d90565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f73636f706573206172726179206c656e67746873206d757374206d6174636800602082015250565b6000611e2f603f83611a05565b9150611e3a82611dd3565b604082019050919050565b60006020820190508181036000830152611e5e81611e22565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611ec981610f76565b82525050565b6000611edb8383611ec0565b60208301905092915050565b6000602082019050919050565b6000611eff82611e94565b611f098185611e9f565b9350611f1483611eb0565b8060005b83811015611f45578151611f2c8882611ecf565b9750611f3783611ee7565b925050600181019050611f18565b5085935050505092915050565b6000606082019050611f6760008301866117cd565b8181036020830152611f798185611aee565b90508181036040830152611f8d8184611ef4565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611fd182610f76565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361200357612002611f97565b5b600182019050919050565b600060608201905061202360008301866117cd565b6120306020830185611925565b81810360408301526120428184611ef4565b9050949350505050565b600082825260208201905092915050565b600061206882611aa8565b612072818561204c565b9350612082818560208601611ac4565b61208b81611121565b840191505092915050565b60006060830160008301516120ae6000860182611ec0565b50602083015184820360208601526120c6828261205d565b915050604083015184820360408601526120e0828261205d565b9150508091505092915050565b600060608201905061210260008301866117cd565b81810360208301526121148185612096565b905081810360408301526121288184611ef4565b9050949350505050565b60008151905061214181610f4a565b92915050565b60006020828403121561215d5761215c610f0e565b5b600061216b84828501612132565b91505092915050565b60006060820190506121896000830186611925565b6121966020830185611925565b6121a360408301846117cd565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612207602683611a05565b9150612212826121ab565b604082019050919050565b60006020820190508181036000830152612236816121fa565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612273602083611a05565b915061227e8261223d565b602082019050919050565b600060208201905081810360008301526122a281612266565b905091905056fea264697066735822122090079f0b3bed973232b9c152868afe25957743699355a172a4fe6a5534afb08864736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} - } \ No newline at end of file diff --git a/contracts/cayenne/Staking.json b/contracts/cayenne/Staking.json deleted file mode 100644 index 3b156c6..0000000 --- a/contracts/cayenne/Staking.json +++ /dev/null @@ -1,1676 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Staking", - "sourceName": "contracts/lit-node/Staking.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_resolver", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "_keyTypes", - "type": "uint256[]" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "_env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ActiveValidatorsCannotLeave", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakingAddress", - "type": "address" - } - ], - "name": "CannotRejoinUntilNextEpochBecauseKicked", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "senderPubKey", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "receiverPubKey", - "type": "uint256" - } - ], - "name": "CannotReuseCommsKeys", - "type": "error" - }, - { - "inputs": [], - "name": "CannotStakeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakerAddress", - "type": "address" - } - ], - "name": "CannotVoteTwice", - "type": "error" - }, - { - "inputs": [], - "name": "CannotWithdrawZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "nodeAddress", - "type": "address" - } - ], - "name": "CouldNotMapNodeAddressToStakerAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum Staking.States", - "name": "state", - "type": "uint8" - } - ], - "name": "MustBeInActiveOrUnlockedOrPausedState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum Staking.States", - "name": "state", - "type": "uint8" - } - ], - "name": "MustBeInActiveOrUnlockedState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum Staking.States", - "name": "state", - "type": "uint8" - } - ], - "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum Staking.States", - "name": "state", - "type": "uint8" - } - ], - "name": "MustBeInNextValidatorSetLockedState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum Staking.States", - "name": "state", - "type": "uint8" - } - ], - "name": "MustBeInReadyForNextEpochState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakerAddress", - "type": "address" - } - ], - "name": "MustBeValidatorInNextEpochToKick", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "epochEndTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timeout", - "type": "uint256" - } - ], - "name": "NotEnoughTimeElapsedForTimeoutSinceLastEpoch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "epochEndTime", - "type": "uint256" - } - ], - "name": "NotEnoughTimeElapsedSinceLastEpoch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "validatorCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minimumValidatorCount", - "type": "uint256" - } - ], - "name": "NotEnoughValidatorsInNextEpoch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentReadyValidatorCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nextReadyValidatorCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minimumValidatorCountToBeReady", - "type": "uint256" - } - ], - "name": "NotEnoughValidatorsReadyForNextEpoch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentEpochNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "receivedEpochNumber", - "type": "uint256" - } - ], - "name": "SignaledReadyForWrongEpochNumber", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakerAddress", - "type": "address" - } - ], - "name": "StakerNotPermitted", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "yourBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "requestedWithdrawlAmount", - "type": "uint256" - } - ], - "name": "TryingToWithdrawMoreThanStaked", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "validator", - "type": "address" - }, - { - "internalType": "address[]", - "name": "validatorsInNextEpoch", - "type": "address[]" - } - ], - "name": "ValidatorIsNotInNextEpoch", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newTokenRewardPerTokenPerEpoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newComplaintTolerance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newComplaintIntervalSecs", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "newKeyTypes", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMinimumValidatorCount", - "type": "uint256" - } - ], - "name": "ConfigSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newEpochEndTime", - "type": "uint256" - } - ], - "name": "EpochEndTimeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newEpochLength", - "type": "uint256" - } - ], - "name": "EpochLengthSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newEpochTimeout", - "type": "uint256" - } - ], - "name": "EpochTimeoutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "reason", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newKickPenaltyPercent", - "type": "uint256" - } - ], - "name": "KickPenaltyPercentSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "staker", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epochNumber", - "type": "uint256" - } - ], - "name": "ReadyForNextEpoch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Recovered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "staker", - "type": "address" - } - ], - "name": "RequestToJoin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "staker", - "type": "address" - } - ], - "name": "RequestToLeave", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newResolverContractAddress", - "type": "address" - } - ], - "name": "ResolverContractAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newDuration", - "type": "uint256" - } - ], - "name": "RewardsDurationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newStakingTokenAddress", - "type": "address" - } - ], - "name": "StakingTokenSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum Staking.States", - "name": "newState", - "type": "uint8" - } - ], - "name": "StateChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "staker", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountBurned", - "type": "uint256" - } - ], - "name": "ValidatorKickedFromNextEpoch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "staker", - "type": "address" - } - ], - "name": "ValidatorRejoinedNextEpoch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "reporter", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "validatorStakerAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "reason", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "VotedToKickValidatorInNextEpoch", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "validatorStakerAddress", - "type": "address" - } - ], - "name": "adminKickValidatorInNextEpoch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "staker", - "type": "address" - } - ], - "name": "adminRejoinValidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "validatorStakerAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountToPenalize", - "type": "uint256" - } - ], - "name": "adminSlashValidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "advanceEpoch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "config", - "outputs": [ - { - "internalType": "uint256", - "name": "tokenRewardPerTokenPerEpoch", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "complaintTolerance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "complaintIntervalSecs", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minimumValidatorCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "contractResolver", - "outputs": [ - { - "internalType": "contract ContractResolver", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "countOfCurrentValidatorsReadyForNextEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "countOfNextValidatorsReadyForNextEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentValidatorCountForConsensus", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "env", - "outputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "epoch", - "outputs": [ - { - "internalType": "uint256", - "name": "epochLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "number", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "endTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "retries", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timeout", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "exit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getKeyTypes", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getKickedValidators", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getReward", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingBalancesAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTokenAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getValidatorsInCurrentEpoch", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getValidatorsInCurrentEpochLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getValidatorsInNextEpoch", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "addresses", - "type": "address[]" - } - ], - "name": "getValidatorsStructs", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "ip", - "type": "uint32" - }, - { - "internalType": "uint128", - "name": "ipv6", - "type": "uint128" - }, - { - "internalType": "uint32", - "name": "port", - "type": "uint32" - }, - { - "internalType": "address", - "name": "nodeAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "senderPubKey", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "receiverPubKey", - "type": "uint256" - } - ], - "internalType": "struct Staking.Validator[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getValidatorsStructsInCurrentEpoch", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "ip", - "type": "uint32" - }, - { - "internalType": "uint128", - "name": "ipv6", - "type": "uint128" - }, - { - "internalType": "uint32", - "name": "port", - "type": "uint32" - }, - { - "internalType": "address", - "name": "nodeAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "senderPubKey", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "receiverPubKey", - "type": "uint256" - } - ], - "internalType": "struct Staking.Validator[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getValidatorsStructsInNextEpoch", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "ip", - "type": "uint32" - }, - { - "internalType": "uint128", - "name": "ipv6", - "type": "uint128" - }, - { - "internalType": "uint32", - "name": "port", - "type": "uint32" - }, - { - "internalType": "address", - "name": "nodeAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "senderPubKey", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "receiverPubKey", - "type": "uint256" - } - ], - "internalType": "struct Staking.Validator[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "epochNumber", - "type": "uint256" - }, - { - "internalType": "address", - "name": "validatorStakerAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "voterStakerAddress", - "type": "address" - } - ], - "name": "getVotingStatusToKickValidator", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isActiveValidator", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isActiveValidatorByNodeAddress", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isReadyForNextEpoch", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "kickPenaltyPercentByReason", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "validatorStakerAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "reason", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "kickValidatorInNextEpoch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "lockValidatorsForNextEpoch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nextValidatorCountForConsensus", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nodeAddressToStakerAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseEpoch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "readyForNextEpoch", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "ip", - "type": "uint32" - }, - { - "internalType": "uint128", - "name": "ipv6", - "type": "uint128" - }, - { - "internalType": "uint32", - "name": "port", - "type": "uint32" - }, - { - "internalType": "address", - "name": "nodeAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "senderPubKey", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "receiverPubKey", - "type": "uint256" - } - ], - "name": "requestToJoin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "requestToLeave", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newTokenRewardPerTokenPerEpoch", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "newComplaintTolerance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "newComplaintIntervalSecs", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "newKeyTypes", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "newMinimumValidatorCount", - "type": "uint256" - } - ], - "name": "setConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newEpochEndTime", - "type": "uint256" - } - ], - "name": "setEpochEndTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newEpochLength", - "type": "uint256" - } - ], - "name": "setEpochLength", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum Staking.States", - "name": "newState", - "type": "uint8" - } - ], - "name": "setEpochState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newEpochTimeout", - "type": "uint256" - } - ], - "name": "setEpochTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "ip", - "type": "uint32" - }, - { - "internalType": "uint128", - "name": "ipv6", - "type": "uint128" - }, - { - "internalType": "uint32", - "name": "port", - "type": "uint32" - }, - { - "internalType": "address", - "name": "nodeAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "senderPubKey", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "receiverPubKey", - "type": "uint256" - } - ], - "name": "setIpPortNodeAddressAndCommunicationPubKeys", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "reason", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "newKickPenaltyPercent", - "type": "uint256" - } - ], - "name": "setKickPenaltyPercent", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakerAddress", - "type": "address" - } - ], - "name": "shouldKickValidator", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "epochNumber", - "type": "uint256" - } - ], - "name": "signalReadyForNextEpoch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "stake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "ip", - "type": "uint32" - }, - { - "internalType": "uint128", - "name": "ipv6", - "type": "uint128" - }, - { - "internalType": "uint32", - "name": "port", - "type": "uint32" - }, - { - "internalType": "address", - "name": "nodeAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "senderPubKey", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "receiverPubKey", - "type": "uint256" - } - ], - "name": "stakeAndJoin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "state", - "outputs": [ - { - "internalType": "enum Staking.States", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalStaked", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unlockValidatorsForNextEpoch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "usedCommsKeys", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "validators", - "outputs": [ - { - "internalType": "uint32", - "name": "ip", - "type": "uint32" - }, - { - "internalType": "uint128", - "name": "ipv6", - "type": "uint128" - }, - { - "internalType": "uint32", - "name": "port", - "type": "uint32" - }, - { - "internalType": "address", - "name": "nodeAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "senderPubKey", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "receiverPubKey", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "votesToKickValidatorsInNextEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "votes", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405260008060146101000a81548160ff021916908360048111156200002c576200002b62000559565b5b02179055503480156200003e57600080fd5b506040516200673a3803806200673a8339818101604052810190620000649190620007d9565b6200008462000078620002d060201b60201c565b620002d860201b60201c565b82601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260146101000a81548160ff02191690836002811115620000ed57620000ec62000559565b5b02179055506000620001046200039c60201b60201c565b90506040518060a0016040528060148373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200015f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000185919062000892565b600a62000193919062000a47565b6200019f919062000ac7565b8152602001600f8152602001603c8152602001848152602001600281525060066000820151816000015560208201518160010155604082015181600201556060820151816003019080519060200190620001fb929190620004e8565b50608082015181600401559050506000600190506040518060a0016040528082815260200160018152602001824262000235919062000aff565b815260200160008152602001603c8152506001600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015590505060016017600060018152602001908152602001600020819055506004600060146101000a81548160ff02191690836004811115620002c057620002bf62000559565b5b0217905550505050505062000c68565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df3806936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200044a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000470919062000b75565b601260149054906101000a900460ff166040518363ffffffff1660e01b81526004016200049f92919062000c09565b602060405180830381865afa158015620004bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e3919062000c36565b905090565b82805482825590600052602060002090810192821562000527579160200282015b828111156200052657825182559160200191906001019062000509565b5b5090506200053691906200053a565b5090565b5b80821115620005555760008160009055506001016200053b565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005c9826200059c565b9050919050565b620005db81620005bc565b8114620005e757600080fd5b50565b600081519050620005fb81620005d0565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006518262000606565b810181811067ffffffffffffffff8211171562000673576200067262000617565b5b80604052505050565b60006200068862000588565b905062000696828262000646565b919050565b600067ffffffffffffffff821115620006b957620006b862000617565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b620006e481620006cf565b8114620006f057600080fd5b50565b6000815190506200070481620006d9565b92915050565b6000620007216200071b846200069b565b6200067c565b90508083825260208201905060208402830185811115620007475762000746620006ca565b5b835b818110156200077457806200075f8882620006f3565b84526020840193505060208101905062000749565b5050509392505050565b600082601f83011262000796576200079562000601565b5b8151620007a88482602086016200070a565b91505092915050565b60038110620007bf57600080fd5b50565b600081519050620007d381620007b1565b92915050565b600080600060608486031215620007f557620007f462000592565b5b60006200080586828701620005ea565b935050602084015167ffffffffffffffff81111562000829576200082862000597565b5b62000837868287016200077e565b92505060406200084a86828701620007c2565b9150509250925092565b600060ff82169050919050565b6200086c8162000854565b81146200087857600080fd5b50565b6000815190506200088c8162000861565b92915050565b600060208284031215620008ab57620008aa62000592565b5b6000620008bb848285016200087b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000952578086048111156200092a5762000929620008c4565b5b60018516156200093a5780820291505b80810290506200094a85620008f3565b94506200090a565b94509492505050565b6000826200096d576001905062000a40565b816200097d576000905062000a40565b8160018114620009965760028114620009a157620009d7565b600191505062000a40565b60ff841115620009b657620009b5620008c4565b5b8360020a915084821115620009d057620009cf620008c4565b5b5062000a40565b5060208310610133831016604e8410600b841016171562000a115782820a90508381111562000a0b5762000a0a620008c4565b5b62000a40565b62000a20848484600162000900565b9250905081840481111562000a3a5762000a39620008c4565b5b81810290505b9392505050565b600062000a5482620006cf565b915062000a618362000854565b925062000a907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200095b565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ad482620006cf565b915062000ae183620006cf565b92508262000af45762000af362000a98565b5b828204905092915050565b600062000b0c82620006cf565b915062000b1983620006cf565b925082820190508082111562000b345762000b33620008c4565b5b92915050565b6000819050919050565b62000b4f8162000b3a565b811462000b5b57600080fd5b50565b60008151905062000b6f8162000b44565b92915050565b60006020828403121562000b8e5762000b8d62000592565b5b600062000b9e8482850162000b5e565b91505092915050565b62000bb28162000b3a565b82525050565b6003811062000bcc5762000bcb62000559565b5b50565b600081905062000bdf8262000bb8565b919050565b600062000bf18262000bcf565b9050919050565b62000c038162000be4565b82525050565b600060408201905062000c20600083018562000ba7565b62000c2f602083018462000bf8565b9392505050565b60006020828403121562000c4f5762000c4e62000592565b5b600062000c5f84828501620005ea565b91505092915050565b615ac28062000c786000396000f3fe608060405234801561001057600080fd5b506004361061038e5760003560e01c806379502c55116101de578063b139603c1161010f578063e8684ed1116100ad578063f2fde38b1161007c578063f2fde38b146109e5578063f95d71b114610a01578063f99b562314610a1d578063fa52c7d814610a395761038e565b8063e8684ed114610981578063e9fad8ee1461099f578063f1887fec146109a9578063f1b877a8146109c75761038e565b8063c19d93fb116100e9578063c19d93fb14610909578063c35d4d0914610927578063d4818fca14610945578063e7c08720146109635761038e565b8063b139603c146108d9578063ba3bd22e146108e3578063c006e00b146108ff5761038e565b80638b80d8331161017c5780639dca0032116101565780639dca003214610865578063a25e49a414610883578063a694fc3a146108b3578063ac2f8afe146108cf5761038e565b80638b80d833146108095780638da5cb5b14610825578063900cf0cf146108435761038e565b8063847e0625116101b8578063847e062514610781578063857b7663146107b1578063865419e9146107cf57806389965883146107eb5761038e565b806379502c55146107265780637aa086e714610747578063817b1cd2146107635761038e565b80634927a143116102c3578063533d463e1161026157806361dee8a31161023057806361dee8a3146106b157806370fe276a146106cf578063715018a6146107005780637392c76b1461070a5761038e565b8063533d463e1461062957806354eea796146106595780635995a4c4146106755780635b677eac146106935761038e565b80635081f66f1161029d5780635081f66f1461058f57806350d17b5e146105bf578063519877eb146105dd5780635305c8cf1461060d5761038e565b80634927a143146105275780634a6e51f5146105575780634f8f0102146105735761038e565b80633528db88116103305780633e6852661161030a5780633e6852661461048d5780633f819713146104bd57806340550a1c146104d957806343cb0a0e146105095761038e565b80633528db881461045d5780633cf80e6c146104795780633d18b912146104835761038e565b806316930f4d1161036c57806316930f4d146103eb5780631fab87c4146103f5578063252959a5146104115780632e1a7d4d146104415761038e565b80630297d4db1461039357806309c7c7d0146103b157806310fe9ae8146103cd575b600080fd5b61039b610a6f565b6040516103a89190614389565b60405180910390f35b6103cb60048036038101906103c691906143e4565b610a80565b005b6103d5610add565b6040516103e29190614465565b60405180910390f35b6103f3610c21565b005b61040f600480360381019061040a9190614480565b610e0d565b005b61042b600480360381019061042691906144e3565b610e59565b604051610438919061452b565b60405180910390f35b61045b60048036038101906104569190614480565b610e79565b005b610477600480360381019061047291906145f6565b610ef5565b005b6104816115ec565b005b61048b611aad565b005b6104a760048036038101906104a29190614480565b611b27565b6040516104b49190614389565b60405180910390f35b6104d760048036038101906104d291906146a8565b611b3f565b005b6104f360048036038101906104ee91906146d5565b611bab565b604051610500919061452b565b60405180910390f35b610511611bc8565b60405161051e9190614389565b60405180910390f35b610541600480360381019061053c9190614702565b611c0c565b60405161054e9190614389565b60405180910390f35b610571600480360381019061056c9190614480565b611c37565b005b61058d600480360381019061058891906145f6565b611c83565b005b6105a960048036038101906105a491906146d5565b611ed5565b6040516105b69190614465565b60405180910390f35b6105c7611f08565b6040516105d491906147a1565b60405180910390f35b6105f760048036038101906105f291906146d5565b611f2e565b604051610604919061452b565b60405180910390f35b61062760048036038101906106229190614915565b611f4e565b005b610643600480360381019061063e9190614a6f565b611fde565b6040516106509190614c31565b60405180910390f35b610673600480360381019061066e9190614480565b6121ee565b005b61067d61223a565b60405161068a9190614d02565b60405180910390f35b61069b612328565b6040516106a89190614465565b60405180910390f35b6106b961246c565b6040516106c69190614c31565b60405180910390f35b6106e960048036038101906106e49190614d24565b612489565b6040516106f7929190614d77565b60405180910390f35b610708612541565b005b610724600480360381019061071f91906146d5565b612555565b005b61072e6125c1565b60405161073e9493929190614da0565b60405180910390f35b610761600480360381019061075c91906146d5565b6125df565b005b61076b61266c565b6040516107789190614389565b60405180910390f35b61079b600480360381019061079691906146d5565b612672565b6040516107a8919061452b565b60405180910390f35b6107b96126f2565b6040516107c69190614d02565b60405180910390f35b6107e960048036038101906107e49190614e40565b6127e0565b005b6107f3612d37565b6040516108009190614389565b60405180910390f35b610823600480360381019061081e9190614eb4565b612de7565b005b61082d612e6d565b60405161083a9190614465565b60405180910390f35b61084b612e96565b60405161085c959493929190614ef4565b60405180910390f35b61086d612eba565b60405161087a9190614fbe565b60405180910390f35b61089d600480360381019061089891906146d5565b612ecd565b6040516108aa919061452b565b60405180910390f35b6108cd60048036038101906108c89190614480565b612f49565b005b6108d7612fc6565b005b6108e1613185565b005b6108fd60048036038101906108f89190614fd9565b6131f2565b005b610907613212565b005b610911613428565b60405161091e91906150c3565b60405180910390f35b61092f61343b565b60405161093c9190614d02565b60405180910390f35b61094d613529565b60405161095a9190614389565b60405180910390f35b61096b61353a565b6040516109789190614c31565b60405180910390f35b610989613557565b6040516109969190614389565b60405180910390f35b6109a7613607565b005b6109b1613766565b6040516109be919061452b565b60405180910390f35b6109cf6137ae565b6040516109dc919061518d565b60405180910390f35b6109ff60048036038101906109fa91906146d5565b613809565b005b610a1b6004803603810190610a1691906146d5565b61388c565b005b610a376004803603810190610a329190614480565b61390f565b005b610a536004803603810190610a4e91906146d5565b613c1e565b604051610a6697969594939291906151cd565b60405180910390f35b6000610a7b600e613cbc565b905090565b610a88613cd1565b8060176000848152602001908152602001600020819055507fd96aa9b717408dfdef39925f998646946efba8139acb451b120585a33de7f1e68282604051610ad192919061523c565b60405180910390a15050565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df3806936040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae919061527a565b601260149054906101000a900460ff166040518363ffffffff1660e01b8152600401610bdb9291906152b6565b602060405180830381865afa158015610bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1c91906152f4565b905090565b600160020154421015610c7257426001600201546040517ff44bc0a7000000000000000000000000000000000000000000000000000000008152600401610c6992919061523c565b60405180910390fd5b60006004811115610c8657610c85614f47565b5b600060149054906101000a900460ff166004811115610ca857610ca7614f47565b5b1480610ce7575060036004811115610cc357610cc2614f47565b5b600060149054906101000a900460ff166004811115610ce557610ce4614f47565b5b145b610d3757600060149054906101000a900460ff166040517f9ef5b6f5000000000000000000000000000000000000000000000000000000008152600401610d2e91906150c3565b60405180910390fd5b600660040154610d47600e613cbc565b1015610d9a57610d57600e613cbc565b6006600401546040517f8a0defa4000000000000000000000000000000000000000000000000000000008152600401610d9192919061523c565b60405180910390fd5b6001600060146101000a81548160ff02191690836004811115610dc057610dbf614f47565b5b02179055507f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb6600060149054906101000a900460ff16604051610e0391906150c3565b60405180910390a1565b610e15613cd1565b806001600401819055507f887fed3a9270ffbbf863d640a07413b6f58cf97afaa9d7267693e962a76bd81081604051610e4e9190614389565b60405180910390a150565b60186020528060005260406000206000915054906101000a900460ff1681565b6000610e83612328565b90508073ffffffffffffffffffffffffffffffffffffffff1662f714ce83336040518363ffffffff1660e01b8152600401610ebf929190615321565b600060405180830381600087803b158015610ed957600080fd5b505af1158015610eed573d6000803e3d6000fd5b505050505050565b6000610eff612328565b90508073ffffffffffffffffffffffffffffffffffffffff166349919966336040518263ffffffff1660e01b8152600401610f3a9190614465565b602060405180830381865afa158015610f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7b9190615376565b5060006004811115610f9057610f8f614f47565b5b600060149054906101000a900460ff166004811115610fb257610fb1614f47565b5b1480610ff1575060036004811115610fcd57610fcc614f47565b5b600060149054906101000a900460ff166004811115610fef57610fee614f47565b5b145b8061102e575060048081111561100a57611009614f47565b5b600060149054906101000a900460ff16600481111561102c5761102b614f47565b5b145b61107e57600060149054906101000a900460ff166040517fc1f8741d00000000000000000000000000000000000000000000000000000000815260040161107591906150c3565b60405180910390fd5b611092336010613d4f90919063ffffffff16565b156110d457336040517f7c6d6c6b0000000000000000000000000000000000000000000000000000000081526004016110cb9190614465565b60405180910390fd5b600083836040516020016110e99291906153c4565b6040516020818303038152906040528051906020012090506018600082815260200190815260200160002060009054906101000a900460ff16156111665783836040517f1179010e00000000000000000000000000000000000000000000000000000000815260040161115d92919061523c565b60405180910390fd5b60016018600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166327a199d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190615376565b156112c2578173ffffffffffffffffffffffffffffffffffffffff1663d3dbad7d336040518263ffffffff1660e01b815260040161123f9190614465565b602060405180830381865afa15801561125c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112809190615376565b6112c157336040517f924a59100000000000000000000000000000000000000000000000000000000081526004016112b89190614465565b60405180910390fd5b5b87601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548163ffffffff021916908363ffffffff16021790555086601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160046101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555085601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160146101000a81548163ffffffff021916908363ffffffff16021790555084601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555082601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555033601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061159e33600e613d7f90919063ffffffff16565b503373ffffffffffffffffffffffffffffffffffffffff167f1dc186bd4daaf3fc4b9f8c689228a0be60dd2952dc502829514ae0d6955c0f5160405160405180910390a25050505050505050565b60016002015442101561163d57426001600201546040517ff44bc0a700000000000000000000000000000000000000000000000000000000815260040161163492919061523c565b60405180910390fd5b6002600481111561165157611650614f47565b5b600060149054906101000a900460ff16600481111561167357611672614f47565b5b146116c457600060149054906101000a900460ff166040517f17ce3ae10000000000000000000000000000000000000000000000000000000081526004016116bb91906150c3565b60405180910390fd5b6116cc613766565b611726576116d8613557565b6116e0612d37565b6116e8611bc8565b6040517f26d6b3de00000000000000000000000000000000000000000000000000000000815260040161171d939291906153f0565b60405180910390fd5b6000611732600c613cbc565b905060005b8181101561190657600061175582600c613daf90919063ffffffff16565b90506000611761610add565b9050600061176d612328565b905060008273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e09190615460565b600a6117ec91906155ef565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016118259190614465565b602060405180830381865afa158015611842573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611866919061564f565b600660000154611876919061567c565b61188091906156ed565b90508173ffffffffffffffffffffffffffffffffffffffff166302fa04c982866040518363ffffffff1660e01b81526004016118bd929190615321565b600060405180830381600087803b1580156118d757600080fd5b505af11580156118eb573d6000803e3d6000fd5b505050505050505080806118fe9061571e565b915050611737565b505b6000611914600c613cbc565b1115611948576119426119326000600c613daf90919063ffffffff16565b600c613dc990919063ffffffff16565b50611908565b611952600e613cbc565b905060005b81811015611a055761198661197682600e613daf90919063ffffffff16565b600c613d7f90919063ffffffff16565b506000601560006119a184600e613daf90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806119fd9061571e565b915050611957565b50600180016000815480929190611a1b9061571e565b919050555060016000015442611a319190615766565b60016002018190555060008060146101000a81548160ff02191690836004811115611a5f57611a5e614f47565b5b02179055507f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb6600060149054906101000a900460ff16604051611aa291906150c3565b60405180910390a150565b6000611ab7612328565b90508073ffffffffffffffffffffffffffffffffffffffff1663c00007b0336040518263ffffffff1660e01b8152600401611af29190614465565b600060405180830381600087803b158015611b0c57600080fd5b505af1158015611b20573d6000803e3d6000fd5b5050505050565b60176020528060005260406000206000915090505481565b611b47613cd1565b80600060146101000a81548160ff02191690836004811115611b6c57611b6b614f47565b5b02179055507f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb681604051611ba091906150c3565b60405180910390a150565b6000611bc182600c613d4f90919063ffffffff16565b9050919050565b60006002611bd6600c613cbc565b03611be45760019050611c09565b60036002611bf2600c613cbc565b611bfc919061567c565b611c0691906156ed565b90505b90565b6016602052816000526040600020602052806000526040600020600091509150508060000154905081565b611c3f613cd1565b806001600201819055507feb49fe6118b628c010445c30724ceaf4efd8d87f330911c36493b401b5c296d081604051611c789190614389565b60405180910390a150565b85601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548163ffffffff021916908363ffffffff16021790555084601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160046101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160146101000a81548163ffffffff021916908363ffffffff16021790555082601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555080601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550505050505050565b60146020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60156020528060005260406000206000915054906101000a900460ff1681565b611f56613cd1565b8460066000018190555083600660010181905550826006600201819055508160066003019080519060200190611f8d929190614295565b50806006600401819055507f16f896f15b01cc0c19146aac8f21b75e76e4f196a9e368ca3d1b7cf5251a12588585858585604051611fcf95949392919061579a565b60405180910390a15050505050565b60606000825167ffffffffffffffff811115611ffd57611ffc6147d2565b5b60405190808252806020026020018201604052801561203657816020015b6120236142e2565b81526020019060019003908161201b5790505b50905060005b83518110156121e4576013600085838151811061205c5761205b6157f4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060e00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152602001600382015481526020016004820154815250508282815181106121c6576121c56157f4565b5b602002602001018190525080806121dc9061571e565b91505061203c565b5080915050919050565b6121f6613cd1565b806001600001819055507f5f15d41eab42cb3f8a5c9e8cd44043648cb85a815522c5f4ae5a32597a8447a08160405161222f9190614389565b60405180910390a150565b606060006122486010613cbc565b67ffffffffffffffff811115612261576122606147d2565b5b60405190808252806020026020018201604052801561228f5781602001602082028036833780820191505090505b509050600061229e6010613cbc565b905060005b8181101561231f576122bf816010613daf90919063ffffffff16565b8382815181106122d2576122d16157f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806123179061571e565b9150506122a3565b50819250505090565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638c1536df6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f9919061527a565b601260149054906101000a900460ff166040518363ffffffff1660e01b81526004016124269291906152b6565b602060405180830381865afa158015612443573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246791906152f4565b905090565b6060600061247861343b565b905061248381611fde565b91505090565b60008060006016600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001548160010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250925050935093915050565b612549613cd1565b6125536000613df9565b565b61255d613cd1565b612571816010613dc990919063ffffffff16565b5061258681600e613d7f90919063ffffffff16565b507fa5b14a5b2a3bffe27eff4f0dd1c65b1c966d2ec463c04f29a82c3e228ba7a071816040516125b69190614465565b60405180910390a150565b60068060000154908060010154908060020154908060040154905084565b6125e7613cd1565b6125fb81600e613dc990919063ffffffff16565b50612610816010613d7f90919063ffffffff16565b5061261a33613ebd565b8073ffffffffffffffffffffffffffffffffffffffff167ff020e162c28460a603e71f641a2e83634580ace02b9e28b844b2257949860e976000604051612661919061585e565b60405180910390a250565b600b5481565b600080601660006001800154815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506126d3611bc8565b8160000154106126e75760019150506126ed565b60009150505b919050565b60606000612700600c613cbc565b67ffffffffffffffff811115612719576127186147d2565b5b6040519080825280602002602001820160405280156127475781602001602082028036833780820191505090505b5090506000612756600c613cbc565b905060005b818110156127d75761277781600c613daf90919063ffffffff16565b83828151811061278a576127896157f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806127cf9061571e565b91505061275b565b50819250505090565b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128b557336040517f64ffeb3d0000000000000000000000000000000000000000000000000000000081526004016128ac9190614465565b60405180910390fd5b6128c981600e613d4f90919063ffffffff16565b61290a57806040517f5f5430820000000000000000000000000000000000000000000000000000000081526004016129019190614465565b60405180910390fd5b601660006001800154815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129ee57806040517f384ce38a0000000000000000000000000000000000000000000000000000000081526004016129e59190614465565b60405180910390fd5b601660006001800154815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000815480929190612a569061571e565b91905055506001601660006001800154815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612b1c85600e613d4f90919063ffffffff16565b8015612b2d5750612b2c85612672565b5b15612cc857612b3b85613ebd565b612b4f856010613d7f90919063ffffffff16565b506000601760008681526020019081526020016000205490506000612b72612328565b905060006064838373ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff1660e01b8152600401612bb29190614465565b602060405180830381865afa158015612bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf3919061564f565b612bfd919061567c565b612c0791906156ed565b90508173ffffffffffffffffffffffffffffffffffffffff16630a0e3dea828a6040518363ffffffff1660e01b8152600401612c44929190615321565b600060405180830381600087803b158015612c5e57600080fd5b505af1158015612c72573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff167ff020e162c28460a603e71f641a2e83634580ace02b9e28b844b2257949860e9782604051612cbc9190614389565b60405180910390a25050505b838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167febdee48ed32f3feff81eed274b9e084b367ac42fe1cb710dcbd43f1d537d99fa8686604051612d289291906158c6565b60405180910390a45050505050565b600080600090506000612d4a600e613cbc565b905060005b81811015612dde5760156000612d6f83600e613daf90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612dcb578280612dc79061571e565b9350505b8080612dd69061571e565b915050612d4f565b50819250505090565b612def613cd1565b6000612df9612328565b90508073ffffffffffffffffffffffffffffffffffffffff16630a0e3dea83856040518363ffffffff1660e01b8152600401612e36929190615321565b600060405180830381600087803b158015612e5057600080fd5b505af1158015612e64573d6000803e3d6000fd5b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60018060000154908060010154908060020154908060030154908060040154905085565b601260149054906101000a900460ff1681565b6000612f42601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c613d4f90919063ffffffff16565b9050919050565b6000612f53612328565b90508073ffffffffffffffffffffffffffffffffffffffff16637acb775783336040518363ffffffff1660e01b8152600401612f90929190615321565b600060405180830381600087803b158015612faa57600080fd5b505af1158015612fbe573d6000803e3d6000fd5b505050505050565b60006004811115612fda57612fd9614f47565b5b600060149054906101000a900460ff166004811115612ffc57612ffb614f47565b5b148061303b57506003600481111561301757613016614f47565b5b600060149054906101000a900460ff16600481111561303957613038614f47565b5b145b80613078575060048081111561305457613053614f47565b5b600060149054906101000a900460ff16600481111561307657613075614f47565b5b145b6130c857600060149054906101000a900460ff166040517fc1f8741d0000000000000000000000000000000000000000000000000000000081526004016130bf91906150c3565b60405180910390fd5b60066004015460016130da600e613cbc565b6130e491906158ea565b1015613137576130f4600e613cbc565b6006600401546040517f8a0defa400000000000000000000000000000000000000000000000000000000815260040161312e92919061523c565b60405180910390fd5b61314033613ebd565b3373ffffffffffffffffffffffffffffffffffffffff167fff61c8020d05b8c2e31cdbb3d3f8cbcbdc57fcafa00229d9858b7cfd3b039c8a60405160405180910390a2565b61318d613cd1565b6004600060146101000a81548160ff021916908360048111156131b3576131b2614f47565b5b02179055507f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb660046040516131e891906150c3565b60405180910390a1565b6131fb87612f49565b613209868686868686610ef5565b50505050505050565b6001600401546001600201546132289190615766565b42101561327a57426001600201546001600401546040517f9312e856000000000000000000000000000000000000000000000000000000008152600401613271939291906153f0565b60405180910390fd5b6001600481111561328e5761328d614f47565b5b600060149054906101000a900460ff1660048111156132b0576132af614f47565b5b1461330157600060149054906101000a900460ff166040517f7203d9de0000000000000000000000000000000000000000000000000000000081526004016132f891906150c3565b60405180910390fd5b600061330d600e613cbc565b905060005b818110156133985760006015600061333484600e613daf90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806133909061571e565b915050613312565b50600160030160008154809291906133af9061571e565b91905055506003600060146101000a81548160ff021916908360048111156133da576133d9614f47565b5b02179055507f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb6600060149054906101000a900460ff1660405161341d91906150c3565b60405180910390a150565b600060149054906101000a900460ff1681565b60606000613449600e613cbc565b67ffffffffffffffff811115613462576134616147d2565b5b6040519080825280602002602001820160405280156134905781602001602082028036833780820191505090505b509050600061349f600e613cbc565b905060005b81811015613520576134c081600e613daf90919063ffffffff16565b8382815181106134d3576134d26157f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806135189061571e565b9150506134a4565b50819250505090565b6000613535600c613cbc565b905090565b606060006135466126f2565b905061355181611fde565b91505090565b60008060009050600061356a600c613cbc565b905060005b818110156135fe576015600061358f83600c613daf90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135eb5782806135e79061571e565b9350505b80806135f69061571e565b91505061356f565b50819250505090565b6000613611612328565b90508073ffffffffffffffffffffffffffffffffffffffff1662f714ce8273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016136679190614465565b602060405180830381865afa158015613684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a8919061564f565b336040518363ffffffff1660e01b81526004016136c6929190615321565b600060405180830381600087803b1580156136e057600080fd5b505af11580156136f4573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663c00007b0336040518263ffffffff1660e01b81526004016137319190614465565b600060405180830381600087803b15801561374b57600080fd5b505af115801561375f573d6000803e3d6000fd5b5050505050565b6000613770611bc8565b613778613557565b101561378757600090506137ab565b61378f610a6f565b613797612d37565b10156137a657600090506137ab565b600190505b90565b606060066003018054806020026020016040519081016040528092919081815260200182805480156137ff57602002820191906000526020600020905b8154815260200190600101908083116137eb575b5050505050905090565b613811613cd1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613877906159a1565b60405180910390fd5b61388981613df9565b50565b613894613cd1565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2b5fe80d5061b20e017f0cde52b331309601bfcab0cb14cfcf6a4096410a6075816040516139049190614465565b60405180910390a150565b8060018001541461395d576001800154816040517f068cde2a00000000000000000000000000000000000000000000000000000000815260040161395492919061523c565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600160048111156139d5576139d4614f47565b5b600060149054906101000a900460ff1660048111156139f7576139f6614f47565b5b1480613a36575060026004811115613a1257613a11614f47565b5b600060149054906101000a900460ff166004811115613a3457613a33614f47565b5b145b613a8657600060149054906101000a900460ff166040517fe1b4c12e000000000000000000000000000000000000000000000000000000008152600401613a7d91906150c3565b60405180910390fd5b6001806001015414613af157613aa681600e613d4f90919063ffffffff16565b613af05780613ab361343b565b6040517fa3113c0e000000000000000000000000000000000000000000000000000000008152600401613ae79291906159c1565b60405180910390fd5b5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f0c101bf9bc977a511cf4ef91f5b9cbac30a0a3af0768cfd5c9634e73120d7c8b6001800154604051613b939190614389565b60405180910390a2613ba3613766565b15613c1a576002600060146101000a81548160ff02191690836004811115613bce57613bcd614f47565b5b02179055507f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb6600060149054906101000a900460ff16604051613c1191906150c3565b60405180910390a15b5050565b60136020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a90046fffffffffffffffffffffffffffffffff16908060000160149054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154905087565b6000613cca826000016140aa565b9050919050565b613cd96140bb565b73ffffffffffffffffffffffffffffffffffffffff16613cf7612e6d565b73ffffffffffffffffffffffffffffffffffffffff1614613d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4490615a3d565b60405180910390fd5b565b6000613d77836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6140c3565b905092915050565b6000613da7836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6140e6565b905092915050565b6000613dbe8360000183614156565b60001c905092915050565b6000613df1836000018373ffffffffffffffffffffffffffffffffffffffff1660001b614181565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613ed181600e613d4f90919063ffffffff16565b15613eec57613eea81600e613dc990919063ffffffff16565b505b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060e00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820154815260200160038201548152602001600482015481525050905060008160a001518260c001516040516020016140619291906153c4565b60405160208183030381529060405280519060200120905060006018600083815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b600081600001805490509050919050565b600033905090565b600080836001016000848152602001908152602001600020541415905092915050565b60006140f283836140c3565b61414b578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050614150565b600090505b92915050565b600082600001828154811061416e5761416d6157f4565b5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020549050600081146142895760006001826141b391906158ea565b90506000600186600001805490506141cb91906158ea565b905081811461423a5760008660000182815481106141ec576141eb6157f4565b5b90600052602060002001549050808760000184815481106142105761420f6157f4565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061424e5761424d615a5d565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061428f565b60009150505b92915050565b8280548282559060005260206000209081019282156142d1579160200282015b828111156142d05782518255916020019190600101906142b5565b5b5090506142de9190614353565b5090565b6040518060e00160405280600063ffffffff16815260200160006fffffffffffffffffffffffffffffffff168152602001600063ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b5b8082111561436c576000816000905550600101614354565b5090565b6000819050919050565b61438381614370565b82525050565b600060208201905061439e600083018461437a565b92915050565b6000604051905090565b600080fd5b600080fd5b6143c181614370565b81146143cc57600080fd5b50565b6000813590506143de816143b8565b92915050565b600080604083850312156143fb576143fa6143ae565b5b6000614409858286016143cf565b925050602061441a858286016143cf565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061444f82614424565b9050919050565b61445f81614444565b82525050565b600060208201905061447a6000830184614456565b92915050565b600060208284031215614496576144956143ae565b5b60006144a4848285016143cf565b91505092915050565b6000819050919050565b6144c0816144ad565b81146144cb57600080fd5b50565b6000813590506144dd816144b7565b92915050565b6000602082840312156144f9576144f86143ae565b5b6000614507848285016144ce565b91505092915050565b60008115159050919050565b61452581614510565b82525050565b6000602082019050614540600083018461451c565b92915050565b600063ffffffff82169050919050565b61455f81614546565b811461456a57600080fd5b50565b60008135905061457c81614556565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6145a781614582565b81146145b257600080fd5b50565b6000813590506145c48161459e565b92915050565b6145d381614444565b81146145de57600080fd5b50565b6000813590506145f0816145ca565b92915050565b60008060008060008060c08789031215614613576146126143ae565b5b600061462189828a0161456d565b965050602061463289828a016145b5565b955050604061464389828a0161456d565b945050606061465489828a016145e1565b935050608061466589828a016143cf565b92505060a061467689828a016143cf565b9150509295509295509295565b6005811061469057600080fd5b50565b6000813590506146a281614683565b92915050565b6000602082840312156146be576146bd6143ae565b5b60006146cc84828501614693565b91505092915050565b6000602082840312156146eb576146ea6143ae565b5b60006146f9848285016145e1565b91505092915050565b60008060408385031215614719576147186143ae565b5b6000614727858286016143cf565b9250506020614738858286016145e1565b9150509250929050565b6000819050919050565b600061476761476261475d84614424565b614742565b614424565b9050919050565b60006147798261474c565b9050919050565b600061478b8261476e565b9050919050565b61479b81614780565b82525050565b60006020820190506147b66000830184614792565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61480a826147c1565b810181811067ffffffffffffffff82111715614829576148286147d2565b5b80604052505050565b600061483c6143a4565b90506148488282614801565b919050565b600067ffffffffffffffff821115614868576148676147d2565b5b602082029050602081019050919050565b600080fd5b600061489161488c8461484d565b614832565b905080838252602082019050602084028301858111156148b4576148b3614879565b5b835b818110156148dd57806148c988826143cf565b8452602084019350506020810190506148b6565b5050509392505050565b600082601f8301126148fc576148fb6147bc565b5b813561490c84826020860161487e565b91505092915050565b600080600080600060a08688031215614931576149306143ae565b5b600061493f888289016143cf565b9550506020614950888289016143cf565b9450506040614961888289016143cf565b935050606086013567ffffffffffffffff811115614982576149816143b3565b5b61498e888289016148e7565b925050608061499f888289016143cf565b9150509295509295909350565b600067ffffffffffffffff8211156149c7576149c66147d2565b5b602082029050602081019050919050565b60006149eb6149e6846149ac565b614832565b90508083825260208201905060208402830185811115614a0e57614a0d614879565b5b835b81811015614a375780614a2388826145e1565b845260208401935050602081019050614a10565b5050509392505050565b600082601f830112614a5657614a556147bc565b5b8135614a668482602086016149d8565b91505092915050565b600060208284031215614a8557614a846143ae565b5b600082013567ffffffffffffffff811115614aa357614aa26143b3565b5b614aaf84828501614a41565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614aed81614546565b82525050565b614afc81614582565b82525050565b614b0b81614444565b82525050565b614b1a81614370565b82525050565b60e082016000820151614b366000850182614ae4565b506020820151614b496020850182614af3565b506040820151614b5c6040850182614ae4565b506060820151614b6f6060850182614b02565b506080820151614b826080850182614b11565b5060a0820151614b9560a0850182614b11565b5060c0820151614ba860c0850182614b11565b50505050565b6000614bba8383614b20565b60e08301905092915050565b6000602082019050919050565b6000614bde82614ab8565b614be88185614ac3565b9350614bf383614ad4565b8060005b83811015614c24578151614c0b8882614bae565b9750614c1683614bc6565b925050600181019050614bf7565b5085935050505092915050565b60006020820190508181036000830152614c4b8184614bd3565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000614c8b8383614b02565b60208301905092915050565b6000602082019050919050565b6000614caf82614c53565b614cb98185614c5e565b9350614cc483614c6f565b8060005b83811015614cf5578151614cdc8882614c7f565b9750614ce783614c97565b925050600181019050614cc8565b5085935050505092915050565b60006020820190508181036000830152614d1c8184614ca4565b905092915050565b600080600060608486031215614d3d57614d3c6143ae565b5b6000614d4b868287016143cf565b9350506020614d5c868287016145e1565b9250506040614d6d868287016145e1565b9150509250925092565b6000604082019050614d8c600083018561437a565b614d99602083018461451c565b9392505050565b6000608082019050614db5600083018761437a565b614dc2602083018661437a565b614dcf604083018561437a565b614ddc606083018461437a565b95945050505050565b600080fd5b60008083601f840112614e0057614dff6147bc565b5b8235905067ffffffffffffffff811115614e1d57614e1c614de5565b5b602083019150836001820283011115614e3957614e38614879565b5b9250929050565b60008060008060608587031215614e5a57614e596143ae565b5b6000614e68878288016145e1565b9450506020614e79878288016143cf565b935050604085013567ffffffffffffffff811115614e9a57614e996143b3565b5b614ea687828801614dea565b925092505092959194509250565b60008060408385031215614ecb57614eca6143ae565b5b6000614ed9858286016145e1565b9250506020614eea858286016143cf565b9150509250929050565b600060a082019050614f09600083018861437a565b614f16602083018761437a565b614f23604083018661437a565b614f30606083018561437a565b614f3d608083018461437a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614f8757614f86614f47565b5b50565b6000819050614f9882614f76565b919050565b6000614fa882614f8a565b9050919050565b614fb881614f9d565b82525050565b6000602082019050614fd36000830184614faf565b92915050565b600080600080600080600060e0888a031215614ff857614ff76143ae565b5b60006150068a828b016143cf565b97505060206150178a828b0161456d565b96505060406150288a828b016145b5565b95505060606150398a828b0161456d565b945050608061504a8a828b016145e1565b93505060a061505b8a828b016143cf565b92505060c061506c8a828b016143cf565b91505092959891949750929550565b6005811061508c5761508b614f47565b5b50565b600081905061509d8261507b565b919050565b60006150ad8261508f565b9050919050565b6150bd816150a2565b82525050565b60006020820190506150d860008301846150b4565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006151168383614b11565b60208301905092915050565b6000602082019050919050565b600061513a826150de565b61514481856150e9565b935061514f836150fa565b8060005b83811015615180578151615167888261510a565b975061517283615122565b925050600181019050615153565b5085935050505092915050565b600060208201905081810360008301526151a7818461512f565b905092915050565b6151b881614546565b82525050565b6151c781614582565b82525050565b600060e0820190506151e2600083018a6151af565b6151ef60208301896151be565b6151fc60408301886151af565b6152096060830187614456565b615216608083018661437a565b61522360a083018561437a565b61523060c083018461437a565b98975050505050505050565b6000604082019050615251600083018561437a565b61525e602083018461437a565b9392505050565b600081519050615274816144b7565b92915050565b6000602082840312156152905761528f6143ae565b5b600061529e84828501615265565b91505092915050565b6152b0816144ad565b82525050565b60006040820190506152cb60008301856152a7565b6152d86020830184614faf565b9392505050565b6000815190506152ee816145ca565b92915050565b60006020828403121561530a576153096143ae565b5b6000615318848285016152df565b91505092915050565b6000604082019050615336600083018561437a565b6153436020830184614456565b9392505050565b61535381614510565b811461535e57600080fd5b50565b6000815190506153708161534a565b92915050565b60006020828403121561538c5761538b6143ae565b5b600061539a84828501615361565b91505092915050565b6000819050919050565b6153be6153b982614370565b6153a3565b82525050565b60006153d082856153ad565b6020820191506153e082846153ad565b6020820191508190509392505050565b6000606082019050615405600083018661437a565b615412602083018561437a565b61541f604083018461437a565b949350505050565b600060ff82169050919050565b61543d81615427565b811461544857600080fd5b50565b60008151905061545a81615434565b92915050565b600060208284031215615476576154756143ae565b5b60006154848482850161544b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115615513578086048111156154ef576154ee61548d565b5b60018516156154fe5780820291505b808102905061550c856154bc565b94506154d3565b94509492505050565b60008261552c57600190506155e8565b8161553a57600090506155e8565b8160018114615550576002811461555a57615589565b60019150506155e8565b60ff84111561556c5761556b61548d565b5b8360020a9150848211156155835761558261548d565b5b506155e8565b5060208310610133831016604e8410600b84101617156155be5782820a9050838111156155b9576155b861548d565b5b6155e8565b6155cb84848460016154c9565b925090508184048111156155e2576155e161548d565b5b81810290505b9392505050565b60006155fa82614370565b915061560583615427565b92506156327fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461551c565b905092915050565b600081519050615649816143b8565b92915050565b600060208284031215615665576156646143ae565b5b60006156738482850161563a565b91505092915050565b600061568782614370565b915061569283614370565b92508282026156a081614370565b915082820484148315176156b7576156b661548d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006156f882614370565b915061570383614370565b925082615713576157126156be565b5b828204905092915050565b600061572982614370565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361575b5761575a61548d565b5b600182019050919050565b600061577182614370565b915061577c83614370565b92508282019050808211156157945761579361548d565b5b92915050565b600060a0820190506157af600083018861437a565b6157bc602083018761437a565b6157c9604083018661437a565b81810360608301526157db818561512f565b90506157ea608083018461437a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061584861584361583e84615823565b614742565b614370565b9050919050565b6158588161582d565b82525050565b6000602082019050615873600083018461584f565b92915050565b600082825260208201905092915050565b82818337600083830152505050565b60006158a58385615879565b93506158b283858461588a565b6158bb836147c1565b840190509392505050565b600060208201905081810360008301526158e1818486615899565b90509392505050565b60006158f582614370565b915061590083614370565b92508282039050818111156159185761591761548d565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061598b60268361591e565b91506159968261592f565b604082019050919050565b600060208201905081810360008301526159ba8161597e565b9050919050565b60006040820190506159d66000830185614456565b81810360208301526159e88184614ca4565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615a2760208361591e565b9150615a32826159f1565b602082019050919050565b60006020820190508181036000830152615a5681615a1a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220e177b6363122cf05aa9e62d2e9d8dcf94eacb16f5a943d3e1055424e411d9d6a64736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061038e5760003560e01c806379502c55116101de578063b139603c1161010f578063e8684ed1116100ad578063f2fde38b1161007c578063f2fde38b146109e5578063f95d71b114610a01578063f99b562314610a1d578063fa52c7d814610a395761038e565b8063e8684ed114610981578063e9fad8ee1461099f578063f1887fec146109a9578063f1b877a8146109c75761038e565b8063c19d93fb116100e9578063c19d93fb14610909578063c35d4d0914610927578063d4818fca14610945578063e7c08720146109635761038e565b8063b139603c146108d9578063ba3bd22e146108e3578063c006e00b146108ff5761038e565b80638b80d8331161017c5780639dca0032116101565780639dca003214610865578063a25e49a414610883578063a694fc3a146108b3578063ac2f8afe146108cf5761038e565b80638b80d833146108095780638da5cb5b14610825578063900cf0cf146108435761038e565b8063847e0625116101b8578063847e062514610781578063857b7663146107b1578063865419e9146107cf57806389965883146107eb5761038e565b806379502c55146107265780637aa086e714610747578063817b1cd2146107635761038e565b80634927a143116102c3578063533d463e1161026157806361dee8a31161023057806361dee8a3146106b157806370fe276a146106cf578063715018a6146107005780637392c76b1461070a5761038e565b8063533d463e1461062957806354eea796146106595780635995a4c4146106755780635b677eac146106935761038e565b80635081f66f1161029d5780635081f66f1461058f57806350d17b5e146105bf578063519877eb146105dd5780635305c8cf1461060d5761038e565b80634927a143146105275780634a6e51f5146105575780634f8f0102146105735761038e565b80633528db88116103305780633e6852661161030a5780633e6852661461048d5780633f819713146104bd57806340550a1c146104d957806343cb0a0e146105095761038e565b80633528db881461045d5780633cf80e6c146104795780633d18b912146104835761038e565b806316930f4d1161036c57806316930f4d146103eb5780631fab87c4146103f5578063252959a5146104115780632e1a7d4d146104415761038e565b80630297d4db1461039357806309c7c7d0146103b157806310fe9ae8146103cd575b600080fd5b61039b610a6f565b6040516103a89190614389565b60405180910390f35b6103cb60048036038101906103c691906143e4565b610a80565b005b6103d5610add565b6040516103e29190614465565b60405180910390f35b6103f3610c21565b005b61040f600480360381019061040a9190614480565b610e0d565b005b61042b600480360381019061042691906144e3565b610e59565b604051610438919061452b565b60405180910390f35b61045b60048036038101906104569190614480565b610e79565b005b610477600480360381019061047291906145f6565b610ef5565b005b6104816115ec565b005b61048b611aad565b005b6104a760048036038101906104a29190614480565b611b27565b6040516104b49190614389565b60405180910390f35b6104d760048036038101906104d291906146a8565b611b3f565b005b6104f360048036038101906104ee91906146d5565b611bab565b604051610500919061452b565b60405180910390f35b610511611bc8565b60405161051e9190614389565b60405180910390f35b610541600480360381019061053c9190614702565b611c0c565b60405161054e9190614389565b60405180910390f35b610571600480360381019061056c9190614480565b611c37565b005b61058d600480360381019061058891906145f6565b611c83565b005b6105a960048036038101906105a491906146d5565b611ed5565b6040516105b69190614465565b60405180910390f35b6105c7611f08565b6040516105d491906147a1565b60405180910390f35b6105f760048036038101906105f291906146d5565b611f2e565b604051610604919061452b565b60405180910390f35b61062760048036038101906106229190614915565b611f4e565b005b610643600480360381019061063e9190614a6f565b611fde565b6040516106509190614c31565b60405180910390f35b610673600480360381019061066e9190614480565b6121ee565b005b61067d61223a565b60405161068a9190614d02565b60405180910390f35b61069b612328565b6040516106a89190614465565b60405180910390f35b6106b961246c565b6040516106c69190614c31565b60405180910390f35b6106e960048036038101906106e49190614d24565b612489565b6040516106f7929190614d77565b60405180910390f35b610708612541565b005b610724600480360381019061071f91906146d5565b612555565b005b61072e6125c1565b60405161073e9493929190614da0565b60405180910390f35b610761600480360381019061075c91906146d5565b6125df565b005b61076b61266c565b6040516107789190614389565b60405180910390f35b61079b600480360381019061079691906146d5565b612672565b6040516107a8919061452b565b60405180910390f35b6107b96126f2565b6040516107c69190614d02565b60405180910390f35b6107e960048036038101906107e49190614e40565b6127e0565b005b6107f3612d37565b6040516108009190614389565b60405180910390f35b610823600480360381019061081e9190614eb4565b612de7565b005b61082d612e6d565b60405161083a9190614465565b60405180910390f35b61084b612e96565b60405161085c959493929190614ef4565b60405180910390f35b61086d612eba565b60405161087a9190614fbe565b60405180910390f35b61089d600480360381019061089891906146d5565b612ecd565b6040516108aa919061452b565b60405180910390f35b6108cd60048036038101906108c89190614480565b612f49565b005b6108d7612fc6565b005b6108e1613185565b005b6108fd60048036038101906108f89190614fd9565b6131f2565b005b610907613212565b005b610911613428565b60405161091e91906150c3565b60405180910390f35b61092f61343b565b60405161093c9190614d02565b60405180910390f35b61094d613529565b60405161095a9190614389565b60405180910390f35b61096b61353a565b6040516109789190614c31565b60405180910390f35b610989613557565b6040516109969190614389565b60405180910390f35b6109a7613607565b005b6109b1613766565b6040516109be919061452b565b60405180910390f35b6109cf6137ae565b6040516109dc919061518d565b60405180910390f35b6109ff60048036038101906109fa91906146d5565b613809565b005b610a1b6004803603810190610a1691906146d5565b61388c565b005b610a376004803603810190610a329190614480565b61390f565b005b610a536004803603810190610a4e91906146d5565b613c1e565b604051610a6697969594939291906151cd565b60405180910390f35b6000610a7b600e613cbc565b905090565b610a88613cd1565b8060176000848152602001908152602001600020819055507fd96aa9b717408dfdef39925f998646946efba8139acb451b120585a33de7f1e68282604051610ad192919061523c565b60405180910390a15050565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df3806936040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae919061527a565b601260149054906101000a900460ff166040518363ffffffff1660e01b8152600401610bdb9291906152b6565b602060405180830381865afa158015610bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1c91906152f4565b905090565b600160020154421015610c7257426001600201546040517ff44bc0a7000000000000000000000000000000000000000000000000000000008152600401610c6992919061523c565b60405180910390fd5b60006004811115610c8657610c85614f47565b5b600060149054906101000a900460ff166004811115610ca857610ca7614f47565b5b1480610ce7575060036004811115610cc357610cc2614f47565b5b600060149054906101000a900460ff166004811115610ce557610ce4614f47565b5b145b610d3757600060149054906101000a900460ff166040517f9ef5b6f5000000000000000000000000000000000000000000000000000000008152600401610d2e91906150c3565b60405180910390fd5b600660040154610d47600e613cbc565b1015610d9a57610d57600e613cbc565b6006600401546040517f8a0defa4000000000000000000000000000000000000000000000000000000008152600401610d9192919061523c565b60405180910390fd5b6001600060146101000a81548160ff02191690836004811115610dc057610dbf614f47565b5b02179055507f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb6600060149054906101000a900460ff16604051610e0391906150c3565b60405180910390a1565b610e15613cd1565b806001600401819055507f887fed3a9270ffbbf863d640a07413b6f58cf97afaa9d7267693e962a76bd81081604051610e4e9190614389565b60405180910390a150565b60186020528060005260406000206000915054906101000a900460ff1681565b6000610e83612328565b90508073ffffffffffffffffffffffffffffffffffffffff1662f714ce83336040518363ffffffff1660e01b8152600401610ebf929190615321565b600060405180830381600087803b158015610ed957600080fd5b505af1158015610eed573d6000803e3d6000fd5b505050505050565b6000610eff612328565b90508073ffffffffffffffffffffffffffffffffffffffff166349919966336040518263ffffffff1660e01b8152600401610f3a9190614465565b602060405180830381865afa158015610f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7b9190615376565b5060006004811115610f9057610f8f614f47565b5b600060149054906101000a900460ff166004811115610fb257610fb1614f47565b5b1480610ff1575060036004811115610fcd57610fcc614f47565b5b600060149054906101000a900460ff166004811115610fef57610fee614f47565b5b145b8061102e575060048081111561100a57611009614f47565b5b600060149054906101000a900460ff16600481111561102c5761102b614f47565b5b145b61107e57600060149054906101000a900460ff166040517fc1f8741d00000000000000000000000000000000000000000000000000000000815260040161107591906150c3565b60405180910390fd5b611092336010613d4f90919063ffffffff16565b156110d457336040517f7c6d6c6b0000000000000000000000000000000000000000000000000000000081526004016110cb9190614465565b60405180910390fd5b600083836040516020016110e99291906153c4565b6040516020818303038152906040528051906020012090506018600082815260200190815260200160002060009054906101000a900460ff16156111665783836040517f1179010e00000000000000000000000000000000000000000000000000000000815260040161115d92919061523c565b60405180910390fd5b60016018600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166327a199d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190615376565b156112c2578173ffffffffffffffffffffffffffffffffffffffff1663d3dbad7d336040518263ffffffff1660e01b815260040161123f9190614465565b602060405180830381865afa15801561125c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112809190615376565b6112c157336040517f924a59100000000000000000000000000000000000000000000000000000000081526004016112b89190614465565b60405180910390fd5b5b87601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548163ffffffff021916908363ffffffff16021790555086601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160046101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555085601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160146101000a81548163ffffffff021916908363ffffffff16021790555084601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555082601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555033601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061159e33600e613d7f90919063ffffffff16565b503373ffffffffffffffffffffffffffffffffffffffff167f1dc186bd4daaf3fc4b9f8c689228a0be60dd2952dc502829514ae0d6955c0f5160405160405180910390a25050505050505050565b60016002015442101561163d57426001600201546040517ff44bc0a700000000000000000000000000000000000000000000000000000000815260040161163492919061523c565b60405180910390fd5b6002600481111561165157611650614f47565b5b600060149054906101000a900460ff16600481111561167357611672614f47565b5b146116c457600060149054906101000a900460ff166040517f17ce3ae10000000000000000000000000000000000000000000000000000000081526004016116bb91906150c3565b60405180910390fd5b6116cc613766565b611726576116d8613557565b6116e0612d37565b6116e8611bc8565b6040517f26d6b3de00000000000000000000000000000000000000000000000000000000815260040161171d939291906153f0565b60405180910390fd5b6000611732600c613cbc565b905060005b8181101561190657600061175582600c613daf90919063ffffffff16565b90506000611761610add565b9050600061176d612328565b905060008273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e09190615460565b600a6117ec91906155ef565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016118259190614465565b602060405180830381865afa158015611842573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611866919061564f565b600660000154611876919061567c565b61188091906156ed565b90508173ffffffffffffffffffffffffffffffffffffffff166302fa04c982866040518363ffffffff1660e01b81526004016118bd929190615321565b600060405180830381600087803b1580156118d757600080fd5b505af11580156118eb573d6000803e3d6000fd5b505050505050505080806118fe9061571e565b915050611737565b505b6000611914600c613cbc565b1115611948576119426119326000600c613daf90919063ffffffff16565b600c613dc990919063ffffffff16565b50611908565b611952600e613cbc565b905060005b81811015611a055761198661197682600e613daf90919063ffffffff16565b600c613d7f90919063ffffffff16565b506000601560006119a184600e613daf90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806119fd9061571e565b915050611957565b50600180016000815480929190611a1b9061571e565b919050555060016000015442611a319190615766565b60016002018190555060008060146101000a81548160ff02191690836004811115611a5f57611a5e614f47565b5b02179055507f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb6600060149054906101000a900460ff16604051611aa291906150c3565b60405180910390a150565b6000611ab7612328565b90508073ffffffffffffffffffffffffffffffffffffffff1663c00007b0336040518263ffffffff1660e01b8152600401611af29190614465565b600060405180830381600087803b158015611b0c57600080fd5b505af1158015611b20573d6000803e3d6000fd5b5050505050565b60176020528060005260406000206000915090505481565b611b47613cd1565b80600060146101000a81548160ff02191690836004811115611b6c57611b6b614f47565b5b02179055507f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb681604051611ba091906150c3565b60405180910390a150565b6000611bc182600c613d4f90919063ffffffff16565b9050919050565b60006002611bd6600c613cbc565b03611be45760019050611c09565b60036002611bf2600c613cbc565b611bfc919061567c565b611c0691906156ed565b90505b90565b6016602052816000526040600020602052806000526040600020600091509150508060000154905081565b611c3f613cd1565b806001600201819055507feb49fe6118b628c010445c30724ceaf4efd8d87f330911c36493b401b5c296d081604051611c789190614389565b60405180910390a150565b85601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548163ffffffff021916908363ffffffff16021790555084601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160046101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160146101000a81548163ffffffff021916908363ffffffff16021790555082601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555080601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550505050505050565b60146020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60156020528060005260406000206000915054906101000a900460ff1681565b611f56613cd1565b8460066000018190555083600660010181905550826006600201819055508160066003019080519060200190611f8d929190614295565b50806006600401819055507f16f896f15b01cc0c19146aac8f21b75e76e4f196a9e368ca3d1b7cf5251a12588585858585604051611fcf95949392919061579a565b60405180910390a15050505050565b60606000825167ffffffffffffffff811115611ffd57611ffc6147d2565b5b60405190808252806020026020018201604052801561203657816020015b6120236142e2565b81526020019060019003908161201b5790505b50905060005b83518110156121e4576013600085838151811061205c5761205b6157f4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060e00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152602001600382015481526020016004820154815250508282815181106121c6576121c56157f4565b5b602002602001018190525080806121dc9061571e565b91505061203c565b5080915050919050565b6121f6613cd1565b806001600001819055507f5f15d41eab42cb3f8a5c9e8cd44043648cb85a815522c5f4ae5a32597a8447a08160405161222f9190614389565b60405180910390a150565b606060006122486010613cbc565b67ffffffffffffffff811115612261576122606147d2565b5b60405190808252806020026020018201604052801561228f5781602001602082028036833780820191505090505b509050600061229e6010613cbc565b905060005b8181101561231f576122bf816010613daf90919063ffffffff16565b8382815181106122d2576122d16157f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806123179061571e565b9150506122a3565b50819250505090565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638c1536df6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f9919061527a565b601260149054906101000a900460ff166040518363ffffffff1660e01b81526004016124269291906152b6565b602060405180830381865afa158015612443573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246791906152f4565b905090565b6060600061247861343b565b905061248381611fde565b91505090565b60008060006016600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001548160010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250925050935093915050565b612549613cd1565b6125536000613df9565b565b61255d613cd1565b612571816010613dc990919063ffffffff16565b5061258681600e613d7f90919063ffffffff16565b507fa5b14a5b2a3bffe27eff4f0dd1c65b1c966d2ec463c04f29a82c3e228ba7a071816040516125b69190614465565b60405180910390a150565b60068060000154908060010154908060020154908060040154905084565b6125e7613cd1565b6125fb81600e613dc990919063ffffffff16565b50612610816010613d7f90919063ffffffff16565b5061261a33613ebd565b8073ffffffffffffffffffffffffffffffffffffffff167ff020e162c28460a603e71f641a2e83634580ace02b9e28b844b2257949860e976000604051612661919061585e565b60405180910390a250565b600b5481565b600080601660006001800154815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506126d3611bc8565b8160000154106126e75760019150506126ed565b60009150505b919050565b60606000612700600c613cbc565b67ffffffffffffffff811115612719576127186147d2565b5b6040519080825280602002602001820160405280156127475781602001602082028036833780820191505090505b5090506000612756600c613cbc565b905060005b818110156127d75761277781600c613daf90919063ffffffff16565b83828151811061278a576127896157f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806127cf9061571e565b91505061275b565b50819250505090565b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128b557336040517f64ffeb3d0000000000000000000000000000000000000000000000000000000081526004016128ac9190614465565b60405180910390fd5b6128c981600e613d4f90919063ffffffff16565b61290a57806040517f5f5430820000000000000000000000000000000000000000000000000000000081526004016129019190614465565b60405180910390fd5b601660006001800154815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129ee57806040517f384ce38a0000000000000000000000000000000000000000000000000000000081526004016129e59190614465565b60405180910390fd5b601660006001800154815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000815480929190612a569061571e565b91905055506001601660006001800154815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612b1c85600e613d4f90919063ffffffff16565b8015612b2d5750612b2c85612672565b5b15612cc857612b3b85613ebd565b612b4f856010613d7f90919063ffffffff16565b506000601760008681526020019081526020016000205490506000612b72612328565b905060006064838373ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff1660e01b8152600401612bb29190614465565b602060405180830381865afa158015612bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf3919061564f565b612bfd919061567c565b612c0791906156ed565b90508173ffffffffffffffffffffffffffffffffffffffff16630a0e3dea828a6040518363ffffffff1660e01b8152600401612c44929190615321565b600060405180830381600087803b158015612c5e57600080fd5b505af1158015612c72573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff167ff020e162c28460a603e71f641a2e83634580ace02b9e28b844b2257949860e9782604051612cbc9190614389565b60405180910390a25050505b838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167febdee48ed32f3feff81eed274b9e084b367ac42fe1cb710dcbd43f1d537d99fa8686604051612d289291906158c6565b60405180910390a45050505050565b600080600090506000612d4a600e613cbc565b905060005b81811015612dde5760156000612d6f83600e613daf90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612dcb578280612dc79061571e565b9350505b8080612dd69061571e565b915050612d4f565b50819250505090565b612def613cd1565b6000612df9612328565b90508073ffffffffffffffffffffffffffffffffffffffff16630a0e3dea83856040518363ffffffff1660e01b8152600401612e36929190615321565b600060405180830381600087803b158015612e5057600080fd5b505af1158015612e64573d6000803e3d6000fd5b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60018060000154908060010154908060020154908060030154908060040154905085565b601260149054906101000a900460ff1681565b6000612f42601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c613d4f90919063ffffffff16565b9050919050565b6000612f53612328565b90508073ffffffffffffffffffffffffffffffffffffffff16637acb775783336040518363ffffffff1660e01b8152600401612f90929190615321565b600060405180830381600087803b158015612faa57600080fd5b505af1158015612fbe573d6000803e3d6000fd5b505050505050565b60006004811115612fda57612fd9614f47565b5b600060149054906101000a900460ff166004811115612ffc57612ffb614f47565b5b148061303b57506003600481111561301757613016614f47565b5b600060149054906101000a900460ff16600481111561303957613038614f47565b5b145b80613078575060048081111561305457613053614f47565b5b600060149054906101000a900460ff16600481111561307657613075614f47565b5b145b6130c857600060149054906101000a900460ff166040517fc1f8741d0000000000000000000000000000000000000000000000000000000081526004016130bf91906150c3565b60405180910390fd5b60066004015460016130da600e613cbc565b6130e491906158ea565b1015613137576130f4600e613cbc565b6006600401546040517f8a0defa400000000000000000000000000000000000000000000000000000000815260040161312e92919061523c565b60405180910390fd5b61314033613ebd565b3373ffffffffffffffffffffffffffffffffffffffff167fff61c8020d05b8c2e31cdbb3d3f8cbcbdc57fcafa00229d9858b7cfd3b039c8a60405160405180910390a2565b61318d613cd1565b6004600060146101000a81548160ff021916908360048111156131b3576131b2614f47565b5b02179055507f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb660046040516131e891906150c3565b60405180910390a1565b6131fb87612f49565b613209868686868686610ef5565b50505050505050565b6001600401546001600201546132289190615766565b42101561327a57426001600201546001600401546040517f9312e856000000000000000000000000000000000000000000000000000000008152600401613271939291906153f0565b60405180910390fd5b6001600481111561328e5761328d614f47565b5b600060149054906101000a900460ff1660048111156132b0576132af614f47565b5b1461330157600060149054906101000a900460ff166040517f7203d9de0000000000000000000000000000000000000000000000000000000081526004016132f891906150c3565b60405180910390fd5b600061330d600e613cbc565b905060005b818110156133985760006015600061333484600e613daf90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806133909061571e565b915050613312565b50600160030160008154809291906133af9061571e565b91905055506003600060146101000a81548160ff021916908360048111156133da576133d9614f47565b5b02179055507f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb6600060149054906101000a900460ff1660405161341d91906150c3565b60405180910390a150565b600060149054906101000a900460ff1681565b60606000613449600e613cbc565b67ffffffffffffffff811115613462576134616147d2565b5b6040519080825280602002602001820160405280156134905781602001602082028036833780820191505090505b509050600061349f600e613cbc565b905060005b81811015613520576134c081600e613daf90919063ffffffff16565b8382815181106134d3576134d26157f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806135189061571e565b9150506134a4565b50819250505090565b6000613535600c613cbc565b905090565b606060006135466126f2565b905061355181611fde565b91505090565b60008060009050600061356a600c613cbc565b905060005b818110156135fe576015600061358f83600c613daf90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135eb5782806135e79061571e565b9350505b80806135f69061571e565b91505061356f565b50819250505090565b6000613611612328565b90508073ffffffffffffffffffffffffffffffffffffffff1662f714ce8273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016136679190614465565b602060405180830381865afa158015613684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a8919061564f565b336040518363ffffffff1660e01b81526004016136c6929190615321565b600060405180830381600087803b1580156136e057600080fd5b505af11580156136f4573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663c00007b0336040518263ffffffff1660e01b81526004016137319190614465565b600060405180830381600087803b15801561374b57600080fd5b505af115801561375f573d6000803e3d6000fd5b5050505050565b6000613770611bc8565b613778613557565b101561378757600090506137ab565b61378f610a6f565b613797612d37565b10156137a657600090506137ab565b600190505b90565b606060066003018054806020026020016040519081016040528092919081815260200182805480156137ff57602002820191906000526020600020905b8154815260200190600101908083116137eb575b5050505050905090565b613811613cd1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613877906159a1565b60405180910390fd5b61388981613df9565b50565b613894613cd1565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2b5fe80d5061b20e017f0cde52b331309601bfcab0cb14cfcf6a4096410a6075816040516139049190614465565b60405180910390a150565b8060018001541461395d576001800154816040517f068cde2a00000000000000000000000000000000000000000000000000000000815260040161395492919061523c565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600160048111156139d5576139d4614f47565b5b600060149054906101000a900460ff1660048111156139f7576139f6614f47565b5b1480613a36575060026004811115613a1257613a11614f47565b5b600060149054906101000a900460ff166004811115613a3457613a33614f47565b5b145b613a8657600060149054906101000a900460ff166040517fe1b4c12e000000000000000000000000000000000000000000000000000000008152600401613a7d91906150c3565b60405180910390fd5b6001806001015414613af157613aa681600e613d4f90919063ffffffff16565b613af05780613ab361343b565b6040517fa3113c0e000000000000000000000000000000000000000000000000000000008152600401613ae79291906159c1565b60405180910390fd5b5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f0c101bf9bc977a511cf4ef91f5b9cbac30a0a3af0768cfd5c9634e73120d7c8b6001800154604051613b939190614389565b60405180910390a2613ba3613766565b15613c1a576002600060146101000a81548160ff02191690836004811115613bce57613bcd614f47565b5b02179055507f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb6600060149054906101000a900460ff16604051613c1191906150c3565b60405180910390a15b5050565b60136020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a90046fffffffffffffffffffffffffffffffff16908060000160149054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154905087565b6000613cca826000016140aa565b9050919050565b613cd96140bb565b73ffffffffffffffffffffffffffffffffffffffff16613cf7612e6d565b73ffffffffffffffffffffffffffffffffffffffff1614613d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4490615a3d565b60405180910390fd5b565b6000613d77836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6140c3565b905092915050565b6000613da7836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6140e6565b905092915050565b6000613dbe8360000183614156565b60001c905092915050565b6000613df1836000018373ffffffffffffffffffffffffffffffffffffffff1660001b614181565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613ed181600e613d4f90919063ffffffff16565b15613eec57613eea81600e613dc990919063ffffffff16565b505b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060e00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820154815260200160038201548152602001600482015481525050905060008160a001518260c001516040516020016140619291906153c4565b60405160208183030381529060405280519060200120905060006018600083815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b600081600001805490509050919050565b600033905090565b600080836001016000848152602001908152602001600020541415905092915050565b60006140f283836140c3565b61414b578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050614150565b600090505b92915050565b600082600001828154811061416e5761416d6157f4565b5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020549050600081146142895760006001826141b391906158ea565b90506000600186600001805490506141cb91906158ea565b905081811461423a5760008660000182815481106141ec576141eb6157f4565b5b90600052602060002001549050808760000184815481106142105761420f6157f4565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061424e5761424d615a5d565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061428f565b60009150505b92915050565b8280548282559060005260206000209081019282156142d1579160200282015b828111156142d05782518255916020019190600101906142b5565b5b5090506142de9190614353565b5090565b6040518060e00160405280600063ffffffff16815260200160006fffffffffffffffffffffffffffffffff168152602001600063ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b5b8082111561436c576000816000905550600101614354565b5090565b6000819050919050565b61438381614370565b82525050565b600060208201905061439e600083018461437a565b92915050565b6000604051905090565b600080fd5b600080fd5b6143c181614370565b81146143cc57600080fd5b50565b6000813590506143de816143b8565b92915050565b600080604083850312156143fb576143fa6143ae565b5b6000614409858286016143cf565b925050602061441a858286016143cf565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061444f82614424565b9050919050565b61445f81614444565b82525050565b600060208201905061447a6000830184614456565b92915050565b600060208284031215614496576144956143ae565b5b60006144a4848285016143cf565b91505092915050565b6000819050919050565b6144c0816144ad565b81146144cb57600080fd5b50565b6000813590506144dd816144b7565b92915050565b6000602082840312156144f9576144f86143ae565b5b6000614507848285016144ce565b91505092915050565b60008115159050919050565b61452581614510565b82525050565b6000602082019050614540600083018461451c565b92915050565b600063ffffffff82169050919050565b61455f81614546565b811461456a57600080fd5b50565b60008135905061457c81614556565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6145a781614582565b81146145b257600080fd5b50565b6000813590506145c48161459e565b92915050565b6145d381614444565b81146145de57600080fd5b50565b6000813590506145f0816145ca565b92915050565b60008060008060008060c08789031215614613576146126143ae565b5b600061462189828a0161456d565b965050602061463289828a016145b5565b955050604061464389828a0161456d565b945050606061465489828a016145e1565b935050608061466589828a016143cf565b92505060a061467689828a016143cf565b9150509295509295509295565b6005811061469057600080fd5b50565b6000813590506146a281614683565b92915050565b6000602082840312156146be576146bd6143ae565b5b60006146cc84828501614693565b91505092915050565b6000602082840312156146eb576146ea6143ae565b5b60006146f9848285016145e1565b91505092915050565b60008060408385031215614719576147186143ae565b5b6000614727858286016143cf565b9250506020614738858286016145e1565b9150509250929050565b6000819050919050565b600061476761476261475d84614424565b614742565b614424565b9050919050565b60006147798261474c565b9050919050565b600061478b8261476e565b9050919050565b61479b81614780565b82525050565b60006020820190506147b66000830184614792565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61480a826147c1565b810181811067ffffffffffffffff82111715614829576148286147d2565b5b80604052505050565b600061483c6143a4565b90506148488282614801565b919050565b600067ffffffffffffffff821115614868576148676147d2565b5b602082029050602081019050919050565b600080fd5b600061489161488c8461484d565b614832565b905080838252602082019050602084028301858111156148b4576148b3614879565b5b835b818110156148dd57806148c988826143cf565b8452602084019350506020810190506148b6565b5050509392505050565b600082601f8301126148fc576148fb6147bc565b5b813561490c84826020860161487e565b91505092915050565b600080600080600060a08688031215614931576149306143ae565b5b600061493f888289016143cf565b9550506020614950888289016143cf565b9450506040614961888289016143cf565b935050606086013567ffffffffffffffff811115614982576149816143b3565b5b61498e888289016148e7565b925050608061499f888289016143cf565b9150509295509295909350565b600067ffffffffffffffff8211156149c7576149c66147d2565b5b602082029050602081019050919050565b60006149eb6149e6846149ac565b614832565b90508083825260208201905060208402830185811115614a0e57614a0d614879565b5b835b81811015614a375780614a2388826145e1565b845260208401935050602081019050614a10565b5050509392505050565b600082601f830112614a5657614a556147bc565b5b8135614a668482602086016149d8565b91505092915050565b600060208284031215614a8557614a846143ae565b5b600082013567ffffffffffffffff811115614aa357614aa26143b3565b5b614aaf84828501614a41565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614aed81614546565b82525050565b614afc81614582565b82525050565b614b0b81614444565b82525050565b614b1a81614370565b82525050565b60e082016000820151614b366000850182614ae4565b506020820151614b496020850182614af3565b506040820151614b5c6040850182614ae4565b506060820151614b6f6060850182614b02565b506080820151614b826080850182614b11565b5060a0820151614b9560a0850182614b11565b5060c0820151614ba860c0850182614b11565b50505050565b6000614bba8383614b20565b60e08301905092915050565b6000602082019050919050565b6000614bde82614ab8565b614be88185614ac3565b9350614bf383614ad4565b8060005b83811015614c24578151614c0b8882614bae565b9750614c1683614bc6565b925050600181019050614bf7565b5085935050505092915050565b60006020820190508181036000830152614c4b8184614bd3565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000614c8b8383614b02565b60208301905092915050565b6000602082019050919050565b6000614caf82614c53565b614cb98185614c5e565b9350614cc483614c6f565b8060005b83811015614cf5578151614cdc8882614c7f565b9750614ce783614c97565b925050600181019050614cc8565b5085935050505092915050565b60006020820190508181036000830152614d1c8184614ca4565b905092915050565b600080600060608486031215614d3d57614d3c6143ae565b5b6000614d4b868287016143cf565b9350506020614d5c868287016145e1565b9250506040614d6d868287016145e1565b9150509250925092565b6000604082019050614d8c600083018561437a565b614d99602083018461451c565b9392505050565b6000608082019050614db5600083018761437a565b614dc2602083018661437a565b614dcf604083018561437a565b614ddc606083018461437a565b95945050505050565b600080fd5b60008083601f840112614e0057614dff6147bc565b5b8235905067ffffffffffffffff811115614e1d57614e1c614de5565b5b602083019150836001820283011115614e3957614e38614879565b5b9250929050565b60008060008060608587031215614e5a57614e596143ae565b5b6000614e68878288016145e1565b9450506020614e79878288016143cf565b935050604085013567ffffffffffffffff811115614e9a57614e996143b3565b5b614ea687828801614dea565b925092505092959194509250565b60008060408385031215614ecb57614eca6143ae565b5b6000614ed9858286016145e1565b9250506020614eea858286016143cf565b9150509250929050565b600060a082019050614f09600083018861437a565b614f16602083018761437a565b614f23604083018661437a565b614f30606083018561437a565b614f3d608083018461437a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614f8757614f86614f47565b5b50565b6000819050614f9882614f76565b919050565b6000614fa882614f8a565b9050919050565b614fb881614f9d565b82525050565b6000602082019050614fd36000830184614faf565b92915050565b600080600080600080600060e0888a031215614ff857614ff76143ae565b5b60006150068a828b016143cf565b97505060206150178a828b0161456d565b96505060406150288a828b016145b5565b95505060606150398a828b0161456d565b945050608061504a8a828b016145e1565b93505060a061505b8a828b016143cf565b92505060c061506c8a828b016143cf565b91505092959891949750929550565b6005811061508c5761508b614f47565b5b50565b600081905061509d8261507b565b919050565b60006150ad8261508f565b9050919050565b6150bd816150a2565b82525050565b60006020820190506150d860008301846150b4565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006151168383614b11565b60208301905092915050565b6000602082019050919050565b600061513a826150de565b61514481856150e9565b935061514f836150fa565b8060005b83811015615180578151615167888261510a565b975061517283615122565b925050600181019050615153565b5085935050505092915050565b600060208201905081810360008301526151a7818461512f565b905092915050565b6151b881614546565b82525050565b6151c781614582565b82525050565b600060e0820190506151e2600083018a6151af565b6151ef60208301896151be565b6151fc60408301886151af565b6152096060830187614456565b615216608083018661437a565b61522360a083018561437a565b61523060c083018461437a565b98975050505050505050565b6000604082019050615251600083018561437a565b61525e602083018461437a565b9392505050565b600081519050615274816144b7565b92915050565b6000602082840312156152905761528f6143ae565b5b600061529e84828501615265565b91505092915050565b6152b0816144ad565b82525050565b60006040820190506152cb60008301856152a7565b6152d86020830184614faf565b9392505050565b6000815190506152ee816145ca565b92915050565b60006020828403121561530a576153096143ae565b5b6000615318848285016152df565b91505092915050565b6000604082019050615336600083018561437a565b6153436020830184614456565b9392505050565b61535381614510565b811461535e57600080fd5b50565b6000815190506153708161534a565b92915050565b60006020828403121561538c5761538b6143ae565b5b600061539a84828501615361565b91505092915050565b6000819050919050565b6153be6153b982614370565b6153a3565b82525050565b60006153d082856153ad565b6020820191506153e082846153ad565b6020820191508190509392505050565b6000606082019050615405600083018661437a565b615412602083018561437a565b61541f604083018461437a565b949350505050565b600060ff82169050919050565b61543d81615427565b811461544857600080fd5b50565b60008151905061545a81615434565b92915050565b600060208284031215615476576154756143ae565b5b60006154848482850161544b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115615513578086048111156154ef576154ee61548d565b5b60018516156154fe5780820291505b808102905061550c856154bc565b94506154d3565b94509492505050565b60008261552c57600190506155e8565b8161553a57600090506155e8565b8160018114615550576002811461555a57615589565b60019150506155e8565b60ff84111561556c5761556b61548d565b5b8360020a9150848211156155835761558261548d565b5b506155e8565b5060208310610133831016604e8410600b84101617156155be5782820a9050838111156155b9576155b861548d565b5b6155e8565b6155cb84848460016154c9565b925090508184048111156155e2576155e161548d565b5b81810290505b9392505050565b60006155fa82614370565b915061560583615427565b92506156327fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461551c565b905092915050565b600081519050615649816143b8565b92915050565b600060208284031215615665576156646143ae565b5b60006156738482850161563a565b91505092915050565b600061568782614370565b915061569283614370565b92508282026156a081614370565b915082820484148315176156b7576156b661548d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006156f882614370565b915061570383614370565b925082615713576157126156be565b5b828204905092915050565b600061572982614370565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361575b5761575a61548d565b5b600182019050919050565b600061577182614370565b915061577c83614370565b92508282019050808211156157945761579361548d565b5b92915050565b600060a0820190506157af600083018861437a565b6157bc602083018761437a565b6157c9604083018661437a565b81810360608301526157db818561512f565b90506157ea608083018461437a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061584861584361583e84615823565b614742565b614370565b9050919050565b6158588161582d565b82525050565b6000602082019050615873600083018461584f565b92915050565b600082825260208201905092915050565b82818337600083830152505050565b60006158a58385615879565b93506158b283858461588a565b6158bb836147c1565b840190509392505050565b600060208201905081810360008301526158e1818486615899565b90509392505050565b60006158f582614370565b915061590083614370565b92508282039050818111156159185761591761548d565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061598b60268361591e565b91506159968261592f565b604082019050919050565b600060208201905081810360008301526159ba8161597e565b9050919050565b60006040820190506159d66000830185614456565b81810360208301526159e88184614ca4565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615a2760208361591e565b9150615a32826159f1565b602082019050919050565b60006020820190508181036000830152615a5681615a1a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220e177b6363122cf05aa9e62d2e9d8dcf94eacb16f5a943d3e1055424e411d9d6a64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/StakingBalances.json b/contracts/cayenne/StakingBalances.json deleted file mode 100644 index e4af1e4..0000000 --- a/contracts/cayenne/StakingBalances.json +++ /dev/null @@ -1,1030 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "StakingBalances", - "sourceName": "contracts/lit-node/StakingBalances.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_resolver", - "type": "address" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "_env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ActiveValidatorsCannotLeave", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "aliasAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "stakerAddress", - "type": "address" - } - ], - "name": "AliasNotOwnedBySender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "aliasAccount", - "type": "address" - } - ], - "name": "CannotRemoveAliasOfActiveValidator", - "type": "error" - }, - { - "inputs": [], - "name": "CannotStakeZero", - "type": "error" - }, - { - "inputs": [], - "name": "CannotWithdrawZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "aliasCount", - "type": "uint256" - } - ], - "name": "MaxAliasCountReached", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "OnlyStakingContract", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minimumStake", - "type": "uint256" - } - ], - "name": "StakeMustBeGreaterThanMinimumStake", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maximumStake", - "type": "uint256" - } - ], - "name": "StakeMustBeLessThanMaximumStake", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakerAddress", - "type": "address" - } - ], - "name": "StakerNotPermitted", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "yourBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "requestedWithdrawlAmount", - "type": "uint256" - } - ], - "name": "TryingToWithdrawMoreThanStaked", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "staker", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "aliasAccount", - "type": "address" - } - ], - "name": "AliasAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "staker", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "aliasAccount", - "type": "address" - } - ], - "name": "AliasRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newMaxAliasCount", - "type": "uint256" - } - ], - "name": "MaxAliasCountSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newMaximumStake", - "type": "uint256" - } - ], - "name": "MaximumStakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newMinimumStake", - "type": "uint256" - } - ], - "name": "MinimumStakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "staker", - "type": "address" - } - ], - "name": "PermittedStakerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "staker", - "type": "address" - } - ], - "name": "PermittedStakerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "permittedStakersOn", - "type": "bool" - } - ], - "name": "PermittedStakersOnChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "ResolverContractAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "staker", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "reward", - "type": "uint256" - } - ], - "name": "RewardPaid", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "staker", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Staked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newTokenRewardPerTokenPerEpoch", - "type": "uint256" - } - ], - "name": "TokenRewardPerTokenPerEpochSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "staker", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "aliasAccount", - "type": "address" - } - ], - "name": "ValidatorNotRewardedBecauseAlias", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "staker", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ValidatorRewarded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "staker", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ValidatorTokensPenalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "staker", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrawn", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "aliasAccount", - "type": "address" - } - ], - "name": "addAlias", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "staker", - "type": "address" - } - ], - "name": "addPermittedStaker", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "stakers", - "type": "address[]" - } - ], - "name": "addPermittedStakers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliasCounts", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "aliases", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "checkStakingAmounts", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "contractResolver", - "outputs": [ - { - "internalType": "contract ContractResolver", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "env", - "outputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getReward", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTokenAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "staker", - "type": "address" - } - ], - "name": "isPermittedStaker", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxAliasCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "penalizeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "penaltyBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "permittedStakers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "permittedStakersOn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "aliasAccount", - "type": "address" - } - ], - "name": "removeAlias", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "staker", - "type": "address" - } - ], - "name": "removePermittedStaker", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "staker", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "restakePenaltyTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "rewardOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "rewardValidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "rewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newMaxAliasCount", - "type": "uint256" - } - ], - "name": "setMaxAliasCount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newMaximumStake", - "type": "uint256" - } - ], - "name": "setMaximumStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newMinimumStake", - "type": "uint256" - } - ], - "name": "setMinimumStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "permitted", - "type": "bool" - } - ], - "name": "setPermittedStakersOn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "stake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "totalStaked", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "transferPenaltyTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "withdrawPenaltyTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b506040516200414738038062004147833981810160405281019062000037919062000431565b620000576200004b6200018760201b60201c565b6200018f60201b60201c565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548160ff02191690836002811115620000c057620000bf62000478565b5b02179055506000620000d76200025360201b60201c565b90508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000125573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014b9190620004e5565b600a620001599190620006a4565b6001620001679190620006f5565b6007819055506007546008819055506001600b819055505050506200086e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df3806936040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032791906200077b565b600a60009054906101000a900460ff166040518363ffffffff1660e01b8152600401620003569291906200080f565b602060405180830381865afa15801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a91906200083c565b905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003d182620003a4565b9050919050565b620003e381620003c4565b8114620003ef57600080fd5b50565b6000815190506200040381620003d8565b92915050565b600381106200041757600080fd5b50565b6000815190506200042b8162000409565b92915050565b600080604083850312156200044b576200044a6200039f565b5b60006200045b85828601620003f2565b92505060206200046e858286016200041a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060ff82169050919050565b620004bf81620004a7565b8114620004cb57600080fd5b50565b600081519050620004df81620004b4565b92915050565b600060208284031215620004fe57620004fd6200039f565b5b60006200050e84828501620004ce565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620005a5578086048111156200057d576200057c62000517565b5b60018516156200058d5780820291505b80810290506200059d8562000546565b94506200055d565b94509492505050565b600082620005c0576001905062000693565b81620005d0576000905062000693565b8160018114620005e95760028114620005f4576200062a565b600191505062000693565b60ff84111562000609576200060862000517565b5b8360020a91508482111562000623576200062262000517565b5b5062000693565b5060208310610133831016604e8410600b8410161715620006645782820a9050838111156200065e576200065d62000517565b5b62000693565b62000673848484600162000553565b925090508184048111156200068d576200068c62000517565b5b81810290505b9392505050565b6000819050919050565b6000620006b1826200069a565b9150620006be83620004a7565b9250620006ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005ae565b905092915050565b600062000702826200069a565b91506200070f836200069a565b92508282026200071f816200069a565b9150828204841483151762000739576200073862000517565b5b5092915050565b6000819050919050565b620007558162000740565b81146200076157600080fd5b50565b60008151905062000775816200074a565b92915050565b6000602082840312156200079457620007936200039f565b5b6000620007a48482850162000764565b91505092915050565b620007b88162000740565b82525050565b60038110620007d257620007d162000478565b5b50565b6000819050620007e582620007be565b919050565b6000620007f782620007d5565b9050919050565b6200080981620007ea565b82525050565b6000604082019050620008266000830185620007ad565b620008356020830184620007fe565b9392505050565b6000602082840312156200085557620008546200039f565b5b60006200086584828501620003f2565b91505092915050565b6138c9806200087e6000396000f3fe608060405234801561001057600080fd5b50600436106102525760003560e01c8063715018a611610146578063bc979787116100c3578063dc157ce211610087578063dc157ce2146106cf578063ddb6e6e1146106eb578063ec5ffac214610707578063f21aec0614610725578063f2fde38b14610741578063f95d71b11461075d57610252565b8063bc9797871461061b578063bcb5c63614610637578063c00007b014610653578063c3bf2ba41461066f578063d3dbad7d1461069f57610252565b8063842648c21161010a578063842648c2146105895780638da5cb5b146105a55780639dca0032146105c3578063a498072c146105e1578063b5c6b453146105fd57610252565b8063715018a61461050b57806374c2e2fc1461051557806375402829146105315780637acb77571461054f578063817b1cd21461056b57610252565b806327e235e3116101d45780634d3342b9116101985780634d3342b91461043f57806350d17b5e1461046f57806351243d5a1461048d578063706c62d3146104bd57806370a08231146104db57610252565b806327e235e31461039d5780633560db3c146103cd5780633ccfd60b146103e957806340b96482146103f3578063499199661461040f57610252565b806310fe9ae81161021b57806310fe9ae8146102f95780631d62ebd9146103175780631dc4ab3c14610347578063233e99031461036357806327a199d01461037f57610252565b8062f714ce1461025757806302fa04c9146102735780630700037d1461028f5780630a0e3dea146102bf5780630e9ed68b146102db575b600080fd5b610271600480360381019061026c9190612ea8565b610779565b005b61028d60048036038101906102889190612ea8565b610ba5565b005b6102a960048036038101906102a49190612ee8565b610f59565b6040516102b69190612f24565b60405180910390f35b6102d960048036038101906102d49190612ea8565b610f71565b005b6102e36111b8565b6040516102f09190612f4e565b60405180910390f35b6103016112fc565b60405161030e9190612f4e565b60405180910390f35b610331600480360381019061032c9190612ee8565b611440565b60405161033e9190612f24565b60405180910390f35b610361600480360381019061035c91906130c2565b61157e565b005b61037d6004803603810190610378919061310b565b6115cc565b005b610387611615565b6040516103949190613153565b60405180910390f35b6103b760048036038101906103b29190612ee8565b611628565b6040516103c49190612f24565b60405180910390f35b6103e760048036038101906103e29190612ea8565b611640565b005b6103f1611736565b005b61040d60048036038101906104089190612ee8565b6117bd565b005b61042960048036038101906104249190612ee8565b6119a7565b6040516104369190613153565b60405180910390f35b61045960048036038101906104549190612ee8565b611b82565b6040516104669190612f24565b60405180910390f35b610477611b9a565b60405161048491906131cd565b60405180910390f35b6104a760048036038101906104a29190612ee8565b611bc0565b6040516104b49190613153565b60405180910390f35b6104c5611be0565b6040516104d29190612f24565b60405180910390f35b6104f560048036038101906104f09190612ee8565b611be6565b6040516105029190612f24565b60405180910390f35b610513611d24565b005b61052f600480360381019061052a9190612ee8565b611d38565b005b610539611dd2565b6040516105469190612f24565b60405180910390f35b61056960048036038101906105649190612ea8565b611dd8565b005b610573612080565b6040516105809190612f24565b60405180910390f35b6105a3600480360381019061059e9190613214565b612086565b005b6105ad6120e2565b6040516105ba9190612f4e565b60405180910390f35b6105cb61210b565b6040516105d891906132b8565b60405180910390f35b6105fb60048036038101906105f69190612ee8565b61211e565b005b6106056121b8565b6040516106129190612f24565b60405180910390f35b61063560048036038101906106309190612ee8565b6121be565b005b610651600480360381019061064c919061310b565b612462565b005b61066d60048036038101906106689190612ee8565b6124ab565b005b61068960048036038101906106849190612ee8565b612789565b6040516106969190612f4e565b60405180910390f35b6106b960048036038101906106b49190612ee8565b6127bc565b6040516106c69190613153565b60405180910390f35b6106e960048036038101906106e4919061310b565b612907565b005b6107056004803603810190610700919061310b565b6129fc565b005b61070f612a45565b60405161071c9190612f24565b60405180910390f35b61073f600480360381019061073a91906132d3565b612a4b565b005b61075b60048036038101906107569190612ee8565b612bb0565b005b61077760048036038101906107729190612ee8565b612c33565b005b6107816111b8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107f057336040517fc95e6e490000000000000000000000000000000000000000000000000000000081526004016107e79190612f4e565b60405180910390fd5b6000820361082a576040517fc377136000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108346111b8565b905060008173ffffffffffffffffffffffffffffffffffffffff1663857b76636040518163ffffffff1660e01b8152600401600060405180830381865afa158015610883573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906108ac91906133bf565b90506000805b8251811015610924578473ffffffffffffffffffffffffffffffffffffffff168382815181106108e5576108e4613408565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036109115760019150610924565b808061091c90613466565b9150506108b2565b50801561095d576040517f74fc692a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610a2257600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856040517ffdf3c18d000000000000000000000000000000000000000000000000000000008152600401610a199291906134ae565b60405180910390fd5b84600954610a3091906134d7565b60098190555084600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a8191906134d7565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610ace6112fc565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86886040518363ffffffff1660e01b8152600401610b0b92919061350b565b6020604051808303816000875af1158015610b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4e9190613549565b508473ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d587604051610b959190612f24565b60405180910390a2505050505050565b610bad6111b8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c1c57336040517fc95e6e49000000000000000000000000000000000000000000000000000000008152600401610c139190612f4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb0576000610cb96111b8565b90508073ffffffffffffffffffffffffffffffffffffffff166340550a1c600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610d539190612f4e565b602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190613549565b15610e4c57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa9e8db6c256a1ab8ca3b7b20e4e5c2e09f608d9f4fa22cb330ef2da1850fcdb583604051610e3e9190612f4e565b60405180910390a250610f55565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150505b81600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610eff9190613576565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f38cbdc591b5cf62cc9a88b92dcee4809f0d0ca6cd9bdad9f818d74c38e78bf2983604051610f4c9190612f24565b60405180910390a25b5050565b60036020528060005260406000206000915090505481565b610f796111b8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fe857336040517fc95e6e49000000000000000000000000000000000000000000000000000000008152600401610fdf9190612f4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110de57600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b81600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461112d91906134d7565b92505081905550816009600082825461114691906134d7565b9250508190555081600c600082825461115f9190613576565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f3c3e99c9508723e2a5fd42a570a42b3bd7781ff4900273df394dcc1a9d066036836040516111ac9190612f24565b60405180910390a25050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663da19ddfb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611265573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128991906135e0565b600a60009054906101000a900460ff166040518363ffffffff1660e01b81526004016112b692919061361c565b602060405180830381865afa1580156112d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f79190613645565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df3806936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cd91906135e0565b600a60009054906101000a900460ff166040518363ffffffff1660e01b81526004016113fa92919061361c565b602060405180830381865afa158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190613645565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff16600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153757600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611586612cb6565b60005b81518110156115c8576115b58282815181106115a8576115a7613408565b5b6020026020010151611d38565b80806115c090613466565b915050611589565b5050565b6115d4612cb6565b806007819055507fe933824a81d0b6aa53640e0e8df82b08c3f5297409b86d5beb73c41253518b298160405161160a9190612f24565b60405180910390a150565b600a60019054906101000a900460ff1681565b60026020528060005260406000206000915090505481565b611648612cb6565b600c5482111561168d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611684906136cf565b60405180910390fd5b81600c600082825461169f91906134d7565b9250508190555060006116b06112fc565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b81526004016116ed92919061350b565b6020604051808303816000875af115801561170c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117309190613549565b50505050565b61173e612cb6565b600047905060003373ffffffffffffffffffffffffffffffffffffffff168260405161176990613720565b60006040518083038185875af1925050503d80600081146117a6576040519150601f19603f3d011682016040523d82523d6000602084013e6117ab565b606091505b50509050806117b957600080fd5b5050565b600b54600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061188157600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040517f2176682c0000000000000000000000000000000000000000000000000000000081526004016118789190612f24565b60405180910390fd5b33600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461194f9190613576565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f7f05f6fc05d05f3345962cb9fd7d4e4e1ec2546697378950c0901cea523dfaa18260405161199c9190612f4e565b60405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff16600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9e57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600754811015611b2d57806007546040517f4806a505000000000000000000000000000000000000000000000000000000008152600401611b249291906134ae565b60405180910390fd5b600854811115611b7857806008546040517f2b3c6b63000000000000000000000000000000000000000000000000000000008152600401611b6f9291906134ae565b60405180910390fd5b6001915050919050565b60066020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff16600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cdd57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d2c612cb6565b611d366000612d34565b565b611d40612cb6565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f35126091a4da6c3bafab49ae849a4e1e1fdf396d951f2d6fadb89417927e931b81604051611dc79190612f4e565b60405180910390a150565b600b5481565b611de06111b8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e4f57336040517fc95e6e49000000000000000000000000000000000000000000000000000000008152600401611e469190612f4e565b60405180910390fd5b60008203611e89576040517f6a76ff9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60019054906101000a900460ff168015611eef5750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f3157806040517f924a5910000000000000000000000000000000000000000000000000000000008152600401611f289190612f4e565b60405180910390fd5b6000611f3b6112fc565b90508073ffffffffffffffffffffffffffffffffffffffff166323b872dd8330866040518463ffffffff1660e01b8152600401611f7a93929190613735565b6020604051808303816000875af1158015611f99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbd9190613549565b5082600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461200d9190613576565b9250508190555082600960008282546120269190613576565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d846040516120739190612f24565b60405180910390a2505050565b60095481565b61208e612cb6565b80600a60016101000a81548160ff0219169083151502179055507fe1138a93dc3399cb895e183d0551777813ef4cdb31cae3f89e5fbded2a6e8a1f816040516120d79190613153565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900460ff1681565b612126612cb6565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f56c24084818c4d30108b4d428745a95153b8e6dafb1c7094c2c65e19de2c1a9a816040516121ad9190612f4e565b60405180910390a150565b60085481565b3373ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228f5780336040517fb1b82d7900000000000000000000000000000000000000000000000000000000815260040161228692919061376c565b60405180910390fd5b60006122996111b8565b90508073ffffffffffffffffffffffffffffffffffffffff166340550a1c836040518263ffffffff1660e01b81526004016122d49190612f4e565b602060405180830381865afa1580156122f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123159190613549565b1561235757816040517fc400065d00000000000000000000000000000000000000000000000000000000815260040161234e9190612f4e565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461240991906134d7565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f8ece38c85474a2f8e9e848069caf92d8134ec2d972bf868889161ebe8ce3c485836040516124569190612f4e565b60405180910390a25050565b61246a612cb6565b806008819055507f723c6a8b97a26222f03a0b1afb5bd5da562f1fdaee45f114f392b66a512951d5816040516124a09190612f24565b60405180910390a150565b6124b36111b8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461252257336040517fc95e6e490000000000000000000000000000000000000000000000000000000081526004016125199190612f4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461261857600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115612785576000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006126b46111b8565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016126f192919061350b565b6020604051808303816000875af1158015612710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127349190613549565b508273ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04868360405161277b9190612f24565b60405180910390a2505b5050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128b357600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61290f612cb6565b600c54811115612954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294b906136cf565b60405180910390fd5b80600c600082825461296691906134d7565b9250508190555060006129776112fc565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016129b492919061350b565b6020604051808303816000875af11580156129d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f79190613549565b505050565b612a04612cb6565b80600b819055507f25cb00833e709e42533f8e7818f46cff79dbaf85d1a141eb0416f2c30c36228781604051612a3a9190612f24565b60405180910390a150565b60075481565b612a53612cb6565b600c54811115612a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8f906136cf565b60405180910390fd5b8060096000828254612aaa9190613576565b9250508190555080600c6000828254612ac391906134d7565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b199190613576565b925050819055506000612b2a6112fc565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb30846040518363ffffffff1660e01b8152600401612b6792919061350b565b6020604051808303816000875af1158015612b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612baa9190613549565b50505050565b612bb8612cb6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1e90613807565b60405180910390fd5b612c3081612d34565b50565b612c3b612cb6565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2b5fe80d5061b20e017f0cde52b331309601bfcab0cb14cfcf6a4096410a607581604051612cab9190612f4e565b60405180910390a150565b612cbe612df8565b73ffffffffffffffffffffffffffffffffffffffff16612cdc6120e2565b73ffffffffffffffffffffffffffffffffffffffff1614612d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2990613873565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612e2781612e14565b8114612e3257600080fd5b50565b600081359050612e4481612e1e565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e7582612e4a565b9050919050565b612e8581612e6a565b8114612e9057600080fd5b50565b600081359050612ea281612e7c565b92915050565b60008060408385031215612ebf57612ebe612e0a565b5b6000612ecd85828601612e35565b9250506020612ede85828601612e93565b9150509250929050565b600060208284031215612efe57612efd612e0a565b5b6000612f0c84828501612e93565b91505092915050565b612f1e81612e14565b82525050565b6000602082019050612f396000830184612f15565b92915050565b612f4881612e6a565b82525050565b6000602082019050612f636000830184612f3f565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612fb782612f6e565b810181811067ffffffffffffffff82111715612fd657612fd5612f7f565b5b80604052505050565b6000612fe9612e00565b9050612ff58282612fae565b919050565b600067ffffffffffffffff82111561301557613014612f7f565b5b602082029050602081019050919050565b600080fd5b600061303e61303984612ffa565b612fdf565b9050808382526020820190506020840283018581111561306157613060613026565b5b835b8181101561308a57806130768882612e93565b845260208401935050602081019050613063565b5050509392505050565b600082601f8301126130a9576130a8612f69565b5b81356130b984826020860161302b565b91505092915050565b6000602082840312156130d8576130d7612e0a565b5b600082013567ffffffffffffffff8111156130f6576130f5612e0f565b5b61310284828501613094565b91505092915050565b60006020828403121561312157613120612e0a565b5b600061312f84828501612e35565b91505092915050565b60008115159050919050565b61314d81613138565b82525050565b60006020820190506131686000830184613144565b92915050565b6000819050919050565b600061319361318e61318984612e4a565b61316e565b612e4a565b9050919050565b60006131a582613178565b9050919050565b60006131b78261319a565b9050919050565b6131c7816131ac565b82525050565b60006020820190506131e260008301846131be565b92915050565b6131f181613138565b81146131fc57600080fd5b50565b60008135905061320e816131e8565b92915050565b60006020828403121561322a57613229612e0a565b5b6000613238848285016131ff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061328157613280613241565b5b50565b600081905061329282613270565b919050565b60006132a282613284565b9050919050565b6132b281613297565b82525050565b60006020820190506132cd60008301846132a9565b92915050565b600080604083850312156132ea576132e9612e0a565b5b60006132f885828601612e93565b925050602061330985828601612e35565b9150509250929050565b60008151905061332281612e7c565b92915050565b600061333b61333684612ffa565b612fdf565b9050808382526020820190506020840283018581111561335e5761335d613026565b5b835b8181101561338757806133738882613313565b845260208401935050602081019050613360565b5050509392505050565b600082601f8301126133a6576133a5612f69565b5b81516133b6848260208601613328565b91505092915050565b6000602082840312156133d5576133d4612e0a565b5b600082015167ffffffffffffffff8111156133f3576133f2612e0f565b5b6133ff84828501613391565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061347182612e14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134a3576134a2613437565b5b600182019050919050565b60006040820190506134c36000830185612f15565b6134d06020830184612f15565b9392505050565b60006134e282612e14565b91506134ed83612e14565b925082820390508181111561350557613504613437565b5b92915050565b60006040820190506135206000830185612f3f565b61352d6020830184612f15565b9392505050565b600081519050613543816131e8565b92915050565b60006020828403121561355f5761355e612e0a565b5b600061356d84828501613534565b91505092915050565b600061358182612e14565b915061358c83612e14565b92508282019050808211156135a4576135a3613437565b5b92915050565b6000819050919050565b6135bd816135aa565b81146135c857600080fd5b50565b6000815190506135da816135b4565b92915050565b6000602082840312156135f6576135f5612e0a565b5b6000613604848285016135cb565b91505092915050565b613616816135aa565b82525050565b6000604082019050613631600083018561360d565b61363e60208301846132a9565b9392505050565b60006020828403121561365b5761365a612e0a565b5b600061366984828501613313565b91505092915050565b600082825260208201905092915050565b7f4e6f7420656e6f7567682070656e616c74792062616c616e6365000000000000600082015250565b60006136b9601a83613672565b91506136c482613683565b602082019050919050565b600060208201905081810360008301526136e8816136ac565b9050919050565b600081905092915050565b50565b600061370a6000836136ef565b9150613715826136fa565b600082019050919050565b600061372b826136fd565b9150819050919050565b600060608201905061374a6000830186612f3f565b6137576020830185612f3f565b6137646040830184612f15565b949350505050565b60006040820190506137816000830185612f3f565b61378e6020830184612f3f565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137f1602683613672565b91506137fc82613795565b604082019050919050565b60006020820190508181036000830152613820816137e4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061385d602083613672565b915061386882613827565b602082019050919050565b6000602082019050818103600083015261388c81613850565b905091905056fea264697066735822122016ac8d1f59b56754cf537891c0cae4b3176aeaca045ea5574088b4b9c34b4c5364736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102525760003560e01c8063715018a611610146578063bc979787116100c3578063dc157ce211610087578063dc157ce2146106cf578063ddb6e6e1146106eb578063ec5ffac214610707578063f21aec0614610725578063f2fde38b14610741578063f95d71b11461075d57610252565b8063bc9797871461061b578063bcb5c63614610637578063c00007b014610653578063c3bf2ba41461066f578063d3dbad7d1461069f57610252565b8063842648c21161010a578063842648c2146105895780638da5cb5b146105a55780639dca0032146105c3578063a498072c146105e1578063b5c6b453146105fd57610252565b8063715018a61461050b57806374c2e2fc1461051557806375402829146105315780637acb77571461054f578063817b1cd21461056b57610252565b806327e235e3116101d45780634d3342b9116101985780634d3342b91461043f57806350d17b5e1461046f57806351243d5a1461048d578063706c62d3146104bd57806370a08231146104db57610252565b806327e235e31461039d5780633560db3c146103cd5780633ccfd60b146103e957806340b96482146103f3578063499199661461040f57610252565b806310fe9ae81161021b57806310fe9ae8146102f95780631d62ebd9146103175780631dc4ab3c14610347578063233e99031461036357806327a199d01461037f57610252565b8062f714ce1461025757806302fa04c9146102735780630700037d1461028f5780630a0e3dea146102bf5780630e9ed68b146102db575b600080fd5b610271600480360381019061026c9190612ea8565b610779565b005b61028d60048036038101906102889190612ea8565b610ba5565b005b6102a960048036038101906102a49190612ee8565b610f59565b6040516102b69190612f24565b60405180910390f35b6102d960048036038101906102d49190612ea8565b610f71565b005b6102e36111b8565b6040516102f09190612f4e565b60405180910390f35b6103016112fc565b60405161030e9190612f4e565b60405180910390f35b610331600480360381019061032c9190612ee8565b611440565b60405161033e9190612f24565b60405180910390f35b610361600480360381019061035c91906130c2565b61157e565b005b61037d6004803603810190610378919061310b565b6115cc565b005b610387611615565b6040516103949190613153565b60405180910390f35b6103b760048036038101906103b29190612ee8565b611628565b6040516103c49190612f24565b60405180910390f35b6103e760048036038101906103e29190612ea8565b611640565b005b6103f1611736565b005b61040d60048036038101906104089190612ee8565b6117bd565b005b61042960048036038101906104249190612ee8565b6119a7565b6040516104369190613153565b60405180910390f35b61045960048036038101906104549190612ee8565b611b82565b6040516104669190612f24565b60405180910390f35b610477611b9a565b60405161048491906131cd565b60405180910390f35b6104a760048036038101906104a29190612ee8565b611bc0565b6040516104b49190613153565b60405180910390f35b6104c5611be0565b6040516104d29190612f24565b60405180910390f35b6104f560048036038101906104f09190612ee8565b611be6565b6040516105029190612f24565b60405180910390f35b610513611d24565b005b61052f600480360381019061052a9190612ee8565b611d38565b005b610539611dd2565b6040516105469190612f24565b60405180910390f35b61056960048036038101906105649190612ea8565b611dd8565b005b610573612080565b6040516105809190612f24565b60405180910390f35b6105a3600480360381019061059e9190613214565b612086565b005b6105ad6120e2565b6040516105ba9190612f4e565b60405180910390f35b6105cb61210b565b6040516105d891906132b8565b60405180910390f35b6105fb60048036038101906105f69190612ee8565b61211e565b005b6106056121b8565b6040516106129190612f24565b60405180910390f35b61063560048036038101906106309190612ee8565b6121be565b005b610651600480360381019061064c919061310b565b612462565b005b61066d60048036038101906106689190612ee8565b6124ab565b005b61068960048036038101906106849190612ee8565b612789565b6040516106969190612f4e565b60405180910390f35b6106b960048036038101906106b49190612ee8565b6127bc565b6040516106c69190613153565b60405180910390f35b6106e960048036038101906106e4919061310b565b612907565b005b6107056004803603810190610700919061310b565b6129fc565b005b61070f612a45565b60405161071c9190612f24565b60405180910390f35b61073f600480360381019061073a91906132d3565b612a4b565b005b61075b60048036038101906107569190612ee8565b612bb0565b005b61077760048036038101906107729190612ee8565b612c33565b005b6107816111b8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107f057336040517fc95e6e490000000000000000000000000000000000000000000000000000000081526004016107e79190612f4e565b60405180910390fd5b6000820361082a576040517fc377136000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108346111b8565b905060008173ffffffffffffffffffffffffffffffffffffffff1663857b76636040518163ffffffff1660e01b8152600401600060405180830381865afa158015610883573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906108ac91906133bf565b90506000805b8251811015610924578473ffffffffffffffffffffffffffffffffffffffff168382815181106108e5576108e4613408565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036109115760019150610924565b808061091c90613466565b9150506108b2565b50801561095d576040517f74fc692a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610a2257600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856040517ffdf3c18d000000000000000000000000000000000000000000000000000000008152600401610a199291906134ae565b60405180910390fd5b84600954610a3091906134d7565b60098190555084600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a8191906134d7565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610ace6112fc565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86886040518363ffffffff1660e01b8152600401610b0b92919061350b565b6020604051808303816000875af1158015610b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4e9190613549565b508473ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d587604051610b959190612f24565b60405180910390a2505050505050565b610bad6111b8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c1c57336040517fc95e6e49000000000000000000000000000000000000000000000000000000008152600401610c139190612f4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb0576000610cb96111b8565b90508073ffffffffffffffffffffffffffffffffffffffff166340550a1c600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610d539190612f4e565b602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190613549565b15610e4c57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa9e8db6c256a1ab8ca3b7b20e4e5c2e09f608d9f4fa22cb330ef2da1850fcdb583604051610e3e9190612f4e565b60405180910390a250610f55565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150505b81600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610eff9190613576565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f38cbdc591b5cf62cc9a88b92dcee4809f0d0ca6cd9bdad9f818d74c38e78bf2983604051610f4c9190612f24565b60405180910390a25b5050565b60036020528060005260406000206000915090505481565b610f796111b8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fe857336040517fc95e6e49000000000000000000000000000000000000000000000000000000008152600401610fdf9190612f4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110de57600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b81600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461112d91906134d7565b92505081905550816009600082825461114691906134d7565b9250508190555081600c600082825461115f9190613576565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f3c3e99c9508723e2a5fd42a570a42b3bd7781ff4900273df394dcc1a9d066036836040516111ac9190612f24565b60405180910390a25050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663da19ddfb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611265573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128991906135e0565b600a60009054906101000a900460ff166040518363ffffffff1660e01b81526004016112b692919061361c565b602060405180830381865afa1580156112d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f79190613645565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df3806936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cd91906135e0565b600a60009054906101000a900460ff166040518363ffffffff1660e01b81526004016113fa92919061361c565b602060405180830381865afa158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190613645565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff16600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153757600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611586612cb6565b60005b81518110156115c8576115b58282815181106115a8576115a7613408565b5b6020026020010151611d38565b80806115c090613466565b915050611589565b5050565b6115d4612cb6565b806007819055507fe933824a81d0b6aa53640e0e8df82b08c3f5297409b86d5beb73c41253518b298160405161160a9190612f24565b60405180910390a150565b600a60019054906101000a900460ff1681565b60026020528060005260406000206000915090505481565b611648612cb6565b600c5482111561168d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611684906136cf565b60405180910390fd5b81600c600082825461169f91906134d7565b9250508190555060006116b06112fc565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b81526004016116ed92919061350b565b6020604051808303816000875af115801561170c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117309190613549565b50505050565b61173e612cb6565b600047905060003373ffffffffffffffffffffffffffffffffffffffff168260405161176990613720565b60006040518083038185875af1925050503d80600081146117a6576040519150601f19603f3d011682016040523d82523d6000602084013e6117ab565b606091505b50509050806117b957600080fd5b5050565b600b54600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061188157600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040517f2176682c0000000000000000000000000000000000000000000000000000000081526004016118789190612f24565b60405180910390fd5b33600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461194f9190613576565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f7f05f6fc05d05f3345962cb9fd7d4e4e1ec2546697378950c0901cea523dfaa18260405161199c9190612f4e565b60405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff16600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9e57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600754811015611b2d57806007546040517f4806a505000000000000000000000000000000000000000000000000000000008152600401611b249291906134ae565b60405180910390fd5b600854811115611b7857806008546040517f2b3c6b63000000000000000000000000000000000000000000000000000000008152600401611b6f9291906134ae565b60405180910390fd5b6001915050919050565b60066020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff16600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cdd57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d2c612cb6565b611d366000612d34565b565b611d40612cb6565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f35126091a4da6c3bafab49ae849a4e1e1fdf396d951f2d6fadb89417927e931b81604051611dc79190612f4e565b60405180910390a150565b600b5481565b611de06111b8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e4f57336040517fc95e6e49000000000000000000000000000000000000000000000000000000008152600401611e469190612f4e565b60405180910390fd5b60008203611e89576040517f6a76ff9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60019054906101000a900460ff168015611eef5750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f3157806040517f924a5910000000000000000000000000000000000000000000000000000000008152600401611f289190612f4e565b60405180910390fd5b6000611f3b6112fc565b90508073ffffffffffffffffffffffffffffffffffffffff166323b872dd8330866040518463ffffffff1660e01b8152600401611f7a93929190613735565b6020604051808303816000875af1158015611f99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbd9190613549565b5082600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461200d9190613576565b9250508190555082600960008282546120269190613576565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d846040516120739190612f24565b60405180910390a2505050565b60095481565b61208e612cb6565b80600a60016101000a81548160ff0219169083151502179055507fe1138a93dc3399cb895e183d0551777813ef4cdb31cae3f89e5fbded2a6e8a1f816040516120d79190613153565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900460ff1681565b612126612cb6565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f56c24084818c4d30108b4d428745a95153b8e6dafb1c7094c2c65e19de2c1a9a816040516121ad9190612f4e565b60405180910390a150565b60085481565b3373ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228f5780336040517fb1b82d7900000000000000000000000000000000000000000000000000000000815260040161228692919061376c565b60405180910390fd5b60006122996111b8565b90508073ffffffffffffffffffffffffffffffffffffffff166340550a1c836040518263ffffffff1660e01b81526004016122d49190612f4e565b602060405180830381865afa1580156122f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123159190613549565b1561235757816040517fc400065d00000000000000000000000000000000000000000000000000000000815260040161234e9190612f4e565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461240991906134d7565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f8ece38c85474a2f8e9e848069caf92d8134ec2d972bf868889161ebe8ce3c485836040516124569190612f4e565b60405180910390a25050565b61246a612cb6565b806008819055507f723c6a8b97a26222f03a0b1afb5bd5da562f1fdaee45f114f392b66a512951d5816040516124a09190612f24565b60405180910390a150565b6124b36111b8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461252257336040517fc95e6e490000000000000000000000000000000000000000000000000000000081526004016125199190612f4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461261857600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115612785576000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006126b46111b8565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016126f192919061350b565b6020604051808303816000875af1158015612710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127349190613549565b508273ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04868360405161277b9190612f24565b60405180910390a2505b5050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128b357600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61290f612cb6565b600c54811115612954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294b906136cf565b60405180910390fd5b80600c600082825461296691906134d7565b9250508190555060006129776112fc565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016129b492919061350b565b6020604051808303816000875af11580156129d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f79190613549565b505050565b612a04612cb6565b80600b819055507f25cb00833e709e42533f8e7818f46cff79dbaf85d1a141eb0416f2c30c36228781604051612a3a9190612f24565b60405180910390a150565b60075481565b612a53612cb6565b600c54811115612a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8f906136cf565b60405180910390fd5b8060096000828254612aaa9190613576565b9250508190555080600c6000828254612ac391906134d7565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b199190613576565b925050819055506000612b2a6112fc565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb30846040518363ffffffff1660e01b8152600401612b6792919061350b565b6020604051808303816000875af1158015612b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612baa9190613549565b50505050565b612bb8612cb6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1e90613807565b60405180910390fd5b612c3081612d34565b50565b612c3b612cb6565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2b5fe80d5061b20e017f0cde52b331309601bfcab0cb14cfcf6a4096410a607581604051612cab9190612f4e565b60405180910390a150565b612cbe612df8565b73ffffffffffffffffffffffffffffffffffffffff16612cdc6120e2565b73ffffffffffffffffffffffffffffffffffffffff1614612d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2990613873565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612e2781612e14565b8114612e3257600080fd5b50565b600081359050612e4481612e1e565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e7582612e4a565b9050919050565b612e8581612e6a565b8114612e9057600080fd5b50565b600081359050612ea281612e7c565b92915050565b60008060408385031215612ebf57612ebe612e0a565b5b6000612ecd85828601612e35565b9250506020612ede85828601612e93565b9150509250929050565b600060208284031215612efe57612efd612e0a565b5b6000612f0c84828501612e93565b91505092915050565b612f1e81612e14565b82525050565b6000602082019050612f396000830184612f15565b92915050565b612f4881612e6a565b82525050565b6000602082019050612f636000830184612f3f565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612fb782612f6e565b810181811067ffffffffffffffff82111715612fd657612fd5612f7f565b5b80604052505050565b6000612fe9612e00565b9050612ff58282612fae565b919050565b600067ffffffffffffffff82111561301557613014612f7f565b5b602082029050602081019050919050565b600080fd5b600061303e61303984612ffa565b612fdf565b9050808382526020820190506020840283018581111561306157613060613026565b5b835b8181101561308a57806130768882612e93565b845260208401935050602081019050613063565b5050509392505050565b600082601f8301126130a9576130a8612f69565b5b81356130b984826020860161302b565b91505092915050565b6000602082840312156130d8576130d7612e0a565b5b600082013567ffffffffffffffff8111156130f6576130f5612e0f565b5b61310284828501613094565b91505092915050565b60006020828403121561312157613120612e0a565b5b600061312f84828501612e35565b91505092915050565b60008115159050919050565b61314d81613138565b82525050565b60006020820190506131686000830184613144565b92915050565b6000819050919050565b600061319361318e61318984612e4a565b61316e565b612e4a565b9050919050565b60006131a582613178565b9050919050565b60006131b78261319a565b9050919050565b6131c7816131ac565b82525050565b60006020820190506131e260008301846131be565b92915050565b6131f181613138565b81146131fc57600080fd5b50565b60008135905061320e816131e8565b92915050565b60006020828403121561322a57613229612e0a565b5b6000613238848285016131ff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061328157613280613241565b5b50565b600081905061329282613270565b919050565b60006132a282613284565b9050919050565b6132b281613297565b82525050565b60006020820190506132cd60008301846132a9565b92915050565b600080604083850312156132ea576132e9612e0a565b5b60006132f885828601612e93565b925050602061330985828601612e35565b9150509250929050565b60008151905061332281612e7c565b92915050565b600061333b61333684612ffa565b612fdf565b9050808382526020820190506020840283018581111561335e5761335d613026565b5b835b8181101561338757806133738882613313565b845260208401935050602081019050613360565b5050509392505050565b600082601f8301126133a6576133a5612f69565b5b81516133b6848260208601613328565b91505092915050565b6000602082840312156133d5576133d4612e0a565b5b600082015167ffffffffffffffff8111156133f3576133f2612e0f565b5b6133ff84828501613391565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061347182612e14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134a3576134a2613437565b5b600182019050919050565b60006040820190506134c36000830185612f15565b6134d06020830184612f15565b9392505050565b60006134e282612e14565b91506134ed83612e14565b925082820390508181111561350557613504613437565b5b92915050565b60006040820190506135206000830185612f3f565b61352d6020830184612f15565b9392505050565b600081519050613543816131e8565b92915050565b60006020828403121561355f5761355e612e0a565b5b600061356d84828501613534565b91505092915050565b600061358182612e14565b915061358c83612e14565b92508282019050808211156135a4576135a3613437565b5b92915050565b6000819050919050565b6135bd816135aa565b81146135c857600080fd5b50565b6000815190506135da816135b4565b92915050565b6000602082840312156135f6576135f5612e0a565b5b6000613604848285016135cb565b91505092915050565b613616816135aa565b82525050565b6000604082019050613631600083018561360d565b61363e60208301846132a9565b9392505050565b60006020828403121561365b5761365a612e0a565b5b600061366984828501613313565b91505092915050565b600082825260208201905092915050565b7f4e6f7420656e6f7567682070656e616c74792062616c616e6365000000000000600082015250565b60006136b9601a83613672565b91506136c482613683565b602082019050919050565b600060208201905081810360008301526136e8816136ac565b9050919050565b600081905092915050565b50565b600061370a6000836136ef565b9150613715826136fa565b600082019050919050565b600061372b826136fd565b9150819050919050565b600060608201905061374a6000830186612f3f565b6137576020830185612f3f565b6137646040830184612f15565b949350505050565b60006040820190506137816000830185612f3f565b61378e6020830184612f3f565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137f1602683613672565b91506137fc82613795565b604082019050919050565b60006020820190508181036000830152613820816137e4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061385d602083613672565b915061386882613827565b602082019050919050565b6000602082019050818103600083015261388c81613850565b905091905056fea264697066735822122016ac8d1f59b56754cf537891c0cae4b3176aeaca045ea5574088b4b9c34b4c5364736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/cayenne/WLIT.json b/contracts/cayenne/WLIT.json deleted file mode 100644 index 1e3744f..0000000 --- a/contracts/cayenne/WLIT.json +++ /dev/null @@ -1,317 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "WLIT", - "sourceName": "contracts/lit-node/WLIT.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "guy", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "guy", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60806040526040518060400160405280600b81526020017f57726170706564204c6974000000000000000000000000000000000000000000815250600090816200004a91906200033c565b506040518060400160405280600481526020017f574c495400000000000000000000000000000000000000000000000000000000815250600190816200009191906200033c565b506012600260006101000a81548160ff021916908360ff160217905550348015620000bb57600080fd5b5062000423565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200014457607f821691505b6020821081036200015a5762000159620000fc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000185565b620001d0868362000185565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200021d620002176200021184620001e8565b620001f2565b620001e8565b9050919050565b6000819050919050565b6200023983620001fc565b62000251620002488262000224565b84845462000192565b825550505050565b600090565b6200026862000259565b620002758184846200022e565b505050565b5b818110156200029d57620002916000826200025e565b6001810190506200027b565b5050565b601f821115620002ec57620002b68162000160565b620002c18462000175565b81016020851015620002d1578190505b620002e9620002e08562000175565b8301826200027a565b50505b505050565b600082821c905092915050565b60006200031160001984600802620002f1565b1980831691505092915050565b60006200032c8383620002fe565b9150826002028217905092915050565b6200034782620000c2565b67ffffffffffffffff811115620003635762000362620000cd565b5b6200036f82546200012b565b6200037c828285620002a1565b600060209050601f831160018114620003b457600084156200039f578287015190505b620003ab85826200031e565b8655506200041b565b601f198416620003c48662000160565b60005b82811015620003ee57848901518255600182019150602085019450602081019050620003c7565b868310156200040e57848901516200040a601f891682620002fe565b8355505b6001600288020188555050505b505050505050565b610f0980620004336000396000f3fe6080604052600436106100ab5760003560e01c806370a082311161006457806370a08231146101e857806379cc67901461022557806395d89b411461024e578063a9059cbb14610279578063d0e30db0146102b6578063dd62ed3e146102c0576100ba565b806306fdde03146100c4578063095ea7b3146100ef57806318160ddd1461012c57806323b872dd146101575780632e1a7d4d14610194578063313ce567146101bd576100ba565b366100ba576100b86102fd565b005b6100c26102fd565b005b3480156100d057600080fd5b506100d96103a3565b6040516100e69190610b5d565b60405180910390f35b3480156100fb57600080fd5b5061011660048036038101906101119190610c18565b610431565b6040516101239190610c73565b60405180910390f35b34801561013857600080fd5b50610141610523565b60405161014e9190610c9d565b60405180910390f35b34801561016357600080fd5b5061017e60048036038101906101799190610cb8565b61052b565b60405161018b9190610c73565b60405180910390f35b3480156101a057600080fd5b506101bb60048036038101906101b69190610d0b565b61088f565b005b3480156101c957600080fd5b506101d26109c9565b6040516101df9190610d54565b60405180910390f35b3480156101f457600080fd5b5061020f600480360381019061020a9190610d6f565b6109dc565b60405161021c9190610c9d565b60405180910390f35b34801561023157600080fd5b5061024c60048036038101906102479190610c18565b6109f4565b005b34801561025a57600080fd5b50610263610a05565b6040516102709190610b5d565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190610c18565b610a93565b6040516102ad9190610c73565b60405180910390f35b6102be6102fd565b005b3480156102cc57600080fd5b506102e760048036038101906102e29190610d9c565b610aa8565b6040516102f49190610c9d565b60405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461034c9190610e0b565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040516103999190610c9d565b60405180910390a2565b600080546103b090610e6e565b80601f01602080910402602001604051908101604052809291908181526020018280546103dc90610e6e565b80156104295780601f106103fe57610100808354040283529160200191610429565b820191906000526020600020905b81548152906001019060200180831161040c57829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105119190610c9d565b60405180910390a36001905092915050565b600047905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561057957600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561065157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156107735781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156106df57600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461076b9190610e9f565b925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107c29190610e9f565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108189190610e0b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161087c9190610c9d565b60405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156108db57600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461092a9190610e9f565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610977573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040516109be9190610c9d565b60405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b610a008260008361052b565b505050565b60018054610a1290610e6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3e90610e6e565b8015610a8b5780601f10610a6057610100808354040283529160200191610a8b565b820191906000526020600020905b815481529060010190602001808311610a6e57829003601f168201915b505050505081565b6000610aa033848461052b565b905092915050565b6004602052816000526040600020602052806000526040600020600091509150505481565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b07578082015181840152602081019050610aec565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b2f82610acd565b610b398185610ad8565b9350610b49818560208601610ae9565b610b5281610b13565b840191505092915050565b60006020820190508181036000830152610b778184610b24565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610baf82610b84565b9050919050565b610bbf81610ba4565b8114610bca57600080fd5b50565b600081359050610bdc81610bb6565b92915050565b6000819050919050565b610bf581610be2565b8114610c0057600080fd5b50565b600081359050610c1281610bec565b92915050565b60008060408385031215610c2f57610c2e610b7f565b5b6000610c3d85828601610bcd565b9250506020610c4e85828601610c03565b9150509250929050565b60008115159050919050565b610c6d81610c58565b82525050565b6000602082019050610c886000830184610c64565b92915050565b610c9781610be2565b82525050565b6000602082019050610cb26000830184610c8e565b92915050565b600080600060608486031215610cd157610cd0610b7f565b5b6000610cdf86828701610bcd565b9350506020610cf086828701610bcd565b9250506040610d0186828701610c03565b9150509250925092565b600060208284031215610d2157610d20610b7f565b5b6000610d2f84828501610c03565b91505092915050565b600060ff82169050919050565b610d4e81610d38565b82525050565b6000602082019050610d696000830184610d45565b92915050565b600060208284031215610d8557610d84610b7f565b5b6000610d9384828501610bcd565b91505092915050565b60008060408385031215610db357610db2610b7f565b5b6000610dc185828601610bcd565b9250506020610dd285828601610bcd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e1682610be2565b9150610e2183610be2565b9250828201905080821115610e3957610e38610ddc565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e8657607f821691505b602082108103610e9957610e98610e3f565b5b50919050565b6000610eaa82610be2565b9150610eb583610be2565b9250828203905081811115610ecd57610ecc610ddc565b5b9291505056fea26469706673582212206117b56d96a204a0c32fdcb5bf78952df032570b7bff3c218d4d3fbf4173ff5964736f6c63430008110033", - "deployedBytecode": "0x6080604052600436106100ab5760003560e01c806370a082311161006457806370a08231146101e857806379cc67901461022557806395d89b411461024e578063a9059cbb14610279578063d0e30db0146102b6578063dd62ed3e146102c0576100ba565b806306fdde03146100c4578063095ea7b3146100ef57806318160ddd1461012c57806323b872dd146101575780632e1a7d4d14610194578063313ce567146101bd576100ba565b366100ba576100b86102fd565b005b6100c26102fd565b005b3480156100d057600080fd5b506100d96103a3565b6040516100e69190610b5d565b60405180910390f35b3480156100fb57600080fd5b5061011660048036038101906101119190610c18565b610431565b6040516101239190610c73565b60405180910390f35b34801561013857600080fd5b50610141610523565b60405161014e9190610c9d565b60405180910390f35b34801561016357600080fd5b5061017e60048036038101906101799190610cb8565b61052b565b60405161018b9190610c73565b60405180910390f35b3480156101a057600080fd5b506101bb60048036038101906101b69190610d0b565b61088f565b005b3480156101c957600080fd5b506101d26109c9565b6040516101df9190610d54565b60405180910390f35b3480156101f457600080fd5b5061020f600480360381019061020a9190610d6f565b6109dc565b60405161021c9190610c9d565b60405180910390f35b34801561023157600080fd5b5061024c60048036038101906102479190610c18565b6109f4565b005b34801561025a57600080fd5b50610263610a05565b6040516102709190610b5d565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190610c18565b610a93565b6040516102ad9190610c73565b60405180910390f35b6102be6102fd565b005b3480156102cc57600080fd5b506102e760048036038101906102e29190610d9c565b610aa8565b6040516102f49190610c9d565b60405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461034c9190610e0b565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040516103999190610c9d565b60405180910390a2565b600080546103b090610e6e565b80601f01602080910402602001604051908101604052809291908181526020018280546103dc90610e6e565b80156104295780601f106103fe57610100808354040283529160200191610429565b820191906000526020600020905b81548152906001019060200180831161040c57829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105119190610c9d565b60405180910390a36001905092915050565b600047905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561057957600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561065157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156107735781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156106df57600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461076b9190610e9f565b925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107c29190610e9f565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108189190610e0b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161087c9190610c9d565b60405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156108db57600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461092a9190610e9f565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610977573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040516109be9190610c9d565b60405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b610a008260008361052b565b505050565b60018054610a1290610e6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3e90610e6e565b8015610a8b5780601f10610a6057610100808354040283529160200191610a8b565b820191906000526020600020905b815481529060010190602001808311610a6e57829003601f168201915b505050505081565b6000610aa033848461052b565b905092915050565b6004602052816000526040600020602052806000526040600020600091509150505481565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b07578082015181840152602081019050610aec565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b2f82610acd565b610b398185610ad8565b9350610b49818560208601610ae9565b610b5281610b13565b840191505092915050565b60006020820190508181036000830152610b778184610b24565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610baf82610b84565b9050919050565b610bbf81610ba4565b8114610bca57600080fd5b50565b600081359050610bdc81610bb6565b92915050565b6000819050919050565b610bf581610be2565b8114610c0057600080fd5b50565b600081359050610c1281610bec565b92915050565b60008060408385031215610c2f57610c2e610b7f565b5b6000610c3d85828601610bcd565b9250506020610c4e85828601610c03565b9150509250929050565b60008115159050919050565b610c6d81610c58565b82525050565b6000602082019050610c886000830184610c64565b92915050565b610c9781610be2565b82525050565b6000602082019050610cb26000830184610c8e565b92915050565b600080600060608486031215610cd157610cd0610b7f565b5b6000610cdf86828701610bcd565b9350506020610cf086828701610bcd565b9250506040610d0186828701610c03565b9150509250925092565b600060208284031215610d2157610d20610b7f565b5b6000610d2f84828501610c03565b91505092915050565b600060ff82169050919050565b610d4e81610d38565b82525050565b6000602082019050610d696000830184610d45565b92915050565b600060208284031215610d8557610d84610b7f565b5b6000610d9384828501610bcd565b91505092915050565b60008060408385031215610db357610db2610b7f565b5b6000610dc185828601610bcd565b9250506020610dd285828601610bcd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e1682610be2565b9150610e2183610be2565b9250828201905080821115610e3957610e38610ddc565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e8657607f821691505b602082108103610e9957610e98610e3f565b5b50919050565b6000610eaa82610be2565b9150610eb583610be2565b9250828203905081811115610ecd57610ecc610ddc565b5b9291505056fea26469706673582212206117b56d96a204a0c32fdcb5bf78952df032570b7bff3c218d4d3fbf4173ff5964736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/datil-dev/PKPHelper.json b/contracts/datil-dev/PKPHelper.json deleted file mode 100644 index ffaad05..0000000 --- a/contracts/datil-dev/PKPHelper.json +++ /dev/null @@ -1,854 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PKPHelper", - "sourceName": "contracts/lit-node/PKPHelper.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_resolver", - "type": "address" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "_env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "ContractResolverAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct IPubkeyRouter.Signature[]", - "name": "signatures", - "type": "tuple[]" - } - ], - "internalType": "struct LibPKPNFTStorage.ClaimMaterial", - "name": "claimMaterial", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes[]", - "name": "permittedIpfsCIDs", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedIpfsCIDScopes", - "type": "uint256[][]" - }, - { - "internalType": "address[]", - "name": "permittedAddresses", - "type": "address[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAddressScopes", - "type": "uint256[][]" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "internalType": "struct PKPHelper.AuthMethodData", - "name": "authMethodData", - "type": "tuple" - } - ], - "name": "claimAndMintNextAndAddAuthMethods", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct IPubkeyRouter.Signature[]", - "name": "signatures", - "type": "tuple[]" - } - ], - "internalType": "struct LibPKPNFTStorage.ClaimMaterial", - "name": "claimMaterial", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes[]", - "name": "permittedIpfsCIDs", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedIpfsCIDScopes", - "type": "uint256[][]" - }, - { - "internalType": "address[]", - "name": "permittedAddresses", - "type": "address[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAddressScopes", - "type": "uint256[][]" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "internalType": "struct PKPHelper.AuthMethodData", - "name": "authMethodData", - "type": "tuple" - } - ], - "name": "claimAndMintNextAndAddAuthMethodsWithTypes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "contractResolver", - "outputs": [ - { - "internalType": "contract ContractResolver", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "env", - "outputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDomainWalletRegistry", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPKPNftMetdataAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpNftAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpPermissionsAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "name": "mintNextAndAddAuthMethods", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes[]", - "name": "permittedIpfsCIDs", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedIpfsCIDScopes", - "type": "uint256[][]" - }, - { - "internalType": "address[]", - "name": "permittedAddresses", - "type": "address[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAddressScopes", - "type": "uint256[][]" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "name": "mintNextAndAddAuthMethodsWithTypes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "string[]", - "name": "nftMetadata", - "type": "string[]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "name": "mintNextAndAddDomainWalletMetadata", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC721Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "removePkpMetadata", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "string[]", - "name": "nftMetadata", - "type": "string[]" - } - ], - "name": "setPkpMetadata", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b506040516200581a3803806200581a83398181016040528101906200003791906200022b565b620000576200004b620000cd60201b60201c565b620000d560201b60201c565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260146101000a81548160ff02191690836002811115620000c057620000bf62000272565b5b02179055505050620002a1565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001cb826200019e565b9050919050565b620001dd81620001be565b8114620001e957600080fd5b50565b600081519050620001fd81620001d2565b92915050565b600381106200021157600080fd5b50565b600081519050620002258162000203565b92915050565b6000806040838503121562000245576200024462000199565b5b60006200025585828601620001ec565b9250506020620002688582860162000214565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b61556980620002b16000396000f3fe6080604052600436106101665760003560e01c8063715018a6116100d15780639fba176b1161008a578063d547741f11610064578063d547741f14610532578063f2fde38b1461055b578063f95d71b114610584578063ffc83325146105ad57610166565b80639fba176b146104ac578063a217fddf146104dc578063caead0c71461050757610166565b8063715018a6146103ae57806373cc4111146103c5578063782e2ea5146103f05780638da5cb5b1461041957806391d14854146104445780639dca00321461048157610166565b80632b553551116101235780632b553551146102b25780632f2ff15d146102db5780633276558c1461030457806336568abe1461032f5780635043026c1461035857806350d17b5e1461038357610166565b806301ffc9a71461016b57806313af411b146101a8578063150b7a02146101d85780631f71cb3114610215578063202f724f14610245578063248a9ca314610275575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d91906132d0565b6105dd565b60405161019f9190613318565b60405180910390f35b6101c260048036038101906101bd9190613c92565b610657565b6040516101cf9190613d19565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa9190613d8f565b610e13565b60405161020c9190613e26565b60405180910390f35b61022f600480360381019061022a9190613e41565b610e9d565b60405161023c9190613d19565b60405180910390f35b61025f600480360381019061025a9190613c92565b61159b565b60405161026c9190613d19565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190614015565b6115af565b6040516102a99190614051565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d4919061406c565b6115cf565b005b3480156102e757600080fd5b5061030260048036038101906102fd9190614099565b61185f565b005b34801561031057600080fd5b50610319611880565b60405161032691906140e8565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190614099565b6119c4565b005b34801561036457600080fd5b5061036d611a47565b60405161037a91906140e8565b60405180910390f35b34801561038f57600080fd5b50610398611b8b565b6040516103a59190614162565b60405180910390f35b3480156103ba57600080fd5b506103c3611bb1565b005b3480156103d157600080fd5b506103da611bc5565b6040516103e791906140e8565b60405180910390f35b3480156103fc57600080fd5b50610417600480360381019061041291906142ff565b611d09565b005b34801561042557600080fd5b5061042e611fdf565b60405161043b91906140e8565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190614099565b612008565b6040516104789190613318565b60405180910390f35b34801561048d57600080fd5b50610496612073565b6040516104a391906143d2565b60405180910390f35b6104c660048036038101906104c191906143ed565b612086565b6040516104d39190613d19565b60405180910390f35b3480156104e857600080fd5b506104f16121db565b6040516104fe9190614051565b60405180910390f35b34801561051357600080fd5b5061051c6121e2565b60405161052991906140e8565b60405180910390f35b34801561053e57600080fd5b5061055960048036038101906105549190614099565b612326565b005b34801561056757600080fd5b50610582600480360381019061057d91906144ff565b612347565b005b34801561059057600080fd5b506105ab60048036038101906105a691906144ff565b6123ca565b005b6105c760048036038101906105c2919061452c565b61244d565b6040516105d49190613d19565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610650575061064f82612bec565b5b9050919050565b600081600001518360000151146106a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069a906146f1565b60405180910390fd5b60006106ad6121e2565b73ffffffffffffffffffffffffffffffffffffffff1663c70384b8348660000151876020015188604001516040518563ffffffff1660e01b81526004016106f693929190614820565b60206040518083038185885af1158015610714573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107399190614873565b905082604001515183602001515114610787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077e90614912565b60405180910390fd5b826080015151836060015151146107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906149a4565b60405180910390fd5b8260c00151518360a00151511461081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690614a36565b60405180910390fd5b8260e00151518360a00151511461086b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086290614ac8565b60405180910390fd5b826101000151518360a0015151146108b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108af90614b5a565b60405180910390fd5b60008360200151511461099c5760005b83602001515181101561099a576108dd611880565b73ffffffffffffffffffffffffffffffffffffffff16638a43157883866020015184815181106109105761090f614b7a565b5b60200260200101518760400151858151811061092f5761092e614b7a565b5b60200260200101516040518463ffffffff1660e01b815260040161095593929190614ce6565b600060405180830381600087803b15801561096f57600080fd5b505af1158015610983573d6000803e3d6000fd5b50505050808061099290614d5a565b9150506108c8565b505b600083606001515114610a805760005b836060015151811015610a7e576109c1611880565b73ffffffffffffffffffffffffffffffffffffffff16631663c12183866060015184815181106109f4576109f3614b7a565b5b602002602001015187608001518581518110610a1357610a12614b7a565b5b60200260200101516040518463ffffffff1660e01b8152600401610a3993929190614da2565b600060405180830381600087803b158015610a5357600080fd5b505af1158015610a67573d6000803e3d6000fd5b505050508080610a7690614d5a565b9150506109ac565b505b60008360a001515114610bbb5760005b8360a0015151811015610bb957610aa5611880565b73ffffffffffffffffffffffffffffffffffffffff16639dd4349b8360405180606001604052808860a001518681518110610ae357610ae2614b7a565b5b602002602001015181526020018860c001518681518110610b0757610b06614b7a565b5b602002602001015181526020018860e001518681518110610b2b57610b2a614b7a565b5b60200260200101518152508761010001518581518110610b4e57610b4d614b7a565b5b60200260200101516040518463ffffffff1660e01b8152600401610b7493929190614e81565b600060405180830381600087803b158015610b8e57600080fd5b505af1158015610ba2573d6000803e3d6000fd5b505050508080610bb190614d5a565b915050610a90565b505b6000610bc5611880565b73ffffffffffffffffffffffffffffffffffffffff1663bd4986a0836040518263ffffffff1660e01b8152600401610bfd9190613d19565b602060405180830381865afa158015610c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3e9190614edb565b905083610120015115610d0b57610c53611880565b73ffffffffffffffffffffffffffffffffffffffff16631663c1218383600067ffffffffffffffff811115610c8b57610c8a613349565b5b604051908082528060200260200182016040528015610cb95781602001602082028036833780820191505090505b506040518463ffffffff1660e01b8152600401610cd893929190614da2565b600060405180830381600087803b158015610cf257600080fd5b505af1158015610d06573d6000803e3d6000fd5b505050505b83610140015115610d9157610d1e6121e2565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401610d5a93929190614f08565b600060405180830381600087803b158015610d7457600080fd5b505af1158015610d88573d6000803e3d6000fd5b50505050610e08565b610d996121e2565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3033856040518463ffffffff1660e01b8152600401610dd593929190614f08565b600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b505050505b819250505092915050565b6000610e1d6121e2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190614fb1565b60405180910390fd5b63150b7a0260e01b905095945050505050565b600080610ea86121e2565b73ffffffffffffffffffffffffffffffffffffffff16635d228b16348f6040518363ffffffff1660e01b8152600401610ee19190613d19565b60206040518083038185885af1158015610eff573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f249190614873565b90508a518c5114610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6190614912565b60405180910390fd5b88518a5114610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa5906149a4565b60405180910390fd5b8651885114610ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe990614a36565b60405180910390fd5b8551885114611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90614ac8565b60405180910390fd5b845188511461107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614b5a565b60405180910390fd5b60008c511461114e5760005b8c5181101561114c57611097611880565b73ffffffffffffffffffffffffffffffffffffffff16638a431578838f84815181106110c6576110c5614b7a565b5b60200260200101518f85815181106110e1576110e0614b7a565b5b60200260200101516040518463ffffffff1660e01b815260040161110793929190614ce6565b600060405180830381600087803b15801561112157600080fd5b505af1158015611135573d6000803e3d6000fd5b50505050808061114490614d5a565b915050611086565b505b60008a51146112225760005b8a518110156112205761116b611880565b73ffffffffffffffffffffffffffffffffffffffff16631663c121838d848151811061119a57611199614b7a565b5b60200260200101518d85815181106111b5576111b4614b7a565b5b60200260200101516040518463ffffffff1660e01b81526004016111db93929190614da2565b600060405180830381600087803b1580156111f557600080fd5b505af1158015611209573d6000803e3d6000fd5b50505050808061121890614d5a565b91505061115a565b505b60008851146113445760005b88518110156113425761123f611880565b73ffffffffffffffffffffffffffffffffffffffff16639dd4349b8360405180606001604052808d868151811061127957611278614b7a565b5b602002602001015181526020018c868151811061129957611298614b7a565b5b602002602001015181526020018b86815181106112b9576112b8614b7a565b5b60200260200101518152508985815181106112d7576112d6614b7a565b5b60200260200101516040518463ffffffff1660e01b81526004016112fd93929190614e81565b600060405180830381600087803b15801561131757600080fd5b505af115801561132b573d6000803e3d6000fd5b50505050808061133a90614d5a565b91505061122e565b505b600061134e611880565b73ffffffffffffffffffffffffffffffffffffffff1663bd4986a0836040518263ffffffff1660e01b81526004016113869190613d19565b602060405180830381865afa1580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c79190614edb565b9050841561148f576113d7611880565b73ffffffffffffffffffffffffffffffffffffffff16631663c1218383600067ffffffffffffffff81111561140f5761140e613349565b5b60405190808252806020026020018201604052801561143d5781602001602082028036833780820191505090505b506040518463ffffffff1660e01b815260040161145c93929190614da2565b600060405180830381600087803b15801561147657600080fd5b505af115801561148a573d6000803e3d6000fd5b505050505b83156115105761149d6121e2565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b81526004016114d993929190614f08565b600060405180830381600087803b1580156114f357600080fd5b505af1158015611507573d6000803e3d6000fd5b50505050611587565b6115186121e2565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3033856040518463ffffffff1660e01b815260040161155493929190614f08565b600060405180830381600087803b15801561156e57600080fd5b505af1158015611582573d6000803e3d6000fd5b505050505b81925050509b9a5050505050505050505050565b60006115a78383610657565b905092915050565b600060016000838152602001908152602001600020600101549050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634216e73a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561167a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169e9190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b81526004016116cb929190615013565b602060405180830381865afa1580156116e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170c9190614edb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611770906150d4565b60405180910390fd5b6000611783611a47565b90508073ffffffffffffffffffffffffffffffffffffffff1663b63a7677836040518263ffffffff1660e01b81526004016117be9190613d19565b600060405180830381600087803b1580156117d857600080fd5b505af11580156117ec573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663519a218e836040518263ffffffff1660e01b81526004016118299190613d19565b600060405180830381600087803b15801561184357600080fd5b505af1158015611857573d6000803e3d6000fd5b505050505050565b611868826115af565b61187181612c56565b61187b8383612c6a565b505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639072f8386040518163ffffffff1660e01b8152600401602060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b815260040161197e929190615013565b602060405180830381865afa15801561199b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bf9190614edb565b905090565b6119cc612d4a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090615166565b60405180910390fd5b611a438282612d52565b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316f76bbf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b189190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b8152600401611b45929190615013565b602060405180830381865afa158015611b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b869190614edb565b905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bb9612e34565b611bc36000612eb2565b565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634216e73a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c969190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b8152600401611cc3929190615013565b602060405180830381865afa158015611ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d049190614edb565b905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634216e73a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd89190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b8152600401611e05929190615013565b602060405180830381865afa158015611e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e469190614edb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa906150d4565b60405180910390fd5b6000611ebd611a47565b9050600082511115611fda578073ffffffffffffffffffffffffffffffffffffffff1663855eec228484600081518110611efa57611ef9614b7a565b5b60200260200101516040518363ffffffff1660e01b8152600401611f1f9291906151ca565b600060405180830381600087803b158015611f3957600080fd5b505af1158015611f4d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16639000fee18484600181518110611f8257611f81614b7a565b5b60200260200101516040518363ffffffff1660e01b8152600401611fa79291906151ca565b600060405180830381600087803b158015611fc157600080fd5b505af1158015611fd5573d6000803e3d6000fd5b505050505b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006001600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600260149054906101000a900460ff1681565b60006121ce88600067ffffffffffffffff8111156120a7576120a6613349565b5b6040519080825280602002602001820160405280156120da57816020015b60608152602001906001900390816120c55790505b50600067ffffffffffffffff8111156120f6576120f5613349565b5b60405190808252806020026020018201604052801561212957816020015b60608152602001906001900390816121145790505b50600067ffffffffffffffff81111561214557612144613349565b5b6040519080825280602002602001820160405280156121735781602001602082028036833780820191505090505b50600067ffffffffffffffff81111561218f5761218e613349565b5b6040519080825280602002602001820160405280156121c257816020015b60608152602001906001900390816121ad5790505b508c8c8c8c8c8c610e9d565b9050979650505050505050565b6000801b81565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c0b8bf76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561228f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b39190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b81526004016122e0929190615013565b602060405180830381865afa1580156122fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123219190614edb565b905090565b61232f826115af565b61233881612c56565b6123428383612d52565b505050565b61234f612e34565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b59061526c565b60405180910390fd5b6123c781612eb2565b50565b6123d2612e34565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd58160405161244291906140e8565b60405180910390a150565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634216e73a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251e9190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b815260040161254b929190615013565b602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614edb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f0906150d4565b60405180910390fd5b60006126036121e2565b73ffffffffffffffffffffffffffffffffffffffff16635d228b16348c6040518363ffffffff1660e01b815260040161263c9190613d19565b60206040518083038185885af115801561265a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061267f9190614873565b905087518951146126c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bc90614a36565b60405180910390fd5b8651895114612709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270090614ac8565b60405180910390fd5b855189511461274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614b5a565b60405180910390fd5b600089511461286f5760005b895181101561286d5761276a611880565b73ffffffffffffffffffffffffffffffffffffffff16639dd4349b8360405180606001604052808e86815181106127a4576127a3614b7a565b5b602002602001015181526020018d86815181106127c4576127c3614b7a565b5b602002602001015181526020018c86815181106127e4576127e3614b7a565b5b60200260200101518152508a858151811061280257612801614b7a565b5b60200260200101516040518463ffffffff1660e01b815260040161282893929190614e81565b600060405180830381600087803b15801561284257600080fd5b505af1158015612856573d6000803e3d6000fd5b50505050808061286590614d5a565b915050612759565b505b6000612879611880565b73ffffffffffffffffffffffffffffffffffffffff1663bd4986a0836040518263ffffffff1660e01b81526004016128b19190613d19565b602060405180830381865afa1580156128ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f29190614edb565b905084156129ba57612902611880565b73ffffffffffffffffffffffffffffffffffffffff16631663c1218383600067ffffffffffffffff81111561293a57612939613349565b5b6040519080825280602002602001820160405280156129685781602001602082028036833780820191505090505b506040518463ffffffff1660e01b815260040161298793929190614da2565b600060405180830381600087803b1580156129a157600080fd5b505af11580156129b5573d6000803e3d6000fd5b505050505b8315612a3b576129c86121e2565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401612a0493929190614f08565b600060405180830381600087803b158015612a1e57600080fd5b505af1158015612a32573d6000803e3d6000fd5b50505050612ab2565b612a436121e2565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3033856040518463ffffffff1660e01b8152600401612a7f93929190614f08565b600060405180830381600087803b158015612a9957600080fd5b505af1158015612aad573d6000803e3d6000fd5b505050505b600086511115612bdb57612ac4611a47565b73ffffffffffffffffffffffffffffffffffffffff1663855eec228388600081518110612af457612af3614b7a565b5b60200260200101516040518363ffffffff1660e01b8152600401612b199291906151ca565b600060405180830381600087803b158015612b3357600080fd5b505af1158015612b47573d6000803e3d6000fd5b50505050612b53611a47565b73ffffffffffffffffffffffffffffffffffffffff16639000fee18388600181518110612b8357612b82614b7a565b5b60200260200101516040518363ffffffff1660e01b8152600401612ba89291906151ca565b600060405180830381600087803b158015612bc257600080fd5b505af1158015612bd6573d6000803e3d6000fd5b505050505b819250505098975050505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c6781612c62612d4a565b612f76565b50565b612c748282612008565b612d4657600180600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612ceb612d4a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b612d5c8282612008565b15612e305760006001600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612dd5612d4a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b612e3c612d4a565b73ffffffffffffffffffffffffffffffffffffffff16612e5a611fdf565b73ffffffffffffffffffffffffffffffffffffffff1614612eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea7906152d8565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f808282612008565b612ff757612f8d81612ffb565b612f9b8360001c6020613028565b604051602001612fac9291906153cc565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fee9190615406565b60405180910390fd5b5050565b60606130218273ffffffffffffffffffffffffffffffffffffffff16601460ff16613028565b9050919050565b60606000600283600261303b9190615428565b613045919061546a565b67ffffffffffffffff81111561305e5761305d613349565b5b6040519080825280601f01601f1916602001820160405280156130905781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106130c8576130c7614b7a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061312c5761312b614b7a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261316c9190615428565b613176919061546a565b90505b6001811115613216577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106131b8576131b7614b7a565b5b1a60f81b8282815181106131cf576131ce614b7a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061320f9061549e565b9050613179565b506000841461325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325190615513565b60405180910390fd5b8091505092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132ad81613278565b81146132b857600080fd5b50565b6000813590506132ca816132a4565b92915050565b6000602082840312156132e6576132e561326e565b5b60006132f4848285016132bb565b91505092915050565b60008115159050919050565b613312816132fd565b82525050565b600060208201905061332d6000830184613309565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61338182613338565b810181811067ffffffffffffffff821117156133a05761339f613349565b5b80604052505050565b60006133b3613264565b90506133bf8282613378565b919050565b600080fd5b6000819050919050565b6133dc816133c9565b81146133e757600080fd5b50565b6000813590506133f9816133d3565b92915050565b6000819050919050565b613412816133ff565b811461341d57600080fd5b50565b60008135905061342f81613409565b92915050565b600080fd5b600067ffffffffffffffff82111561345557613454613349565b5b602082029050602081019050919050565b600080fd5b600060ff82169050919050565b6134818161346b565b811461348c57600080fd5b50565b60008135905061349e81613478565b92915050565b6000606082840312156134ba576134b9613333565b5b6134c460606133a9565b905060006134d484828501613420565b60008301525060206134e884828501613420565b60208301525060406134fc8482850161348f565b60408301525092915050565b600061351b6135168461343a565b6133a9565b9050808382526020820190506060840283018581111561353e5761353d613466565b5b835b81811015613567578061355388826134a4565b845260208401935050606081019050613540565b5050509392505050565b600082601f83011261358657613585613435565b5b8135613596848260208601613508565b91505092915050565b6000606082840312156135b5576135b4613333565b5b6135bf60606133a9565b905060006135cf848285016133ea565b60008301525060206135e384828501613420565b602083015250604082013567ffffffffffffffff811115613607576136066133c4565b5b61361384828501613571565b60408301525092915050565b600067ffffffffffffffff82111561363a57613639613349565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff82111561366b5761366a613349565b5b61367482613338565b9050602081019050919050565b82818337600083830152505050565b60006136a361369e84613650565b6133a9565b9050828152602081018484840111156136bf576136be61364b565b5b6136ca848285613681565b509392505050565b600082601f8301126136e7576136e6613435565b5b81356136f7848260208601613690565b91505092915050565b600061371361370e8461361f565b6133a9565b9050808382526020820190506020840283018581111561373657613735613466565b5b835b8181101561377d57803567ffffffffffffffff81111561375b5761375a613435565b5b80860161376889826136d2565b85526020850194505050602081019050613738565b5050509392505050565b600082601f83011261379c5761379b613435565b5b81356137ac848260208601613700565b91505092915050565b600067ffffffffffffffff8211156137d0576137cf613349565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156137fc576137fb613349565b5b602082029050602081019050919050565b600061382061381b846137e1565b6133a9565b9050808382526020820190506020840283018581111561384357613842613466565b5b835b8181101561386c578061385888826133ea565b845260208401935050602081019050613845565b5050509392505050565b600082601f83011261388b5761388a613435565b5b813561389b84826020860161380d565b91505092915050565b60006138b76138b2846137b5565b6133a9565b905080838252602082019050602084028301858111156138da576138d9613466565b5b835b8181101561392157803567ffffffffffffffff8111156138ff576138fe613435565b5b80860161390c8982613876565b855260208501945050506020810190506138dc565b5050509392505050565b600082601f8301126139405761393f613435565b5b81356139508482602086016138a4565b91505092915050565b600067ffffffffffffffff82111561397457613973613349565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139b082613985565b9050919050565b6139c0816139a5565b81146139cb57600080fd5b50565b6000813590506139dd816139b7565b92915050565b60006139f66139f184613959565b6133a9565b90508083825260208201905060208402830185811115613a1957613a18613466565b5b835b81811015613a425780613a2e88826139ce565b845260208401935050602081019050613a1b565b5050509392505050565b600082601f830112613a6157613a60613435565b5b8135613a718482602086016139e3565b91505092915050565b613a83816132fd565b8114613a8e57600080fd5b50565b600081359050613aa081613a7a565b92915050565b60006101608284031215613abd57613abc613333565b5b613ac86101606133a9565b90506000613ad8848285016133ea565b600083015250602082013567ffffffffffffffff811115613afc57613afb6133c4565b5b613b0884828501613787565b602083015250604082013567ffffffffffffffff811115613b2c57613b2b6133c4565b5b613b388482850161392b565b604083015250606082013567ffffffffffffffff811115613b5c57613b5b6133c4565b5b613b6884828501613a4c565b606083015250608082013567ffffffffffffffff811115613b8c57613b8b6133c4565b5b613b988482850161392b565b60808301525060a082013567ffffffffffffffff811115613bbc57613bbb6133c4565b5b613bc884828501613876565b60a08301525060c082013567ffffffffffffffff811115613bec57613beb6133c4565b5b613bf884828501613787565b60c08301525060e082013567ffffffffffffffff811115613c1c57613c1b6133c4565b5b613c2884828501613787565b60e08301525061010082013567ffffffffffffffff811115613c4d57613c4c6133c4565b5b613c598482850161392b565b61010083015250610120613c6f84828501613a91565b61012083015250610140613c8584828501613a91565b6101408301525092915050565b60008060408385031215613ca957613ca861326e565b5b600083013567ffffffffffffffff811115613cc757613cc6613273565b5b613cd38582860161359f565b925050602083013567ffffffffffffffff811115613cf457613cf3613273565b5b613d0085828601613aa6565b9150509250929050565b613d13816133c9565b82525050565b6000602082019050613d2e6000830184613d0a565b92915050565b600080fd5b60008083601f840112613d4f57613d4e613435565b5b8235905067ffffffffffffffff811115613d6c57613d6b613d34565b5b602083019150836001820283011115613d8857613d87613466565b5b9250929050565b600080600080600060808688031215613dab57613daa61326e565b5b6000613db9888289016139ce565b9550506020613dca888289016139ce565b9450506040613ddb888289016133ea565b935050606086013567ffffffffffffffff811115613dfc57613dfb613273565b5b613e0888828901613d39565b92509250509295509295909350565b613e2081613278565b82525050565b6000602082019050613e3b6000830184613e17565b92915050565b60008060008060008060008060008060006101608c8e031215613e6757613e6661326e565b5b6000613e758e828f016133ea565b9b505060208c013567ffffffffffffffff811115613e9657613e95613273565b5b613ea28e828f01613787565b9a505060408c013567ffffffffffffffff811115613ec357613ec2613273565b5b613ecf8e828f0161392b565b99505060608c013567ffffffffffffffff811115613ef057613eef613273565b5b613efc8e828f01613a4c565b98505060808c013567ffffffffffffffff811115613f1d57613f1c613273565b5b613f298e828f0161392b565b97505060a08c013567ffffffffffffffff811115613f4a57613f49613273565b5b613f568e828f01613876565b96505060c08c013567ffffffffffffffff811115613f7757613f76613273565b5b613f838e828f01613787565b95505060e08c013567ffffffffffffffff811115613fa457613fa3613273565b5b613fb08e828f01613787565b9450506101008c013567ffffffffffffffff811115613fd257613fd1613273565b5b613fde8e828f0161392b565b935050610120613ff08e828f01613a91565b9250506101406140028e828f01613a91565b9150509295989b509295989b9093969950565b60006020828403121561402b5761402a61326e565b5b600061403984828501613420565b91505092915050565b61404b816133ff565b82525050565b60006020820190506140666000830184614042565b92915050565b6000602082840312156140825761408161326e565b5b6000614090848285016133ea565b91505092915050565b600080604083850312156140b0576140af61326e565b5b60006140be85828601613420565b92505060206140cf858286016139ce565b9150509250929050565b6140e2816139a5565b82525050565b60006020820190506140fd60008301846140d9565b92915050565b6000819050919050565b600061412861412361411e84613985565b614103565b613985565b9050919050565b600061413a8261410d565b9050919050565b600061414c8261412f565b9050919050565b61415c81614141565b82525050565b60006020820190506141776000830184614153565b92915050565b600067ffffffffffffffff82111561419857614197613349565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141c4576141c3613349565b5b6141cd82613338565b9050602081019050919050565b60006141ed6141e8846141a9565b6133a9565b9050828152602081018484840111156142095761420861364b565b5b614214848285613681565b509392505050565b600082601f83011261423157614230613435565b5b81356142418482602086016141da565b91505092915050565b600061425d6142588461417d565b6133a9565b905080838252602082019050602084028301858111156142805761427f613466565b5b835b818110156142c757803567ffffffffffffffff8111156142a5576142a4613435565b5b8086016142b2898261421c565b85526020850194505050602081019050614282565b5050509392505050565b600082601f8301126142e6576142e5613435565b5b81356142f684826020860161424a565b91505092915050565b600080604083850312156143165761431561326e565b5b6000614324858286016133ea565b925050602083013567ffffffffffffffff81111561434557614344613273565b5b614351858286016142d1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061439b5761439a61435b565b5b50565b60008190506143ac8261438a565b919050565b60006143bc8261439e565b9050919050565b6143cc816143b1565b82525050565b60006020820190506143e760008301846143c3565b92915050565b600080600080600080600060e0888a03121561440c5761440b61326e565b5b600061441a8a828b016133ea565b975050602088013567ffffffffffffffff81111561443b5761443a613273565b5b6144478a828b01613876565b965050604088013567ffffffffffffffff81111561446857614467613273565b5b6144748a828b01613787565b955050606088013567ffffffffffffffff81111561449557614494613273565b5b6144a18a828b01613787565b945050608088013567ffffffffffffffff8111156144c2576144c1613273565b5b6144ce8a828b0161392b565b93505060a06144df8a828b01613a91565b92505060c06144f08a828b01613a91565b91505092959891949750929550565b6000602082840312156145155761451461326e565b5b6000614523848285016139ce565b91505092915050565b600080600080600080600080610100898b03121561454d5761454c61326e565b5b600061455b8b828c016133ea565b985050602089013567ffffffffffffffff81111561457c5761457b613273565b5b6145888b828c01613876565b975050604089013567ffffffffffffffff8111156145a9576145a8613273565b5b6145b58b828c01613787565b965050606089013567ffffffffffffffff8111156145d6576145d5613273565b5b6145e28b828c01613787565b955050608089013567ffffffffffffffff81111561460357614602613273565b5b61460f8b828c0161392b565b94505060a089013567ffffffffffffffff8111156146305761462f613273565b5b61463c8b828c016142d1565b93505060c061464d8b828c01613a91565b92505060e061465e8b828c01613a91565b9150509295985092959890939650565b600082825260208201905092915050565b7f504b5048656c7065723a20436c61696d206b65792074797065206d757374206d60008201527f617463682041757468204d6574686f642064617461206b657920747970650000602082015250565b60006146db603e8361466e565b91506146e68261467f565b604082019050919050565b6000602082019050818103600083015261470a816146ce565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614746816133ff565b82525050565b6147558161346b565b82525050565b606082016000820151614771600085018261473d565b506020820151614784602085018261473d565b506040820151614797604085018261474c565b50505050565b60006147a9838361475b565b60608301905092915050565b6000602082019050919050565b60006147cd82614711565b6147d7818561471c565b93506147e28361472d565b8060005b838110156148135781516147fa888261479d565b9750614805836147b5565b9250506001810190506147e6565b5085935050505092915050565b60006060820190506148356000830186613d0a565b6148426020830185614042565b818103604083015261485481846147c2565b9050949350505050565b60008151905061486d816133d3565b92915050565b6000602082840312156148895761488861326e565b5b60006148978482850161485e565b91505092915050565b7f504b5048656c7065723a20697066732063696420616e642073636f706520617260008201527f726179206c656e67746873206d757374206d6174636800000000000000000000602082015250565b60006148fc60368361466e565b9150614907826148a0565b604082019050919050565b6000602082019050818103600083015261492b816148ef565b9050919050565b7f504b5048656c7065723a206164647265737320616e642073636f70652061727260008201527f6179206c656e67746873206d757374206d617463680000000000000000000000602082015250565b600061498e60358361466e565b915061499982614932565b604082019050919050565b600060208201905081810360008301526149bd81614981565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f6964206172726179206c656e67746873206d757374206d617463680000000000602082015250565b6000614a20603b8361466e565b9150614a2b826149c4565b604082019050919050565b60006020820190508181036000830152614a4f81614a13565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800602082015250565b6000614ab2603f8361466e565b9150614abd82614a56565b604082019050919050565b60006020820190508181036000830152614ae181614aa5565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f73636f706573206172726179206c656e67746873206d757374206d6174636800602082015250565b6000614b44603f8361466e565b9150614b4f82614ae8565b604082019050919050565b60006020820190508181036000830152614b7381614b37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60005b83811015614be3578082015181840152602081019050614bc8565b60008484015250505050565b6000614bfa82614ba9565b614c048185614bb4565b9350614c14818560208601614bc5565b614c1d81613338565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c5d816133c9565b82525050565b6000614c6f8383614c54565b60208301905092915050565b6000602082019050919050565b6000614c9382614c28565b614c9d8185614c33565b9350614ca883614c44565b8060005b83811015614cd9578151614cc08882614c63565b9750614ccb83614c7b565b925050600181019050614cac565b5085935050505092915050565b6000606082019050614cfb6000830186613d0a565b8181036020830152614d0d8185614bef565b90508181036040830152614d218184614c88565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d65826133c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d9757614d96614d2b565b5b600182019050919050565b6000606082019050614db76000830186613d0a565b614dc460208301856140d9565b8181036040830152614dd68184614c88565b9050949350505050565b600082825260208201905092915050565b6000614dfc82614ba9565b614e068185614de0565b9350614e16818560208601614bc5565b614e1f81613338565b840191505092915050565b6000606083016000830151614e426000860182614c54565b5060208301518482036020860152614e5a8282614df1565b91505060408301518482036040860152614e748282614df1565b9150508091505092915050565b6000606082019050614e966000830186613d0a565b8181036020830152614ea88185614e2a565b90508181036040830152614ebc8184614c88565b9050949350505050565b600081519050614ed5816139b7565b92915050565b600060208284031215614ef157614ef061326e565b5b6000614eff84828501614ec6565b91505092915050565b6000606082019050614f1d60008301866140d9565b614f2a60208301856140d9565b614f376040830184613d0a565b949350505050565b7f504b5048656c7065723a206f6e6c792061636365707473207472616e7366657260008201527f732066726f6d2074686520504b504e465420636f6e7472616374000000000000602082015250565b6000614f9b603a8361466e565b9150614fa682614f3f565b604082019050919050565b60006020820190508181036000830152614fca81614f8e565b9050919050565b600081519050614fe081613409565b92915050565b600060208284031215614ffc57614ffb61326e565b5b600061500a84828501614fd1565b91505092915050565b60006040820190506150286000830185614042565b61503560208301846143c3565b9392505050565b7f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560008201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f60208201527f6d61696e2077616c6c6574732c2077686f2061726520796f753f000000000000604082015250565b60006150be605a8361466e565b91506150c98261503c565b606082019050919050565b600060208201905081810360008301526150ed816150b1565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000615150602f8361466e565b915061515b826150f4565b604082019050919050565b6000602082019050818103600083015261517f81615143565b9050919050565b600081519050919050565b600061519c82615186565b6151a6818561466e565b93506151b6818560208601614bc5565b6151bf81613338565b840191505092915050565b60006040820190506151df6000830185613d0a565b81810360208301526151f18184615191565b90509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061525660268361466e565b9150615261826151fa565b604082019050919050565b6000602082019050818103600083015261528581615249565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006152c260208361466e565b91506152cd8261528c565b602082019050919050565b600060208201905081810360008301526152f1816152b5565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006153396017836152f8565b915061534482615303565b601782019050919050565b600061535a82615186565b61536481856152f8565b9350615374818560208601614bc5565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006153b66011836152f8565b91506153c182615380565b601182019050919050565b60006153d78261532c565b91506153e3828561534f565b91506153ee826153a9565b91506153fa828461534f565b91508190509392505050565b600060208201905081810360008301526154208184615191565b905092915050565b6000615433826133c9565b915061543e836133c9565b925082820261544c816133c9565b9150828204841483151761546357615462614d2b565b5b5092915050565b6000615475826133c9565b9150615480836133c9565b925082820190508082111561549857615497614d2b565b5b92915050565b60006154a9826133c9565b9150600082036154bc576154bb614d2b565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006154fd60208361466e565b9150615508826154c7565b602082019050919050565b6000602082019050818103600083015261552c816154f0565b905091905056fea2646970667358221220d4e7aed0308d345395225fb0781c972e4c820633a796b165273cf663b0b99e2a64736f6c63430008110033", - "deployedBytecode": "0x6080604052600436106101665760003560e01c8063715018a6116100d15780639fba176b1161008a578063d547741f11610064578063d547741f14610532578063f2fde38b1461055b578063f95d71b114610584578063ffc83325146105ad57610166565b80639fba176b146104ac578063a217fddf146104dc578063caead0c71461050757610166565b8063715018a6146103ae57806373cc4111146103c5578063782e2ea5146103f05780638da5cb5b1461041957806391d14854146104445780639dca00321461048157610166565b80632b553551116101235780632b553551146102b25780632f2ff15d146102db5780633276558c1461030457806336568abe1461032f5780635043026c1461035857806350d17b5e1461038357610166565b806301ffc9a71461016b57806313af411b146101a8578063150b7a02146101d85780631f71cb3114610215578063202f724f14610245578063248a9ca314610275575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d91906132d0565b6105dd565b60405161019f9190613318565b60405180910390f35b6101c260048036038101906101bd9190613c92565b610657565b6040516101cf9190613d19565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa9190613d8f565b610e13565b60405161020c9190613e26565b60405180910390f35b61022f600480360381019061022a9190613e41565b610e9d565b60405161023c9190613d19565b60405180910390f35b61025f600480360381019061025a9190613c92565b61159b565b60405161026c9190613d19565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190614015565b6115af565b6040516102a99190614051565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d4919061406c565b6115cf565b005b3480156102e757600080fd5b5061030260048036038101906102fd9190614099565b61185f565b005b34801561031057600080fd5b50610319611880565b60405161032691906140e8565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190614099565b6119c4565b005b34801561036457600080fd5b5061036d611a47565b60405161037a91906140e8565b60405180910390f35b34801561038f57600080fd5b50610398611b8b565b6040516103a59190614162565b60405180910390f35b3480156103ba57600080fd5b506103c3611bb1565b005b3480156103d157600080fd5b506103da611bc5565b6040516103e791906140e8565b60405180910390f35b3480156103fc57600080fd5b50610417600480360381019061041291906142ff565b611d09565b005b34801561042557600080fd5b5061042e611fdf565b60405161043b91906140e8565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190614099565b612008565b6040516104789190613318565b60405180910390f35b34801561048d57600080fd5b50610496612073565b6040516104a391906143d2565b60405180910390f35b6104c660048036038101906104c191906143ed565b612086565b6040516104d39190613d19565b60405180910390f35b3480156104e857600080fd5b506104f16121db565b6040516104fe9190614051565b60405180910390f35b34801561051357600080fd5b5061051c6121e2565b60405161052991906140e8565b60405180910390f35b34801561053e57600080fd5b5061055960048036038101906105549190614099565b612326565b005b34801561056757600080fd5b50610582600480360381019061057d91906144ff565b612347565b005b34801561059057600080fd5b506105ab60048036038101906105a691906144ff565b6123ca565b005b6105c760048036038101906105c2919061452c565b61244d565b6040516105d49190613d19565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610650575061064f82612bec565b5b9050919050565b600081600001518360000151146106a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069a906146f1565b60405180910390fd5b60006106ad6121e2565b73ffffffffffffffffffffffffffffffffffffffff1663c70384b8348660000151876020015188604001516040518563ffffffff1660e01b81526004016106f693929190614820565b60206040518083038185885af1158015610714573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107399190614873565b905082604001515183602001515114610787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077e90614912565b60405180910390fd5b826080015151836060015151146107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906149a4565b60405180910390fd5b8260c00151518360a00151511461081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690614a36565b60405180910390fd5b8260e00151518360a00151511461086b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086290614ac8565b60405180910390fd5b826101000151518360a0015151146108b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108af90614b5a565b60405180910390fd5b60008360200151511461099c5760005b83602001515181101561099a576108dd611880565b73ffffffffffffffffffffffffffffffffffffffff16638a43157883866020015184815181106109105761090f614b7a565b5b60200260200101518760400151858151811061092f5761092e614b7a565b5b60200260200101516040518463ffffffff1660e01b815260040161095593929190614ce6565b600060405180830381600087803b15801561096f57600080fd5b505af1158015610983573d6000803e3d6000fd5b50505050808061099290614d5a565b9150506108c8565b505b600083606001515114610a805760005b836060015151811015610a7e576109c1611880565b73ffffffffffffffffffffffffffffffffffffffff16631663c12183866060015184815181106109f4576109f3614b7a565b5b602002602001015187608001518581518110610a1357610a12614b7a565b5b60200260200101516040518463ffffffff1660e01b8152600401610a3993929190614da2565b600060405180830381600087803b158015610a5357600080fd5b505af1158015610a67573d6000803e3d6000fd5b505050508080610a7690614d5a565b9150506109ac565b505b60008360a001515114610bbb5760005b8360a0015151811015610bb957610aa5611880565b73ffffffffffffffffffffffffffffffffffffffff16639dd4349b8360405180606001604052808860a001518681518110610ae357610ae2614b7a565b5b602002602001015181526020018860c001518681518110610b0757610b06614b7a565b5b602002602001015181526020018860e001518681518110610b2b57610b2a614b7a565b5b60200260200101518152508761010001518581518110610b4e57610b4d614b7a565b5b60200260200101516040518463ffffffff1660e01b8152600401610b7493929190614e81565b600060405180830381600087803b158015610b8e57600080fd5b505af1158015610ba2573d6000803e3d6000fd5b505050508080610bb190614d5a565b915050610a90565b505b6000610bc5611880565b73ffffffffffffffffffffffffffffffffffffffff1663bd4986a0836040518263ffffffff1660e01b8152600401610bfd9190613d19565b602060405180830381865afa158015610c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3e9190614edb565b905083610120015115610d0b57610c53611880565b73ffffffffffffffffffffffffffffffffffffffff16631663c1218383600067ffffffffffffffff811115610c8b57610c8a613349565b5b604051908082528060200260200182016040528015610cb95781602001602082028036833780820191505090505b506040518463ffffffff1660e01b8152600401610cd893929190614da2565b600060405180830381600087803b158015610cf257600080fd5b505af1158015610d06573d6000803e3d6000fd5b505050505b83610140015115610d9157610d1e6121e2565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401610d5a93929190614f08565b600060405180830381600087803b158015610d7457600080fd5b505af1158015610d88573d6000803e3d6000fd5b50505050610e08565b610d996121e2565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3033856040518463ffffffff1660e01b8152600401610dd593929190614f08565b600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b505050505b819250505092915050565b6000610e1d6121e2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190614fb1565b60405180910390fd5b63150b7a0260e01b905095945050505050565b600080610ea86121e2565b73ffffffffffffffffffffffffffffffffffffffff16635d228b16348f6040518363ffffffff1660e01b8152600401610ee19190613d19565b60206040518083038185885af1158015610eff573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f249190614873565b90508a518c5114610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6190614912565b60405180910390fd5b88518a5114610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa5906149a4565b60405180910390fd5b8651885114610ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe990614a36565b60405180910390fd5b8551885114611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90614ac8565b60405180910390fd5b845188511461107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614b5a565b60405180910390fd5b60008c511461114e5760005b8c5181101561114c57611097611880565b73ffffffffffffffffffffffffffffffffffffffff16638a431578838f84815181106110c6576110c5614b7a565b5b60200260200101518f85815181106110e1576110e0614b7a565b5b60200260200101516040518463ffffffff1660e01b815260040161110793929190614ce6565b600060405180830381600087803b15801561112157600080fd5b505af1158015611135573d6000803e3d6000fd5b50505050808061114490614d5a565b915050611086565b505b60008a51146112225760005b8a518110156112205761116b611880565b73ffffffffffffffffffffffffffffffffffffffff16631663c121838d848151811061119a57611199614b7a565b5b60200260200101518d85815181106111b5576111b4614b7a565b5b60200260200101516040518463ffffffff1660e01b81526004016111db93929190614da2565b600060405180830381600087803b1580156111f557600080fd5b505af1158015611209573d6000803e3d6000fd5b50505050808061121890614d5a565b91505061115a565b505b60008851146113445760005b88518110156113425761123f611880565b73ffffffffffffffffffffffffffffffffffffffff16639dd4349b8360405180606001604052808d868151811061127957611278614b7a565b5b602002602001015181526020018c868151811061129957611298614b7a565b5b602002602001015181526020018b86815181106112b9576112b8614b7a565b5b60200260200101518152508985815181106112d7576112d6614b7a565b5b60200260200101516040518463ffffffff1660e01b81526004016112fd93929190614e81565b600060405180830381600087803b15801561131757600080fd5b505af115801561132b573d6000803e3d6000fd5b50505050808061133a90614d5a565b91505061122e565b505b600061134e611880565b73ffffffffffffffffffffffffffffffffffffffff1663bd4986a0836040518263ffffffff1660e01b81526004016113869190613d19565b602060405180830381865afa1580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c79190614edb565b9050841561148f576113d7611880565b73ffffffffffffffffffffffffffffffffffffffff16631663c1218383600067ffffffffffffffff81111561140f5761140e613349565b5b60405190808252806020026020018201604052801561143d5781602001602082028036833780820191505090505b506040518463ffffffff1660e01b815260040161145c93929190614da2565b600060405180830381600087803b15801561147657600080fd5b505af115801561148a573d6000803e3d6000fd5b505050505b83156115105761149d6121e2565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b81526004016114d993929190614f08565b600060405180830381600087803b1580156114f357600080fd5b505af1158015611507573d6000803e3d6000fd5b50505050611587565b6115186121e2565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3033856040518463ffffffff1660e01b815260040161155493929190614f08565b600060405180830381600087803b15801561156e57600080fd5b505af1158015611582573d6000803e3d6000fd5b505050505b81925050509b9a5050505050505050505050565b60006115a78383610657565b905092915050565b600060016000838152602001908152602001600020600101549050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634216e73a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561167a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169e9190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b81526004016116cb929190615013565b602060405180830381865afa1580156116e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170c9190614edb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611770906150d4565b60405180910390fd5b6000611783611a47565b90508073ffffffffffffffffffffffffffffffffffffffff1663b63a7677836040518263ffffffff1660e01b81526004016117be9190613d19565b600060405180830381600087803b1580156117d857600080fd5b505af11580156117ec573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663519a218e836040518263ffffffff1660e01b81526004016118299190613d19565b600060405180830381600087803b15801561184357600080fd5b505af1158015611857573d6000803e3d6000fd5b505050505050565b611868826115af565b61187181612c56565b61187b8383612c6a565b505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639072f8386040518163ffffffff1660e01b8152600401602060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b815260040161197e929190615013565b602060405180830381865afa15801561199b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bf9190614edb565b905090565b6119cc612d4a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090615166565b60405180910390fd5b611a438282612d52565b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316f76bbf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b189190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b8152600401611b45929190615013565b602060405180830381865afa158015611b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b869190614edb565b905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bb9612e34565b611bc36000612eb2565b565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634216e73a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c969190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b8152600401611cc3929190615013565b602060405180830381865afa158015611ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d049190614edb565b905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634216e73a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd89190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b8152600401611e05929190615013565b602060405180830381865afa158015611e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e469190614edb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa906150d4565b60405180910390fd5b6000611ebd611a47565b9050600082511115611fda578073ffffffffffffffffffffffffffffffffffffffff1663855eec228484600081518110611efa57611ef9614b7a565b5b60200260200101516040518363ffffffff1660e01b8152600401611f1f9291906151ca565b600060405180830381600087803b158015611f3957600080fd5b505af1158015611f4d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16639000fee18484600181518110611f8257611f81614b7a565b5b60200260200101516040518363ffffffff1660e01b8152600401611fa79291906151ca565b600060405180830381600087803b158015611fc157600080fd5b505af1158015611fd5573d6000803e3d6000fd5b505050505b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006001600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600260149054906101000a900460ff1681565b60006121ce88600067ffffffffffffffff8111156120a7576120a6613349565b5b6040519080825280602002602001820160405280156120da57816020015b60608152602001906001900390816120c55790505b50600067ffffffffffffffff8111156120f6576120f5613349565b5b60405190808252806020026020018201604052801561212957816020015b60608152602001906001900390816121145790505b50600067ffffffffffffffff81111561214557612144613349565b5b6040519080825280602002602001820160405280156121735781602001602082028036833780820191505090505b50600067ffffffffffffffff81111561218f5761218e613349565b5b6040519080825280602002602001820160405280156121c257816020015b60608152602001906001900390816121ad5790505b508c8c8c8c8c8c610e9d565b9050979650505050505050565b6000801b81565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c0b8bf76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561228f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b39190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b81526004016122e0929190615013565b602060405180830381865afa1580156122fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123219190614edb565b905090565b61232f826115af565b61233881612c56565b6123428383612d52565b505050565b61234f612e34565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b59061526c565b60405180910390fd5b6123c781612eb2565b50565b6123d2612e34565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd58160405161244291906140e8565b60405180910390a150565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634216e73a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251e9190614fe6565b600260149054906101000a900460ff166040518363ffffffff1660e01b815260040161254b929190615013565b602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614edb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f0906150d4565b60405180910390fd5b60006126036121e2565b73ffffffffffffffffffffffffffffffffffffffff16635d228b16348c6040518363ffffffff1660e01b815260040161263c9190613d19565b60206040518083038185885af115801561265a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061267f9190614873565b905087518951146126c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bc90614a36565b60405180910390fd5b8651895114612709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270090614ac8565b60405180910390fd5b855189511461274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614b5a565b60405180910390fd5b600089511461286f5760005b895181101561286d5761276a611880565b73ffffffffffffffffffffffffffffffffffffffff16639dd4349b8360405180606001604052808e86815181106127a4576127a3614b7a565b5b602002602001015181526020018d86815181106127c4576127c3614b7a565b5b602002602001015181526020018c86815181106127e4576127e3614b7a565b5b60200260200101518152508a858151811061280257612801614b7a565b5b60200260200101516040518463ffffffff1660e01b815260040161282893929190614e81565b600060405180830381600087803b15801561284257600080fd5b505af1158015612856573d6000803e3d6000fd5b50505050808061286590614d5a565b915050612759565b505b6000612879611880565b73ffffffffffffffffffffffffffffffffffffffff1663bd4986a0836040518263ffffffff1660e01b81526004016128b19190613d19565b602060405180830381865afa1580156128ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f29190614edb565b905084156129ba57612902611880565b73ffffffffffffffffffffffffffffffffffffffff16631663c1218383600067ffffffffffffffff81111561293a57612939613349565b5b6040519080825280602002602001820160405280156129685781602001602082028036833780820191505090505b506040518463ffffffff1660e01b815260040161298793929190614da2565b600060405180830381600087803b1580156129a157600080fd5b505af11580156129b5573d6000803e3d6000fd5b505050505b8315612a3b576129c86121e2565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401612a0493929190614f08565b600060405180830381600087803b158015612a1e57600080fd5b505af1158015612a32573d6000803e3d6000fd5b50505050612ab2565b612a436121e2565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3033856040518463ffffffff1660e01b8152600401612a7f93929190614f08565b600060405180830381600087803b158015612a9957600080fd5b505af1158015612aad573d6000803e3d6000fd5b505050505b600086511115612bdb57612ac4611a47565b73ffffffffffffffffffffffffffffffffffffffff1663855eec228388600081518110612af457612af3614b7a565b5b60200260200101516040518363ffffffff1660e01b8152600401612b199291906151ca565b600060405180830381600087803b158015612b3357600080fd5b505af1158015612b47573d6000803e3d6000fd5b50505050612b53611a47565b73ffffffffffffffffffffffffffffffffffffffff16639000fee18388600181518110612b8357612b82614b7a565b5b60200260200101516040518363ffffffff1660e01b8152600401612ba89291906151ca565b600060405180830381600087803b158015612bc257600080fd5b505af1158015612bd6573d6000803e3d6000fd5b505050505b819250505098975050505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c6781612c62612d4a565b612f76565b50565b612c748282612008565b612d4657600180600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612ceb612d4a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b612d5c8282612008565b15612e305760006001600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612dd5612d4a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b612e3c612d4a565b73ffffffffffffffffffffffffffffffffffffffff16612e5a611fdf565b73ffffffffffffffffffffffffffffffffffffffff1614612eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea7906152d8565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f808282612008565b612ff757612f8d81612ffb565b612f9b8360001c6020613028565b604051602001612fac9291906153cc565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fee9190615406565b60405180910390fd5b5050565b60606130218273ffffffffffffffffffffffffffffffffffffffff16601460ff16613028565b9050919050565b60606000600283600261303b9190615428565b613045919061546a565b67ffffffffffffffff81111561305e5761305d613349565b5b6040519080825280601f01601f1916602001820160405280156130905781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106130c8576130c7614b7a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061312c5761312b614b7a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261316c9190615428565b613176919061546a565b90505b6001811115613216577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106131b8576131b7614b7a565b5b1a60f81b8282815181106131cf576131ce614b7a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061320f9061549e565b9050613179565b506000841461325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325190615513565b60405180910390fd5b8091505092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132ad81613278565b81146132b857600080fd5b50565b6000813590506132ca816132a4565b92915050565b6000602082840312156132e6576132e561326e565b5b60006132f4848285016132bb565b91505092915050565b60008115159050919050565b613312816132fd565b82525050565b600060208201905061332d6000830184613309565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61338182613338565b810181811067ffffffffffffffff821117156133a05761339f613349565b5b80604052505050565b60006133b3613264565b90506133bf8282613378565b919050565b600080fd5b6000819050919050565b6133dc816133c9565b81146133e757600080fd5b50565b6000813590506133f9816133d3565b92915050565b6000819050919050565b613412816133ff565b811461341d57600080fd5b50565b60008135905061342f81613409565b92915050565b600080fd5b600067ffffffffffffffff82111561345557613454613349565b5b602082029050602081019050919050565b600080fd5b600060ff82169050919050565b6134818161346b565b811461348c57600080fd5b50565b60008135905061349e81613478565b92915050565b6000606082840312156134ba576134b9613333565b5b6134c460606133a9565b905060006134d484828501613420565b60008301525060206134e884828501613420565b60208301525060406134fc8482850161348f565b60408301525092915050565b600061351b6135168461343a565b6133a9565b9050808382526020820190506060840283018581111561353e5761353d613466565b5b835b81811015613567578061355388826134a4565b845260208401935050606081019050613540565b5050509392505050565b600082601f83011261358657613585613435565b5b8135613596848260208601613508565b91505092915050565b6000606082840312156135b5576135b4613333565b5b6135bf60606133a9565b905060006135cf848285016133ea565b60008301525060206135e384828501613420565b602083015250604082013567ffffffffffffffff811115613607576136066133c4565b5b61361384828501613571565b60408301525092915050565b600067ffffffffffffffff82111561363a57613639613349565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff82111561366b5761366a613349565b5b61367482613338565b9050602081019050919050565b82818337600083830152505050565b60006136a361369e84613650565b6133a9565b9050828152602081018484840111156136bf576136be61364b565b5b6136ca848285613681565b509392505050565b600082601f8301126136e7576136e6613435565b5b81356136f7848260208601613690565b91505092915050565b600061371361370e8461361f565b6133a9565b9050808382526020820190506020840283018581111561373657613735613466565b5b835b8181101561377d57803567ffffffffffffffff81111561375b5761375a613435565b5b80860161376889826136d2565b85526020850194505050602081019050613738565b5050509392505050565b600082601f83011261379c5761379b613435565b5b81356137ac848260208601613700565b91505092915050565b600067ffffffffffffffff8211156137d0576137cf613349565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156137fc576137fb613349565b5b602082029050602081019050919050565b600061382061381b846137e1565b6133a9565b9050808382526020820190506020840283018581111561384357613842613466565b5b835b8181101561386c578061385888826133ea565b845260208401935050602081019050613845565b5050509392505050565b600082601f83011261388b5761388a613435565b5b813561389b84826020860161380d565b91505092915050565b60006138b76138b2846137b5565b6133a9565b905080838252602082019050602084028301858111156138da576138d9613466565b5b835b8181101561392157803567ffffffffffffffff8111156138ff576138fe613435565b5b80860161390c8982613876565b855260208501945050506020810190506138dc565b5050509392505050565b600082601f8301126139405761393f613435565b5b81356139508482602086016138a4565b91505092915050565b600067ffffffffffffffff82111561397457613973613349565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139b082613985565b9050919050565b6139c0816139a5565b81146139cb57600080fd5b50565b6000813590506139dd816139b7565b92915050565b60006139f66139f184613959565b6133a9565b90508083825260208201905060208402830185811115613a1957613a18613466565b5b835b81811015613a425780613a2e88826139ce565b845260208401935050602081019050613a1b565b5050509392505050565b600082601f830112613a6157613a60613435565b5b8135613a718482602086016139e3565b91505092915050565b613a83816132fd565b8114613a8e57600080fd5b50565b600081359050613aa081613a7a565b92915050565b60006101608284031215613abd57613abc613333565b5b613ac86101606133a9565b90506000613ad8848285016133ea565b600083015250602082013567ffffffffffffffff811115613afc57613afb6133c4565b5b613b0884828501613787565b602083015250604082013567ffffffffffffffff811115613b2c57613b2b6133c4565b5b613b388482850161392b565b604083015250606082013567ffffffffffffffff811115613b5c57613b5b6133c4565b5b613b6884828501613a4c565b606083015250608082013567ffffffffffffffff811115613b8c57613b8b6133c4565b5b613b988482850161392b565b60808301525060a082013567ffffffffffffffff811115613bbc57613bbb6133c4565b5b613bc884828501613876565b60a08301525060c082013567ffffffffffffffff811115613bec57613beb6133c4565b5b613bf884828501613787565b60c08301525060e082013567ffffffffffffffff811115613c1c57613c1b6133c4565b5b613c2884828501613787565b60e08301525061010082013567ffffffffffffffff811115613c4d57613c4c6133c4565b5b613c598482850161392b565b61010083015250610120613c6f84828501613a91565b61012083015250610140613c8584828501613a91565b6101408301525092915050565b60008060408385031215613ca957613ca861326e565b5b600083013567ffffffffffffffff811115613cc757613cc6613273565b5b613cd38582860161359f565b925050602083013567ffffffffffffffff811115613cf457613cf3613273565b5b613d0085828601613aa6565b9150509250929050565b613d13816133c9565b82525050565b6000602082019050613d2e6000830184613d0a565b92915050565b600080fd5b60008083601f840112613d4f57613d4e613435565b5b8235905067ffffffffffffffff811115613d6c57613d6b613d34565b5b602083019150836001820283011115613d8857613d87613466565b5b9250929050565b600080600080600060808688031215613dab57613daa61326e565b5b6000613db9888289016139ce565b9550506020613dca888289016139ce565b9450506040613ddb888289016133ea565b935050606086013567ffffffffffffffff811115613dfc57613dfb613273565b5b613e0888828901613d39565b92509250509295509295909350565b613e2081613278565b82525050565b6000602082019050613e3b6000830184613e17565b92915050565b60008060008060008060008060008060006101608c8e031215613e6757613e6661326e565b5b6000613e758e828f016133ea565b9b505060208c013567ffffffffffffffff811115613e9657613e95613273565b5b613ea28e828f01613787565b9a505060408c013567ffffffffffffffff811115613ec357613ec2613273565b5b613ecf8e828f0161392b565b99505060608c013567ffffffffffffffff811115613ef057613eef613273565b5b613efc8e828f01613a4c565b98505060808c013567ffffffffffffffff811115613f1d57613f1c613273565b5b613f298e828f0161392b565b97505060a08c013567ffffffffffffffff811115613f4a57613f49613273565b5b613f568e828f01613876565b96505060c08c013567ffffffffffffffff811115613f7757613f76613273565b5b613f838e828f01613787565b95505060e08c013567ffffffffffffffff811115613fa457613fa3613273565b5b613fb08e828f01613787565b9450506101008c013567ffffffffffffffff811115613fd257613fd1613273565b5b613fde8e828f0161392b565b935050610120613ff08e828f01613a91565b9250506101406140028e828f01613a91565b9150509295989b509295989b9093969950565b60006020828403121561402b5761402a61326e565b5b600061403984828501613420565b91505092915050565b61404b816133ff565b82525050565b60006020820190506140666000830184614042565b92915050565b6000602082840312156140825761408161326e565b5b6000614090848285016133ea565b91505092915050565b600080604083850312156140b0576140af61326e565b5b60006140be85828601613420565b92505060206140cf858286016139ce565b9150509250929050565b6140e2816139a5565b82525050565b60006020820190506140fd60008301846140d9565b92915050565b6000819050919050565b600061412861412361411e84613985565b614103565b613985565b9050919050565b600061413a8261410d565b9050919050565b600061414c8261412f565b9050919050565b61415c81614141565b82525050565b60006020820190506141776000830184614153565b92915050565b600067ffffffffffffffff82111561419857614197613349565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141c4576141c3613349565b5b6141cd82613338565b9050602081019050919050565b60006141ed6141e8846141a9565b6133a9565b9050828152602081018484840111156142095761420861364b565b5b614214848285613681565b509392505050565b600082601f83011261423157614230613435565b5b81356142418482602086016141da565b91505092915050565b600061425d6142588461417d565b6133a9565b905080838252602082019050602084028301858111156142805761427f613466565b5b835b818110156142c757803567ffffffffffffffff8111156142a5576142a4613435565b5b8086016142b2898261421c565b85526020850194505050602081019050614282565b5050509392505050565b600082601f8301126142e6576142e5613435565b5b81356142f684826020860161424a565b91505092915050565b600080604083850312156143165761431561326e565b5b6000614324858286016133ea565b925050602083013567ffffffffffffffff81111561434557614344613273565b5b614351858286016142d1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061439b5761439a61435b565b5b50565b60008190506143ac8261438a565b919050565b60006143bc8261439e565b9050919050565b6143cc816143b1565b82525050565b60006020820190506143e760008301846143c3565b92915050565b600080600080600080600060e0888a03121561440c5761440b61326e565b5b600061441a8a828b016133ea565b975050602088013567ffffffffffffffff81111561443b5761443a613273565b5b6144478a828b01613876565b965050604088013567ffffffffffffffff81111561446857614467613273565b5b6144748a828b01613787565b955050606088013567ffffffffffffffff81111561449557614494613273565b5b6144a18a828b01613787565b945050608088013567ffffffffffffffff8111156144c2576144c1613273565b5b6144ce8a828b0161392b565b93505060a06144df8a828b01613a91565b92505060c06144f08a828b01613a91565b91505092959891949750929550565b6000602082840312156145155761451461326e565b5b6000614523848285016139ce565b91505092915050565b600080600080600080600080610100898b03121561454d5761454c61326e565b5b600061455b8b828c016133ea565b985050602089013567ffffffffffffffff81111561457c5761457b613273565b5b6145888b828c01613876565b975050604089013567ffffffffffffffff8111156145a9576145a8613273565b5b6145b58b828c01613787565b965050606089013567ffffffffffffffff8111156145d6576145d5613273565b5b6145e28b828c01613787565b955050608089013567ffffffffffffffff81111561460357614602613273565b5b61460f8b828c0161392b565b94505060a089013567ffffffffffffffff8111156146305761462f613273565b5b61463c8b828c016142d1565b93505060c061464d8b828c01613a91565b92505060e061465e8b828c01613a91565b9150509295985092959890939650565b600082825260208201905092915050565b7f504b5048656c7065723a20436c61696d206b65792074797065206d757374206d60008201527f617463682041757468204d6574686f642064617461206b657920747970650000602082015250565b60006146db603e8361466e565b91506146e68261467f565b604082019050919050565b6000602082019050818103600083015261470a816146ce565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614746816133ff565b82525050565b6147558161346b565b82525050565b606082016000820151614771600085018261473d565b506020820151614784602085018261473d565b506040820151614797604085018261474c565b50505050565b60006147a9838361475b565b60608301905092915050565b6000602082019050919050565b60006147cd82614711565b6147d7818561471c565b93506147e28361472d565b8060005b838110156148135781516147fa888261479d565b9750614805836147b5565b9250506001810190506147e6565b5085935050505092915050565b60006060820190506148356000830186613d0a565b6148426020830185614042565b818103604083015261485481846147c2565b9050949350505050565b60008151905061486d816133d3565b92915050565b6000602082840312156148895761488861326e565b5b60006148978482850161485e565b91505092915050565b7f504b5048656c7065723a20697066732063696420616e642073636f706520617260008201527f726179206c656e67746873206d757374206d6174636800000000000000000000602082015250565b60006148fc60368361466e565b9150614907826148a0565b604082019050919050565b6000602082019050818103600083015261492b816148ef565b9050919050565b7f504b5048656c7065723a206164647265737320616e642073636f70652061727260008201527f6179206c656e67746873206d757374206d617463680000000000000000000000602082015250565b600061498e60358361466e565b915061499982614932565b604082019050919050565b600060208201905081810360008301526149bd81614981565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f6964206172726179206c656e67746873206d757374206d617463680000000000602082015250565b6000614a20603b8361466e565b9150614a2b826149c4565b604082019050919050565b60006020820190508181036000830152614a4f81614a13565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800602082015250565b6000614ab2603f8361466e565b9150614abd82614a56565b604082019050919050565b60006020820190508181036000830152614ae181614aa5565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f73636f706573206172726179206c656e67746873206d757374206d6174636800602082015250565b6000614b44603f8361466e565b9150614b4f82614ae8565b604082019050919050565b60006020820190508181036000830152614b7381614b37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60005b83811015614be3578082015181840152602081019050614bc8565b60008484015250505050565b6000614bfa82614ba9565b614c048185614bb4565b9350614c14818560208601614bc5565b614c1d81613338565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c5d816133c9565b82525050565b6000614c6f8383614c54565b60208301905092915050565b6000602082019050919050565b6000614c9382614c28565b614c9d8185614c33565b9350614ca883614c44565b8060005b83811015614cd9578151614cc08882614c63565b9750614ccb83614c7b565b925050600181019050614cac565b5085935050505092915050565b6000606082019050614cfb6000830186613d0a565b8181036020830152614d0d8185614bef565b90508181036040830152614d218184614c88565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d65826133c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d9757614d96614d2b565b5b600182019050919050565b6000606082019050614db76000830186613d0a565b614dc460208301856140d9565b8181036040830152614dd68184614c88565b9050949350505050565b600082825260208201905092915050565b6000614dfc82614ba9565b614e068185614de0565b9350614e16818560208601614bc5565b614e1f81613338565b840191505092915050565b6000606083016000830151614e426000860182614c54565b5060208301518482036020860152614e5a8282614df1565b91505060408301518482036040860152614e748282614df1565b9150508091505092915050565b6000606082019050614e966000830186613d0a565b8181036020830152614ea88185614e2a565b90508181036040830152614ebc8184614c88565b9050949350505050565b600081519050614ed5816139b7565b92915050565b600060208284031215614ef157614ef061326e565b5b6000614eff84828501614ec6565b91505092915050565b6000606082019050614f1d60008301866140d9565b614f2a60208301856140d9565b614f376040830184613d0a565b949350505050565b7f504b5048656c7065723a206f6e6c792061636365707473207472616e7366657260008201527f732066726f6d2074686520504b504e465420636f6e7472616374000000000000602082015250565b6000614f9b603a8361466e565b9150614fa682614f3f565b604082019050919050565b60006020820190508181036000830152614fca81614f8e565b9050919050565b600081519050614fe081613409565b92915050565b600060208284031215614ffc57614ffb61326e565b5b600061500a84828501614fd1565b91505092915050565b60006040820190506150286000830185614042565b61503560208301846143c3565b9392505050565b7f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560008201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f60208201527f6d61696e2077616c6c6574732c2077686f2061726520796f753f000000000000604082015250565b60006150be605a8361466e565b91506150c98261503c565b606082019050919050565b600060208201905081810360008301526150ed816150b1565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000615150602f8361466e565b915061515b826150f4565b604082019050919050565b6000602082019050818103600083015261517f81615143565b9050919050565b600081519050919050565b600061519c82615186565b6151a6818561466e565b93506151b6818560208601614bc5565b6151bf81613338565b840191505092915050565b60006040820190506151df6000830185613d0a565b81810360208301526151f18184615191565b90509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061525660268361466e565b9150615261826151fa565b604082019050919050565b6000602082019050818103600083015261528581615249565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006152c260208361466e565b91506152cd8261528c565b602082019050919050565b600060208201905081810360008301526152f1816152b5565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006153396017836152f8565b915061534482615303565b601782019050919050565b600061535a82615186565b61536481856152f8565b9350615374818560208601614bc5565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006153b66011836152f8565b91506153c182615380565b601182019050919050565b60006153d78261532c565b91506153e3828561534f565b91506153ee826153a9565b91506153fa828461534f565b91508190509392505050565b600060208201905081810360008301526154208184615191565b905092915050565b6000615433826133c9565b915061543e836133c9565b925082820261544c816133c9565b9150828204841483151761546357615462614d2b565b5b5092915050565b6000615475826133c9565b9150615480836133c9565b925082820190508082111561549857615497614d2b565b5b92915050565b60006154a9826133c9565b9150600082036154bc576154bb614d2b565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006154fd60208361466e565b9150615508826154c7565b602082019050919050565b6000602082019050818103600083015261552c816154f0565b905091905056fea2646970667358221220d4e7aed0308d345395225fb0781c972e4c820633a796b165273cf663b0b99e2a64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/contracts/datil-dev/PKPHelperV2.json b/contracts/datil-dev/PKPHelperV2.json deleted file mode 100644 index 8e63daf..0000000 --- a/contracts/datil-dev/PKPHelperV2.json +++ /dev/null @@ -1,349 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PKPHelperV2", - "sourceName": "contracts/lit-node/PKPHelperV2.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_resolver", - "type": "address" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "_env", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "ContractResolverAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "contractResolver", - "outputs": [ - { - "internalType": "contract ContractResolver", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "env", - "outputs": [ - { - "internalType": "enum ContractResolver.Env", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDomainWalletRegistry", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPKPNftMetdataAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpNftAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpPermissionsAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "uint256[]", - "name": "pkpEthAddressScopes", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - }, - { - "internalType": "bool", - "name": "burnPkp", - "type": "bool" - } - ], - "internalType": "struct PKPHelperV2.NewPKPParams", - "name": "params", - "type": "tuple" - } - ], - "name": "mintNextAndAddAuthMethods", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "uint256[]", - "name": "pkpEthAddressScopes", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - }, - { - "internalType": "bool", - "name": "burnPkp", - "type": "bool" - } - ], - "internalType": "struct PKPHelperV2.NewPKPParams", - "name": "params", - "type": "tuple" - } - ], - "name": "mintNextAndAddAuthMethodsWithTypes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC721Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b50604051620024303803806200243083398181016040528101906200003791906200022b565b620000576200004b620000cd60201b60201c565b620000d560201b60201c565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160146101000a81548160ff02191690836002811115620000c057620000bf62000272565b5b02179055505050620002a1565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001cb826200019e565b9050919050565b620001dd81620001be565b8114620001e957600080fd5b50565b600081519050620001fd81620001d2565b92915050565b600381106200021157600080fd5b50565b600081519050620002258162000203565b92915050565b6000806040838503121562000245576200024462000199565b5b60006200025585828601620001ec565b9250506020620002688582860162000214565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b61217f80620002b16000396000f3fe6080604052600436106100c25760003560e01c80638da5cb5b1161007f578063ebd735e111610059578063ebd735e114610248578063f2fde38b14610278578063f4cd5db9146102a1578063f95d71b1146102d1576100c2565b80638da5cb5b146101c75780639dca0032146101f2578063caead0c71461021d576100c2565b8063150b7a02146100c75780633276558c146101045780635043026c1461012f57806350d17b5e1461015a578063715018a61461018557806373cc41111461019c575b600080fd5b3480156100d357600080fd5b506100ee60048036038101906100e991906111b7565b6102fa565b6040516100fb919061127a565b60405180910390f35b34801561011057600080fd5b50610119610384565b60405161012691906112a4565b60405180910390f35b34801561013b57600080fd5b506101446104c8565b60405161015191906112a4565b60405180910390f35b34801561016657600080fd5b5061016f61060c565b60405161017c919061131e565b60405180910390f35b34801561019157600080fd5b5061019a610632565b005b3480156101a857600080fd5b506101b1610646565b6040516101be91906112a4565b60405180910390f35b3480156101d357600080fd5b506101dc61078a565b6040516101e991906112a4565b60405180910390f35b3480156101fe57600080fd5b506102076107b3565b60405161021491906113b0565b60405180910390f35b34801561022957600080fd5b506102326107c6565b60405161023f91906112a4565b60405180910390f35b610262600480360381019061025d919061193f565b61090a565b60405161026f9190611997565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a91906119b2565b61091c565b005b6102bb60048036038101906102b6919061193f565b61099f565b6040516102c89190611997565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f391906119b2565b610edd565b005b60006103046107c6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036890611a62565b60405180910390fd5b63150b7a0260e01b905095945050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639072f8386040518163ffffffff1660e01b8152600401602060405180830381865afa158015610431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104559190611ab8565b600160149054906101000a900460ff166040518363ffffffff1660e01b8152600401610482929190611af4565b602060405180830381865afa15801561049f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c39190611b32565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316f76bbf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105999190611ab8565b600160149054906101000a900460ff166040518363ffffffff1660e01b81526004016105c6929190611af4565b602060405180830381865afa1580156105e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106079190611b32565b905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61063a610f60565b6106446000610fde565b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634216e73a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190611ab8565b600160149054906101000a900460ff166040518363ffffffff1660e01b8152600401610744929190611af4565b602060405180830381865afa158015610761573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107859190611b32565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160149054906101000a900460ff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c0b8bf76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108979190611ab8565b600160149054906101000a900460ff166040518363ffffffff1660e01b81526004016108c4929190611af4565b602060405180830381865afa1580156108e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109059190611b32565b905090565b60006109158261099f565b9050919050565b610924610f60565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098a90611bd1565b60405180910390fd5b61099c81610fde565b50565b6000806109aa6107c6565b73ffffffffffffffffffffffffffffffffffffffff16635d228b163485600001516040518363ffffffff1660e01b81526004016109e79190611997565b60206040518083038185885af1158015610a05573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a2a9190611c06565b905082604001515183602001515114610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90611ca5565b60405180910390fd5b82606001515183602001515114610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90611d37565b60405180910390fd5b82608001515183602001515114610b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0790611dc9565b60405180910390fd5b600083602001515114610c4a5760005b836020015151811015610c4857610b35610384565b73ffffffffffffffffffffffffffffffffffffffff16639dd4349b83604051806060016040528088602001518681518110610b7357610b72611de9565b5b6020026020010151815260200188604001518681518110610b9757610b96611de9565b5b6020026020010151815260200188606001518681518110610bbb57610bba611de9565b5b602002602001015181525087608001518581518110610bdd57610bdc611de9565b5b60200260200101516040518463ffffffff1660e01b8152600401610c0393929190611fac565b600060405180830381600087803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b505050508080610c4090612020565b915050610b20565b505b6000610c54610384565b73ffffffffffffffffffffffffffffffffffffffff1663bd4986a0836040518263ffffffff1660e01b8152600401610c8c9190611997565b602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190611b32565b90508360a0015115610d5457610ce1610384565b73ffffffffffffffffffffffffffffffffffffffff16631663c12183838760c001516040518463ffffffff1660e01b8152600401610d2193929190612068565b600060405180830381600087803b158015610d3b57600080fd5b505af1158015610d4f573d6000803e3d6000fd5b505050505b8360e0015115610dd957610d666107c6565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401610da2939291906120a6565b600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b50505050610ed3565b83610100015115610e5b57610dec6107c6565b73ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b8152600401610e249190611997565b600060405180830381600087803b158015610e3e57600080fd5b505af1158015610e52573d6000803e3d6000fd5b50505050610ed2565b610e636107c6565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3033856040518463ffffffff1660e01b8152600401610e9f939291906120a6565b600060405180830381600087803b158015610eb957600080fd5b505af1158015610ecd573d6000803e3d6000fd5b505050505b5b8192505050919050565b610ee5610f60565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd581604051610f5591906112a4565b60405180910390a150565b610f686110a2565b73ffffffffffffffffffffffffffffffffffffffff16610f8661078a565b73ffffffffffffffffffffffffffffffffffffffff1614610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390612129565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110e9826110be565b9050919050565b6110f9816110de565b811461110457600080fd5b50565b600081359050611116816110f0565b92915050565b6000819050919050565b61112f8161111c565b811461113a57600080fd5b50565b60008135905061114c81611126565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261117757611176611152565b5b8235905067ffffffffffffffff81111561119457611193611157565b5b6020830191508360018202830111156111b0576111af61115c565b5b9250929050565b6000806000806000608086880312156111d3576111d26110b4565b5b60006111e188828901611107565b95505060206111f288828901611107565b94505060406112038882890161113d565b935050606086013567ffffffffffffffff811115611224576112236110b9565b5b61123088828901611161565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6112748161123f565b82525050565b600060208201905061128f600083018461126b565b92915050565b61129e816110de565b82525050565b60006020820190506112b96000830184611295565b92915050565b6000819050919050565b60006112e46112df6112da846110be565b6112bf565b6110be565b9050919050565b60006112f6826112c9565b9050919050565b6000611308826112eb565b9050919050565b611318816112fd565b82525050565b6000602082019050611333600083018461130f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061137957611378611339565b5b50565b600081905061138a82611368565b919050565b600061139a8261137c565b9050919050565b6113aa8161138f565b82525050565b60006020820190506113c560008301846113a1565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611419826113d0565b810181811067ffffffffffffffff82111715611438576114376113e1565b5b80604052505050565b600061144b6110aa565b90506114578282611410565b919050565b600080fd5b600067ffffffffffffffff82111561147c5761147b6113e1565b5b602082029050602081019050919050565b60006114a061149b84611461565b611441565b905080838252602082019050602084028301858111156114c3576114c261115c565b5b835b818110156114ec57806114d8888261113d565b8452602084019350506020810190506114c5565b5050509392505050565b600082601f83011261150b5761150a611152565b5b813561151b84826020860161148d565b91505092915050565b600067ffffffffffffffff82111561153f5761153e6113e1565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff8211156115705761156f6113e1565b5b611579826113d0565b9050602081019050919050565b82818337600083830152505050565b60006115a86115a384611555565b611441565b9050828152602081018484840111156115c4576115c3611550565b5b6115cf848285611586565b509392505050565b600082601f8301126115ec576115eb611152565b5b81356115fc848260208601611595565b91505092915050565b600061161861161384611524565b611441565b9050808382526020820190506020840283018581111561163b5761163a61115c565b5b835b8181101561168257803567ffffffffffffffff8111156116605761165f611152565b5b80860161166d89826115d7565b8552602085019450505060208101905061163d565b5050509392505050565b600082601f8301126116a1576116a0611152565b5b81356116b1848260208601611605565b91505092915050565b600067ffffffffffffffff8211156116d5576116d46113e1565b5b602082029050602081019050919050565b60006116f96116f4846116ba565b611441565b9050808382526020820190506020840283018581111561171c5761171b61115c565b5b835b8181101561176357803567ffffffffffffffff81111561174157611740611152565b5b80860161174e89826114f6565b8552602085019450505060208101905061171e565b5050509392505050565b600082601f83011261178257611781611152565b5b81356117928482602086016116e6565b91505092915050565b60008115159050919050565b6117b08161179b565b81146117bb57600080fd5b50565b6000813590506117cd816117a7565b92915050565b600061012082840312156117ea576117e96113cb565b5b6117f5610120611441565b905060006118058482850161113d565b600083015250602082013567ffffffffffffffff8111156118295761182861145c565b5b611835848285016114f6565b602083015250604082013567ffffffffffffffff8111156118595761185861145c565b5b6118658482850161168c565b604083015250606082013567ffffffffffffffff8111156118895761188861145c565b5b6118958482850161168c565b606083015250608082013567ffffffffffffffff8111156118b9576118b861145c565b5b6118c58482850161176d565b60808301525060a06118d9848285016117be565b60a08301525060c082013567ffffffffffffffff8111156118fd576118fc61145c565b5b611909848285016114f6565b60c08301525060e061191d848285016117be565b60e083015250610100611932848285016117be565b6101008301525092915050565b600060208284031215611955576119546110b4565b5b600082013567ffffffffffffffff811115611973576119726110b9565b5b61197f848285016117d3565b91505092915050565b6119918161111c565b82525050565b60006020820190506119ac6000830184611988565b92915050565b6000602082840312156119c8576119c76110b4565b5b60006119d684828501611107565b91505092915050565b600082825260208201905092915050565b7f504b5048656c7065723a206f6e6c792061636365707473207472616e7366657260008201527f732066726f6d2074686520504b504e465420636f6e7472616374000000000000602082015250565b6000611a4c603a836119df565b9150611a57826119f0565b604082019050919050565b60006020820190508181036000830152611a7b81611a3f565b9050919050565b6000819050919050565b611a9581611a82565b8114611aa057600080fd5b50565b600081519050611ab281611a8c565b92915050565b600060208284031215611ace57611acd6110b4565b5b6000611adc84828501611aa3565b91505092915050565b611aee81611a82565b82525050565b6000604082019050611b096000830185611ae5565b611b1660208301846113a1565b9392505050565b600081519050611b2c816110f0565b92915050565b600060208284031215611b4857611b476110b4565b5b6000611b5684828501611b1d565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611bbb6026836119df565b9150611bc682611b5f565b604082019050919050565b60006020820190508181036000830152611bea81611bae565b9050919050565b600081519050611c0081611126565b92915050565b600060208284031215611c1c57611c1b6110b4565b5b6000611c2a84828501611bf1565b91505092915050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f6964206172726179206c656e67746873206d757374206d617463680000000000602082015250565b6000611c8f603b836119df565b9150611c9a82611c33565b604082019050919050565b60006020820190508181036000830152611cbe81611c82565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800602082015250565b6000611d21603f836119df565b9150611d2c82611cc5565b604082019050919050565b60006020820190508181036000830152611d5081611d14565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f73636f706573206172726179206c656e67746873206d757374206d6174636800602082015250565b6000611db3603f836119df565b9150611dbe82611d57565b604082019050919050565b60006020820190508181036000830152611de281611da6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b611e218161111c565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e61578082015181840152602081019050611e46565b60008484015250505050565b6000611e7882611e27565b611e828185611e32565b9350611e92818560208601611e43565b611e9b816113d0565b840191505092915050565b6000606083016000830151611ebe6000860182611e18565b5060208301518482036020860152611ed68282611e6d565b91505060408301518482036040860152611ef08282611e6d565b9150508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611f358383611e18565b60208301905092915050565b6000602082019050919050565b6000611f5982611efd565b611f638185611f08565b9350611f6e83611f19565b8060005b83811015611f9f578151611f868882611f29565b9750611f9183611f41565b925050600181019050611f72565b5085935050505092915050565b6000606082019050611fc16000830186611988565b8181036020830152611fd38185611ea6565b90508181036040830152611fe78184611f4e565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061202b8261111c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361205d5761205c611ff1565b5b600182019050919050565b600060608201905061207d6000830186611988565b61208a6020830185611295565b818103604083015261209c8184611f4e565b9050949350505050565b60006060820190506120bb6000830186611295565b6120c86020830185611295565b6120d56040830184611988565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006121136020836119df565b915061211e826120dd565b602082019050919050565b6000602082019050818103600083015261214281612106565b905091905056fea2646970667358221220fb44597ec4cc3765bb8bcec1d9936904fbc589e5a7a992f59c75d3f2ee2c703764736f6c63430008110033", - "deployedBytecode": "0x6080604052600436106100c25760003560e01c80638da5cb5b1161007f578063ebd735e111610059578063ebd735e114610248578063f2fde38b14610278578063f4cd5db9146102a1578063f95d71b1146102d1576100c2565b80638da5cb5b146101c75780639dca0032146101f2578063caead0c71461021d576100c2565b8063150b7a02146100c75780633276558c146101045780635043026c1461012f57806350d17b5e1461015a578063715018a61461018557806373cc41111461019c575b600080fd5b3480156100d357600080fd5b506100ee60048036038101906100e991906111b7565b6102fa565b6040516100fb919061127a565b60405180910390f35b34801561011057600080fd5b50610119610384565b60405161012691906112a4565b60405180910390f35b34801561013b57600080fd5b506101446104c8565b60405161015191906112a4565b60405180910390f35b34801561016657600080fd5b5061016f61060c565b60405161017c919061131e565b60405180910390f35b34801561019157600080fd5b5061019a610632565b005b3480156101a857600080fd5b506101b1610646565b6040516101be91906112a4565b60405180910390f35b3480156101d357600080fd5b506101dc61078a565b6040516101e991906112a4565b60405180910390f35b3480156101fe57600080fd5b506102076107b3565b60405161021491906113b0565b60405180910390f35b34801561022957600080fd5b506102326107c6565b60405161023f91906112a4565b60405180910390f35b610262600480360381019061025d919061193f565b61090a565b60405161026f9190611997565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a91906119b2565b61091c565b005b6102bb60048036038101906102b6919061193f565b61099f565b6040516102c89190611997565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f391906119b2565b610edd565b005b60006103046107c6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036890611a62565b60405180910390fd5b63150b7a0260e01b905095945050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639072f8386040518163ffffffff1660e01b8152600401602060405180830381865afa158015610431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104559190611ab8565b600160149054906101000a900460ff166040518363ffffffff1660e01b8152600401610482929190611af4565b602060405180830381865afa15801561049f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c39190611b32565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316f76bbf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105999190611ab8565b600160149054906101000a900460ff166040518363ffffffff1660e01b81526004016105c6929190611af4565b602060405180830381865afa1580156105e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106079190611b32565b905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61063a610f60565b6106446000610fde565b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634216e73a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190611ab8565b600160149054906101000a900460ff166040518363ffffffff1660e01b8152600401610744929190611af4565b602060405180830381865afa158015610761573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107859190611b32565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160149054906101000a900460ff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c0b8bf76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108979190611ab8565b600160149054906101000a900460ff166040518363ffffffff1660e01b81526004016108c4929190611af4565b602060405180830381865afa1580156108e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109059190611b32565b905090565b60006109158261099f565b9050919050565b610924610f60565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098a90611bd1565b60405180910390fd5b61099c81610fde565b50565b6000806109aa6107c6565b73ffffffffffffffffffffffffffffffffffffffff16635d228b163485600001516040518363ffffffff1660e01b81526004016109e79190611997565b60206040518083038185885af1158015610a05573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a2a9190611c06565b905082604001515183602001515114610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90611ca5565b60405180910390fd5b82606001515183602001515114610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90611d37565b60405180910390fd5b82608001515183602001515114610b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0790611dc9565b60405180910390fd5b600083602001515114610c4a5760005b836020015151811015610c4857610b35610384565b73ffffffffffffffffffffffffffffffffffffffff16639dd4349b83604051806060016040528088602001518681518110610b7357610b72611de9565b5b6020026020010151815260200188604001518681518110610b9757610b96611de9565b5b6020026020010151815260200188606001518681518110610bbb57610bba611de9565b5b602002602001015181525087608001518581518110610bdd57610bdc611de9565b5b60200260200101516040518463ffffffff1660e01b8152600401610c0393929190611fac565b600060405180830381600087803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b505050508080610c4090612020565b915050610b20565b505b6000610c54610384565b73ffffffffffffffffffffffffffffffffffffffff1663bd4986a0836040518263ffffffff1660e01b8152600401610c8c9190611997565b602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190611b32565b90508360a0015115610d5457610ce1610384565b73ffffffffffffffffffffffffffffffffffffffff16631663c12183838760c001516040518463ffffffff1660e01b8152600401610d2193929190612068565b600060405180830381600087803b158015610d3b57600080fd5b505af1158015610d4f573d6000803e3d6000fd5b505050505b8360e0015115610dd957610d666107c6565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401610da2939291906120a6565b600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b50505050610ed3565b83610100015115610e5b57610dec6107c6565b73ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b8152600401610e249190611997565b600060405180830381600087803b158015610e3e57600080fd5b505af1158015610e52573d6000803e3d6000fd5b50505050610ed2565b610e636107c6565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e3033856040518463ffffffff1660e01b8152600401610e9f939291906120a6565b600060405180830381600087803b158015610eb957600080fd5b505af1158015610ecd573d6000803e3d6000fd5b505050505b5b8192505050919050565b610ee5610f60565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd581604051610f5591906112a4565b60405180910390a150565b610f686110a2565b73ffffffffffffffffffffffffffffffffffffffff16610f8661078a565b73ffffffffffffffffffffffffffffffffffffffff1614610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390612129565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110e9826110be565b9050919050565b6110f9816110de565b811461110457600080fd5b50565b600081359050611116816110f0565b92915050565b6000819050919050565b61112f8161111c565b811461113a57600080fd5b50565b60008135905061114c81611126565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261117757611176611152565b5b8235905067ffffffffffffffff81111561119457611193611157565b5b6020830191508360018202830111156111b0576111af61115c565b5b9250929050565b6000806000806000608086880312156111d3576111d26110b4565b5b60006111e188828901611107565b95505060206111f288828901611107565b94505060406112038882890161113d565b935050606086013567ffffffffffffffff811115611224576112236110b9565b5b61123088828901611161565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6112748161123f565b82525050565b600060208201905061128f600083018461126b565b92915050565b61129e816110de565b82525050565b60006020820190506112b96000830184611295565b92915050565b6000819050919050565b60006112e46112df6112da846110be565b6112bf565b6110be565b9050919050565b60006112f6826112c9565b9050919050565b6000611308826112eb565b9050919050565b611318816112fd565b82525050565b6000602082019050611333600083018461130f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061137957611378611339565b5b50565b600081905061138a82611368565b919050565b600061139a8261137c565b9050919050565b6113aa8161138f565b82525050565b60006020820190506113c560008301846113a1565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611419826113d0565b810181811067ffffffffffffffff82111715611438576114376113e1565b5b80604052505050565b600061144b6110aa565b90506114578282611410565b919050565b600080fd5b600067ffffffffffffffff82111561147c5761147b6113e1565b5b602082029050602081019050919050565b60006114a061149b84611461565b611441565b905080838252602082019050602084028301858111156114c3576114c261115c565b5b835b818110156114ec57806114d8888261113d565b8452602084019350506020810190506114c5565b5050509392505050565b600082601f83011261150b5761150a611152565b5b813561151b84826020860161148d565b91505092915050565b600067ffffffffffffffff82111561153f5761153e6113e1565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff8211156115705761156f6113e1565b5b611579826113d0565b9050602081019050919050565b82818337600083830152505050565b60006115a86115a384611555565b611441565b9050828152602081018484840111156115c4576115c3611550565b5b6115cf848285611586565b509392505050565b600082601f8301126115ec576115eb611152565b5b81356115fc848260208601611595565b91505092915050565b600061161861161384611524565b611441565b9050808382526020820190506020840283018581111561163b5761163a61115c565b5b835b8181101561168257803567ffffffffffffffff8111156116605761165f611152565b5b80860161166d89826115d7565b8552602085019450505060208101905061163d565b5050509392505050565b600082601f8301126116a1576116a0611152565b5b81356116b1848260208601611605565b91505092915050565b600067ffffffffffffffff8211156116d5576116d46113e1565b5b602082029050602081019050919050565b60006116f96116f4846116ba565b611441565b9050808382526020820190506020840283018581111561171c5761171b61115c565b5b835b8181101561176357803567ffffffffffffffff81111561174157611740611152565b5b80860161174e89826114f6565b8552602085019450505060208101905061171e565b5050509392505050565b600082601f83011261178257611781611152565b5b81356117928482602086016116e6565b91505092915050565b60008115159050919050565b6117b08161179b565b81146117bb57600080fd5b50565b6000813590506117cd816117a7565b92915050565b600061012082840312156117ea576117e96113cb565b5b6117f5610120611441565b905060006118058482850161113d565b600083015250602082013567ffffffffffffffff8111156118295761182861145c565b5b611835848285016114f6565b602083015250604082013567ffffffffffffffff8111156118595761185861145c565b5b6118658482850161168c565b604083015250606082013567ffffffffffffffff8111156118895761188861145c565b5b6118958482850161168c565b606083015250608082013567ffffffffffffffff8111156118b9576118b861145c565b5b6118c58482850161176d565b60808301525060a06118d9848285016117be565b60a08301525060c082013567ffffffffffffffff8111156118fd576118fc61145c565b5b611909848285016114f6565b60c08301525060e061191d848285016117be565b60e083015250610100611932848285016117be565b6101008301525092915050565b600060208284031215611955576119546110b4565b5b600082013567ffffffffffffffff811115611973576119726110b9565b5b61197f848285016117d3565b91505092915050565b6119918161111c565b82525050565b60006020820190506119ac6000830184611988565b92915050565b6000602082840312156119c8576119c76110b4565b5b60006119d684828501611107565b91505092915050565b600082825260208201905092915050565b7f504b5048656c7065723a206f6e6c792061636365707473207472616e7366657260008201527f732066726f6d2074686520504b504e465420636f6e7472616374000000000000602082015250565b6000611a4c603a836119df565b9150611a57826119f0565b604082019050919050565b60006020820190508181036000830152611a7b81611a3f565b9050919050565b6000819050919050565b611a9581611a82565b8114611aa057600080fd5b50565b600081519050611ab281611a8c565b92915050565b600060208284031215611ace57611acd6110b4565b5b6000611adc84828501611aa3565b91505092915050565b611aee81611a82565b82525050565b6000604082019050611b096000830185611ae5565b611b1660208301846113a1565b9392505050565b600081519050611b2c816110f0565b92915050565b600060208284031215611b4857611b476110b4565b5b6000611b5684828501611b1d565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611bbb6026836119df565b9150611bc682611b5f565b604082019050919050565b60006020820190508181036000830152611bea81611bae565b9050919050565b600081519050611c0081611126565b92915050565b600060208284031215611c1c57611c1b6110b4565b5b6000611c2a84828501611bf1565b91505092915050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f6964206172726179206c656e67746873206d757374206d617463680000000000602082015250565b6000611c8f603b836119df565b9150611c9a82611c33565b604082019050919050565b60006020820190508181036000830152611cbe81611c82565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800602082015250565b6000611d21603f836119df565b9150611d2c82611cc5565b604082019050919050565b60006020820190508181036000830152611d5081611d14565b9050919050565b7f504b5048656c7065723a2061757468206d6574686f64207479706520616e642060008201527f73636f706573206172726179206c656e67746873206d757374206d6174636800602082015250565b6000611db3603f836119df565b9150611dbe82611d57565b604082019050919050565b60006020820190508181036000830152611de281611da6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b611e218161111c565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e61578082015181840152602081019050611e46565b60008484015250505050565b6000611e7882611e27565b611e828185611e32565b9350611e92818560208601611e43565b611e9b816113d0565b840191505092915050565b6000606083016000830151611ebe6000860182611e18565b5060208301518482036020860152611ed68282611e6d565b91505060408301518482036040860152611ef08282611e6d565b9150508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611f358383611e18565b60208301905092915050565b6000602082019050919050565b6000611f5982611efd565b611f638185611f08565b9350611f6e83611f19565b8060005b83811015611f9f578151611f868882611f29565b9750611f9183611f41565b925050600181019050611f72565b5085935050505092915050565b6000606082019050611fc16000830186611988565b8181036020830152611fd38185611ea6565b90508181036040830152611fe78184611f4e565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061202b8261111c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361205d5761205c611ff1565b5b600182019050919050565b600060608201905061207d6000830186611988565b61208a6020830185611295565b818103604083015261209c8184611f4e565b9050949350505050565b60006060820190506120bb6000830186611295565b6120c86020830185611295565b6120d56040830184611988565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006121136020836119df565b915061211e826120dd565b602082019050919050565b6000602082019050818103600083015261214281612106565b905091905056fea2646970667358221220fb44597ec4cc3765bb8bcec1d9936904fbc589e5a7a992f59c75d3f2ee2c703764736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/contracts/datil-dev/PKPNFT.json b/contracts/datil-dev/PKPNFT.json deleted file mode 100644 index 5c9f8ff..0000000 --- a/contracts/datil-dev/PKPNFT.json +++ /dev/null @@ -1,240 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PKPNFT", - "sourceName": "contracts/lit-node/PKPNFT.sol", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamond.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamond.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initCalldata", - "type": "bytes" - }, - { - "internalType": "address", - "name": "contractResolver", - "type": "address" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "env", - "type": "uint8" - } - ], - "internalType": "struct StakingArgs", - "name": "_args", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "CannotAddFunctionToDiamondThatAlreadyExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - } - ], - "name": "CannotAddSelectorsToZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "CannotRemoveFunctionThatDoesNotExist", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "CannotRemoveImmutableFunction", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "CannotReplaceFunctionThatDoesNotExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - } - ], - "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "CannotReplaceImmutableFunction", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "FunctionNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_action", - "type": "uint8" - } - ], - "name": "IncorrectFacetCutAction", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_initializationContractAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "InitializationFunctionReverted", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_contractAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "_message", - "type": "string" - } - ], - "name": "NoBytecodeAtAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facetAddress", - "type": "address" - } - ], - "name": "NoSelectorsProvidedForFacetForCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facetAddress", - "type": "address" - } - ], - "name": "RemoveFacetAddressMustBeZeroAddress", - "type": "error" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "bytecode": "0x608060405260405162003889380380620038898339818101604052810190620000299190620017da565b6200004381600001516200018660201b620001861760201c565b6200006382826020015183604001516200026560201b6200025d1760201c565b80606001516200007d620004d160201b6200047a1760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060800151620000d8620004d160201b6200047a1760201c565b60000160146101000a81548160ff021916908360028111156200010057620000ff6200185f565b5b021790555060016200011c620004d160201b6200047a1760201c565b6001018190555080600001516200013d620004d160201b6200047a1760201c565b60020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062001f31565b600062000198620004fe60201b60201c565b905060008160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60005b83518110156200047c5760008482815181106200028a57620002896200188e565b5b60200260200101516040015190506000858381518110620002b057620002af6200188e565b5b602002602001015160000151905060008251036200030757806040517fe767f91f000000000000000000000000000000000000000000000000000000008152600401620002fe9190620018ce565b60405180910390fd5b60008684815181106200031f576200031e6200188e565b5b6020026020010151602001519050600060028111156200034457620003436200185f565b5b8160028111156200035a57620003596200185f565b5b0362000378576200037282846200052b60201b60201c565b62000463565b600160028111156200038f576200038e6200185f565b5b816002811115620003a557620003a46200185f565b5b03620003c357620003bd82846200087360201b60201c565b62000462565b600280811115620003d957620003d86200185f565b5b816002811115620003ef57620003ee6200185f565b5b036200040d5762000407828462000bdd60201b60201c565b62000461565b8060028111156200042357620004226200185f565b5b6040517f7fe9a41e00000000000000000000000000000000000000000000000000000000815260040162000458919062001909565b60405180910390fd5b5b5b505050808062000473906200195f565b91505062000268565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051620004b29392919062001c5f565b60405180910390a1620004cc82826200108860201b60201c565b505050565b6000807fdd40e1fc471fef58a9b638822d14c35549994757e95ac83b6e1a8018ad2db4f390508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200059f57806040517f0ae3681c00000000000000000000000000000000000000000000000000000000815260040162000596919062001d25565b60405180910390fd5b6000620005b1620004fe60201b60201c565b9050600081600101805490509050620005ea846040518060600160405280602481526020016200381560249139620011bc60201b60201c565b60005b83518110156200086c5760008482815181106200060f576200060e6200188e565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146200070857816040517febbf5d07000000000000000000000000000000000000000000000000000000008152600401620006ff919062001d5a565b60405180910390fd5b60405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018561ffff16815250856000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548161ffff021916908361ffff160217905550905050846001018290806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c02179055508380620008519062001d85565b9450505050808062000863906200195f565b915050620005ed565b5050505050565b600062000885620004fe60201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620008fb57816040517fcd98a96f000000000000000000000000000000000000000000000000000000008152600401620008f2919062001d25565b60405180910390fd5b62000926836040518060600160405280602881526020016200386160289139620011bc60201b60201c565b60005b825181101562000bd75760008382815181106200094b576200094a6200188e565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a4357816040517f520300da00000000000000000000000000000000000000000000000000000000815260040162000a3a919062001d5a565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000ab657816040517f358d9d1a00000000000000000000000000000000000000000000000000000000815260040162000aad919062001d5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000b2a57816040517f7479f93900000000000000000000000000000000000000000000000000000000815260040162000b21919062001d5a565b60405180910390fd5b85846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050808062000bce906200195f565b91505062000929565b50505050565b600062000bef620004fe60201b60201c565b9050600081600101805490509050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161462000c7157836040517fd091bc8100000000000000000000000000000000000000000000000000000000815260040162000c689190620018ce565b60405180910390fd5b60005b83518110156200108157600084828151811062000c965762000c956200188e565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900461ffff1661ffff1661ffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff160362000df057816040517f7a08a22d00000000000000000000000000000000000000000000000000000000815260040162000de7919062001d5a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff160362000e6757816040517f6fafeb0800000000000000000000000000000000000000000000000000000000815260040162000e5e919062001d5a565b60405180910390fd5b838062000e749062001db4565b94505083816020015161ffff161462000f9057600085600101858154811062000ea25762000ea16200188e565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b90508086600101836020015161ffff168154811062000ee95762000ee86200188e565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c02179055508160200151866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a81548161ffff021916908361ffff160217905550505b8460010180548062000fa75762000fa662001de2565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549061ffff021916905550505050808062001078906200195f565b91505062000c74565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315620011b857620010e9826040518060600160405280602881526020016200383960289139620011bc60201b60201c565b6000808373ffffffffffffffffffffffffffffffffffffffff168360405162001113919062001e53565b600060405180830381855af49150503d806000811462001150576040519150601f19603f3d011682016040523d82523d6000602084013e62001155565b606091505b509150915081620011b557600081511115620011745780518082602001fd5b83836040517f192105d7000000000000000000000000000000000000000000000000000000008152600401620011ac92919062001e6c565b60405180910390fd5b50505b5050565b6000823b9050600081036200120c5782826040517f919834b90000000000000000000000000000000000000000000000000000000081526004016200120392919062001efd565b60405180910390fd5b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62001275826200122a565b810181811067ffffffffffffffff821117156200129757620012966200123b565b5b80604052505050565b6000620012ac62001211565b9050620012ba82826200126a565b919050565b600067ffffffffffffffff821115620012dd57620012dc6200123b565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200132a82620012fd565b9050919050565b6200133c816200131d565b81146200134857600080fd5b50565b6000815190506200135c8162001331565b92915050565b600381106200137057600080fd5b50565b600081519050620013848162001362565b92915050565b600067ffffffffffffffff821115620013a857620013a76200123b565b5b602082029050602081019050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620013f081620013b9565b8114620013fc57600080fd5b50565b6000815190506200141081620013e5565b92915050565b60006200142d62001427846200138a565b620012a0565b90508083825260208201905060208402830185811115620014535762001452620012ee565b5b835b818110156200148057806200146b8882620013ff565b84526020840193505060208101905062001455565b5050509392505050565b600082601f830112620014a257620014a162001225565b5b8151620014b484826020860162001416565b91505092915050565b600060608284031215620014d657620014d5620012f3565b5b620014e26060620012a0565b90506000620014f4848285016200134b565b60008301525060206200150a8482850162001373565b602083015250604082015167ffffffffffffffff811115620015315762001530620012f8565b5b6200153f848285016200148a565b60408301525092915050565b6000620015626200155c84620012bf565b620012a0565b90508083825260208201905060208402830185811115620015885762001587620012ee565b5b835b81811015620015d657805167ffffffffffffffff811115620015b157620015b062001225565b5b808601620015c08982620014bd565b855260208501945050506020810190506200158a565b5050509392505050565b600082601f830112620015f857620015f762001225565b5b81516200160a8482602086016200154b565b91505092915050565b600080fd5b600067ffffffffffffffff8211156200163657620016356200123b565b5b62001641826200122a565b9050602081019050919050565b60005b838110156200166e57808201518184015260208101905062001651565b60008484015250505050565b6000620016916200168b8462001618565b620012a0565b905082815260208101848484011115620016b057620016af62001613565b5b620016bd8482856200164e565b509392505050565b600082601f830112620016dd57620016dc62001225565b5b8151620016ef8482602086016200167a565b91505092915050565b600381106200170657600080fd5b50565b6000815190506200171a81620016f8565b92915050565b600060a08284031215620017395762001738620012f3565b5b6200174560a0620012a0565b9050600062001757848285016200134b565b60008301525060206200176d848285016200134b565b602083015250604082015167ffffffffffffffff811115620017945762001793620012f8565b5b620017a284828501620016c5565b6040830152506060620017b8848285016200134b565b6060830152506080620017ce8482850162001709565b60808301525092915050565b60008060408385031215620017f457620017f36200121b565b5b600083015167ffffffffffffffff81111562001815576200181462001220565b5b6200182385828601620015e0565b925050602083015167ffffffffffffffff81111562001847576200184662001220565b5b620018558582860162001720565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b620018c8816200131d565b82525050565b6000602082019050620018e56000830184620018bd565b92915050565b600060ff82169050919050565b6200190381620018eb565b82525050565b6000602082019050620019206000830184620018f8565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006200196c8262001955565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620019a157620019a062001926565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b620019e3816200131d565b82525050565b60038110620019fd57620019fc6200185f565b5b50565b600081905062001a1082620019e9565b919050565b600062001a228262001a00565b9050919050565b62001a348162001a15565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62001a7181620013b9565b82525050565b600062001a85838362001a66565b60208301905092915050565b6000602082019050919050565b600062001aab8262001a3a565b62001ab7818562001a45565b935062001ac48362001a56565b8060005b8381101562001afb57815162001adf888262001a77565b975062001aec8362001a91565b92505060018101905062001ac8565b5085935050505092915050565b600060608301600083015162001b226000860182620019d8565b50602083015162001b37602086018262001a29565b506040830151848203604086015262001b51828262001a9e565b9150508091505092915050565b600062001b6c838362001b08565b905092915050565b6000602082019050919050565b600062001b8e82620019ac565b62001b9a8185620019b7565b93508360208202850162001bae85620019c8565b8060005b8581101562001bf0578484038952815162001bce858262001b5e565b945062001bdb8362001b74565b925060208a0199505060018101905062001bb2565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b600062001c2b8262001c02565b62001c37818562001c0d565b935062001c498185602086016200164e565b62001c54816200122a565b840191505092915050565b6000606082019050818103600083015262001c7b818662001b81565b905062001c8c6020830185620018bd565b818103604083015262001ca0818462001c1e565b9050949350505050565b600082825260208201905092915050565b600062001cc88262001a3a565b62001cd4818562001caa565b935062001ce18362001a56565b8060005b8381101562001d1857815162001cfc888262001a77565b975062001d098362001a91565b92505060018101905062001ce5565b5085935050505092915050565b6000602082019050818103600083015262001d41818462001cbb565b905092915050565b62001d5481620013b9565b82525050565b600060208201905062001d71600083018462001d49565b92915050565b600061ffff82169050919050565b600062001d928262001d77565b915061ffff820362001da95762001da862001926565b5b600182019050919050565b600062001dc18262001955565b91506000820362001dd75762001dd662001926565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b600062001e298262001c02565b62001e35818562001e11565b935062001e478185602086016200164e565b80840191505092915050565b600062001e61828462001e1c565b915081905092915050565b600060408201905062001e836000830185620018bd565b818103602083015262001e97818462001c1e565b90509392505050565b600081519050919050565b600082825260208201905092915050565b600062001ec98262001ea0565b62001ed5818562001eab565b935062001ee78185602086016200164e565b62001ef2816200122a565b840191505092915050565b600060408201905062001f146000830185620018bd565b818103602083015262001f28818462001ebc565b90509392505050565b6118d48062001f416000396000f3fe60806040526000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050809150600082600001600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610160576000357fffffffff00000000000000000000000000000000000000000000000000000000166040517f5416eb980000000000000000000000000000000000000000000000000000000081526004016101579190611178565b60405180910390fd5b3660008037600080366000845af43d6000803e8060008114610181573d6000f35b3d6000fd5b60006101906104a7565b905060008160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60005b835181101561042f57600084828151811061027e5761027d611193565b5b602002602001015160400151905060008583815181106102a1576102a0611193565b5b602002602001015160000151905060008251036102f557806040517fe767f91f0000000000000000000000000000000000000000000000000000000081526004016102ec9190611203565b60405180910390fd5b600086848151811061030a57610309611193565b5b60200260200101516020015190506000600281111561032c5761032b61121e565b5b81600281111561033f5761033e61121e565b5b036103535761034e82846104d4565b610419565b600160028111156103675761036661121e565b5b81600281111561037a5761037961121e565b5b0361038e5761038982846107fc565b610418565b6002808111156103a1576103a061121e565b5b8160028111156103b4576103b361121e565b5b036103c8576103c38284610b42565b610417565b8060028111156103db576103da61121e565b5b6040517f7fe9a41e00000000000000000000000000000000000000000000000000000000815260040161040e9190611269565b60405180910390fd5b5b5b5050508080610427906112bd565b915050610260565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051610463939291906115bc565b60405180910390a16104758282610fc9565b505050565b6000807fdd40e1fc471fef58a9b638822d14c35549994757e95ac83b6e1a8018ad2db4f390508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361054557806040517f0ae3681c00000000000000000000000000000000000000000000000000000000815260040161053c9190611670565b60405180910390fd5b600061054f6104a7565b905060008160010180549050905061057f8460405180606001604052806024815260200161182b602491396110eb565b60005b83518110156107f55760008482815181106105a05761059f611193565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461069657816040517febbf5d0700000000000000000000000000000000000000000000000000000000815260040161068d9190611178565b60405180910390fd5b60405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018561ffff16815250856000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548161ffff021916908361ffff160217905550905050846001018290806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555083806107dd906116a0565b945050505080806107ed906112bd565b915050610582565b5050505050565b60006108066104a7565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361087957816040517fcd98a96f0000000000000000000000000000000000000000000000000000000081526004016108709190611670565b60405180910390fd5b61089b83604051806060016040528060288152602001611877602891396110eb565b60005b8251811015610b3c5760008382815181106108bc576108bb611193565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109b157816040517f520300da0000000000000000000000000000000000000000000000000000000081526004016109a89190611178565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a2157816040517f358d9d1a000000000000000000000000000000000000000000000000000000008152600401610a189190611178565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a9257816040517f7479f939000000000000000000000000000000000000000000000000000000008152600401610a899190611178565b60405180910390fd5b85846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050508080610b34906112bd565b91505061089e565b50505050565b6000610b4c6104a7565b9050600081600101805490509050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610bcb57836040517fd091bc81000000000000000000000000000000000000000000000000000000008152600401610bc29190611203565b60405180910390fd5b60005b8351811015610fc2576000848281518110610bec57610beb611193565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900461ffff1661ffff1661ffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610d4357816040517f7a08a22d000000000000000000000000000000000000000000000000000000008152600401610d3a9190611178565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610db757816040517f6fafeb08000000000000000000000000000000000000000000000000000000008152600401610dae9190611178565b60405180910390fd5b8380610dc2906116ca565b94505083816020015161ffff1614610ed7576000856001018581548110610dec57610deb611193565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b90508086600101836020015161ffff1681548110610e3057610e2f611193565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c02179055508160200151866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a81548161ffff021916908361ffff160217905550505b84600101805480610eeb57610eea6116f3565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549061ffff0219169055505050508080610fba906112bd565b915050610bce565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603156110e7576110208260405180606001604052806028815260200161184f602891396110eb565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051611048919061175e565b600060405180830381855af49150503d8060008114611083576040519150601f19603f3d011682016040523d82523d6000602084013e611088565b606091505b5091509150816110e4576000815111156110a55780518082602001fd5b83836040517f192105d70000000000000000000000000000000000000000000000000000000081526004016110db929190611775565b60405180910390fd5b50505b5050565b6000823b9050600081036111385782826040517f919834b900000000000000000000000000000000000000000000000000000000815260040161112f9291906117fa565b60405180910390fd5b505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6111728161113d565b82525050565b600060208201905061118d6000830184611169565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111ed826111c2565b9050919050565b6111fd816111e2565b82525050565b600060208201905061121860008301846111f4565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060ff82169050919050565b6112638161124d565b82525050565b600060208201905061127e600083018461125a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006112c8826112b3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112fa576112f9611284565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61133a816111e2565b82525050565b600381106113515761135061121e565b5b50565b600081905061136282611340565b919050565b600061137282611354565b9050919050565b61138281611367565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6113bd8161113d565b82525050565b60006113cf83836113b4565b60208301905092915050565b6000602082019050919050565b60006113f382611388565b6113fd8185611393565b9350611408836113a4565b8060005b8381101561143957815161142088826113c3565b975061142b836113db565b92505060018101905061140c565b5085935050505092915050565b600060608301600083015161145e6000860182611331565b5060208301516114716020860182611379565b506040830151848203604086015261148982826113e8565b9150508091505092915050565b60006114a28383611446565b905092915050565b6000602082019050919050565b60006114c282611305565b6114cc8185611310565b9350836020820285016114de85611321565b8060005b8581101561151a57848403895281516114fb8582611496565b9450611506836114aa565b925060208a019950506001810190506114e2565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561156657808201518184015260208101905061154b565b60008484015250505050565b6000601f19601f8301169050919050565b600061158e8261152c565b6115988185611537565b93506115a8818560208601611548565b6115b181611572565b840191505092915050565b600060608201905081810360008301526115d681866114b7565b90506115e560208301856111f4565b81810360408301526115f78184611583565b9050949350505050565b600082825260208201905092915050565b600061161d82611388565b6116278185611601565b9350611632836113a4565b8060005b8381101561166357815161164a88826113c3565b9750611655836113db565b925050600181019050611636565b5085935050505092915050565b6000602082019050818103600083015261168a8184611612565b905092915050565b600061ffff82169050919050565b60006116ab82611692565b915061ffff82036116bf576116be611284565b5b600182019050919050565b60006116d5826112b3565b9150600082036116e8576116e7611284565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b60006117388261152c565b6117428185611722565b9350611752818560208601611548565b80840191505092915050565b600061176a828461172d565b915081905092915050565b600060408201905061178a60008301856111f4565b818103602083015261179c8184611583565b90509392505050565b600081519050919050565b600082825260208201905092915050565b60006117cc826117a5565b6117d681856117b0565b93506117e6818560208601611548565b6117ef81611572565b840191505092915050565b600060408201905061180f60008301856111f4565b818103602083015261182181846117c1565b9050939250505056fe4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f6465a26469706673582212203849fb063f6570bd5df460dea2e3c29612f1dc568bde147046711d84535cc1a764736f6c634300081100334c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f6465", - "deployedBytecode": "0x60806040526000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050809150600082600001600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610160576000357fffffffff00000000000000000000000000000000000000000000000000000000166040517f5416eb980000000000000000000000000000000000000000000000000000000081526004016101579190611178565b60405180910390fd5b3660008037600080366000845af43d6000803e8060008114610181573d6000f35b3d6000fd5b60006101906104a7565b905060008160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60005b835181101561042f57600084828151811061027e5761027d611193565b5b602002602001015160400151905060008583815181106102a1576102a0611193565b5b602002602001015160000151905060008251036102f557806040517fe767f91f0000000000000000000000000000000000000000000000000000000081526004016102ec9190611203565b60405180910390fd5b600086848151811061030a57610309611193565b5b60200260200101516020015190506000600281111561032c5761032b61121e565b5b81600281111561033f5761033e61121e565b5b036103535761034e82846104d4565b610419565b600160028111156103675761036661121e565b5b81600281111561037a5761037961121e565b5b0361038e5761038982846107fc565b610418565b6002808111156103a1576103a061121e565b5b8160028111156103b4576103b361121e565b5b036103c8576103c38284610b42565b610417565b8060028111156103db576103da61121e565b5b6040517f7fe9a41e00000000000000000000000000000000000000000000000000000000815260040161040e9190611269565b60405180910390fd5b5b5b5050508080610427906112bd565b915050610260565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051610463939291906115bc565b60405180910390a16104758282610fc9565b505050565b6000807fdd40e1fc471fef58a9b638822d14c35549994757e95ac83b6e1a8018ad2db4f390508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361054557806040517f0ae3681c00000000000000000000000000000000000000000000000000000000815260040161053c9190611670565b60405180910390fd5b600061054f6104a7565b905060008160010180549050905061057f8460405180606001604052806024815260200161182b602491396110eb565b60005b83518110156107f55760008482815181106105a05761059f611193565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461069657816040517febbf5d0700000000000000000000000000000000000000000000000000000000815260040161068d9190611178565b60405180910390fd5b60405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018561ffff16815250856000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548161ffff021916908361ffff160217905550905050846001018290806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555083806107dd906116a0565b945050505080806107ed906112bd565b915050610582565b5050505050565b60006108066104a7565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361087957816040517fcd98a96f0000000000000000000000000000000000000000000000000000000081526004016108709190611670565b60405180910390fd5b61089b83604051806060016040528060288152602001611877602891396110eb565b60005b8251811015610b3c5760008382815181106108bc576108bb611193565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109b157816040517f520300da0000000000000000000000000000000000000000000000000000000081526004016109a89190611178565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a2157816040517f358d9d1a000000000000000000000000000000000000000000000000000000008152600401610a189190611178565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a9257816040517f7479f939000000000000000000000000000000000000000000000000000000008152600401610a899190611178565b60405180910390fd5b85846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050508080610b34906112bd565b91505061089e565b50505050565b6000610b4c6104a7565b9050600081600101805490509050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610bcb57836040517fd091bc81000000000000000000000000000000000000000000000000000000008152600401610bc29190611203565b60405180910390fd5b60005b8351811015610fc2576000848281518110610bec57610beb611193565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900461ffff1661ffff1661ffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610d4357816040517f7a08a22d000000000000000000000000000000000000000000000000000000008152600401610d3a9190611178565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610db757816040517f6fafeb08000000000000000000000000000000000000000000000000000000008152600401610dae9190611178565b60405180910390fd5b8380610dc2906116ca565b94505083816020015161ffff1614610ed7576000856001018581548110610dec57610deb611193565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b90508086600101836020015161ffff1681548110610e3057610e2f611193565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c02179055508160200151866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a81548161ffff021916908361ffff160217905550505b84600101805480610eeb57610eea6116f3565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549061ffff0219169055505050508080610fba906112bd565b915050610bce565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603156110e7576110208260405180606001604052806028815260200161184f602891396110eb565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051611048919061175e565b600060405180830381855af49150503d8060008114611083576040519150601f19603f3d011682016040523d82523d6000602084013e611088565b606091505b5091509150816110e4576000815111156110a55780518082602001fd5b83836040517f192105d70000000000000000000000000000000000000000000000000000000081526004016110db929190611775565b60405180910390fd5b50505b5050565b6000823b9050600081036111385782826040517f919834b900000000000000000000000000000000000000000000000000000000815260040161112f9291906117fa565b60405180910390fd5b505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6111728161113d565b82525050565b600060208201905061118d6000830184611169565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111ed826111c2565b9050919050565b6111fd816111e2565b82525050565b600060208201905061121860008301846111f4565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060ff82169050919050565b6112638161124d565b82525050565b600060208201905061127e600083018461125a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006112c8826112b3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112fa576112f9611284565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61133a816111e2565b82525050565b600381106113515761135061121e565b5b50565b600081905061136282611340565b919050565b600061137282611354565b9050919050565b61138281611367565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6113bd8161113d565b82525050565b60006113cf83836113b4565b60208301905092915050565b6000602082019050919050565b60006113f382611388565b6113fd8185611393565b9350611408836113a4565b8060005b8381101561143957815161142088826113c3565b975061142b836113db565b92505060018101905061140c565b5085935050505092915050565b600060608301600083015161145e6000860182611331565b5060208301516114716020860182611379565b506040830151848203604086015261148982826113e8565b9150508091505092915050565b60006114a28383611446565b905092915050565b6000602082019050919050565b60006114c282611305565b6114cc8185611310565b9350836020820285016114de85611321565b8060005b8581101561151a57848403895281516114fb8582611496565b9450611506836114aa565b925060208a019950506001810190506114e2565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561156657808201518184015260208101905061154b565b60008484015250505050565b6000601f19601f8301169050919050565b600061158e8261152c565b6115988185611537565b93506115a8818560208601611548565b6115b181611572565b840191505092915050565b600060608201905081810360008301526115d681866114b7565b90506115e560208301856111f4565b81810360408301526115f78184611583565b9050949350505050565b600082825260208201905092915050565b600061161d82611388565b6116278185611601565b9350611632836113a4565b8060005b8381101561166357815161164a88826113c3565b9750611655836113db565b925050600181019050611636565b5085935050505092915050565b6000602082019050818103600083015261168a8184611612565b905092915050565b600061ffff82169050919050565b60006116ab82611692565b915061ffff82036116bf576116be611284565b5b600182019050919050565b60006116d5826112b3565b9150600082036116e8576116e7611284565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b60006117388261152c565b6117428185611722565b9350611752818560208601611548565b80840191505092915050565b600061176a828461172d565b915081905092915050565b600060408201905061178a60008301856111f4565b818103602083015261179c8184611583565b90509392505050565b600081519050919050565b600082825260208201905092915050565b60006117cc826117a5565b6117d681856117b0565b93506117e6818560208601611548565b6117ef81611572565b840191505092915050565b600060408201905061180f60008301856111f4565b818103602083015261182181846117c1565b9050939250505056fe4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f6465a26469706673582212203849fb063f6570bd5df460dea2e3c29612f1dc568bde147046711d84535cc1a764736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "address": "0x1A3C8198015ee3a5804106fe097f648BE6e461b9" -} \ No newline at end of file diff --git a/contracts/datil-dev/PKPNFTFacet.json b/contracts/datil-dev/PKPNFTFacet.json deleted file mode 100644 index 2b17c5b..0000000 --- a/contracts/datil-dev/PKPNFTFacet.json +++ /dev/null @@ -1,828 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PKPNFTFacet", - "sourceName": "contracts/lit-node/PKPNFT/PKPNFTFacet.sol", - "abi": [ - { - "inputs": [], - "name": "CallerNotOwner", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "ContractResolverAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newFreeMintSigner", - "type": "address" - } - ], - "name": "FreeMintSignerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newMintCost", - "type": "uint256" - } - ], - "name": "MintCostSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - } - ], - "name": "PKPMinted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrew", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct IPubkeyRouter.Signature[]", - "name": "signatures", - "type": "tuple[]" - } - ], - "name": "claimAndMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "exists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "freeMintSigner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getEthAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getNextDerivedKeyId", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpNftMetadataAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpPermissionsAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPubkey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRouterAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mintCost", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - } - ], - "name": "mintGrantAndBurnNext", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "mintNext", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "prefixed", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "redeemedFreeMintIds", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newFreeMintSigner", - "type": "address" - } - ], - "name": "setFreeMintSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newMintCost", - "type": "uint256" - } - ], - "name": "setMintCost", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenOfOwnerByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50615bb080620000216000396000f3fe60806040526004361061021a5760003560e01c80636352211e11610123578063b88d4fde116100ab578063c87b56dd1161006f578063c87b56dd1461080a578063d54f7d5e14610847578063e985e9c514610872578063ef6fd878146108af578063f95d71b1146108ec5761021a565b8063b88d4fde1461071e578063b94a210214610747578063bd4986a014610772578063bdb4b848146107af578063c70384b8146107da5761021a565b80638129fc1c116100f25780638129fc1c1461065f5780638545f4ea1461067657806395d89b411461069f578063a22cb465146106ca578063b3464fd6146106f35761021a565b80636352211e1461058a57806366a306d7146105c757806370a08231146105f757806372b1b859146106345761021a565b80633276558c116101a657806342966c681161017557806342966c681461047a5780634f558e79146104a35780634f6ccce7146104e057806356e3a1ae1461051d5780635d228b161461055a5761021a565b80633276558c146103e65780633b189852146104115780633ccfd60b1461043a57806342842e0e146104515761021a565b80630e9ed68b116101ed5780630e9ed68b146102ed57806318160ddd146103185780631f2757131461034357806323b872dd146103805780632f745c59146103a95761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613d6f565b610915565b6040516102539190613db7565b60405180910390f35b34801561026857600080fd5b50610271610996565b60405161027e9190613e62565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613eba565b610a31565b6040516102bb9190613f28565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613f6f565b610a80565b005b3480156102f957600080fd5b50610302610b97565b60405161030f9190613f28565b60405180910390f35b34801561032457600080fd5b5061032d610cf6565b60405161033a9190613fbe565b60405180910390f35b34801561034f57600080fd5b5061036a6004803603810190610365919061400f565b610d0c565b604051610377919061404b565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a29190614066565b610d3c565b005b3480156103b557600080fd5b506103d060048036038101906103cb9190613f6f565b610d9c565b6040516103dd9190613fbe565b60405180910390f35b3480156103f257600080fd5b506103fb610e4a565b6040516104089190613f28565b60405180910390f35b34801561041d57600080fd5b50610438600480360381019061043391906140b9565b610fa9565b005b34801561044657600080fd5b5061044f6110a5565b005b34801561045d57600080fd5b5061047860048036038101906104739190614066565b6111c7565b005b34801561048657600080fd5b506104a1600480360381019061049c9190613eba565b6111e7565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613eba565b611243565b6040516104d79190613db7565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190613eba565b611255565b6040516105149190613fbe565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190613eba565b6112cf565b6040516105519190613db7565b60405180910390f35b610574600480360381019061056f9190613eba565b611302565b6040516105819190613fbe565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613eba565b611424565b6040516105be9190613f28565b60405180910390f35b6105e160048036038101906105dc919061421b565b6114aa565b6040516105ee9190613fbe565b60405180910390f35b34801561060357600080fd5b5061061e600480360381019061061991906140b9565b6116bd565b60405161062b9190613fbe565b60405180910390f35b34801561064057600080fd5b5061064961177d565b604051610656919061404b565b60405180910390f35b34801561066b57600080fd5b506106746117d8565b005b34801561068257600080fd5b5061069d60048036038101906106989190613eba565b6119bf565b005b3480156106ab57600080fd5b506106b4611a75565b6040516106c19190613e62565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec91906142a3565b611b10565b005b3480156106ff57600080fd5b50610708611b26565b6040516107159190613f28565b60405180910390f35b34801561072a57600080fd5b50610745600480360381019061074091906142e3565b611c85565b005b34801561075357600080fd5b5061075c611ce7565b6040516107699190613f28565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190613eba565b611d1a565b6040516107a69190613f28565b60405180910390f35b3480156107bb57600080fd5b506107c4611da9565b6040516107d19190613fbe565b60405180910390f35b6107f460048036038101906107ef91906144d0565b611dbc565b6040516108019190613fbe565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613eba565b611f78565b60405161083e9190613e62565b60405180910390f35b34801561085357600080fd5b5061085c612121565b6040516108699190613f28565b60405180910390f35b34801561087e57600080fd5b506108996004803603810190610894919061453f565b612280565b6040516108a69190613db7565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613eba565b61231d565b6040516108e391906145d4565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e91906140b9565b6123b2565b005b6000610920826124a2565b8061098f575061092e61251c565b6002016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff165b9050919050565b60606109a0612549565b60000180546109ae90614625565b80601f01602080910402602001604051908101604052809291908181526020018280546109da90614625565b8015610a275780601f106109fc57610100808354040283529160200191610a27565b820191906000526020600020905b815481529060010190602001808311610a0a57829003601f168201915b5050505050905090565b6000610a3c82612576565b610a44612549565b600401600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a8b82611424565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af2906146c8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b1a6125c1565b73ffffffffffffffffffffffffffffffffffffffff161480610b495750610b4881610b436125c1565b612280565b5b610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f9061475a565b60405180910390fd5b610b9283836125c9565b505050565b6000610ba161268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16610be861268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663da19ddfb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a919061478f565b610c8261268b565b60000160149054906101000a900460ff166040518363ffffffff1660e01b8152600401610cb0929190614833565b602060405180830381865afa158015610ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf19190614871565b905090565b6000610d0061269a565b60020180549050905090565b600081604051602001610d1f9190614916565b604051602081830303815290604052805190602001209050919050565b610d4d610d476125c1565b826126c7565b610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d83906149ae565b60405180910390fd5b610d9783838361275c565b505050565b6000610da7836116bd565b8210610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90614a40565b60405180910390fd5b610df061269a565b60000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000610e5461268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16610e9b61268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639072f8386040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d919061478f565b610f3561268b565b60000160149054906101000a900460ff166040518363ffffffff1660e01b8152600401610f63929190614833565b602060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614871565b905090565b610fb1612a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611015576040517f5cd8319200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061101e61268b565b60020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f65d3e06a561c77a07da59b8b2ca10214ae08fe21cc2953a90db0ac8b5b7c437160405160405180910390a250565b6110ad612a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611111576040517f5cd8319200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff168260405161113c90614a91565b60006040518083038185875af1925050503d8060008114611179576040519150601f19603f3d011682016040523d82523d6000602084013e61117e565b606091505b505090508061118c57600080fd5b7fb6b476da71cea8275cac6b1720c04966afaff5e637472cedb6cbd32c43a23251826040516111bb9190613fbe565b60405180910390a15050565b6111e283838360405180602001604052806000815250611c85565b505050565b6111f86111f26125c1565b826126c7565b611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e906149ae565b60405180910390fd5b61124081612aac565b50565b600061124e82612c15565b9050919050565b600061125f610cf6565b82106112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790614b18565b60405180910390fd5b6112a861269a565b60020182815481106112bd576112bc614b38565b5b90600052602060002001549050919050565b60006112d961268b565b600301600083815260200190815260200160002060009054906101000a900460ff169050919050565b600061130c61268b565b600101543414611351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134890614bb3565b60405180910390fd5b600061135b612121565b9050600061136761177d565b905060008273ffffffffffffffffffffffffffffffffffffffff166343a2705f61138f610b97565b846040518363ffffffff1660e01b81526004016113ad929190614bd3565b600060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113f39190614c6c565b90506000818051906020012060001c905061140e8684612c56565b6114188133612d85565b80945050505050919050565b60008061143083612edc565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890614d01565b60405180910390fd5b80915050919050565b60006114b461268b565b6001015434146114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090614bb3565b60405180910390fd5b6000611503612121565b9050600061150f61177d565b905060008273ffffffffffffffffffffffffffffffffffffffff166343a2705f611537610b97565b846040518363ffffffff1660e01b8152600401611555929190614bd3565b600060405180830381865afa158015611572573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061159b9190614c6c565b90506000818051906020012060001c90506115b68784612c56565b6115c08130612d85565b6000600167ffffffffffffffff8111156115dd576115dc6140f0565b5b60405190808252806020026020018201604052801561160b5781602001602082028036833780820191505090505b50905060018160008151811061162457611623614b38565b5b602002602001018181525050611638610e4a565b73ffffffffffffffffffffffffffffffffffffffff16638a4315788389846040518463ffffffff1660e01b815260040161167493929190614ddf565b600060405180830381600087803b15801561168e57600080fd5b505af11580156116a2573d6000803e3d6000fd5b505050506116af82612aac565b819550505050505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490614e96565b60405180910390fd5b611735612549565b60030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600161178a610cf6565b6117949190614ee5565b90506000816001436117a69190614f19565b406040516020016117b8929190614f6e565b604051602081830303815290604052805190602001209050809250505090565b60006117e2612f22565b60000160019054906101000a900460ff1615905080801561181e57506001611808612f22565b60000160009054906101000a900460ff1660ff16105b80611856575061182d30612f4f565b1580156118555750600161183f612f22565b60000160009054906101000a900460ff1660ff16145b5b611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c9061500c565b60405180910390fd5b600161189f612f22565b60000160006101000a81548160ff021916908360ff16021790555080156118e55760016118ca612f22565b60000160016101000a81548160ff0219169083151502179055505b6119596040518060400160405280601481526020017f50726f6772616d6d61626c65204b6579706169720000000000000000000000008152506040518060400160405280600381526020017f504b500000000000000000000000000000000000000000000000000000000000815250612f72565b80156119bc576000611969612f22565b60000160016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516119b39190615071565b60405180910390a15b50565b6119c7612a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a2b576040517f5cd8319200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80611a3461268b565b600101819055507f653b8b44976b2e5c016e082d134653d04dea9dbef92055038cca38c93007035581604051611a6a9190613fbe565b60405180910390a150565b6060611a7f612549565b6001018054611a8d90614625565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab990614625565b8015611b065780601f10611adb57610100808354040283529160200191611b06565b820191906000526020600020905b815481529060010190602001808311611ae957829003601f168201915b5050505050905090565b611b22611b1b6125c1565b8383612fd8565b5050565b6000611b3061268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16611b7761268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316f76bbf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c09919061478f565b611c1161268b565b60000160149054906101000a900460ff166040518363ffffffff1660e01b8152600401611c3f929190614833565b602060405180830381865afa158015611c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c809190614871565b905090565b611c96611c906125c1565b836126c7565b611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc906149ae565b60405180910390fd5b611ce18484848461314d565b50505050565b6000611cf161268b565b60020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080611d25612121565b90508073ffffffffffffffffffffffffffffffffffffffff1663bd4986a0846040518263ffffffff1660e01b8152600401611d609190613fbe565b602060405180830381865afa158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da19190614871565b915050919050565b6000611db361268b565b60010154905090565b6000611dc661268b565b600101543414611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0290614bb3565b60405180910390fd5b6000611e15612121565b90508073ffffffffffffffffffffffffffffffffffffffff16639e45c02c8486604051602001611e45919061508c565b604051602081830303815290604052611e5c610b97565b6040518463ffffffff1660e01b8152600401611e7a939291906151b6565b602060405180830381865afa158015611e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebb9190615210565b5060008173ffffffffffffffffffffffffffffffffffffffff166343a2705f611ee2610b97565b876040518363ffffffff1660e01b8152600401611f00929190614bd3565b600060405180830381865afa158015611f1d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611f469190614c6c565b90506000818051906020012060001c9050611f618787612c56565b611f6b8133612d85565b8093505050509392505050565b60606000611f84612121565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ef6fd878856040518263ffffffff1660e01b8152600401611fc19190613fbe565b600060405180830381865afa158015611fde573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120079190614c6c565b905060008273ffffffffffffffffffffffffffffffffffffffff1663bd4986a0866040518263ffffffff1660e01b81526004016120449190613fbe565b602060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120859190614871565b90506000612091611b26565b90508073ffffffffffffffffffffffffffffffffffffffff1663950462ee8785856040518463ffffffff1660e01b81526004016120d09392919061523d565b600060405180830381865afa1580156120ed573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612116919061531c565b945050505050919050565b600061212b61268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd1661217261268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632668f3056040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612204919061478f565b61220c61268b565b60000160149054906101000a900460ff166040518363ffffffff1660e01b815260040161223a929190614833565b602060405180830381865afa158015612257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227b9190614871565b905090565b600061228a612549565b60050160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606000612329612121565b90508073ffffffffffffffffffffffffffffffffffffffff1663ef6fd878846040518263ffffffff1660e01b81526004016123649190613fbe565b600060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906123aa9190614c6c565b915050919050565b6123ba612a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461241e576040517f5cd8319200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061242761268b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd5816040516124979190613f28565b60405180910390a150565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125155750612514826131a9565b5b9050919050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807f4b51d6ef1fe479415af18cd6a3d0b2dcc455d10c2f7af6eb07ca5eeed7902e2f90508091505090565b61257f81612c15565b6125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b590614d01565b60405180910390fd5b50565b600033905090565b816125d2612549565b600401600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661264583611424565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061269561328b565b905090565b6000807f96a2bdb4c3e7c57bb7048f67ec96f2d048ffb9cde1073f84d0259121e45164f390508091505090565b6000806126d383611424565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061271557506127148185612280565b5b8061275357508373ffffffffffffffffffffffffffffffffffffffff1661273b84610a31565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661277c82611424565b73ffffffffffffffffffffffffffffffffffffffff16146127d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c9906153d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283890615469565b60405180910390fd5b61284e83838360016132b8565b8273ffffffffffffffffffffffffffffffffffffffff1661286e82611424565b73ffffffffffffffffffffffffffffffffffffffff16146128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb906153d7565b60405180910390fd5b6128cc612549565b600401600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600161290d612549565b60030160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001612964612549565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816129ba612549565b600201600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a7483838360016132ca565b505050565b6000612a8361251c565b60030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612ab782611424565b9050612ac78160008460016132b8565b612ad082611424565b9050612ada612549565b600401600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001612b1b612549565b60030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550612b70612549565b600201600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c118160008460016132ca565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff16612c3783612edc565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000612c60612121565b905060008173ffffffffffffffffffffffffffffffffffffffff166343a2705f612c88610b97565b856040518363ffffffff1660e01b8152600401612ca6929190614bd3565b600060405180830381865afa158015612cc3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612cec9190614c6c565b90506000818051906020012060001c9050612d05612121565b73ffffffffffffffffffffffffffffffffffffffff16630fccbd628284612d2a610b97565b89896040518663ffffffff1660e01b8152600401612d4c959493929190615489565b600060405180830381600087803b158015612d6657600080fd5b505af1158015612d7a573d6000803e3d6000fd5b505050505050505050565b6000612d8f612121565b90508073ffffffffffffffffffffffffffffffffffffffff166301c6d035846040518263ffffffff1660e01b8152600401612dca9190613fbe565b602060405180830381865afa158015612de7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0b9190615210565b612e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e419061552f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e8c57612e8782846132d0565b612e97565b612e9682846134ff565b5b827f3b2cc0657d0387a736293d66389f78e4c8025e413c7a1ee67b7707d4418c46b8612ec28561231d565b604051612ecf91906145d4565b60405180910390a2505050565b6000612ee6612549565b600201600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000807f706f5b3610458a854faedcfccda0d32d725b0f3daa90cb330f41cc280a9715ca90508091505090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b612f7a612f22565b60000160019054906101000a900460ff16612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc1906155c1565b60405180910390fd5b612fd4828261351d565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303d9061562d565b60405180910390fd5b8061304f612549565b60050160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516131409190613db7565b60405180910390a3505050565b61315884848461275c565b613164848484846135ab565b6131a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319a906156bf565b60405180910390fd5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061327457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613284575061328382613732565b5b9050919050565b6000807fdd40e1fc471fef58a9b638822d14c35549994757e95ac83b6e1a8018ad2db4f390508091505090565b6132c48484848461379c565b50505050565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361333f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133369061572b565b60405180910390fd5b61334881612c15565b15613388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337f90615797565b60405180910390fd5b6133966000838360016132b8565b61339f81612c15565b156133df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d690615797565b60405180910390fd5b60016133e9612549565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508161343f612549565b600201600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134fb6000838360016132ca565b5050565b6135198282604051806020016040528060008152506138fa565b5050565b613525612f22565b60000160019054906101000a900460ff16613575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356c906155c1565b60405180910390fd5b8161357e612549565b600001908161358d9190615959565b5080613597612549565b60010190816135a69190615959565b505050565b60006135cc8473ffffffffffffffffffffffffffffffffffffffff16612f4f565b15613725578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135f56125c1565b8786866040518563ffffffff1660e01b81526004016136179493929190615a2b565b6020604051808303816000875af192505050801561365357506040513d601f19601f820116820180604052508101906136509190615a8c565b60015b6136d5573d8060008114613683576040519150601f19603f3d011682016040523d82523d6000602084013e613688565b606091505b5060008151036136cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c4906156bf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061372a565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6137a884848484613955565b60018111156137ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e390615b2b565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036138335761382e8161395b565b613872565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146138715761387085826139bf565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036138b4576138af81613b62565b6138f3565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146138f2576138f18482613c72565b5b5b5050505050565b61390483836132d0565b61391160008484846135ab565b613950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613947906156bf565b60405180910390fd5b505050565b50505050565b61396361269a565b6002018054905061397261269a565b60030160008381526020019081526020016000208190555061399261269a565b60020181908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016139cc846116bd565b6139d69190614f19565b905060006139e261269a565b6001016000848152602001908152602001600020549050818114613adf576000613a0a61269a565b60000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080613a6761269a565b60000160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000208190555081613ac561269a565b600101600083815260200190815260200160002081905550505b613ae761269a565b600101600084815260200190815260200160002060009055613b0761269a565b60000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001613b6e61269a565b60020180549050613b7f9190614f19565b90506000613b8b61269a565b60030160008481526020019081526020016000205490506000613bac61269a565b6002018381548110613bc157613bc0614b38565b5b9060005260206000200154905080613bd761269a565b6002018381548110613bec57613beb614b38565b5b906000526020600020018190555081613c0361269a565b600301600083815260200190815260200160002081905550613c2361269a565b600301600085815260200190815260200160002060009055613c4361269a565b600201805480613c5657613c55615b4b565b5b6001900381819060005260206000200160009055905550505050565b6000613c7d836116bd565b905081613c8861269a565b60000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555080613ce661269a565b600101600084815260200190815260200160002081905550505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613d4c81613d17565b8114613d5757600080fd5b50565b600081359050613d6981613d43565b92915050565b600060208284031215613d8557613d84613d0d565b5b6000613d9384828501613d5a565b91505092915050565b60008115159050919050565b613db181613d9c565b82525050565b6000602082019050613dcc6000830184613da8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e0c578082015181840152602081019050613df1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613e3482613dd2565b613e3e8185613ddd565b9350613e4e818560208601613dee565b613e5781613e18565b840191505092915050565b60006020820190508181036000830152613e7c8184613e29565b905092915050565b6000819050919050565b613e9781613e84565b8114613ea257600080fd5b50565b600081359050613eb481613e8e565b92915050565b600060208284031215613ed057613ecf613d0d565b5b6000613ede84828501613ea5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f1282613ee7565b9050919050565b613f2281613f07565b82525050565b6000602082019050613f3d6000830184613f19565b92915050565b613f4c81613f07565b8114613f5757600080fd5b50565b600081359050613f6981613f43565b92915050565b60008060408385031215613f8657613f85613d0d565b5b6000613f9485828601613f5a565b9250506020613fa585828601613ea5565b9150509250929050565b613fb881613e84565b82525050565b6000602082019050613fd36000830184613faf565b92915050565b6000819050919050565b613fec81613fd9565b8114613ff757600080fd5b50565b60008135905061400981613fe3565b92915050565b60006020828403121561402557614024613d0d565b5b600061403384828501613ffa565b91505092915050565b61404581613fd9565b82525050565b6000602082019050614060600083018461403c565b92915050565b60008060006060848603121561407f5761407e613d0d565b5b600061408d86828701613f5a565b935050602061409e86828701613f5a565b92505060406140af86828701613ea5565b9150509250925092565b6000602082840312156140cf576140ce613d0d565b5b60006140dd84828501613f5a565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61412882613e18565b810181811067ffffffffffffffff82111715614147576141466140f0565b5b80604052505050565b600061415a613d03565b9050614166828261411f565b919050565b600067ffffffffffffffff821115614186576141856140f0565b5b61418f82613e18565b9050602081019050919050565b82818337600083830152505050565b60006141be6141b98461416b565b614150565b9050828152602081018484840111156141da576141d96140eb565b5b6141e584828561419c565b509392505050565b600082601f830112614202576142016140e6565b5b81356142128482602086016141ab565b91505092915050565b6000806040838503121561423257614231613d0d565b5b600061424085828601613ea5565b925050602083013567ffffffffffffffff81111561426157614260613d12565b5b61426d858286016141ed565b9150509250929050565b61428081613d9c565b811461428b57600080fd5b50565b60008135905061429d81614277565b92915050565b600080604083850312156142ba576142b9613d0d565b5b60006142c885828601613f5a565b92505060206142d98582860161428e565b9150509250929050565b600080600080608085870312156142fd576142fc613d0d565b5b600061430b87828801613f5a565b945050602061431c87828801613f5a565b935050604061432d87828801613ea5565b925050606085013567ffffffffffffffff81111561434e5761434d613d12565b5b61435a878288016141ed565b91505092959194509250565b600067ffffffffffffffff821115614381576143806140f0565b5b602082029050602081019050919050565b600080fd5b600080fd5b600060ff82169050919050565b6143b28161439c565b81146143bd57600080fd5b50565b6000813590506143cf816143a9565b92915050565b6000606082840312156143eb576143ea614397565b5b6143f56060614150565b9050600061440584828501613ffa565b600083015250602061441984828501613ffa565b602083015250604061442d848285016143c0565b60408301525092915050565b600061444c61444784614366565b614150565b9050808382526020820190506060840283018581111561446f5761446e614392565b5b835b81811015614498578061448488826143d5565b845260208401935050606081019050614471565b5050509392505050565b600082601f8301126144b7576144b66140e6565b5b81356144c7848260208601614439565b91505092915050565b6000806000606084860312156144e9576144e8613d0d565b5b60006144f786828701613ea5565b935050602061450886828701613ffa565b925050604084013567ffffffffffffffff81111561452957614528613d12565b5b614535868287016144a2565b9150509250925092565b6000806040838503121561455657614555613d0d565b5b600061456485828601613f5a565b925050602061457585828601613f5a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60006145a68261457f565b6145b0818561458a565b93506145c0818560208601613dee565b6145c981613e18565b840191505092915050565b600060208201905081810360008301526145ee818461459b565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061463d57607f821691505b6020821081036146505761464f6145f6565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b2602183613ddd565b91506146bd82614656565b604082019050919050565b600060208201905081810360008301526146e1816146a5565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000614744603d83613ddd565b915061474f826146e8565b604082019050919050565b6000602082019050818103600083015261477381614737565b9050919050565b60008151905061478981613fe3565b92915050565b6000602082840312156147a5576147a4613d0d565b5b60006147b38482850161477a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106147fc576147fb6147bc565b5b50565b600081905061480d826147eb565b919050565b600061481d826147ff565b9050919050565b61482d81614812565b82525050565b6000604082019050614848600083018561403c565b6148556020830184614824565b9392505050565b60008151905061486b81613f43565b92915050565b60006020828403121561488757614886613d0d565b5b60006148958482850161485c565b91505092915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006148df601c8361489e565b91506148ea826148a9565b601c82019050919050565b6000819050919050565b61491061490b82613fd9565b6148f5565b82525050565b6000614921826148d2565b915061492d82846148ff565b60208201915081905092915050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000614998602d83613ddd565b91506149a38261493c565b604082019050919050565b600060208201905081810360008301526149c78161498b565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614a2a602b83613ddd565b9150614a35826149ce565b604082019050919050565b60006020820190508181036000830152614a5981614a1d565b9050919050565b600081905092915050565b50565b6000614a7b600083614a60565b9150614a8682614a6b565b600082019050919050565b6000614a9c82614a6e565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614b02602c83613ddd565b9150614b0d82614aa6565b604082019050919050565b60006020820190508181036000830152614b3181614af5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f596f75206d757374207061792065786163746c79206d696e7420636f73740000600082015250565b6000614b9d601e83613ddd565b9150614ba882614b67565b602082019050919050565b60006020820190508181036000830152614bcc81614b90565b9050919050565b6000604082019050614be86000830185613f19565b614bf5602083018461403c565b9392505050565b6000614c0f614c0a8461416b565b614150565b905082815260208101848484011115614c2b57614c2a6140eb565b5b614c36848285613dee565b509392505050565b600082601f830112614c5357614c526140e6565b5b8151614c63848260208601614bfc565b91505092915050565b600060208284031215614c8257614c81613d0d565b5b600082015167ffffffffffffffff811115614ca057614c9f613d12565b5b614cac84828501614c3e565b91505092915050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000614ceb601883613ddd565b9150614cf682614cb5565b602082019050919050565b60006020820190508181036000830152614d1a81614cde565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d5681613e84565b82525050565b6000614d688383614d4d565b60208301905092915050565b6000602082019050919050565b6000614d8c82614d21565b614d968185614d2c565b9350614da183614d3d565b8060005b83811015614dd2578151614db98882614d5c565b9750614dc483614d74565b925050600181019050614da5565b5085935050505092915050565b6000606082019050614df46000830186613faf565b8181036020830152614e06818561459b565b90508181036040830152614e1a8184614d81565b9050949350505050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000614e80602983613ddd565b9150614e8b82614e24565b604082019050919050565b60006020820190508181036000830152614eaf81614e73565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ef082613e84565b9150614efb83613e84565b9250828201905080821115614f1357614f12614eb6565b5b92915050565b6000614f2482613e84565b9150614f2f83613e84565b9250828203905081811115614f4757614f46614eb6565b5b92915050565b6000819050919050565b614f68614f6382613e84565b614f4d565b82525050565b6000614f7a8285614f57565b602082019150614f8a82846148ff565b6020820191508190509392505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000614ff6602e83613ddd565b915061500182614f9a565b604082019050919050565b6000602082019050818103600083015261502581614fe9565b9050919050565b6000819050919050565b6000819050919050565b600061505b6150566150518461502c565b615036565b61439c565b9050919050565b61506b81615040565b82525050565b60006020820190506150866000830184615062565b92915050565b600061509882846148ff565b60208201915081905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150dc81613fd9565b82525050565b6150eb8161439c565b82525050565b60608201600082015161510760008501826150d3565b50602082015161511a60208501826150d3565b50604082015161512d60408501826150e2565b50505050565b600061513f83836150f1565b60608301905092915050565b6000602082019050919050565b6000615163826150a7565b61516d81856150b2565b9350615178836150c3565b8060005b838110156151a95781516151908882615133565b975061519b8361514b565b92505060018101905061517c565b5085935050505092915050565b600060608201905081810360008301526151d08186615158565b905081810360208301526151e4818561459b565b90506151f36040830184613f19565b949350505050565b60008151905061520a81614277565b92915050565b60006020828403121561522657615225613d0d565b5b6000615234848285016151fb565b91505092915050565b60006060820190506152526000830186613faf565b8181036020830152615264818561459b565b90506152736040830184613f19565b949350505050565b600067ffffffffffffffff821115615296576152956140f0565b5b61529f82613e18565b9050602081019050919050565b60006152bf6152ba8461527b565b614150565b9050828152602081018484840111156152db576152da6140eb565b5b6152e6848285613dee565b509392505050565b600082601f830112615303576153026140e6565b5b81516153138482602086016152ac565b91505092915050565b60006020828403121561533257615331613d0d565b5b600082015167ffffffffffffffff8111156153505761534f613d12565b5b61535c848285016152ee565b91505092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006153c1602583613ddd565b91506153cc82615365565b604082019050919050565b600060208201905081810360008301526153f0816153b4565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615453602483613ddd565b915061545e826153f7565b604082019050919050565b6000602082019050818103600083015261548281615446565b9050919050565b600060a08201905061549e6000830188613faf565b81810360208301526154b0818761459b565b90506154bf6040830186613f19565b6154cc6060830185613faf565b6154d9608083018461403c565b9695505050505050565b7f5468697320504b5020686173206e6f74206265656e20726f7574656420796574600082015250565b6000615519602083613ddd565b9150615524826154e3565b602082019050919050565b600060208201905081810360008301526155488161550c565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006155ab602b83613ddd565b91506155b68261554f565b604082019050919050565b600060208201905081810360008301526155da8161559e565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615617601983613ddd565b9150615622826155e1565b602082019050919050565b600060208201905081810360008301526156468161560a565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006156a9603283613ddd565b91506156b48261564d565b604082019050919050565b600060208201905081810360008301526156d88161569c565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615715602083613ddd565b9150615720826156df565b602082019050919050565b6000602082019050818103600083015261574481615708565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615781601c83613ddd565b915061578c8261574b565b602082019050919050565b600060208201905081810360008301526157b081615774565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026158197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826157dc565b61582386836157dc565b95508019841693508086168417925050509392505050565b600061585661585161584c84613e84565b615036565b613e84565b9050919050565b6000819050919050565b6158708361583b565b61588461587c8261585d565b8484546157e9565b825550505050565b600090565b61589961588c565b6158a4818484615867565b505050565b5b818110156158c8576158bd600082615891565b6001810190506158aa565b5050565b601f82111561590d576158de816157b7565b6158e7846157cc565b810160208510156158f6578190505b61590a615902856157cc565b8301826158a9565b50505b505050565b600082821c905092915050565b600061593060001984600802615912565b1980831691505092915050565b6000615949838361591f565b9150826002028217905092915050565b61596282613dd2565b67ffffffffffffffff81111561597b5761597a6140f0565b5b6159858254614625565b6159908282856158cc565b600060209050601f8311600181146159c357600084156159b1578287015190505b6159bb858261593d565b865550615a23565b601f1984166159d1866157b7565b60005b828110156159f9578489015182556001820191506020850194506020810190506159d4565b86831015615a165784890151615a12601f89168261591f565b8355505b6001600288020188555050505b505050505050565b6000608082019050615a406000830187613f19565b615a4d6020830186613f19565b615a5a6040830185613faf565b8181036060830152615a6c818461459b565b905095945050505050565b600081519050615a8681613d43565b92915050565b600060208284031215615aa257615aa1613d0d565b5b6000615ab084828501615a77565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000615b15603583613ddd565b9150615b2082615ab9565b604082019050919050565b60006020820190508181036000830152615b4481615b08565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212207ac40e36dd5475846fd0a42d4caaa956ca9f201abaf36de4e2d0c5b703140cc964736f6c63430008110033", - "deployedBytecode": "0x60806040526004361061021a5760003560e01c80636352211e11610123578063b88d4fde116100ab578063c87b56dd1161006f578063c87b56dd1461080a578063d54f7d5e14610847578063e985e9c514610872578063ef6fd878146108af578063f95d71b1146108ec5761021a565b8063b88d4fde1461071e578063b94a210214610747578063bd4986a014610772578063bdb4b848146107af578063c70384b8146107da5761021a565b80638129fc1c116100f25780638129fc1c1461065f5780638545f4ea1461067657806395d89b411461069f578063a22cb465146106ca578063b3464fd6146106f35761021a565b80636352211e1461058a57806366a306d7146105c757806370a08231146105f757806372b1b859146106345761021a565b80633276558c116101a657806342966c681161017557806342966c681461047a5780634f558e79146104a35780634f6ccce7146104e057806356e3a1ae1461051d5780635d228b161461055a5761021a565b80633276558c146103e65780633b189852146104115780633ccfd60b1461043a57806342842e0e146104515761021a565b80630e9ed68b116101ed5780630e9ed68b146102ed57806318160ddd146103185780631f2757131461034357806323b872dd146103805780632f745c59146103a95761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613d6f565b610915565b6040516102539190613db7565b60405180910390f35b34801561026857600080fd5b50610271610996565b60405161027e9190613e62565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613eba565b610a31565b6040516102bb9190613f28565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613f6f565b610a80565b005b3480156102f957600080fd5b50610302610b97565b60405161030f9190613f28565b60405180910390f35b34801561032457600080fd5b5061032d610cf6565b60405161033a9190613fbe565b60405180910390f35b34801561034f57600080fd5b5061036a6004803603810190610365919061400f565b610d0c565b604051610377919061404b565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a29190614066565b610d3c565b005b3480156103b557600080fd5b506103d060048036038101906103cb9190613f6f565b610d9c565b6040516103dd9190613fbe565b60405180910390f35b3480156103f257600080fd5b506103fb610e4a565b6040516104089190613f28565b60405180910390f35b34801561041d57600080fd5b50610438600480360381019061043391906140b9565b610fa9565b005b34801561044657600080fd5b5061044f6110a5565b005b34801561045d57600080fd5b5061047860048036038101906104739190614066565b6111c7565b005b34801561048657600080fd5b506104a1600480360381019061049c9190613eba565b6111e7565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613eba565b611243565b6040516104d79190613db7565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190613eba565b611255565b6040516105149190613fbe565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190613eba565b6112cf565b6040516105519190613db7565b60405180910390f35b610574600480360381019061056f9190613eba565b611302565b6040516105819190613fbe565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613eba565b611424565b6040516105be9190613f28565b60405180910390f35b6105e160048036038101906105dc919061421b565b6114aa565b6040516105ee9190613fbe565b60405180910390f35b34801561060357600080fd5b5061061e600480360381019061061991906140b9565b6116bd565b60405161062b9190613fbe565b60405180910390f35b34801561064057600080fd5b5061064961177d565b604051610656919061404b565b60405180910390f35b34801561066b57600080fd5b506106746117d8565b005b34801561068257600080fd5b5061069d60048036038101906106989190613eba565b6119bf565b005b3480156106ab57600080fd5b506106b4611a75565b6040516106c19190613e62565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec91906142a3565b611b10565b005b3480156106ff57600080fd5b50610708611b26565b6040516107159190613f28565b60405180910390f35b34801561072a57600080fd5b50610745600480360381019061074091906142e3565b611c85565b005b34801561075357600080fd5b5061075c611ce7565b6040516107699190613f28565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190613eba565b611d1a565b6040516107a69190613f28565b60405180910390f35b3480156107bb57600080fd5b506107c4611da9565b6040516107d19190613fbe565b60405180910390f35b6107f460048036038101906107ef91906144d0565b611dbc565b6040516108019190613fbe565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613eba565b611f78565b60405161083e9190613e62565b60405180910390f35b34801561085357600080fd5b5061085c612121565b6040516108699190613f28565b60405180910390f35b34801561087e57600080fd5b506108996004803603810190610894919061453f565b612280565b6040516108a69190613db7565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613eba565b61231d565b6040516108e391906145d4565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e91906140b9565b6123b2565b005b6000610920826124a2565b8061098f575061092e61251c565b6002016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff165b9050919050565b60606109a0612549565b60000180546109ae90614625565b80601f01602080910402602001604051908101604052809291908181526020018280546109da90614625565b8015610a275780601f106109fc57610100808354040283529160200191610a27565b820191906000526020600020905b815481529060010190602001808311610a0a57829003601f168201915b5050505050905090565b6000610a3c82612576565b610a44612549565b600401600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a8b82611424565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af2906146c8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b1a6125c1565b73ffffffffffffffffffffffffffffffffffffffff161480610b495750610b4881610b436125c1565b612280565b5b610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f9061475a565b60405180910390fd5b610b9283836125c9565b505050565b6000610ba161268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16610be861268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663da19ddfb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a919061478f565b610c8261268b565b60000160149054906101000a900460ff166040518363ffffffff1660e01b8152600401610cb0929190614833565b602060405180830381865afa158015610ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf19190614871565b905090565b6000610d0061269a565b60020180549050905090565b600081604051602001610d1f9190614916565b604051602081830303815290604052805190602001209050919050565b610d4d610d476125c1565b826126c7565b610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d83906149ae565b60405180910390fd5b610d9783838361275c565b505050565b6000610da7836116bd565b8210610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90614a40565b60405180910390fd5b610df061269a565b60000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000610e5461268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16610e9b61268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639072f8386040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d919061478f565b610f3561268b565b60000160149054906101000a900460ff166040518363ffffffff1660e01b8152600401610f63929190614833565b602060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614871565b905090565b610fb1612a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611015576040517f5cd8319200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061101e61268b565b60020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f65d3e06a561c77a07da59b8b2ca10214ae08fe21cc2953a90db0ac8b5b7c437160405160405180910390a250565b6110ad612a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611111576040517f5cd8319200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff168260405161113c90614a91565b60006040518083038185875af1925050503d8060008114611179576040519150601f19603f3d011682016040523d82523d6000602084013e61117e565b606091505b505090508061118c57600080fd5b7fb6b476da71cea8275cac6b1720c04966afaff5e637472cedb6cbd32c43a23251826040516111bb9190613fbe565b60405180910390a15050565b6111e283838360405180602001604052806000815250611c85565b505050565b6111f86111f26125c1565b826126c7565b611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e906149ae565b60405180910390fd5b61124081612aac565b50565b600061124e82612c15565b9050919050565b600061125f610cf6565b82106112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790614b18565b60405180910390fd5b6112a861269a565b60020182815481106112bd576112bc614b38565b5b90600052602060002001549050919050565b60006112d961268b565b600301600083815260200190815260200160002060009054906101000a900460ff169050919050565b600061130c61268b565b600101543414611351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134890614bb3565b60405180910390fd5b600061135b612121565b9050600061136761177d565b905060008273ffffffffffffffffffffffffffffffffffffffff166343a2705f61138f610b97565b846040518363ffffffff1660e01b81526004016113ad929190614bd3565b600060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113f39190614c6c565b90506000818051906020012060001c905061140e8684612c56565b6114188133612d85565b80945050505050919050565b60008061143083612edc565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890614d01565b60405180910390fd5b80915050919050565b60006114b461268b565b6001015434146114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090614bb3565b60405180910390fd5b6000611503612121565b9050600061150f61177d565b905060008273ffffffffffffffffffffffffffffffffffffffff166343a2705f611537610b97565b846040518363ffffffff1660e01b8152600401611555929190614bd3565b600060405180830381865afa158015611572573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061159b9190614c6c565b90506000818051906020012060001c90506115b68784612c56565b6115c08130612d85565b6000600167ffffffffffffffff8111156115dd576115dc6140f0565b5b60405190808252806020026020018201604052801561160b5781602001602082028036833780820191505090505b50905060018160008151811061162457611623614b38565b5b602002602001018181525050611638610e4a565b73ffffffffffffffffffffffffffffffffffffffff16638a4315788389846040518463ffffffff1660e01b815260040161167493929190614ddf565b600060405180830381600087803b15801561168e57600080fd5b505af11580156116a2573d6000803e3d6000fd5b505050506116af82612aac565b819550505050505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490614e96565b60405180910390fd5b611735612549565b60030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600161178a610cf6565b6117949190614ee5565b90506000816001436117a69190614f19565b406040516020016117b8929190614f6e565b604051602081830303815290604052805190602001209050809250505090565b60006117e2612f22565b60000160019054906101000a900460ff1615905080801561181e57506001611808612f22565b60000160009054906101000a900460ff1660ff16105b80611856575061182d30612f4f565b1580156118555750600161183f612f22565b60000160009054906101000a900460ff1660ff16145b5b611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c9061500c565b60405180910390fd5b600161189f612f22565b60000160006101000a81548160ff021916908360ff16021790555080156118e55760016118ca612f22565b60000160016101000a81548160ff0219169083151502179055505b6119596040518060400160405280601481526020017f50726f6772616d6d61626c65204b6579706169720000000000000000000000008152506040518060400160405280600381526020017f504b500000000000000000000000000000000000000000000000000000000000815250612f72565b80156119bc576000611969612f22565b60000160016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516119b39190615071565b60405180910390a15b50565b6119c7612a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a2b576040517f5cd8319200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80611a3461268b565b600101819055507f653b8b44976b2e5c016e082d134653d04dea9dbef92055038cca38c93007035581604051611a6a9190613fbe565b60405180910390a150565b6060611a7f612549565b6001018054611a8d90614625565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab990614625565b8015611b065780601f10611adb57610100808354040283529160200191611b06565b820191906000526020600020905b815481529060010190602001808311611ae957829003601f168201915b5050505050905090565b611b22611b1b6125c1565b8383612fd8565b5050565b6000611b3061268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd16611b7761268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316f76bbf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c09919061478f565b611c1161268b565b60000160149054906101000a900460ff166040518363ffffffff1660e01b8152600401611c3f929190614833565b602060405180830381865afa158015611c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c809190614871565b905090565b611c96611c906125c1565b836126c7565b611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc906149ae565b60405180910390fd5b611ce18484848461314d565b50505050565b6000611cf161268b565b60020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080611d25612121565b90508073ffffffffffffffffffffffffffffffffffffffff1663bd4986a0846040518263ffffffff1660e01b8152600401611d609190613fbe565b602060405180830381865afa158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da19190614871565b915050919050565b6000611db361268b565b60010154905090565b6000611dc661268b565b600101543414611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0290614bb3565b60405180910390fd5b6000611e15612121565b90508073ffffffffffffffffffffffffffffffffffffffff16639e45c02c8486604051602001611e45919061508c565b604051602081830303815290604052611e5c610b97565b6040518463ffffffff1660e01b8152600401611e7a939291906151b6565b602060405180830381865afa158015611e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebb9190615210565b5060008173ffffffffffffffffffffffffffffffffffffffff166343a2705f611ee2610b97565b876040518363ffffffff1660e01b8152600401611f00929190614bd3565b600060405180830381865afa158015611f1d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611f469190614c6c565b90506000818051906020012060001c9050611f618787612c56565b611f6b8133612d85565b8093505050509392505050565b60606000611f84612121565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ef6fd878856040518263ffffffff1660e01b8152600401611fc19190613fbe565b600060405180830381865afa158015611fde573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120079190614c6c565b905060008273ffffffffffffffffffffffffffffffffffffffff1663bd4986a0866040518263ffffffff1660e01b81526004016120449190613fbe565b602060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120859190614871565b90506000612091611b26565b90508073ffffffffffffffffffffffffffffffffffffffff1663950462ee8785856040518463ffffffff1660e01b81526004016120d09392919061523d565b600060405180830381865afa1580156120ed573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612116919061531c565b945050505050919050565b600061212b61268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd1661217261268b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632668f3056040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612204919061478f565b61220c61268b565b60000160149054906101000a900460ff166040518363ffffffff1660e01b815260040161223a929190614833565b602060405180830381865afa158015612257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227b9190614871565b905090565b600061228a612549565b60050160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606000612329612121565b90508073ffffffffffffffffffffffffffffffffffffffff1663ef6fd878846040518263ffffffff1660e01b81526004016123649190613fbe565b600060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906123aa9190614c6c565b915050919050565b6123ba612a79565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461241e576040517f5cd8319200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061242761268b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd5816040516124979190613f28565b60405180910390a150565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125155750612514826131a9565b5b9050919050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807f4b51d6ef1fe479415af18cd6a3d0b2dcc455d10c2f7af6eb07ca5eeed7902e2f90508091505090565b61257f81612c15565b6125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b590614d01565b60405180910390fd5b50565b600033905090565b816125d2612549565b600401600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661264583611424565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061269561328b565b905090565b6000807f96a2bdb4c3e7c57bb7048f67ec96f2d048ffb9cde1073f84d0259121e45164f390508091505090565b6000806126d383611424565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061271557506127148185612280565b5b8061275357508373ffffffffffffffffffffffffffffffffffffffff1661273b84610a31565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661277c82611424565b73ffffffffffffffffffffffffffffffffffffffff16146127d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c9906153d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283890615469565b60405180910390fd5b61284e83838360016132b8565b8273ffffffffffffffffffffffffffffffffffffffff1661286e82611424565b73ffffffffffffffffffffffffffffffffffffffff16146128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb906153d7565b60405180910390fd5b6128cc612549565b600401600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600161290d612549565b60030160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001612964612549565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816129ba612549565b600201600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a7483838360016132ca565b505050565b6000612a8361251c565b60030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612ab782611424565b9050612ac78160008460016132b8565b612ad082611424565b9050612ada612549565b600401600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001612b1b612549565b60030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550612b70612549565b600201600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c118160008460016132ca565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff16612c3783612edc565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000612c60612121565b905060008173ffffffffffffffffffffffffffffffffffffffff166343a2705f612c88610b97565b856040518363ffffffff1660e01b8152600401612ca6929190614bd3565b600060405180830381865afa158015612cc3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612cec9190614c6c565b90506000818051906020012060001c9050612d05612121565b73ffffffffffffffffffffffffffffffffffffffff16630fccbd628284612d2a610b97565b89896040518663ffffffff1660e01b8152600401612d4c959493929190615489565b600060405180830381600087803b158015612d6657600080fd5b505af1158015612d7a573d6000803e3d6000fd5b505050505050505050565b6000612d8f612121565b90508073ffffffffffffffffffffffffffffffffffffffff166301c6d035846040518263ffffffff1660e01b8152600401612dca9190613fbe565b602060405180830381865afa158015612de7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0b9190615210565b612e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e419061552f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e8c57612e8782846132d0565b612e97565b612e9682846134ff565b5b827f3b2cc0657d0387a736293d66389f78e4c8025e413c7a1ee67b7707d4418c46b8612ec28561231d565b604051612ecf91906145d4565b60405180910390a2505050565b6000612ee6612549565b600201600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000807f706f5b3610458a854faedcfccda0d32d725b0f3daa90cb330f41cc280a9715ca90508091505090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b612f7a612f22565b60000160019054906101000a900460ff16612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc1906155c1565b60405180910390fd5b612fd4828261351d565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303d9061562d565b60405180910390fd5b8061304f612549565b60050160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516131409190613db7565b60405180910390a3505050565b61315884848461275c565b613164848484846135ab565b6131a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319a906156bf565b60405180910390fd5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061327457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613284575061328382613732565b5b9050919050565b6000807fdd40e1fc471fef58a9b638822d14c35549994757e95ac83b6e1a8018ad2db4f390508091505090565b6132c48484848461379c565b50505050565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361333f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133369061572b565b60405180910390fd5b61334881612c15565b15613388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337f90615797565b60405180910390fd5b6133966000838360016132b8565b61339f81612c15565b156133df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d690615797565b60405180910390fd5b60016133e9612549565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508161343f612549565b600201600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134fb6000838360016132ca565b5050565b6135198282604051806020016040528060008152506138fa565b5050565b613525612f22565b60000160019054906101000a900460ff16613575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356c906155c1565b60405180910390fd5b8161357e612549565b600001908161358d9190615959565b5080613597612549565b60010190816135a69190615959565b505050565b60006135cc8473ffffffffffffffffffffffffffffffffffffffff16612f4f565b15613725578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135f56125c1565b8786866040518563ffffffff1660e01b81526004016136179493929190615a2b565b6020604051808303816000875af192505050801561365357506040513d601f19601f820116820180604052508101906136509190615a8c565b60015b6136d5573d8060008114613683576040519150601f19603f3d011682016040523d82523d6000602084013e613688565b606091505b5060008151036136cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c4906156bf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061372a565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6137a884848484613955565b60018111156137ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e390615b2b565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036138335761382e8161395b565b613872565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146138715761387085826139bf565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036138b4576138af81613b62565b6138f3565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146138f2576138f18482613c72565b5b5b5050505050565b61390483836132d0565b61391160008484846135ab565b613950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613947906156bf565b60405180910390fd5b505050565b50505050565b61396361269a565b6002018054905061397261269a565b60030160008381526020019081526020016000208190555061399261269a565b60020181908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016139cc846116bd565b6139d69190614f19565b905060006139e261269a565b6001016000848152602001908152602001600020549050818114613adf576000613a0a61269a565b60000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080613a6761269a565b60000160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000208190555081613ac561269a565b600101600083815260200190815260200160002081905550505b613ae761269a565b600101600084815260200190815260200160002060009055613b0761269a565b60000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001613b6e61269a565b60020180549050613b7f9190614f19565b90506000613b8b61269a565b60030160008481526020019081526020016000205490506000613bac61269a565b6002018381548110613bc157613bc0614b38565b5b9060005260206000200154905080613bd761269a565b6002018381548110613bec57613beb614b38565b5b906000526020600020018190555081613c0361269a565b600301600083815260200190815260200160002081905550613c2361269a565b600301600085815260200190815260200160002060009055613c4361269a565b600201805480613c5657613c55615b4b565b5b6001900381819060005260206000200160009055905550505050565b6000613c7d836116bd565b905081613c8861269a565b60000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555080613ce661269a565b600101600084815260200190815260200160002081905550505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613d4c81613d17565b8114613d5757600080fd5b50565b600081359050613d6981613d43565b92915050565b600060208284031215613d8557613d84613d0d565b5b6000613d9384828501613d5a565b91505092915050565b60008115159050919050565b613db181613d9c565b82525050565b6000602082019050613dcc6000830184613da8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e0c578082015181840152602081019050613df1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613e3482613dd2565b613e3e8185613ddd565b9350613e4e818560208601613dee565b613e5781613e18565b840191505092915050565b60006020820190508181036000830152613e7c8184613e29565b905092915050565b6000819050919050565b613e9781613e84565b8114613ea257600080fd5b50565b600081359050613eb481613e8e565b92915050565b600060208284031215613ed057613ecf613d0d565b5b6000613ede84828501613ea5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f1282613ee7565b9050919050565b613f2281613f07565b82525050565b6000602082019050613f3d6000830184613f19565b92915050565b613f4c81613f07565b8114613f5757600080fd5b50565b600081359050613f6981613f43565b92915050565b60008060408385031215613f8657613f85613d0d565b5b6000613f9485828601613f5a565b9250506020613fa585828601613ea5565b9150509250929050565b613fb881613e84565b82525050565b6000602082019050613fd36000830184613faf565b92915050565b6000819050919050565b613fec81613fd9565b8114613ff757600080fd5b50565b60008135905061400981613fe3565b92915050565b60006020828403121561402557614024613d0d565b5b600061403384828501613ffa565b91505092915050565b61404581613fd9565b82525050565b6000602082019050614060600083018461403c565b92915050565b60008060006060848603121561407f5761407e613d0d565b5b600061408d86828701613f5a565b935050602061409e86828701613f5a565b92505060406140af86828701613ea5565b9150509250925092565b6000602082840312156140cf576140ce613d0d565b5b60006140dd84828501613f5a565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61412882613e18565b810181811067ffffffffffffffff82111715614147576141466140f0565b5b80604052505050565b600061415a613d03565b9050614166828261411f565b919050565b600067ffffffffffffffff821115614186576141856140f0565b5b61418f82613e18565b9050602081019050919050565b82818337600083830152505050565b60006141be6141b98461416b565b614150565b9050828152602081018484840111156141da576141d96140eb565b5b6141e584828561419c565b509392505050565b600082601f830112614202576142016140e6565b5b81356142128482602086016141ab565b91505092915050565b6000806040838503121561423257614231613d0d565b5b600061424085828601613ea5565b925050602083013567ffffffffffffffff81111561426157614260613d12565b5b61426d858286016141ed565b9150509250929050565b61428081613d9c565b811461428b57600080fd5b50565b60008135905061429d81614277565b92915050565b600080604083850312156142ba576142b9613d0d565b5b60006142c885828601613f5a565b92505060206142d98582860161428e565b9150509250929050565b600080600080608085870312156142fd576142fc613d0d565b5b600061430b87828801613f5a565b945050602061431c87828801613f5a565b935050604061432d87828801613ea5565b925050606085013567ffffffffffffffff81111561434e5761434d613d12565b5b61435a878288016141ed565b91505092959194509250565b600067ffffffffffffffff821115614381576143806140f0565b5b602082029050602081019050919050565b600080fd5b600080fd5b600060ff82169050919050565b6143b28161439c565b81146143bd57600080fd5b50565b6000813590506143cf816143a9565b92915050565b6000606082840312156143eb576143ea614397565b5b6143f56060614150565b9050600061440584828501613ffa565b600083015250602061441984828501613ffa565b602083015250604061442d848285016143c0565b60408301525092915050565b600061444c61444784614366565b614150565b9050808382526020820190506060840283018581111561446f5761446e614392565b5b835b81811015614498578061448488826143d5565b845260208401935050606081019050614471565b5050509392505050565b600082601f8301126144b7576144b66140e6565b5b81356144c7848260208601614439565b91505092915050565b6000806000606084860312156144e9576144e8613d0d565b5b60006144f786828701613ea5565b935050602061450886828701613ffa565b925050604084013567ffffffffffffffff81111561452957614528613d12565b5b614535868287016144a2565b9150509250925092565b6000806040838503121561455657614555613d0d565b5b600061456485828601613f5a565b925050602061457585828601613f5a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60006145a68261457f565b6145b0818561458a565b93506145c0818560208601613dee565b6145c981613e18565b840191505092915050565b600060208201905081810360008301526145ee818461459b565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061463d57607f821691505b6020821081036146505761464f6145f6565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b2602183613ddd565b91506146bd82614656565b604082019050919050565b600060208201905081810360008301526146e1816146a5565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000614744603d83613ddd565b915061474f826146e8565b604082019050919050565b6000602082019050818103600083015261477381614737565b9050919050565b60008151905061478981613fe3565b92915050565b6000602082840312156147a5576147a4613d0d565b5b60006147b38482850161477a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106147fc576147fb6147bc565b5b50565b600081905061480d826147eb565b919050565b600061481d826147ff565b9050919050565b61482d81614812565b82525050565b6000604082019050614848600083018561403c565b6148556020830184614824565b9392505050565b60008151905061486b81613f43565b92915050565b60006020828403121561488757614886613d0d565b5b60006148958482850161485c565b91505092915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006148df601c8361489e565b91506148ea826148a9565b601c82019050919050565b6000819050919050565b61491061490b82613fd9565b6148f5565b82525050565b6000614921826148d2565b915061492d82846148ff565b60208201915081905092915050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000614998602d83613ddd565b91506149a38261493c565b604082019050919050565b600060208201905081810360008301526149c78161498b565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614a2a602b83613ddd565b9150614a35826149ce565b604082019050919050565b60006020820190508181036000830152614a5981614a1d565b9050919050565b600081905092915050565b50565b6000614a7b600083614a60565b9150614a8682614a6b565b600082019050919050565b6000614a9c82614a6e565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614b02602c83613ddd565b9150614b0d82614aa6565b604082019050919050565b60006020820190508181036000830152614b3181614af5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f596f75206d757374207061792065786163746c79206d696e7420636f73740000600082015250565b6000614b9d601e83613ddd565b9150614ba882614b67565b602082019050919050565b60006020820190508181036000830152614bcc81614b90565b9050919050565b6000604082019050614be86000830185613f19565b614bf5602083018461403c565b9392505050565b6000614c0f614c0a8461416b565b614150565b905082815260208101848484011115614c2b57614c2a6140eb565b5b614c36848285613dee565b509392505050565b600082601f830112614c5357614c526140e6565b5b8151614c63848260208601614bfc565b91505092915050565b600060208284031215614c8257614c81613d0d565b5b600082015167ffffffffffffffff811115614ca057614c9f613d12565b5b614cac84828501614c3e565b91505092915050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000614ceb601883613ddd565b9150614cf682614cb5565b602082019050919050565b60006020820190508181036000830152614d1a81614cde565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d5681613e84565b82525050565b6000614d688383614d4d565b60208301905092915050565b6000602082019050919050565b6000614d8c82614d21565b614d968185614d2c565b9350614da183614d3d565b8060005b83811015614dd2578151614db98882614d5c565b9750614dc483614d74565b925050600181019050614da5565b5085935050505092915050565b6000606082019050614df46000830186613faf565b8181036020830152614e06818561459b565b90508181036040830152614e1a8184614d81565b9050949350505050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000614e80602983613ddd565b9150614e8b82614e24565b604082019050919050565b60006020820190508181036000830152614eaf81614e73565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ef082613e84565b9150614efb83613e84565b9250828201905080821115614f1357614f12614eb6565b5b92915050565b6000614f2482613e84565b9150614f2f83613e84565b9250828203905081811115614f4757614f46614eb6565b5b92915050565b6000819050919050565b614f68614f6382613e84565b614f4d565b82525050565b6000614f7a8285614f57565b602082019150614f8a82846148ff565b6020820191508190509392505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000614ff6602e83613ddd565b915061500182614f9a565b604082019050919050565b6000602082019050818103600083015261502581614fe9565b9050919050565b6000819050919050565b6000819050919050565b600061505b6150566150518461502c565b615036565b61439c565b9050919050565b61506b81615040565b82525050565b60006020820190506150866000830184615062565b92915050565b600061509882846148ff565b60208201915081905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150dc81613fd9565b82525050565b6150eb8161439c565b82525050565b60608201600082015161510760008501826150d3565b50602082015161511a60208501826150d3565b50604082015161512d60408501826150e2565b50505050565b600061513f83836150f1565b60608301905092915050565b6000602082019050919050565b6000615163826150a7565b61516d81856150b2565b9350615178836150c3565b8060005b838110156151a95781516151908882615133565b975061519b8361514b565b92505060018101905061517c565b5085935050505092915050565b600060608201905081810360008301526151d08186615158565b905081810360208301526151e4818561459b565b90506151f36040830184613f19565b949350505050565b60008151905061520a81614277565b92915050565b60006020828403121561522657615225613d0d565b5b6000615234848285016151fb565b91505092915050565b60006060820190506152526000830186613faf565b8181036020830152615264818561459b565b90506152736040830184613f19565b949350505050565b600067ffffffffffffffff821115615296576152956140f0565b5b61529f82613e18565b9050602081019050919050565b60006152bf6152ba8461527b565b614150565b9050828152602081018484840111156152db576152da6140eb565b5b6152e6848285613dee565b509392505050565b600082601f830112615303576153026140e6565b5b81516153138482602086016152ac565b91505092915050565b60006020828403121561533257615331613d0d565b5b600082015167ffffffffffffffff8111156153505761534f613d12565b5b61535c848285016152ee565b91505092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006153c1602583613ddd565b91506153cc82615365565b604082019050919050565b600060208201905081810360008301526153f0816153b4565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615453602483613ddd565b915061545e826153f7565b604082019050919050565b6000602082019050818103600083015261548281615446565b9050919050565b600060a08201905061549e6000830188613faf565b81810360208301526154b0818761459b565b90506154bf6040830186613f19565b6154cc6060830185613faf565b6154d9608083018461403c565b9695505050505050565b7f5468697320504b5020686173206e6f74206265656e20726f7574656420796574600082015250565b6000615519602083613ddd565b9150615524826154e3565b602082019050919050565b600060208201905081810360008301526155488161550c565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006155ab602b83613ddd565b91506155b68261554f565b604082019050919050565b600060208201905081810360008301526155da8161559e565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615617601983613ddd565b9150615622826155e1565b602082019050919050565b600060208201905081810360008301526156468161560a565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006156a9603283613ddd565b91506156b48261564d565b604082019050919050565b600060208201905081810360008301526156d88161569c565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615715602083613ddd565b9150615720826156df565b602082019050919050565b6000602082019050818103600083015261574481615708565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615781601c83613ddd565b915061578c8261574b565b602082019050919050565b600060208201905081810360008301526157b081615774565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026158197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826157dc565b61582386836157dc565b95508019841693508086168417925050509392505050565b600061585661585161584c84613e84565b615036565b613e84565b9050919050565b6000819050919050565b6158708361583b565b61588461587c8261585d565b8484546157e9565b825550505050565b600090565b61589961588c565b6158a4818484615867565b505050565b5b818110156158c8576158bd600082615891565b6001810190506158aa565b5050565b601f82111561590d576158de816157b7565b6158e7846157cc565b810160208510156158f6578190505b61590a615902856157cc565b8301826158a9565b50505b505050565b600082821c905092915050565b600061593060001984600802615912565b1980831691505092915050565b6000615949838361591f565b9150826002028217905092915050565b61596282613dd2565b67ffffffffffffffff81111561597b5761597a6140f0565b5b6159858254614625565b6159908282856158cc565b600060209050601f8311600181146159c357600084156159b1578287015190505b6159bb858261593d565b865550615a23565b601f1984166159d1866157b7565b60005b828110156159f9578489015182556001820191506020850194506020810190506159d4565b86831015615a165784890151615a12601f89168261591f565b8355505b6001600288020188555050505b505050505050565b6000608082019050615a406000830187613f19565b615a4d6020830186613f19565b615a5a6040830185613faf565b8181036060830152615a6c818461459b565b905095945050505050565b600081519050615a8681613d43565b92915050565b600060208284031215615aa257615aa1613d0d565b5b6000615ab084828501615a77565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000615b15603583613ddd565b9150615b2082615ab9565b604082019050919050565b60006020820190508181036000830152615b4481615b08565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212207ac40e36dd5475846fd0a42d4caaa956ca9f201abaf36de4e2d0c5b703140cc964736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "address": "0x1A3C8198015ee3a5804106fe097f648BE6e461b9" -} \ No newline at end of file diff --git a/contracts/datil-dev/PKPPermissions.json b/contracts/datil-dev/PKPPermissions.json deleted file mode 100644 index ab7e1fd..0000000 --- a/contracts/datil-dev/PKPPermissions.json +++ /dev/null @@ -1,240 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PKPPermissions", - "sourceName": "contracts/lit-node/PKPPermissions.sol", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamond.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamond.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initCalldata", - "type": "bytes" - }, - { - "internalType": "address", - "name": "contractResolver", - "type": "address" - }, - { - "internalType": "enum ContractResolver.Env", - "name": "env", - "type": "uint8" - } - ], - "internalType": "struct PKPPermissionsArgs", - "name": "_args", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "CannotAddFunctionToDiamondThatAlreadyExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - } - ], - "name": "CannotAddSelectorsToZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "CannotRemoveFunctionThatDoesNotExist", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "CannotRemoveImmutableFunction", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "CannotReplaceFunctionThatDoesNotExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "_selectors", - "type": "bytes4[]" - } - ], - "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_selector", - "type": "bytes4" - } - ], - "name": "CannotReplaceImmutableFunction", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "FunctionNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_action", - "type": "uint8" - } - ], - "name": "IncorrectFacetCutAction", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_initializationContractAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "InitializationFunctionReverted", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_contractAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "_message", - "type": "string" - } - ], - "name": "NoBytecodeAtAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facetAddress", - "type": "address" - } - ], - "name": "NoSelectorsProvidedForFacetForCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facetAddress", - "type": "address" - } - ], - "name": "RemoveFacetAddressMustBeZeroAddress", - "type": "error" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - } - ], - "bytecode": "0x60806040526040516200381d3803806200381d833981810160405281019062000029919062001761565b6200004381600001516200010d60201b620001931760201c565b620000638282602001518360400151620001ec60201b6200026a1760201c565b80606001516200007d6200045860201b620004871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060800151620000d86200045860201b620004871760201c565b60000160146101000a81548160ff021916908360028111156200010057620000ff620017e6565b5b0217905550505062001eb8565b60006200011f6200048560201b60201c565b905060008160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60005b83518110156200040357600084828151811062000211576200021062001815565b5b6020026020010151604001519050600085838151811062000237576200023662001815565b5b602002602001015160000151905060008251036200028e57806040517fe767f91f00000000000000000000000000000000000000000000000000000000815260040162000285919062001855565b60405180910390fd5b6000868481518110620002a657620002a562001815565b5b602002602001015160200151905060006002811115620002cb57620002ca620017e6565b5b816002811115620002e157620002e0620017e6565b5b03620002ff57620002f98284620004b260201b60201c565b620003ea565b60016002811115620003165762000315620017e6565b5b8160028111156200032c576200032b620017e6565b5b036200034a57620003448284620007fa60201b60201c565b620003e9565b60028081111562000360576200035f620017e6565b5b816002811115620003765762000375620017e6565b5b0362000394576200038e828462000b6460201b60201c565b620003e8565b806002811115620003aa57620003a9620017e6565b5b6040517f7fe9a41e000000000000000000000000000000000000000000000000000000008152600401620003df919062001890565b60405180910390fd5b5b5b5050508080620003fa90620018e6565b915050620001ef565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051620004399392919062001be6565b60405180910390a16200045382826200100f60201b60201c565b505050565b6000807f66761b57e8ae88aa3322e5b3b3066d05c674943f9480a680ed19fd8c7b26c4b590508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200052657806040517f0ae3681c0000000000000000000000000000000000000000000000000000000081526004016200051d919062001cac565b60405180910390fd5b6000620005386200048560201b60201c565b90506000816001018054905090506200057184604051806060016040528060248152602001620037a9602491396200114360201b60201c565b60005b8351811015620007f357600084828151811062000596576200059562001815565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146200068f57816040517febbf5d0700000000000000000000000000000000000000000000000000000000815260040162000686919062001ce1565b60405180910390fd5b60405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018561ffff16815250856000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548161ffff021916908361ffff160217905550905050846001018290806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c02179055508380620007d89062001d0c565b94505050508080620007ea90620018e6565b91505062000574565b5050505050565b60006200080c6200048560201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200088257816040517fcd98a96f00000000000000000000000000000000000000000000000000000000815260040162000879919062001cac565b60405180910390fd5b620008ad83604051806060016040528060288152602001620037f5602891396200114360201b60201c565b60005b825181101562000b5e576000838281518110620008d257620008d162001815565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620009ca57816040517f520300da000000000000000000000000000000000000000000000000000000008152600401620009c1919062001ce1565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a3d57816040517f358d9d1a00000000000000000000000000000000000000000000000000000000815260040162000a34919062001ce1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000ab157816040517f7479f93900000000000000000000000000000000000000000000000000000000815260040162000aa8919062001ce1565b60405180910390fd5b85846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050808062000b5590620018e6565b915050620008b0565b50505050565b600062000b766200048560201b60201c565b9050600081600101805490509050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161462000bf857836040517fd091bc8100000000000000000000000000000000000000000000000000000000815260040162000bef919062001855565b60405180910390fd5b60005b83518110156200100857600084828151811062000c1d5762000c1c62001815565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900461ffff1661ffff1661ffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff160362000d7757816040517f7a08a22d00000000000000000000000000000000000000000000000000000000815260040162000d6e919062001ce1565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff160362000dee57816040517f6fafeb0800000000000000000000000000000000000000000000000000000000815260040162000de5919062001ce1565b60405180910390fd5b838062000dfb9062001d3b565b94505083816020015161ffff161462000f1757600085600101858154811062000e295762000e2862001815565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b90508086600101836020015161ffff168154811062000e705762000e6f62001815565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c02179055508160200151866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a81548161ffff021916908361ffff160217905550505b8460010180548062000f2e5762000f2d62001d69565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549061ffff021916905550505050808062000fff90620018e6565b91505062000bfb565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603156200113f576200107082604051806060016040528060288152602001620037cd602891396200114360201b60201c565b6000808373ffffffffffffffffffffffffffffffffffffffff16836040516200109a919062001dda565b600060405180830381855af49150503d8060008114620010d7576040519150601f19603f3d011682016040523d82523d6000602084013e620010dc565b606091505b5091509150816200113c57600081511115620010fb5780518082602001fd5b83836040517f192105d70000000000000000000000000000000000000000000000000000000081526004016200113392919062001df3565b60405180910390fd5b50505b5050565b6000823b905060008103620011935782826040517f919834b90000000000000000000000000000000000000000000000000000000081526004016200118a92919062001e84565b60405180910390fd5b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620011fc82620011b1565b810181811067ffffffffffffffff821117156200121e576200121d620011c2565b5b80604052505050565b60006200123362001198565b9050620012418282620011f1565b919050565b600067ffffffffffffffff821115620012645762001263620011c2565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012b18262001284565b9050919050565b620012c381620012a4565b8114620012cf57600080fd5b50565b600081519050620012e381620012b8565b92915050565b60038110620012f757600080fd5b50565b6000815190506200130b81620012e9565b92915050565b600067ffffffffffffffff8211156200132f576200132e620011c2565b5b602082029050602081019050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620013778162001340565b81146200138357600080fd5b50565b60008151905062001397816200136c565b92915050565b6000620013b4620013ae8462001311565b62001227565b90508083825260208201905060208402830185811115620013da57620013d962001275565b5b835b81811015620014075780620013f2888262001386565b845260208401935050602081019050620013dc565b5050509392505050565b600082601f830112620014295762001428620011ac565b5b81516200143b8482602086016200139d565b91505092915050565b6000606082840312156200145d576200145c6200127a565b5b62001469606062001227565b905060006200147b84828501620012d2565b60008301525060206200149184828501620012fa565b602083015250604082015167ffffffffffffffff811115620014b857620014b76200127f565b5b620014c68482850162001411565b60408301525092915050565b6000620014e9620014e38462001246565b62001227565b905080838252602082019050602084028301858111156200150f576200150e62001275565b5b835b818110156200155d57805167ffffffffffffffff811115620015385762001537620011ac565b5b80860162001547898262001444565b8552602085019450505060208101905062001511565b5050509392505050565b600082601f8301126200157f576200157e620011ac565b5b815162001591848260208601620014d2565b91505092915050565b600080fd5b600067ffffffffffffffff821115620015bd57620015bc620011c2565b5b620015c882620011b1565b9050602081019050919050565b60005b83811015620015f5578082015181840152602081019050620015d8565b60008484015250505050565b60006200161862001612846200159f565b62001227565b9050828152602081018484840111156200163757620016366200159a565b5b62001644848285620015d5565b509392505050565b600082601f830112620016645762001663620011ac565b5b81516200167684826020860162001601565b91505092915050565b600381106200168d57600080fd5b50565b600081519050620016a1816200167f565b92915050565b600060a08284031215620016c057620016bf6200127a565b5b620016cc60a062001227565b90506000620016de84828501620012d2565b6000830152506020620016f484828501620012d2565b602083015250604082015167ffffffffffffffff8111156200171b576200171a6200127f565b5b62001729848285016200164c565b60408301525060606200173f84828501620012d2565b6060830152506080620017558482850162001690565b60808301525092915050565b600080604083850312156200177b576200177a620011a2565b5b600083015167ffffffffffffffff8111156200179c576200179b620011a7565b5b620017aa8582860162001567565b925050602083015167ffffffffffffffff811115620017ce57620017cd620011a7565b5b620017dc85828601620016a7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6200184f81620012a4565b82525050565b60006020820190506200186c600083018462001844565b92915050565b600060ff82169050919050565b6200188a8162001872565b82525050565b6000602082019050620018a760008301846200187f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000620018f382620018dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620019285762001927620018ad565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6200196a81620012a4565b82525050565b60038110620019845762001983620017e6565b5b50565b6000819050620019978262001970565b919050565b6000620019a98262001987565b9050919050565b620019bb816200199c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b620019f88162001340565b82525050565b600062001a0c8383620019ed565b60208301905092915050565b6000602082019050919050565b600062001a3282620019c1565b62001a3e8185620019cc565b935062001a4b83620019dd565b8060005b8381101562001a8257815162001a668882620019fe565b975062001a738362001a18565b92505060018101905062001a4f565b5085935050505092915050565b600060608301600083015162001aa960008601826200195f565b50602083015162001abe6020860182620019b0565b506040830151848203604086015262001ad8828262001a25565b9150508091505092915050565b600062001af3838362001a8f565b905092915050565b6000602082019050919050565b600062001b158262001933565b62001b2181856200193e565b93508360208202850162001b35856200194f565b8060005b8581101562001b77578484038952815162001b55858262001ae5565b945062001b628362001afb565b925060208a0199505060018101905062001b39565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b600062001bb28262001b89565b62001bbe818562001b94565b935062001bd0818560208601620015d5565b62001bdb81620011b1565b840191505092915050565b6000606082019050818103600083015262001c02818662001b08565b905062001c13602083018562001844565b818103604083015262001c27818462001ba5565b9050949350505050565b600082825260208201905092915050565b600062001c4f82620019c1565b62001c5b818562001c31565b935062001c6883620019dd565b8060005b8381101562001c9f57815162001c838882620019fe565b975062001c908362001a18565b92505060018101905062001c6c565b5085935050505092915050565b6000602082019050818103600083015262001cc8818462001c42565b905092915050565b62001cdb8162001340565b82525050565b600060208201905062001cf8600083018462001cd0565b92915050565b600061ffff82169050919050565b600062001d198262001cfe565b915061ffff820362001d305762001d2f620018ad565b5b600182019050919050565b600062001d4882620018dc565b91506000820362001d5e5762001d5d620018ad565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b600062001db08262001b89565b62001dbc818562001d98565b935062001dce818560208601620015d5565b80840191505092915050565b600062001de8828462001da3565b915081905092915050565b600060408201905062001e0a600083018562001844565b818103602083015262001e1e818462001ba5565b90509392505050565b600081519050919050565b600082825260208201905092915050565b600062001e508262001e27565b62001e5c818562001e32565b935062001e6e818560208601620015d5565b62001e7981620011b1565b840191505092915050565b600060408201905062001e9b600083018562001844565b818103602083015262001eaf818462001e43565b90509392505050565b6118e18062001ec86000396000f3fe608060405234801561001057600080fd5b506000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050809150600082600001600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361016d576000357fffffffff00000000000000000000000000000000000000000000000000000000166040517f5416eb980000000000000000000000000000000000000000000000000000000081526004016101649190611185565b60405180910390fd5b3660008037600080366000845af43d6000803e806000811461018e573d6000f35b3d6000fd5b600061019d6104b4565b905060008160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60005b835181101561043c57600084828151811061028b5761028a6111a0565b5b602002602001015160400151905060008583815181106102ae576102ad6111a0565b5b6020026020010151600001519050600082510361030257806040517fe767f91f0000000000000000000000000000000000000000000000000000000081526004016102f99190611210565b60405180910390fd5b6000868481518110610317576103166111a0565b5b6020026020010151602001519050600060028111156103395761033861122b565b5b81600281111561034c5761034b61122b565b5b036103605761035b82846104e1565b610426565b600160028111156103745761037361122b565b5b8160028111156103875761038661122b565b5b0361039b576103968284610809565b610425565b6002808111156103ae576103ad61122b565b5b8160028111156103c1576103c061122b565b5b036103d5576103d08284610b4f565b610424565b8060028111156103e8576103e761122b565b5b6040517f7fe9a41e00000000000000000000000000000000000000000000000000000000815260040161041b9190611276565b60405180910390fd5b5b5b5050508080610434906112ca565b91505061026d565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051610470939291906115c9565b60405180910390a16104828282610fd6565b505050565b6000807f66761b57e8ae88aa3322e5b3b3066d05c674943f9480a680ed19fd8c7b26c4b590508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361055257806040517f0ae3681c000000000000000000000000000000000000000000000000000000008152600401610549919061167d565b60405180910390fd5b600061055c6104b4565b905060008160010180549050905061058c84604051806060016040528060248152602001611838602491396110f8565b60005b83518110156108025760008482815181106105ad576105ac6111a0565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106a357816040517febbf5d0700000000000000000000000000000000000000000000000000000000815260040161069a9190611185565b60405180910390fd5b60405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018561ffff16815250856000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548161ffff021916908361ffff160217905550905050846001018290806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555083806107ea906116ad565b945050505080806107fa906112ca565b91505061058f565b5050505050565b60006108136104b4565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361088657816040517fcd98a96f00000000000000000000000000000000000000000000000000000000815260040161087d919061167d565b60405180910390fd5b6108a883604051806060016040528060288152602001611884602891396110f8565b60005b8251811015610b495760008382815181106108c9576108c86111a0565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109be57816040517f520300da0000000000000000000000000000000000000000000000000000000081526004016109b59190611185565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a2e57816040517f358d9d1a000000000000000000000000000000000000000000000000000000008152600401610a259190611185565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a9f57816040517f7479f939000000000000000000000000000000000000000000000000000000008152600401610a969190611185565b60405180910390fd5b85846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050508080610b41906112ca565b9150506108ab565b50505050565b6000610b596104b4565b9050600081600101805490509050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610bd857836040517fd091bc81000000000000000000000000000000000000000000000000000000008152600401610bcf9190611210565b60405180910390fd5b60005b8351811015610fcf576000848281518110610bf957610bf86111a0565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900461ffff1661ffff1661ffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610d5057816040517f7a08a22d000000000000000000000000000000000000000000000000000000008152600401610d479190611185565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610dc457816040517f6fafeb08000000000000000000000000000000000000000000000000000000008152600401610dbb9190611185565b60405180910390fd5b8380610dcf906116d7565b94505083816020015161ffff1614610ee4576000856001018581548110610df957610df86111a0565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b90508086600101836020015161ffff1681548110610e3d57610e3c6111a0565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c02179055508160200151866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a81548161ffff021916908361ffff160217905550505b84600101805480610ef857610ef7611700565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549061ffff0219169055505050508080610fc7906112ca565b915050610bdb565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603156110f45761102d8260405180606001604052806028815260200161185c602891396110f8565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051611055919061176b565b600060405180830381855af49150503d8060008114611090576040519150601f19603f3d011682016040523d82523d6000602084013e611095565b606091505b5091509150816110f1576000815111156110b25780518082602001fd5b83836040517f192105d70000000000000000000000000000000000000000000000000000000081526004016110e8929190611782565b60405180910390fd5b50505b5050565b6000823b9050600081036111455782826040517f919834b900000000000000000000000000000000000000000000000000000000815260040161113c929190611807565b60405180910390fd5b505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61117f8161114a565b82525050565b600060208201905061119a6000830184611176565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111fa826111cf565b9050919050565b61120a816111ef565b82525050565b60006020820190506112256000830184611201565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060ff82169050919050565b6112708161125a565b82525050565b600060208201905061128b6000830184611267565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006112d5826112c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361130757611306611291565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611347816111ef565b82525050565b6003811061135e5761135d61122b565b5b50565b600081905061136f8261134d565b919050565b600061137f82611361565b9050919050565b61138f81611374565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6113ca8161114a565b82525050565b60006113dc83836113c1565b60208301905092915050565b6000602082019050919050565b600061140082611395565b61140a81856113a0565b9350611415836113b1565b8060005b8381101561144657815161142d88826113d0565b9750611438836113e8565b925050600181019050611419565b5085935050505092915050565b600060608301600083015161146b600086018261133e565b50602083015161147e6020860182611386565b506040830151848203604086015261149682826113f5565b9150508091505092915050565b60006114af8383611453565b905092915050565b6000602082019050919050565b60006114cf82611312565b6114d9818561131d565b9350836020820285016114eb8561132e565b8060005b85811015611527578484038952815161150885826114a3565b9450611513836114b7565b925060208a019950506001810190506114ef565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611573578082015181840152602081019050611558565b60008484015250505050565b6000601f19601f8301169050919050565b600061159b82611539565b6115a58185611544565b93506115b5818560208601611555565b6115be8161157f565b840191505092915050565b600060608201905081810360008301526115e381866114c4565b90506115f26020830185611201565b81810360408301526116048184611590565b9050949350505050565b600082825260208201905092915050565b600061162a82611395565b611634818561160e565b935061163f836113b1565b8060005b8381101561167057815161165788826113d0565b9750611662836113e8565b925050600181019050611643565b5085935050505092915050565b60006020820190508181036000830152611697818461161f565b905092915050565b600061ffff82169050919050565b60006116b88261169f565b915061ffff82036116cc576116cb611291565b5b600182019050919050565b60006116e2826112c0565b9150600082036116f5576116f4611291565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b600061174582611539565b61174f818561172f565b935061175f818560208601611555565b80840191505092915050565b6000611777828461173a565b915081905092915050565b60006040820190506117976000830185611201565b81810360208301526117a98184611590565b90509392505050565b600081519050919050565b600082825260208201905092915050565b60006117d9826117b2565b6117e381856117bd565b93506117f3818560208601611555565b6117fc8161157f565b840191505092915050565b600060408201905061181c6000830185611201565b818103602083015261182e81846117ce565b9050939250505056fe4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f6465a2646970667358221220f0220f6e5e6fd2052e2a7f8667599890850cd5fd1f5f000ad88414c0cb84d0f264736f6c634300081100334c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f6465", - "deployedBytecode": "0x608060405234801561001057600080fd5b506000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050809150600082600001600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361016d576000357fffffffff00000000000000000000000000000000000000000000000000000000166040517f5416eb980000000000000000000000000000000000000000000000000000000081526004016101649190611185565b60405180910390fd5b3660008037600080366000845af43d6000803e806000811461018e573d6000f35b3d6000fd5b600061019d6104b4565b905060008160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60005b835181101561043c57600084828151811061028b5761028a6111a0565b5b602002602001015160400151905060008583815181106102ae576102ad6111a0565b5b6020026020010151600001519050600082510361030257806040517fe767f91f0000000000000000000000000000000000000000000000000000000081526004016102f99190611210565b60405180910390fd5b6000868481518110610317576103166111a0565b5b6020026020010151602001519050600060028111156103395761033861122b565b5b81600281111561034c5761034b61122b565b5b036103605761035b82846104e1565b610426565b600160028111156103745761037361122b565b5b8160028111156103875761038661122b565b5b0361039b576103968284610809565b610425565b6002808111156103ae576103ad61122b565b5b8160028111156103c1576103c061122b565b5b036103d5576103d08284610b4f565b610424565b8060028111156103e8576103e761122b565b5b6040517f7fe9a41e00000000000000000000000000000000000000000000000000000000815260040161041b9190611276565b60405180910390fd5b5b5b5050508080610434906112ca565b91505061026d565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051610470939291906115c9565b60405180910390a16104828282610fd6565b505050565b6000807f66761b57e8ae88aa3322e5b3b3066d05c674943f9480a680ed19fd8c7b26c4b590508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361055257806040517f0ae3681c000000000000000000000000000000000000000000000000000000008152600401610549919061167d565b60405180910390fd5b600061055c6104b4565b905060008160010180549050905061058c84604051806060016040528060248152602001611838602491396110f8565b60005b83518110156108025760008482815181106105ad576105ac6111a0565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106a357816040517febbf5d0700000000000000000000000000000000000000000000000000000000815260040161069a9190611185565b60405180910390fd5b60405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018561ffff16815250856000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548161ffff021916908361ffff160217905550905050846001018290806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555083806107ea906116ad565b945050505080806107fa906112ca565b91505061058f565b5050505050565b60006108136104b4565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361088657816040517fcd98a96f00000000000000000000000000000000000000000000000000000000815260040161087d919061167d565b60405180910390fd5b6108a883604051806060016040528060288152602001611884602891396110f8565b60005b8251811015610b495760008382815181106108c9576108c86111a0565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109be57816040517f520300da0000000000000000000000000000000000000000000000000000000081526004016109b59190611185565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a2e57816040517f358d9d1a000000000000000000000000000000000000000000000000000000008152600401610a259190611185565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a9f57816040517f7479f939000000000000000000000000000000000000000000000000000000008152600401610a969190611185565b60405180910390fd5b85846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050508080610b41906112ca565b9150506108ab565b50505050565b6000610b596104b4565b9050600081600101805490509050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610bd857836040517fd091bc81000000000000000000000000000000000000000000000000000000008152600401610bcf9190611210565b60405180910390fd5b60005b8351811015610fcf576000848281518110610bf957610bf86111a0565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900461ffff1661ffff1661ffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610d5057816040517f7a08a22d000000000000000000000000000000000000000000000000000000008152600401610d479190611185565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610dc457816040517f6fafeb08000000000000000000000000000000000000000000000000000000008152600401610dbb9190611185565b60405180910390fd5b8380610dcf906116d7565b94505083816020015161ffff1614610ee4576000856001018581548110610df957610df86111a0565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b90508086600101836020015161ffff1681548110610e3d57610e3c6111a0565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c02179055508160200151866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a81548161ffff021916908361ffff160217905550505b84600101805480610ef857610ef7611700565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549061ffff0219169055505050508080610fc7906112ca565b915050610bdb565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603156110f45761102d8260405180606001604052806028815260200161185c602891396110f8565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051611055919061176b565b600060405180830381855af49150503d8060008114611090576040519150601f19603f3d011682016040523d82523d6000602084013e611095565b606091505b5091509150816110f1576000815111156110b25780518082602001fd5b83836040517f192105d70000000000000000000000000000000000000000000000000000000081526004016110e8929190611782565b60405180910390fd5b50505b5050565b6000823b9050600081036111455782826040517f919834b900000000000000000000000000000000000000000000000000000000815260040161113c929190611807565b60405180910390fd5b505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61117f8161114a565b82525050565b600060208201905061119a6000830184611176565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111fa826111cf565b9050919050565b61120a816111ef565b82525050565b60006020820190506112256000830184611201565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060ff82169050919050565b6112708161125a565b82525050565b600060208201905061128b6000830184611267565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006112d5826112c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361130757611306611291565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611347816111ef565b82525050565b6003811061135e5761135d61122b565b5b50565b600081905061136f8261134d565b919050565b600061137f82611361565b9050919050565b61138f81611374565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6113ca8161114a565b82525050565b60006113dc83836113c1565b60208301905092915050565b6000602082019050919050565b600061140082611395565b61140a81856113a0565b9350611415836113b1565b8060005b8381101561144657815161142d88826113d0565b9750611438836113e8565b925050600181019050611419565b5085935050505092915050565b600060608301600083015161146b600086018261133e565b50602083015161147e6020860182611386565b506040830151848203604086015261149682826113f5565b9150508091505092915050565b60006114af8383611453565b905092915050565b6000602082019050919050565b60006114cf82611312565b6114d9818561131d565b9350836020820285016114eb8561132e565b8060005b85811015611527578484038952815161150885826114a3565b9450611513836114b7565b925060208a019950506001810190506114ef565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611573578082015181840152602081019050611558565b60008484015250505050565b6000601f19601f8301169050919050565b600061159b82611539565b6115a58185611544565b93506115b5818560208601611555565b6115be8161157f565b840191505092915050565b600060608201905081810360008301526115e381866114c4565b90506115f26020830185611201565b81810360408301526116048184611590565b9050949350505050565b600082825260208201905092915050565b600061162a82611395565b611634818561160e565b935061163f836113b1565b8060005b8381101561167057815161165788826113d0565b9750611662836113e8565b925050600181019050611643565b5085935050505092915050565b60006020820190508181036000830152611697818461161f565b905092915050565b600061ffff82169050919050565b60006116b88261169f565b915061ffff82036116cc576116cb611291565b5b600182019050919050565b60006116e2826112c0565b9150600082036116f5576116f4611291565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b600061174582611539565b61174f818561172f565b935061175f818560208601611555565b80840191505092915050565b6000611777828461173a565b915081905092915050565b60006040820190506117976000830185611201565b81810360208301526117a98184611590565b90509392505050565b600081519050919050565b600082825260208201905092915050565b60006117d9826117b2565b6117e381856117bd565b93506117f3818560208601611555565b6117fc8161157f565b840191505092915050565b600060408201905061181c6000830185611201565b818103602083015261182e81846117ce565b9050939250505056fe4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f6465a2646970667358221220f0220f6e5e6fd2052e2a7f8667599890850cd5fd1f5f000ad88414c0cb84d0f264736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "address": "0xB5755Be401c1c66667B8b7Ed6b566b430873A7d1" -} \ No newline at end of file diff --git a/contracts/datil-dev/PKPPermissionsFacet.json b/contracts/datil-dev/PKPPermissionsFacet.json deleted file mode 100644 index 947b3b8..0000000 --- a/contracts/datil-dev/PKPPermissionsFacet.json +++ /dev/null @@ -1,881 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PKPPermissionsFacet", - "sourceName": "contracts/lit-node/PKPPermissions/PKPPermissionsFacet.sol", - "abi": [ - { - "inputs": [], - "name": "CallerNotOwner", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "ContractResolverAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "userPubkey", - "type": "bytes" - } - ], - "name": "PermittedAuthMethodAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "PermittedAuthMethodRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "PermittedAuthMethodScopeAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "PermittedAuthMethodScopeRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "group", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "RootHashUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "scopes", - "type": "uint256[]" - } - ], - "name": "addPermittedAction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "user", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "scopes", - "type": "uint256[]" - } - ], - "name": "addPermittedAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "userPubkey", - "type": "bytes" - } - ], - "internalType": "struct LibPKPPermissionsStorage.AuthMethod", - "name": "authMethod", - "type": "tuple" - }, - { - "internalType": "uint256[]", - "name": "scopes", - "type": "uint256[]" - } - ], - "name": "addPermittedAuthMethod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "addPermittedAuthMethodScope", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypesToAdd", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIdsToAdd", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeysToAdd", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopesToAdd", - "type": "uint256[][]" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypesToRemove", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIdsToRemove", - "type": "bytes[]" - } - ], - "name": "batchAddRemoveAuthMethods", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "getAuthMethodId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getEthAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPermittedActions", - "outputs": [ - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPermittedAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "maxScopeId", - "type": "uint256" - } - ], - "name": "getPermittedAuthMethodScopes", - "outputs": [ - { - "internalType": "bool[]", - "name": "", - "type": "bool[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPermittedAuthMethods", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "userPubkey", - "type": "bytes" - } - ], - "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPkpNftAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPubkey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRouterAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "getTokenIdsForAuthMethod", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "getUserPubkeyForAuthMethod", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - } - ], - "name": "isPermittedAction", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "isPermittedAddress", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "isPermittedAuthMethod", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "isPermittedAuthMethodScopePresent", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - } - ], - "name": "removePermittedAction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "removePermittedAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "removePermittedAuthMethod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "removePermittedAuthMethodScope", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "group", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "setRootHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "group", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "verifyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "group", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "bool[]", - "name": "proofFlags", - "type": "bool[]" - }, - { - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "verifyStates", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b506156e680620000216000396000f3fe608060405234801561001057600080fd5b50600436106101c15760003560e01c80639dd4349b116100f9578063caead0c711610097578063ef6fd87811610071578063ef6fd8781461055a578063f34f21ba1461058a578063f95d71b1146105ba578063fceb3983146105d6576101c1565b8063caead0c714610502578063d41a327214610520578063d54f7d5e1461053c576101c1565b8063abc541ae116100d3578063abc541ae14610456578063b997606f14610486578063bb7a1070146104a2578063bd4986a0146104d2576101c1565b80639dd4349b146103da578063a1afdc6f146103f6578063a1c805fa14610426576101c1565b806366fc65411161016657806378c49efa1161014057806378c49efa1461035657806382559561146103865780638a431578146103a257806395e01294146103be576101c1565b806366fc6541146103025780636705c6f21461031e5780636821c8e21461033a576101c1565b80631663c121116101a25780631663c1211461025657806345b72bde146102725780635521c452146102a2578063557b5eba146102d2576101c1565b80618b4f146101c6578062221c08146101f65780630a60950d14610226575b600080fd5b6101e060048036038101906101db9190613736565b610606565b6040516101ed9190613791565b60405180910390f35b610210600480360381019061020b9190613811565b610794565b60405161021d9190613957565b60405180910390f35b610240600480360381019061023b9190613aba565b6108cc565b60405161024d9190613b25565b60405180910390f35b610270600480360381019061026b9190613b96565b610902565b005b61028c60048036038101906102879190613d03565b61096f565b6040516102999190613791565b60405180910390f35b6102bc60048036038101906102b79190613d86565b6109cd565b6040516102c99190613ea4565b60405180910390f35b6102ec60048036038101906102e79190613ec6565b610b0f565b6040516102f99190613791565b60405180910390f35b61031c60048036038101906103179190613ec6565b610b6e565b005b61033860048036038101906103339190613f35565b610d22565b005b610354600480360381019061034f9190613811565b610e8e565b005b610370600480360381019061036b9190614077565b611061565b60405161037d9190613791565b60405180910390f35b6103a0600480360381019061039b9190613811565b6110c1565b005b6103bc60048036038101906103b79190614146565b611294565b005b6103d860048036038101906103d391906143d5565b611327565b005b6103f460048036038101906103ef91906145c9565b6115e7565b005b610410600480360381019061040b9190613d86565b61199d565b60405161041d91906146d8565b60405180910390f35b610440600480360381019061043b9190613811565b611b5a565b60405161044d9190613791565b60405180910390f35b610470600480360381019061046b91906146fa565b611bfe565b60405161047d91906147e5565b60405180910390f35b6104a0600480360381019061049b9190613736565b612271565b005b6104bc60048036038101906104b791906146fa565b6122b2565b6040516104c99190614913565b60405180910390f35b6104ec60048036038101906104e791906146fa565b612711565b6040516104f99190614944565b60405180910390f35b61050a6127a0565b6040516105179190614944565b60405180910390f35b61053a60048036038101906105359190613d86565b6128ff565b005b610544612966565b6040516105519190614944565b60405180910390f35b610574600480360381019061056f91906146fa565b612ac5565b60405161058191906146d8565b60405180910390f35b6105a4600480360381019061059f91906146fa565b612b5a565b6040516105b19190614a78565b60405180910390f35b6105d460048036038101906105cf9190614a9a565b612dab565b005b6105f060048036038101906105eb9190613d86565b612e9b565b6040516105fd9190613791565b60405180910390f35b6000806106116127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16634f558e79866040518263ffffffff1660e01b815260040161064e9190613b25565b602060405180830381865afa15801561066b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068f9190614adc565b156107455760008273ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004016106cf9190613b25565b602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190614b1e565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149150505b610782856001600d81111561075d5761075c614b4b565b5b8660405160200161076e9190614bc2565b604051602081830303815290604052610b0f565b8061078a5750805b9250505092915050565b606060006107e68686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506108cc565b905060006107f2612f08565b60020160008981526020019081526020016000206000838152602001908152602001600020905060008467ffffffffffffffff8111156108355761083461398f565b5b6040519080825280602002602001820160405280156108635781602001602082028036833780820191505090505b50905060005b858110156108bc576108848184612f1790919063ffffffff16565b82828151811061089757610896614bdd565b5b60200260200101901515908115158152505080806108b490614c3b565b915050610869565b5080935050505095945050505050565b600082826040516020016108e1929190614c83565b6040516020818303038152906040528051906020012060001c905092915050565b6109698460405180606001604052806001600d81111561092557610924614b4b565b5b81526020018660405160200161093b9190614bc2565b60405160208183030381529060405281526020016040518060200160405280600081525081525084846115e7565b50505050565b60008061097a612f08565b600501600087815260200190815260200160002060008681526020019081526020016000205490506000801b81036109b65760009150506109c5565b6109c1848285612f53565b9150505b949350505050565b60606000610a1f8585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506108cc565b90506000610a47610a2e612f08565b6004016000848152602001908152602001600020612f6a565b905060008167ffffffffffffffff811115610a6557610a6461398f565b5b604051908082528060200260200182016040528015610a935781602001602082028036833780820191505090505b50905060005b82811015610b0157610acf81610aad612f08565b6004016000878152602001908152602001600020612f7f90919063ffffffff16565b828281518110610ae257610ae1614bdd565b5b6020026020010181815250508080610af990614c3b565b915050610a99565b508093505050509392505050565b600080610b1c84846108cc565b90506000610b4e82610b2c612f08565b6001016000898152602001908152602001600020612f9990919063ffffffff16565b905080610b6057600092505050610b67565b6001925050505b9392505050565b826000610b796127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610bb69190613b25565b602060405180830381865afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190614b1e565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90614d10565b60405180910390fd5b6000610c7386866108cc565b90506000610c7f612f08565b60010160008981526020019081526020016000209050610ca88282612fb390919063ffffffff16565b506000610cb3612f08565b60040160008481526020019081526020016000209050610cdc8982612fb390919063ffffffff16565b50887f9830658acd6a41f1cb12b425ed83cb2b8ccbfa753337cd13be80be51fc3f33738489604051610d0f929190614c83565b60405180910390a2505050505050505050565b826000610d2d6127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610d6a9190613b25565b602060405180830381865afa158015610d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dab9190614b1e565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290614d10565b60405180910390fd5b83610e24612f08565b600501600088815260200190815260200160002060008781526020019081526020016000208190555084867fd4beb656267200ccd79d73dbdfbad162c213e10ebad16508f22cb4df8d3259ad86604051610e7e9190614d3f565b60405180910390a3505050505050565b846000610e996127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610ed69190613b25565b602060405180830381865afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f179190614b1e565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90614d10565b60405180910390fd5b6000610fd78888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506108cc565b905061101885610fe5612f08565b60020160008c81526020019081526020016000206000848152602001908152602001600020612fcd90919063ffffffff16565b887f29eb060f266aff306ec81b612728a417406dd6298f8f7576a37b4e6830dcc60e8289898960405161104e9493929190614d87565b60405180910390a2505050505050505050565b60008061106c612f08565b600501600088815260200190815260200160002060008781526020019081526020016000205490506000801b81036110a85760009150506110b8565b6110b48585838661300b565b9150505b95945050505050565b8460006110cc6127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016111099190613b25565b602060405180830381865afa158015611126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114a9190614b1e565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190614d10565b60405180910390fd5b600061120a8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506108cc565b905061124b85611218612f08565b60020160008c8152602001908152602001600020600084815260200190815260200160002061302490919063ffffffff16565b887f49bb3a0761ed218e1db1e9c41096ed35188868994cc37a32e1f25855745b424e898989896040516112819493929190614d87565b60405180910390a2505050505050505050565b6113208560405180606001604052806002600d8111156112b7576112b6614b4b565b5b815260200187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020016040518060200160405280600081525081525084846115e7565b5050505050565b8760006113326127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161136f9190613b25565b602060405180830381865afa15801561138c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b09190614b1e565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790614d10565b60405180910390fd5b88518a51148015611432575087518951145b80156114415750868690508851145b611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790614e5f565b60405180910390fd5b83518551146114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90614ef1565b60405180910390fd5b60005b8a5181101561157a576115678c60405180606001604052808e85815181106114f2576114f1614bdd565b5b602002602001015181526020018d858151811061151257611511614bdd565b5b602002602001015181526020018c858151811061153257611531614bdd565b5b60200260200101518152508a8a858181106115505761154f614bdd565b5b90506020028101906115629190614f20565b6115e7565b808061157290614c3b565b9150506114c7565b5060005b85518110156115d9576115c68c87838151811061159e5761159d614bdd565b5b60200260200101518784815181106115b9576115b8614bdd565b5b6020026020010151610b6e565b80806115d190614c3b565b91505061157e565b505050505050505050505050565b8360006115f26127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161162f9190613b25565b602060405180830381865afa15801561164c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116709190614b1e565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d790614d10565b60405180910390fd5b60006116f4876000015188602001516108cc565b90506003600d81111561170a57611709614b4b565b5b8760000151036117cb57600061171e612f08565b6003016000838152602001908152602001600020600201805461174090614fb2565b9050148061178b575086604001518051906020012061175d612f08565b60030160008381526020019081526020016000206002016040516117819190615086565b6040518091039020145b6117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190615135565b60405180910390fd5b5b866117d4612f08565b600301600083815260200190815260200160002060008201518160000155602082015181600101908161180791906152ec565b50604082015181600201908161181d91906152ec565b50905050600061182b612f08565b60010160008a81526020019081526020016000209050611854828261306390919063ffffffff16565b50600061185f612f08565b600401600084815260200190815260200160002090506118888a8261306390919063ffffffff16565b5060005b888890508110156119485760008989838181106118ac576118ab614bdd565b5b9050602002013590506118f4816118c1612f08565b60020160008f81526020019081526020016000206000888152602001908152602001600020612fcd90919063ffffffff16565b8b7f29eb060f266aff306ec81b612728a417406dd6298f8f7576a37b4e6830dcc60e868d602001518460405161192c939291906153be565b60405180910390a250808061194090614c3b565b91505061188c565b50897fd7db314a62650aaa1b15d4bb5c95c558a03cde3ee7f36e144b73126a3a8e839a8a600001518b602001518c60400151604051611989939291906153fc565b60405180910390a250505050505050505050565b606060006119ef8585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506108cc565b905060006119fb612f08565b600301600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054611a3490614fb2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6090614fb2565b8015611aad5780601f10611a8257610100808354040283529160200191611aad565b820191906000526020600020905b815481529060010190602001808311611a9057829003601f168201915b50505050508152602001600282018054611ac690614fb2565b80601f0160208091040260200160405190810160405280929190818152602001828054611af290614fb2565b8015611b3f5780601f10611b1457610100808354040283529160200191611b3f565b820191906000526020600020905b815481529060010190602001808311611b2257829003601f168201915b50505050508152505090508060400151925050509392505050565b600080611bab8686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506108cc565b90506000611bee84611bbb612f08565b60020160008b81526020019081526020016000206000858152602001908152602001600020612f1790919063ffffffff16565b9050809250505095945050505050565b60606000611c26611c0d612f08565b6001016000858152602001908152602001600020612f6a565b90506000805b82811015611e01576000611c6482611c42612f08565b6001016000898152602001908152602001600020612f7f90919063ffffffff16565b90506000611c70612f08565b600301600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054611ca990614fb2565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd590614fb2565b8015611d225780601f10611cf757610100808354040283529160200191611d22565b820191906000526020600020905b815481529060010190602001808311611d0557829003601f168201915b50505050508152602001600282018054611d3b90614fb2565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6790614fb2565b8015611db45780601f10611d8957610100808354040283529160200191611db4565b820191906000526020600020905b815481529060010190602001808311611d9757829003601f168201915b50505050508152505090506001600d811115611dd357611dd2614b4b565b5b816000015103611dec578380611de890614c3b565b9450505b50508080611df990614c3b565b915050611c2c565b506000611e0c6127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16634f558e79876040518263ffffffff1660e01b8152600401611e499190613b25565b602060405180830381865afa158015611e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8a9190614adc565b9050606060008215611fce57600185611ea39190615441565b67ffffffffffffffff811115611ebc57611ebb61398f565b5b604051908082528060200260200182016040528015611eea5781602001602082028036833780820191505090505b50915060008473ffffffffffffffffffffffffffffffffffffffff16636352211e8a6040518263ffffffff1660e01b8152600401611f289190613b25565b602060405180830381865afa158015611f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f699190614b1e565b90508083600081518110611f8057611f7f614bdd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508180611fc590614c3b565b9250505061201a565b8467ffffffffffffffff811115611fe857611fe761398f565b5b6040519080825280602002602001820160405280156120165781602001602082028036833780820191505090505b5091505b60005b8681101561226257600061205582612033612f08565b60010160008d8152602001908152602001600020612f7f90919063ffffffff16565b90506000612061612f08565b60030160008381526020019081526020016000206040518060600160405290816000820154815260200160018201805461209a90614fb2565b80601f01602080910402602001604051908101604052809291908181526020018280546120c690614fb2565b80156121135780601f106120e857610100808354040283529160200191612113565b820191906000526020600020905b8154815290600101906020018083116120f657829003601f168201915b5050505050815260200160028201805461212c90614fb2565b80601f016020809104026020016040519081016040528092919081815260200182805461215890614fb2565b80156121a55780601f1061217a576101008083540402835291602001916121a5565b820191906000526020600020905b81548152906001019060200180831161218857829003601f168201915b50505050508152505090506001600d8111156121c4576121c3614b4b565b5b81600001510361224d57600080826020015190506c0100000000000000000000000060208201510491508187878151811061220257612201614bdd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050858061224790614c3b565b96505050505b5050808061225a90614c3b565b91505061201d565b50819650505050505050919050565b6122ae826001600d81111561228957612288614b4b565b5b8360405160200161229a9190614bc2565b604051602081830303815290604052610b6e565b5050565b606060006122da6122c1612f08565b6001016000858152602001908152602001600020612f6a565b90506000805b828110156124b5576000612318826122f6612f08565b6001016000898152602001908152602001600020612f7f90919063ffffffff16565b90506000612324612f08565b60030160008381526020019081526020016000206040518060600160405290816000820154815260200160018201805461235d90614fb2565b80601f016020809104026020016040519081016040528092919081815260200182805461238990614fb2565b80156123d65780601f106123ab576101008083540402835291602001916123d6565b820191906000526020600020905b8154815290600101906020018083116123b957829003601f168201915b505050505081526020016002820180546123ef90614fb2565b80601f016020809104026020016040519081016040528092919081815260200182805461241b90614fb2565b80156124685780601f1061243d57610100808354040283529160200191612468565b820191906000526020600020905b81548152906001019060200180831161244b57829003601f168201915b50505050508152505090506002600d81111561248757612486614b4b565b5b8160000151036124a057838061249c90614c3b565b9450505b505080806124ad90614c3b565b9150506122e0565b5060008167ffffffffffffffff8111156124d2576124d161398f565b5b60405190808252806020026020018201604052801561250557816020015b60608152602001906001900390816124f05790505b5090506000805b8481101561270457600061254482612522612f08565b60010160008b8152602001908152602001600020612f7f90919063ffffffff16565b90506000612550612f08565b60030160008381526020019081526020016000206040518060600160405290816000820154815260200160018201805461258990614fb2565b80601f01602080910402602001604051908101604052809291908181526020018280546125b590614fb2565b80156126025780601f106125d757610100808354040283529160200191612602565b820191906000526020600020905b8154815290600101906020018083116125e557829003601f168201915b5050505050815260200160028201805461261b90614fb2565b80601f016020809104026020016040519081016040528092919081815260200182805461264790614fb2565b80156126945780601f1061266957610100808354040283529160200191612694565b820191906000526020600020905b81548152906001019060200180831161267757829003601f168201915b50505050508152505090506002600d8111156126b3576126b2614b4b565b5b8160000151036126ef5780602001518585815181106126d5576126d4614bdd565b5b602002602001018190525083806126eb90614c3b565b9450505b505080806126fc90614c3b565b91505061250c565b5081945050505050919050565b60008061271c612966565b90508073ffffffffffffffffffffffffffffffffffffffff1663bd4986a0846040518263ffffffff1660e01b81526004016127579190613b25565b602060405180830381865afa158015612774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127989190614b1e565b915050919050565b60006127aa612f08565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd166127f1612f08565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c0b8bf76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561285f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612883919061548a565b61288b612f08565b60000160149054906101000a900460ff166040518363ffffffff1660e01b81526004016128b99291906154ff565b602060405180830381865afa1580156128d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128fa9190614b1e565b905090565b612961836002600d81111561291757612916614b4b565b5b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610b6e565b505050565b6000612970612f08565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd166129b7612f08565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632668f3056040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a49919061548a565b612a51612f08565b60000160149054906101000a900460ff166040518363ffffffff1660e01b8152600401612a7f9291906154ff565b602060405180830381865afa158015612a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac09190614b1e565b905090565b60606000612ad1612966565b90508073ffffffffffffffffffffffffffffffffffffffff1663ef6fd878846040518263ffffffff1660e01b8152600401612b0c9190613b25565b600060405180830381865afa158015612b29573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612b529190615598565b915050919050565b60606000612b82612b69612f08565b6001016000858152602001908152602001600020612f6a565b905060008167ffffffffffffffff811115612ba057612b9f61398f565b5b604051908082528060200260200182016040528015612bd957816020015b612bc661366d565b815260200190600190039081612bbe5790505b50905060005b82811015612da0576000612c1782612bf5612f08565b6001016000898152602001908152602001600020612f7f90919063ffffffff16565b9050612c21612f08565b600301600082815260200190815260200160002060405180606001604052908160008201548152602001600182018054612c5a90614fb2565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8690614fb2565b8015612cd35780601f10612ca857610100808354040283529160200191612cd3565b820191906000526020600020905b815481529060010190602001808311612cb657829003601f168201915b50505050508152602001600282018054612cec90614fb2565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1890614fb2565b8015612d655780601f10612d3a57610100808354040283529160200191612d65565b820191906000526020600020905b815481529060010190602001808311612d4857829003601f168201915b505050505081525050838381518110612d8157612d80614bdd565b5b6020026020010181905250508080612d9890614c3b565b915050612bdf565b508092505050919050565b612db361307d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e17576040517f5cd8319200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80612e20612f08565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd581604051612e909190614944565b60405180910390a150565b6000612eff846002600d811115612eb557612eb4614b4b565b5b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610b0f565b90509392505050565b6000612f126130b0565b905090565b600080600883901c9050600060ff84166001901b9050600081866000016000858152602001908152602001600020541614159250505092915050565b600082612f6085846130dd565b1490509392505050565b6000612f7882600001613133565b9050919050565b6000612f8e8360000183613144565b60001c905092915050565b6000612fab836000018360001b61316f565b905092915050565b6000612fc5836000018360001b613192565b905092915050565b6000600882901c9050600060ff83166001901b9050808460000160008481526020019081526020016000206000828254179250508190555050505050565b6000826130198686856132a6565b149050949350505050565b6000600882901c9050600060ff83166001901b905080198460000160008481526020019081526020016000206000828254169250508190555050505050565b6000613075836000018360001b61358e565b905092915050565b60006130876135fe565b60030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000807f66761b57e8ae88aa3322e5b3b3066d05c674943f9480a680ed19fd8c7b26c4b590508091505090565b60008082905060005b8451811015613128576131138286838151811061310657613105614bdd565b5b602002602001015161362b565b9150808061312090614c3b565b9150506130e6565b508091505092915050565b600081600001805490509050919050565b600082600001828154811061315c5761315b614bdd565b5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000808360010160008481526020019081526020016000205490506000811461329a5760006001826131c491906155e1565b90506000600186600001805490506131dc91906155e1565b905081811461324b5760008660000182815481106131fd576131fc614bdd565b5b906000526020600020015490508087600001848154811061322157613220614bdd565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061325f5761325e615615565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506132a0565b60009150505b92915050565b6000808251905060008551905060008551905080600183856132c89190615441565b6132d291906155e1565b14613312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330990615690565b60405180910390fd5b60008167ffffffffffffffff81111561332e5761332d61398f565b5b60405190808252806020026020018201604052801561335c5781602001602082028036833780820191505090505b5090506000806000805b858110156134b65760008885106133a35785848061338390614c3b565b95508151811061339657613395614bdd565b5b60200260200101516133cb565b8a85806133af90614c3b565b9650815181106133c2576133c1614bdd565b5b60200260200101515b905060008c83815181106133e2576133e1614bdd565b5b602002602001015161341a578d84806133fa90614c3b565b95508151811061340d5761340c614bdd565b5b6020026020010151613476565b89861061344d5786858061342d90614c3b565b9650815181106134405761343f614bdd565b5b6020026020010151613475565b8b868061345990614c3b565b97508151811061346c5761346b614bdd565b5b60200260200101515b5b9050613482828261362b565b87848151811061349557613494614bdd565b5b602002602001018181525050505080806134ae90614c3b565b915050613366565b50600085111561352e57858114613502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f990615690565b60405180910390fd5b83600186038151811061351857613517614bdd565b5b6020026020010151975050505050505050613587565b6000871115613561578860008151811061354b5761354a614bdd565b5b6020026020010151975050505050505050613587565b8a60008151811061357557613574614bdd565b5b60200260200101519750505050505050505b9392505050565b600061359a838361316f565b6135f35782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506135f8565b600090505b92915050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b60008183106136435761363e8284613656565b61364e565b61364d8383613656565b5b905092915050565b600082600052816020526040600020905092915050565b60405180606001604052806000815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6136b5816136a2565b81146136c057600080fd5b50565b6000813590506136d2816136ac565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613703826136d8565b9050919050565b613713816136f8565b811461371e57600080fd5b50565b6000813590506137308161370a565b92915050565b6000806040838503121561374d5761374c613698565b5b600061375b858286016136c3565b925050602061376c85828601613721565b9150509250929050565b60008115159050919050565b61378b81613776565b82525050565b60006020820190506137a66000830184613782565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126137d1576137d06137ac565b5b8235905067ffffffffffffffff8111156137ee576137ed6137b1565b5b60208301915083600182028301111561380a576138096137b6565b5b9250929050565b60008060008060006080868803121561382d5761382c613698565b5b600061383b888289016136c3565b955050602061384c888289016136c3565b945050604086013567ffffffffffffffff81111561386d5761386c61369d565b5b613879888289016137bb565b9350935050606061388c888289016136c3565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138ce81613776565b82525050565b60006138e083836138c5565b60208301905092915050565b6000602082019050919050565b600061390482613899565b61390e81856138a4565b9350613919836138b5565b8060005b8381101561394a57815161393188826138d4565b975061393c836138ec565b92505060018101905061391d565b5085935050505092915050565b6000602082019050818103600083015261397181846138f9565b905092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139c78261397e565b810181811067ffffffffffffffff821117156139e6576139e561398f565b5b80604052505050565b60006139f961368e565b9050613a0582826139be565b919050565b600067ffffffffffffffff821115613a2557613a2461398f565b5b613a2e8261397e565b9050602081019050919050565b82818337600083830152505050565b6000613a5d613a5884613a0a565b6139ef565b905082815260208101848484011115613a7957613a78613979565b5b613a84848285613a3b565b509392505050565b600082601f830112613aa157613aa06137ac565b5b8135613ab1848260208601613a4a565b91505092915050565b60008060408385031215613ad157613ad0613698565b5b6000613adf858286016136c3565b925050602083013567ffffffffffffffff811115613b0057613aff61369d565b5b613b0c85828601613a8c565b9150509250929050565b613b1f816136a2565b82525050565b6000602082019050613b3a6000830184613b16565b92915050565b60008083601f840112613b5657613b556137ac565b5b8235905067ffffffffffffffff811115613b7357613b726137b1565b5b602083019150836020820283011115613b8f57613b8e6137b6565b5b9250929050565b60008060008060608587031215613bb057613baf613698565b5b6000613bbe878288016136c3565b9450506020613bcf87828801613721565b935050604085013567ffffffffffffffff811115613bf057613bef61369d565b5b613bfc87828801613b40565b925092505092959194509250565b600067ffffffffffffffff821115613c2557613c2461398f565b5b602082029050602081019050919050565b6000819050919050565b613c4981613c36565b8114613c5457600080fd5b50565b600081359050613c6681613c40565b92915050565b6000613c7f613c7a84613c0a565b6139ef565b90508083825260208201905060208402830185811115613ca257613ca16137b6565b5b835b81811015613ccb5780613cb78882613c57565b845260208401935050602081019050613ca4565b5050509392505050565b600082601f830112613cea57613ce96137ac565b5b8135613cfa848260208601613c6c565b91505092915050565b60008060008060808587031215613d1d57613d1c613698565b5b6000613d2b878288016136c3565b9450506020613d3c878288016136c3565b935050604085013567ffffffffffffffff811115613d5d57613d5c61369d565b5b613d6987828801613cd5565b9250506060613d7a87828801613c57565b91505092959194509250565b600080600060408486031215613d9f57613d9e613698565b5b6000613dad868287016136c3565b935050602084013567ffffffffffffffff811115613dce57613dcd61369d565b5b613dda868287016137bb565b92509250509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e1b816136a2565b82525050565b6000613e2d8383613e12565b60208301905092915050565b6000602082019050919050565b6000613e5182613de6565b613e5b8185613df1565b9350613e6683613e02565b8060005b83811015613e97578151613e7e8882613e21565b9750613e8983613e39565b925050600181019050613e6a565b5085935050505092915050565b60006020820190508181036000830152613ebe8184613e46565b905092915050565b600080600060608486031215613edf57613ede613698565b5b6000613eed868287016136c3565b9350506020613efe868287016136c3565b925050604084013567ffffffffffffffff811115613f1f57613f1e61369d565b5b613f2b86828701613a8c565b9150509250925092565b600080600060608486031215613f4e57613f4d613698565b5b6000613f5c868287016136c3565b9350506020613f6d868287016136c3565b9250506040613f7e86828701613c57565b9150509250925092565b600067ffffffffffffffff821115613fa357613fa261398f565b5b602082029050602081019050919050565b613fbd81613776565b8114613fc857600080fd5b50565b600081359050613fda81613fb4565b92915050565b6000613ff3613fee84613f88565b6139ef565b90508083825260208201905060208402830185811115614016576140156137b6565b5b835b8181101561403f578061402b8882613fcb565b845260208401935050602081019050614018565b5050509392505050565b600082601f83011261405e5761405d6137ac565b5b813561406e848260208601613fe0565b91505092915050565b600080600080600060a0868803121561409357614092613698565b5b60006140a1888289016136c3565b95505060206140b2888289016136c3565b945050604086013567ffffffffffffffff8111156140d3576140d261369d565b5b6140df88828901613cd5565b935050606086013567ffffffffffffffff811115614100576140ff61369d565b5b61410c88828901614049565b925050608086013567ffffffffffffffff81111561412d5761412c61369d565b5b61413988828901613cd5565b9150509295509295909350565b60008060008060006060868803121561416257614161613698565b5b6000614170888289016136c3565b955050602086013567ffffffffffffffff8111156141915761419061369d565b5b61419d888289016137bb565b9450945050604086013567ffffffffffffffff8111156141c0576141bf61369d565b5b6141cc88828901613b40565b92509250509295509295909350565b600067ffffffffffffffff8211156141f6576141f561398f565b5b602082029050602081019050919050565b600061421a614215846141db565b6139ef565b9050808382526020820190506020840283018581111561423d5761423c6137b6565b5b835b81811015614266578061425288826136c3565b84526020840193505060208101905061423f565b5050509392505050565b600082601f830112614285576142846137ac565b5b8135614295848260208601614207565b91505092915050565b600067ffffffffffffffff8211156142b9576142b861398f565b5b602082029050602081019050919050565b60006142dd6142d88461429e565b6139ef565b90508083825260208201905060208402830185811115614300576142ff6137b6565b5b835b8181101561434757803567ffffffffffffffff811115614325576143246137ac565b5b8086016143328982613a8c565b85526020850194505050602081019050614302565b5050509392505050565b600082601f830112614366576143656137ac565b5b81356143768482602086016142ca565b91505092915050565b60008083601f840112614395576143946137ac565b5b8235905067ffffffffffffffff8111156143b2576143b16137b1565b5b6020830191508360208202830111156143ce576143cd6137b6565b5b9250929050565b60008060008060008060008060e0898b0312156143f5576143f4613698565b5b60006144038b828c016136c3565b985050602089013567ffffffffffffffff8111156144245761442361369d565b5b6144308b828c01614270565b975050604089013567ffffffffffffffff8111156144515761445061369d565b5b61445d8b828c01614351565b965050606089013567ffffffffffffffff81111561447e5761447d61369d565b5b61448a8b828c01614351565b955050608089013567ffffffffffffffff8111156144ab576144aa61369d565b5b6144b78b828c0161437f565b945094505060a089013567ffffffffffffffff8111156144da576144d961369d565b5b6144e68b828c01614270565b92505060c089013567ffffffffffffffff8111156145075761450661369d565b5b6145138b828c01614351565b9150509295985092959890939650565b600080fd5b600080fd5b60006060828403121561454357614542614523565b5b61454d60606139ef565b9050600061455d848285016136c3565b600083015250602082013567ffffffffffffffff81111561458157614580614528565b5b61458d84828501613a8c565b602083015250604082013567ffffffffffffffff8111156145b1576145b0614528565b5b6145bd84828501613a8c565b60408301525092915050565b600080600080606085870312156145e3576145e2613698565b5b60006145f1878288016136c3565b945050602085013567ffffffffffffffff8111156146125761461161369d565b5b61461e8782880161452d565b935050604085013567ffffffffffffffff81111561463f5761463e61369d565b5b61464b87828801613b40565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b83811015614693578082015181840152602081019050614678565b60008484015250505050565b60006146aa82614659565b6146b48185614664565b93506146c4818560208601614675565b6146cd8161397e565b840191505092915050565b600060208201905081810360008301526146f2818461469f565b905092915050565b6000602082840312156147105761470f613698565b5b600061471e848285016136c3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61475c816136f8565b82525050565b600061476e8383614753565b60208301905092915050565b6000602082019050919050565b600061479282614727565b61479c8185614732565b93506147a783614743565b8060005b838110156147d85781516147bf8882614762565b97506147ca8361477a565b9250506001810190506147ab565b5085935050505092915050565b600060208201905081810360008301526147ff8184614787565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b600061484f82614659565b6148598185614833565b9350614869818560208601614675565b6148728161397e565b840191505092915050565b60006148898383614844565b905092915050565b6000602082019050919050565b60006148a982614807565b6148b38185614812565b9350836020820285016148c585614823565b8060005b8581101561490157848403895281516148e2858261487d565b94506148ed83614891565b925060208a019950506001810190506148c9565b50829750879550505050505092915050565b6000602082019050818103600083015261492d818461489e565b905092915050565b61493e816136f8565b82525050565b60006020820190506149596000830184614935565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006060830160008301516149a36000860182613e12565b50602083015184820360208601526149bb8282614844565b915050604083015184820360408601526149d58282614844565b9150508091505092915050565b60006149ee838361498b565b905092915050565b6000602082019050919050565b6000614a0e8261495f565b614a18818561496a565b935083602082028501614a2a8561497b565b8060005b85811015614a665784840389528151614a4785826149e2565b9450614a52836149f6565b925060208a01995050600181019050614a2e565b50829750879550505050505092915050565b60006020820190508181036000830152614a928184614a03565b905092915050565b600060208284031215614ab057614aaf613698565b5b6000614abe84828501613721565b91505092915050565b600081519050614ad681613fb4565b92915050565b600060208284031215614af257614af1613698565b5b6000614b0084828501614ac7565b91505092915050565b600081519050614b188161370a565b92915050565b600060208284031215614b3457614b33613698565b5b6000614b4284828501614b09565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008160601b9050919050565b6000614b9282614b7a565b9050919050565b6000614ba482614b87565b9050919050565b614bbc614bb7826136f8565b614b99565b82525050565b6000614bce8284614bab565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c46826136a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c7857614c77614c0c565b5b600182019050919050565b6000604082019050614c986000830185613b16565b8181036020830152614caa818461469f565b90509392505050565b600082825260208201905092915050565b7f4e6f7420504b50204e4654206f776e6572000000000000000000000000000000600082015250565b6000614cfa601183614cb3565b9150614d0582614cc4565b602082019050919050565b60006020820190508181036000830152614d2981614ced565b9050919050565b614d3981613c36565b82525050565b6000602082019050614d546000830184614d30565b92915050565b6000614d668385614664565b9350614d73838584613a3b565b614d7c8361397e565b840190509392505050565b6000606082019050614d9c6000830187613b16565b8181036020830152614daf818587614d5a565b9050614dbe6040830184613b16565b95945050505050565b7f4d75737420686176652073616d65206e756d626572206f662061757468206d6560008201527f74686f64732c206964732c207075626b6579732c20616e642073636f7065732060208201527f746f206164640000000000000000000000000000000000000000000000000000604082015250565b6000614e49604683614cb3565b9150614e5482614dc7565b606082019050919050565b60006020820190508181036000830152614e7881614e3c565b9050919050565b7f4d75737420686176652073616d65206e756d626572206f662061757468206d6560008201527f74686f647320616e642069647320746f2072656d6f7665000000000000000000602082015250565b6000614edb603783614cb3565b9150614ee682614e7f565b604082019050919050565b60006020820190508181036000830152614f0a81614ece565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112614f3d57614f3c614f11565b5b80840192508235915067ffffffffffffffff821115614f5f57614f5e614f16565b5b602083019250602082023603831315614f7b57614f7a614f1b565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614fca57607f821691505b602082108103614fdd57614fdc614f83565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461501081614fb2565b61501a8186614fe3565b94506001821660008114615035576001811461504a5761507d565b60ff198316865281151582028601935061507d565b61505385614fee565b60005b8381101561507557815481890152600182019150602081019050615056565b838801955050505b50505092915050565b60006150928284615003565b915081905092915050565b7f43616e6e6f7420616464206120646966666572656e74207075626b657920666f60008201527f72207468652073616d652061757468206d6574686f64207479706520616e642060208201527f6964000000000000000000000000000000000000000000000000000000000000604082015250565b600061511f604283614cb3565b915061512a8261509d565b606082019050919050565b6000602082019050818103600083015261514e81615112565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026151a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615165565b6151ac8683615165565b95508019841693508086168417925050509392505050565b6000819050919050565b60006151e96151e46151df846136a2565b6151c4565b6136a2565b9050919050565b6000819050919050565b615203836151ce565b61521761520f826151f0565b848454615172565b825550505050565b600090565b61522c61521f565b6152378184846151fa565b505050565b5b8181101561525b57615250600082615224565b60018101905061523d565b5050565b601f8211156152a05761527181614fee565b61527a84615155565b81016020851015615289578190505b61529d61529585615155565b83018261523c565b50505b505050565b600082821c905092915050565b60006152c3600019846008026152a5565b1980831691505092915050565b60006152dc83836152b2565b9150826002028217905092915050565b6152f582614659565b67ffffffffffffffff81111561530e5761530d61398f565b5b6153188254614fb2565b61532382828561525f565b600060209050601f8311600181146153565760008415615344578287015190505b61534e85826152d0565b8655506153b6565b601f19841661536486614fee565b60005b8281101561538c57848901518255600182019150602085019450602081019050615367565b868310156153a957848901516153a5601f8916826152b2565b8355505b6001600288020188555050505b505050505050565b60006060820190506153d36000830186613b16565b81810360208301526153e5818561469f565b90506153f46040830184613b16565b949350505050565b60006060820190506154116000830186613b16565b8181036020830152615423818561469f565b90508181036040830152615437818461469f565b9050949350505050565b600061544c826136a2565b9150615457836136a2565b925082820190508082111561546f5761546e614c0c565b5b92915050565b60008151905061548481613c40565b92915050565b6000602082840312156154a05761549f613698565b5b60006154ae84828501615475565b91505092915050565b600381106154c8576154c7614b4b565b5b50565b60008190506154d9826154b7565b919050565b60006154e9826154cb565b9050919050565b6154f9816154de565b82525050565b60006040820190506155146000830185614d30565b61552160208301846154f0565b9392505050565b600061553b61553684613a0a565b6139ef565b90508281526020810184848401111561555757615556613979565b5b615562848285614675565b509392505050565b600082601f83011261557f5761557e6137ac565b5b815161558f848260208601615528565b91505092915050565b6000602082840312156155ae576155ad613698565b5b600082015167ffffffffffffffff8111156155cc576155cb61369d565b5b6155d88482850161556a565b91505092915050565b60006155ec826136a2565b91506155f7836136a2565b925082820390508181111561560f5761560e614c0c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4d65726b6c6550726f6f663a20696e76616c6964206d756c746970726f6f6600600082015250565b600061567a601f83614cb3565b915061568582615644565b602082019050919050565b600060208201905081810360008301526156a98161566d565b905091905056fea2646970667358221220520fc7fce83a2c69bf8ff26a1c5d1a41432aff5bde8feeb264c7ec270dcf1e1d64736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101c15760003560e01c80639dd4349b116100f9578063caead0c711610097578063ef6fd87811610071578063ef6fd8781461055a578063f34f21ba1461058a578063f95d71b1146105ba578063fceb3983146105d6576101c1565b8063caead0c714610502578063d41a327214610520578063d54f7d5e1461053c576101c1565b8063abc541ae116100d3578063abc541ae14610456578063b997606f14610486578063bb7a1070146104a2578063bd4986a0146104d2576101c1565b80639dd4349b146103da578063a1afdc6f146103f6578063a1c805fa14610426576101c1565b806366fc65411161016657806378c49efa1161014057806378c49efa1461035657806382559561146103865780638a431578146103a257806395e01294146103be576101c1565b806366fc6541146103025780636705c6f21461031e5780636821c8e21461033a576101c1565b80631663c121116101a25780631663c1211461025657806345b72bde146102725780635521c452146102a2578063557b5eba146102d2576101c1565b80618b4f146101c6578062221c08146101f65780630a60950d14610226575b600080fd5b6101e060048036038101906101db9190613736565b610606565b6040516101ed9190613791565b60405180910390f35b610210600480360381019061020b9190613811565b610794565b60405161021d9190613957565b60405180910390f35b610240600480360381019061023b9190613aba565b6108cc565b60405161024d9190613b25565b60405180910390f35b610270600480360381019061026b9190613b96565b610902565b005b61028c60048036038101906102879190613d03565b61096f565b6040516102999190613791565b60405180910390f35b6102bc60048036038101906102b79190613d86565b6109cd565b6040516102c99190613ea4565b60405180910390f35b6102ec60048036038101906102e79190613ec6565b610b0f565b6040516102f99190613791565b60405180910390f35b61031c60048036038101906103179190613ec6565b610b6e565b005b61033860048036038101906103339190613f35565b610d22565b005b610354600480360381019061034f9190613811565b610e8e565b005b610370600480360381019061036b9190614077565b611061565b60405161037d9190613791565b60405180910390f35b6103a0600480360381019061039b9190613811565b6110c1565b005b6103bc60048036038101906103b79190614146565b611294565b005b6103d860048036038101906103d391906143d5565b611327565b005b6103f460048036038101906103ef91906145c9565b6115e7565b005b610410600480360381019061040b9190613d86565b61199d565b60405161041d91906146d8565b60405180910390f35b610440600480360381019061043b9190613811565b611b5a565b60405161044d9190613791565b60405180910390f35b610470600480360381019061046b91906146fa565b611bfe565b60405161047d91906147e5565b60405180910390f35b6104a0600480360381019061049b9190613736565b612271565b005b6104bc60048036038101906104b791906146fa565b6122b2565b6040516104c99190614913565b60405180910390f35b6104ec60048036038101906104e791906146fa565b612711565b6040516104f99190614944565b60405180910390f35b61050a6127a0565b6040516105179190614944565b60405180910390f35b61053a60048036038101906105359190613d86565b6128ff565b005b610544612966565b6040516105519190614944565b60405180910390f35b610574600480360381019061056f91906146fa565b612ac5565b60405161058191906146d8565b60405180910390f35b6105a4600480360381019061059f91906146fa565b612b5a565b6040516105b19190614a78565b60405180910390f35b6105d460048036038101906105cf9190614a9a565b612dab565b005b6105f060048036038101906105eb9190613d86565b612e9b565b6040516105fd9190613791565b60405180910390f35b6000806106116127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16634f558e79866040518263ffffffff1660e01b815260040161064e9190613b25565b602060405180830381865afa15801561066b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068f9190614adc565b156107455760008273ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004016106cf9190613b25565b602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190614b1e565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149150505b610782856001600d81111561075d5761075c614b4b565b5b8660405160200161076e9190614bc2565b604051602081830303815290604052610b0f565b8061078a5750805b9250505092915050565b606060006107e68686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506108cc565b905060006107f2612f08565b60020160008981526020019081526020016000206000838152602001908152602001600020905060008467ffffffffffffffff8111156108355761083461398f565b5b6040519080825280602002602001820160405280156108635781602001602082028036833780820191505090505b50905060005b858110156108bc576108848184612f1790919063ffffffff16565b82828151811061089757610896614bdd565b5b60200260200101901515908115158152505080806108b490614c3b565b915050610869565b5080935050505095945050505050565b600082826040516020016108e1929190614c83565b6040516020818303038152906040528051906020012060001c905092915050565b6109698460405180606001604052806001600d81111561092557610924614b4b565b5b81526020018660405160200161093b9190614bc2565b60405160208183030381529060405281526020016040518060200160405280600081525081525084846115e7565b50505050565b60008061097a612f08565b600501600087815260200190815260200160002060008681526020019081526020016000205490506000801b81036109b65760009150506109c5565b6109c1848285612f53565b9150505b949350505050565b60606000610a1f8585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506108cc565b90506000610a47610a2e612f08565b6004016000848152602001908152602001600020612f6a565b905060008167ffffffffffffffff811115610a6557610a6461398f565b5b604051908082528060200260200182016040528015610a935781602001602082028036833780820191505090505b50905060005b82811015610b0157610acf81610aad612f08565b6004016000878152602001908152602001600020612f7f90919063ffffffff16565b828281518110610ae257610ae1614bdd565b5b6020026020010181815250508080610af990614c3b565b915050610a99565b508093505050509392505050565b600080610b1c84846108cc565b90506000610b4e82610b2c612f08565b6001016000898152602001908152602001600020612f9990919063ffffffff16565b905080610b6057600092505050610b67565b6001925050505b9392505050565b826000610b796127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610bb69190613b25565b602060405180830381865afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190614b1e565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90614d10565b60405180910390fd5b6000610c7386866108cc565b90506000610c7f612f08565b60010160008981526020019081526020016000209050610ca88282612fb390919063ffffffff16565b506000610cb3612f08565b60040160008481526020019081526020016000209050610cdc8982612fb390919063ffffffff16565b50887f9830658acd6a41f1cb12b425ed83cb2b8ccbfa753337cd13be80be51fc3f33738489604051610d0f929190614c83565b60405180910390a2505050505050505050565b826000610d2d6127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610d6a9190613b25565b602060405180830381865afa158015610d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dab9190614b1e565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290614d10565b60405180910390fd5b83610e24612f08565b600501600088815260200190815260200160002060008781526020019081526020016000208190555084867fd4beb656267200ccd79d73dbdfbad162c213e10ebad16508f22cb4df8d3259ad86604051610e7e9190614d3f565b60405180910390a3505050505050565b846000610e996127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610ed69190613b25565b602060405180830381865afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f179190614b1e565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90614d10565b60405180910390fd5b6000610fd78888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506108cc565b905061101885610fe5612f08565b60020160008c81526020019081526020016000206000848152602001908152602001600020612fcd90919063ffffffff16565b887f29eb060f266aff306ec81b612728a417406dd6298f8f7576a37b4e6830dcc60e8289898960405161104e9493929190614d87565b60405180910390a2505050505050505050565b60008061106c612f08565b600501600088815260200190815260200160002060008781526020019081526020016000205490506000801b81036110a85760009150506110b8565b6110b48585838661300b565b9150505b95945050505050565b8460006110cc6127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016111099190613b25565b602060405180830381865afa158015611126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114a9190614b1e565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190614d10565b60405180910390fd5b600061120a8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506108cc565b905061124b85611218612f08565b60020160008c8152602001908152602001600020600084815260200190815260200160002061302490919063ffffffff16565b887f49bb3a0761ed218e1db1e9c41096ed35188868994cc37a32e1f25855745b424e898989896040516112819493929190614d87565b60405180910390a2505050505050505050565b6113208560405180606001604052806002600d8111156112b7576112b6614b4b565b5b815260200187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020016040518060200160405280600081525081525084846115e7565b5050505050565b8760006113326127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161136f9190613b25565b602060405180830381865afa15801561138c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b09190614b1e565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790614d10565b60405180910390fd5b88518a51148015611432575087518951145b80156114415750868690508851145b611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790614e5f565b60405180910390fd5b83518551146114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90614ef1565b60405180910390fd5b60005b8a5181101561157a576115678c60405180606001604052808e85815181106114f2576114f1614bdd565b5b602002602001015181526020018d858151811061151257611511614bdd565b5b602002602001015181526020018c858151811061153257611531614bdd565b5b60200260200101518152508a8a858181106115505761154f614bdd565b5b90506020028101906115629190614f20565b6115e7565b808061157290614c3b565b9150506114c7565b5060005b85518110156115d9576115c68c87838151811061159e5761159d614bdd565b5b60200260200101518784815181106115b9576115b8614bdd565b5b6020026020010151610b6e565b80806115d190614c3b565b91505061157e565b505050505050505050505050565b8360006115f26127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161162f9190613b25565b602060405180830381865afa15801561164c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116709190614b1e565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d790614d10565b60405180910390fd5b60006116f4876000015188602001516108cc565b90506003600d81111561170a57611709614b4b565b5b8760000151036117cb57600061171e612f08565b6003016000838152602001908152602001600020600201805461174090614fb2565b9050148061178b575086604001518051906020012061175d612f08565b60030160008381526020019081526020016000206002016040516117819190615086565b6040518091039020145b6117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190615135565b60405180910390fd5b5b866117d4612f08565b600301600083815260200190815260200160002060008201518160000155602082015181600101908161180791906152ec565b50604082015181600201908161181d91906152ec565b50905050600061182b612f08565b60010160008a81526020019081526020016000209050611854828261306390919063ffffffff16565b50600061185f612f08565b600401600084815260200190815260200160002090506118888a8261306390919063ffffffff16565b5060005b888890508110156119485760008989838181106118ac576118ab614bdd565b5b9050602002013590506118f4816118c1612f08565b60020160008f81526020019081526020016000206000888152602001908152602001600020612fcd90919063ffffffff16565b8b7f29eb060f266aff306ec81b612728a417406dd6298f8f7576a37b4e6830dcc60e868d602001518460405161192c939291906153be565b60405180910390a250808061194090614c3b565b91505061188c565b50897fd7db314a62650aaa1b15d4bb5c95c558a03cde3ee7f36e144b73126a3a8e839a8a600001518b602001518c60400151604051611989939291906153fc565b60405180910390a250505050505050505050565b606060006119ef8585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506108cc565b905060006119fb612f08565b600301600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054611a3490614fb2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6090614fb2565b8015611aad5780601f10611a8257610100808354040283529160200191611aad565b820191906000526020600020905b815481529060010190602001808311611a9057829003601f168201915b50505050508152602001600282018054611ac690614fb2565b80601f0160208091040260200160405190810160405280929190818152602001828054611af290614fb2565b8015611b3f5780601f10611b1457610100808354040283529160200191611b3f565b820191906000526020600020905b815481529060010190602001808311611b2257829003601f168201915b50505050508152505090508060400151925050509392505050565b600080611bab8686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506108cc565b90506000611bee84611bbb612f08565b60020160008b81526020019081526020016000206000858152602001908152602001600020612f1790919063ffffffff16565b9050809250505095945050505050565b60606000611c26611c0d612f08565b6001016000858152602001908152602001600020612f6a565b90506000805b82811015611e01576000611c6482611c42612f08565b6001016000898152602001908152602001600020612f7f90919063ffffffff16565b90506000611c70612f08565b600301600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054611ca990614fb2565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd590614fb2565b8015611d225780601f10611cf757610100808354040283529160200191611d22565b820191906000526020600020905b815481529060010190602001808311611d0557829003601f168201915b50505050508152602001600282018054611d3b90614fb2565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6790614fb2565b8015611db45780601f10611d8957610100808354040283529160200191611db4565b820191906000526020600020905b815481529060010190602001808311611d9757829003601f168201915b50505050508152505090506001600d811115611dd357611dd2614b4b565b5b816000015103611dec578380611de890614c3b565b9450505b50508080611df990614c3b565b915050611c2c565b506000611e0c6127a0565b905060008173ffffffffffffffffffffffffffffffffffffffff16634f558e79876040518263ffffffff1660e01b8152600401611e499190613b25565b602060405180830381865afa158015611e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8a9190614adc565b9050606060008215611fce57600185611ea39190615441565b67ffffffffffffffff811115611ebc57611ebb61398f565b5b604051908082528060200260200182016040528015611eea5781602001602082028036833780820191505090505b50915060008473ffffffffffffffffffffffffffffffffffffffff16636352211e8a6040518263ffffffff1660e01b8152600401611f289190613b25565b602060405180830381865afa158015611f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f699190614b1e565b90508083600081518110611f8057611f7f614bdd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508180611fc590614c3b565b9250505061201a565b8467ffffffffffffffff811115611fe857611fe761398f565b5b6040519080825280602002602001820160405280156120165781602001602082028036833780820191505090505b5091505b60005b8681101561226257600061205582612033612f08565b60010160008d8152602001908152602001600020612f7f90919063ffffffff16565b90506000612061612f08565b60030160008381526020019081526020016000206040518060600160405290816000820154815260200160018201805461209a90614fb2565b80601f01602080910402602001604051908101604052809291908181526020018280546120c690614fb2565b80156121135780601f106120e857610100808354040283529160200191612113565b820191906000526020600020905b8154815290600101906020018083116120f657829003601f168201915b5050505050815260200160028201805461212c90614fb2565b80601f016020809104026020016040519081016040528092919081815260200182805461215890614fb2565b80156121a55780601f1061217a576101008083540402835291602001916121a5565b820191906000526020600020905b81548152906001019060200180831161218857829003601f168201915b50505050508152505090506001600d8111156121c4576121c3614b4b565b5b81600001510361224d57600080826020015190506c0100000000000000000000000060208201510491508187878151811061220257612201614bdd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050858061224790614c3b565b96505050505b5050808061225a90614c3b565b91505061201d565b50819650505050505050919050565b6122ae826001600d81111561228957612288614b4b565b5b8360405160200161229a9190614bc2565b604051602081830303815290604052610b6e565b5050565b606060006122da6122c1612f08565b6001016000858152602001908152602001600020612f6a565b90506000805b828110156124b5576000612318826122f6612f08565b6001016000898152602001908152602001600020612f7f90919063ffffffff16565b90506000612324612f08565b60030160008381526020019081526020016000206040518060600160405290816000820154815260200160018201805461235d90614fb2565b80601f016020809104026020016040519081016040528092919081815260200182805461238990614fb2565b80156123d65780601f106123ab576101008083540402835291602001916123d6565b820191906000526020600020905b8154815290600101906020018083116123b957829003601f168201915b505050505081526020016002820180546123ef90614fb2565b80601f016020809104026020016040519081016040528092919081815260200182805461241b90614fb2565b80156124685780601f1061243d57610100808354040283529160200191612468565b820191906000526020600020905b81548152906001019060200180831161244b57829003601f168201915b50505050508152505090506002600d81111561248757612486614b4b565b5b8160000151036124a057838061249c90614c3b565b9450505b505080806124ad90614c3b565b9150506122e0565b5060008167ffffffffffffffff8111156124d2576124d161398f565b5b60405190808252806020026020018201604052801561250557816020015b60608152602001906001900390816124f05790505b5090506000805b8481101561270457600061254482612522612f08565b60010160008b8152602001908152602001600020612f7f90919063ffffffff16565b90506000612550612f08565b60030160008381526020019081526020016000206040518060600160405290816000820154815260200160018201805461258990614fb2565b80601f01602080910402602001604051908101604052809291908181526020018280546125b590614fb2565b80156126025780601f106125d757610100808354040283529160200191612602565b820191906000526020600020905b8154815290600101906020018083116125e557829003601f168201915b5050505050815260200160028201805461261b90614fb2565b80601f016020809104026020016040519081016040528092919081815260200182805461264790614fb2565b80156126945780601f1061266957610100808354040283529160200191612694565b820191906000526020600020905b81548152906001019060200180831161267757829003601f168201915b50505050508152505090506002600d8111156126b3576126b2614b4b565b5b8160000151036126ef5780602001518585815181106126d5576126d4614bdd565b5b602002602001018190525083806126eb90614c3b565b9450505b505080806126fc90614c3b565b91505061250c565b5081945050505050919050565b60008061271c612966565b90508073ffffffffffffffffffffffffffffffffffffffff1663bd4986a0846040518263ffffffff1660e01b81526004016127579190613b25565b602060405180830381865afa158015612774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127989190614b1e565b915050919050565b60006127aa612f08565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd166127f1612f08565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c0b8bf76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561285f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612883919061548a565b61288b612f08565b60000160149054906101000a900460ff166040518363ffffffff1660e01b81526004016128b99291906154ff565b602060405180830381865afa1580156128d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128fa9190614b1e565b905090565b612961836002600d81111561291757612916614b4b565b5b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610b6e565b505050565b6000612970612f08565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8dfd166129b7612f08565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632668f3056040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a49919061548a565b612a51612f08565b60000160149054906101000a900460ff166040518363ffffffff1660e01b8152600401612a7f9291906154ff565b602060405180830381865afa158015612a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac09190614b1e565b905090565b60606000612ad1612966565b90508073ffffffffffffffffffffffffffffffffffffffff1663ef6fd878846040518263ffffffff1660e01b8152600401612b0c9190613b25565b600060405180830381865afa158015612b29573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612b529190615598565b915050919050565b60606000612b82612b69612f08565b6001016000858152602001908152602001600020612f6a565b905060008167ffffffffffffffff811115612ba057612b9f61398f565b5b604051908082528060200260200182016040528015612bd957816020015b612bc661366d565b815260200190600190039081612bbe5790505b50905060005b82811015612da0576000612c1782612bf5612f08565b6001016000898152602001908152602001600020612f7f90919063ffffffff16565b9050612c21612f08565b600301600082815260200190815260200160002060405180606001604052908160008201548152602001600182018054612c5a90614fb2565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8690614fb2565b8015612cd35780601f10612ca857610100808354040283529160200191612cd3565b820191906000526020600020905b815481529060010190602001808311612cb657829003601f168201915b50505050508152602001600282018054612cec90614fb2565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1890614fb2565b8015612d655780601f10612d3a57610100808354040283529160200191612d65565b820191906000526020600020905b815481529060010190602001808311612d4857829003601f168201915b505050505081525050838381518110612d8157612d80614bdd565b5b6020026020010181905250508080612d9890614c3b565b915050612bdf565b508092505050919050565b612db361307d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e17576040517f5cd8319200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80612e20612f08565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd581604051612e909190614944565b60405180910390a150565b6000612eff846002600d811115612eb557612eb4614b4b565b5b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610b0f565b90509392505050565b6000612f126130b0565b905090565b600080600883901c9050600060ff84166001901b9050600081866000016000858152602001908152602001600020541614159250505092915050565b600082612f6085846130dd565b1490509392505050565b6000612f7882600001613133565b9050919050565b6000612f8e8360000183613144565b60001c905092915050565b6000612fab836000018360001b61316f565b905092915050565b6000612fc5836000018360001b613192565b905092915050565b6000600882901c9050600060ff83166001901b9050808460000160008481526020019081526020016000206000828254179250508190555050505050565b6000826130198686856132a6565b149050949350505050565b6000600882901c9050600060ff83166001901b905080198460000160008481526020019081526020016000206000828254169250508190555050505050565b6000613075836000018360001b61358e565b905092915050565b60006130876135fe565b60030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000807f66761b57e8ae88aa3322e5b3b3066d05c674943f9480a680ed19fd8c7b26c4b590508091505090565b60008082905060005b8451811015613128576131138286838151811061310657613105614bdd565b5b602002602001015161362b565b9150808061312090614c3b565b9150506130e6565b508091505092915050565b600081600001805490509050919050565b600082600001828154811061315c5761315b614bdd565b5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000808360010160008481526020019081526020016000205490506000811461329a5760006001826131c491906155e1565b90506000600186600001805490506131dc91906155e1565b905081811461324b5760008660000182815481106131fd576131fc614bdd565b5b906000526020600020015490508087600001848154811061322157613220614bdd565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061325f5761325e615615565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506132a0565b60009150505b92915050565b6000808251905060008551905060008551905080600183856132c89190615441565b6132d291906155e1565b14613312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330990615690565b60405180910390fd5b60008167ffffffffffffffff81111561332e5761332d61398f565b5b60405190808252806020026020018201604052801561335c5781602001602082028036833780820191505090505b5090506000806000805b858110156134b65760008885106133a35785848061338390614c3b565b95508151811061339657613395614bdd565b5b60200260200101516133cb565b8a85806133af90614c3b565b9650815181106133c2576133c1614bdd565b5b60200260200101515b905060008c83815181106133e2576133e1614bdd565b5b602002602001015161341a578d84806133fa90614c3b565b95508151811061340d5761340c614bdd565b5b6020026020010151613476565b89861061344d5786858061342d90614c3b565b9650815181106134405761343f614bdd565b5b6020026020010151613475565b8b868061345990614c3b565b97508151811061346c5761346b614bdd565b5b60200260200101515b5b9050613482828261362b565b87848151811061349557613494614bdd565b5b602002602001018181525050505080806134ae90614c3b565b915050613366565b50600085111561352e57858114613502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f990615690565b60405180910390fd5b83600186038151811061351857613517614bdd565b5b6020026020010151975050505050505050613587565b6000871115613561578860008151811061354b5761354a614bdd565b5b6020026020010151975050505050505050613587565b8a60008151811061357557613574614bdd565b5b60200260200101519750505050505050505b9392505050565b600061359a838361316f565b6135f35782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506135f8565b600090505b92915050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b60008183106136435761363e8284613656565b61364e565b61364d8383613656565b5b905092915050565b600082600052816020526040600020905092915050565b60405180606001604052806000815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6136b5816136a2565b81146136c057600080fd5b50565b6000813590506136d2816136ac565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613703826136d8565b9050919050565b613713816136f8565b811461371e57600080fd5b50565b6000813590506137308161370a565b92915050565b6000806040838503121561374d5761374c613698565b5b600061375b858286016136c3565b925050602061376c85828601613721565b9150509250929050565b60008115159050919050565b61378b81613776565b82525050565b60006020820190506137a66000830184613782565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126137d1576137d06137ac565b5b8235905067ffffffffffffffff8111156137ee576137ed6137b1565b5b60208301915083600182028301111561380a576138096137b6565b5b9250929050565b60008060008060006080868803121561382d5761382c613698565b5b600061383b888289016136c3565b955050602061384c888289016136c3565b945050604086013567ffffffffffffffff81111561386d5761386c61369d565b5b613879888289016137bb565b9350935050606061388c888289016136c3565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138ce81613776565b82525050565b60006138e083836138c5565b60208301905092915050565b6000602082019050919050565b600061390482613899565b61390e81856138a4565b9350613919836138b5565b8060005b8381101561394a57815161393188826138d4565b975061393c836138ec565b92505060018101905061391d565b5085935050505092915050565b6000602082019050818103600083015261397181846138f9565b905092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139c78261397e565b810181811067ffffffffffffffff821117156139e6576139e561398f565b5b80604052505050565b60006139f961368e565b9050613a0582826139be565b919050565b600067ffffffffffffffff821115613a2557613a2461398f565b5b613a2e8261397e565b9050602081019050919050565b82818337600083830152505050565b6000613a5d613a5884613a0a565b6139ef565b905082815260208101848484011115613a7957613a78613979565b5b613a84848285613a3b565b509392505050565b600082601f830112613aa157613aa06137ac565b5b8135613ab1848260208601613a4a565b91505092915050565b60008060408385031215613ad157613ad0613698565b5b6000613adf858286016136c3565b925050602083013567ffffffffffffffff811115613b0057613aff61369d565b5b613b0c85828601613a8c565b9150509250929050565b613b1f816136a2565b82525050565b6000602082019050613b3a6000830184613b16565b92915050565b60008083601f840112613b5657613b556137ac565b5b8235905067ffffffffffffffff811115613b7357613b726137b1565b5b602083019150836020820283011115613b8f57613b8e6137b6565b5b9250929050565b60008060008060608587031215613bb057613baf613698565b5b6000613bbe878288016136c3565b9450506020613bcf87828801613721565b935050604085013567ffffffffffffffff811115613bf057613bef61369d565b5b613bfc87828801613b40565b925092505092959194509250565b600067ffffffffffffffff821115613c2557613c2461398f565b5b602082029050602081019050919050565b6000819050919050565b613c4981613c36565b8114613c5457600080fd5b50565b600081359050613c6681613c40565b92915050565b6000613c7f613c7a84613c0a565b6139ef565b90508083825260208201905060208402830185811115613ca257613ca16137b6565b5b835b81811015613ccb5780613cb78882613c57565b845260208401935050602081019050613ca4565b5050509392505050565b600082601f830112613cea57613ce96137ac565b5b8135613cfa848260208601613c6c565b91505092915050565b60008060008060808587031215613d1d57613d1c613698565b5b6000613d2b878288016136c3565b9450506020613d3c878288016136c3565b935050604085013567ffffffffffffffff811115613d5d57613d5c61369d565b5b613d6987828801613cd5565b9250506060613d7a87828801613c57565b91505092959194509250565b600080600060408486031215613d9f57613d9e613698565b5b6000613dad868287016136c3565b935050602084013567ffffffffffffffff811115613dce57613dcd61369d565b5b613dda868287016137bb565b92509250509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e1b816136a2565b82525050565b6000613e2d8383613e12565b60208301905092915050565b6000602082019050919050565b6000613e5182613de6565b613e5b8185613df1565b9350613e6683613e02565b8060005b83811015613e97578151613e7e8882613e21565b9750613e8983613e39565b925050600181019050613e6a565b5085935050505092915050565b60006020820190508181036000830152613ebe8184613e46565b905092915050565b600080600060608486031215613edf57613ede613698565b5b6000613eed868287016136c3565b9350506020613efe868287016136c3565b925050604084013567ffffffffffffffff811115613f1f57613f1e61369d565b5b613f2b86828701613a8c565b9150509250925092565b600080600060608486031215613f4e57613f4d613698565b5b6000613f5c868287016136c3565b9350506020613f6d868287016136c3565b9250506040613f7e86828701613c57565b9150509250925092565b600067ffffffffffffffff821115613fa357613fa261398f565b5b602082029050602081019050919050565b613fbd81613776565b8114613fc857600080fd5b50565b600081359050613fda81613fb4565b92915050565b6000613ff3613fee84613f88565b6139ef565b90508083825260208201905060208402830185811115614016576140156137b6565b5b835b8181101561403f578061402b8882613fcb565b845260208401935050602081019050614018565b5050509392505050565b600082601f83011261405e5761405d6137ac565b5b813561406e848260208601613fe0565b91505092915050565b600080600080600060a0868803121561409357614092613698565b5b60006140a1888289016136c3565b95505060206140b2888289016136c3565b945050604086013567ffffffffffffffff8111156140d3576140d261369d565b5b6140df88828901613cd5565b935050606086013567ffffffffffffffff811115614100576140ff61369d565b5b61410c88828901614049565b925050608086013567ffffffffffffffff81111561412d5761412c61369d565b5b61413988828901613cd5565b9150509295509295909350565b60008060008060006060868803121561416257614161613698565b5b6000614170888289016136c3565b955050602086013567ffffffffffffffff8111156141915761419061369d565b5b61419d888289016137bb565b9450945050604086013567ffffffffffffffff8111156141c0576141bf61369d565b5b6141cc88828901613b40565b92509250509295509295909350565b600067ffffffffffffffff8211156141f6576141f561398f565b5b602082029050602081019050919050565b600061421a614215846141db565b6139ef565b9050808382526020820190506020840283018581111561423d5761423c6137b6565b5b835b81811015614266578061425288826136c3565b84526020840193505060208101905061423f565b5050509392505050565b600082601f830112614285576142846137ac565b5b8135614295848260208601614207565b91505092915050565b600067ffffffffffffffff8211156142b9576142b861398f565b5b602082029050602081019050919050565b60006142dd6142d88461429e565b6139ef565b90508083825260208201905060208402830185811115614300576142ff6137b6565b5b835b8181101561434757803567ffffffffffffffff811115614325576143246137ac565b5b8086016143328982613a8c565b85526020850194505050602081019050614302565b5050509392505050565b600082601f830112614366576143656137ac565b5b81356143768482602086016142ca565b91505092915050565b60008083601f840112614395576143946137ac565b5b8235905067ffffffffffffffff8111156143b2576143b16137b1565b5b6020830191508360208202830111156143ce576143cd6137b6565b5b9250929050565b60008060008060008060008060e0898b0312156143f5576143f4613698565b5b60006144038b828c016136c3565b985050602089013567ffffffffffffffff8111156144245761442361369d565b5b6144308b828c01614270565b975050604089013567ffffffffffffffff8111156144515761445061369d565b5b61445d8b828c01614351565b965050606089013567ffffffffffffffff81111561447e5761447d61369d565b5b61448a8b828c01614351565b955050608089013567ffffffffffffffff8111156144ab576144aa61369d565b5b6144b78b828c0161437f565b945094505060a089013567ffffffffffffffff8111156144da576144d961369d565b5b6144e68b828c01614270565b92505060c089013567ffffffffffffffff8111156145075761450661369d565b5b6145138b828c01614351565b9150509295985092959890939650565b600080fd5b600080fd5b60006060828403121561454357614542614523565b5b61454d60606139ef565b9050600061455d848285016136c3565b600083015250602082013567ffffffffffffffff81111561458157614580614528565b5b61458d84828501613a8c565b602083015250604082013567ffffffffffffffff8111156145b1576145b0614528565b5b6145bd84828501613a8c565b60408301525092915050565b600080600080606085870312156145e3576145e2613698565b5b60006145f1878288016136c3565b945050602085013567ffffffffffffffff8111156146125761461161369d565b5b61461e8782880161452d565b935050604085013567ffffffffffffffff81111561463f5761463e61369d565b5b61464b87828801613b40565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b83811015614693578082015181840152602081019050614678565b60008484015250505050565b60006146aa82614659565b6146b48185614664565b93506146c4818560208601614675565b6146cd8161397e565b840191505092915050565b600060208201905081810360008301526146f2818461469f565b905092915050565b6000602082840312156147105761470f613698565b5b600061471e848285016136c3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61475c816136f8565b82525050565b600061476e8383614753565b60208301905092915050565b6000602082019050919050565b600061479282614727565b61479c8185614732565b93506147a783614743565b8060005b838110156147d85781516147bf8882614762565b97506147ca8361477a565b9250506001810190506147ab565b5085935050505092915050565b600060208201905081810360008301526147ff8184614787565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b600061484f82614659565b6148598185614833565b9350614869818560208601614675565b6148728161397e565b840191505092915050565b60006148898383614844565b905092915050565b6000602082019050919050565b60006148a982614807565b6148b38185614812565b9350836020820285016148c585614823565b8060005b8581101561490157848403895281516148e2858261487d565b94506148ed83614891565b925060208a019950506001810190506148c9565b50829750879550505050505092915050565b6000602082019050818103600083015261492d818461489e565b905092915050565b61493e816136f8565b82525050565b60006020820190506149596000830184614935565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006060830160008301516149a36000860182613e12565b50602083015184820360208601526149bb8282614844565b915050604083015184820360408601526149d58282614844565b9150508091505092915050565b60006149ee838361498b565b905092915050565b6000602082019050919050565b6000614a0e8261495f565b614a18818561496a565b935083602082028501614a2a8561497b565b8060005b85811015614a665784840389528151614a4785826149e2565b9450614a52836149f6565b925060208a01995050600181019050614a2e565b50829750879550505050505092915050565b60006020820190508181036000830152614a928184614a03565b905092915050565b600060208284031215614ab057614aaf613698565b5b6000614abe84828501613721565b91505092915050565b600081519050614ad681613fb4565b92915050565b600060208284031215614af257614af1613698565b5b6000614b0084828501614ac7565b91505092915050565b600081519050614b188161370a565b92915050565b600060208284031215614b3457614b33613698565b5b6000614b4284828501614b09565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008160601b9050919050565b6000614b9282614b7a565b9050919050565b6000614ba482614b87565b9050919050565b614bbc614bb7826136f8565b614b99565b82525050565b6000614bce8284614bab565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c46826136a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c7857614c77614c0c565b5b600182019050919050565b6000604082019050614c986000830185613b16565b8181036020830152614caa818461469f565b90509392505050565b600082825260208201905092915050565b7f4e6f7420504b50204e4654206f776e6572000000000000000000000000000000600082015250565b6000614cfa601183614cb3565b9150614d0582614cc4565b602082019050919050565b60006020820190508181036000830152614d2981614ced565b9050919050565b614d3981613c36565b82525050565b6000602082019050614d546000830184614d30565b92915050565b6000614d668385614664565b9350614d73838584613a3b565b614d7c8361397e565b840190509392505050565b6000606082019050614d9c6000830187613b16565b8181036020830152614daf818587614d5a565b9050614dbe6040830184613b16565b95945050505050565b7f4d75737420686176652073616d65206e756d626572206f662061757468206d6560008201527f74686f64732c206964732c207075626b6579732c20616e642073636f7065732060208201527f746f206164640000000000000000000000000000000000000000000000000000604082015250565b6000614e49604683614cb3565b9150614e5482614dc7565b606082019050919050565b60006020820190508181036000830152614e7881614e3c565b9050919050565b7f4d75737420686176652073616d65206e756d626572206f662061757468206d6560008201527f74686f647320616e642069647320746f2072656d6f7665000000000000000000602082015250565b6000614edb603783614cb3565b9150614ee682614e7f565b604082019050919050565b60006020820190508181036000830152614f0a81614ece565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112614f3d57614f3c614f11565b5b80840192508235915067ffffffffffffffff821115614f5f57614f5e614f16565b5b602083019250602082023603831315614f7b57614f7a614f1b565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614fca57607f821691505b602082108103614fdd57614fdc614f83565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461501081614fb2565b61501a8186614fe3565b94506001821660008114615035576001811461504a5761507d565b60ff198316865281151582028601935061507d565b61505385614fee565b60005b8381101561507557815481890152600182019150602081019050615056565b838801955050505b50505092915050565b60006150928284615003565b915081905092915050565b7f43616e6e6f7420616464206120646966666572656e74207075626b657920666f60008201527f72207468652073616d652061757468206d6574686f64207479706520616e642060208201527f6964000000000000000000000000000000000000000000000000000000000000604082015250565b600061511f604283614cb3565b915061512a8261509d565b606082019050919050565b6000602082019050818103600083015261514e81615112565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026151a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615165565b6151ac8683615165565b95508019841693508086168417925050509392505050565b6000819050919050565b60006151e96151e46151df846136a2565b6151c4565b6136a2565b9050919050565b6000819050919050565b615203836151ce565b61521761520f826151f0565b848454615172565b825550505050565b600090565b61522c61521f565b6152378184846151fa565b505050565b5b8181101561525b57615250600082615224565b60018101905061523d565b5050565b601f8211156152a05761527181614fee565b61527a84615155565b81016020851015615289578190505b61529d61529585615155565b83018261523c565b50505b505050565b600082821c905092915050565b60006152c3600019846008026152a5565b1980831691505092915050565b60006152dc83836152b2565b9150826002028217905092915050565b6152f582614659565b67ffffffffffffffff81111561530e5761530d61398f565b5b6153188254614fb2565b61532382828561525f565b600060209050601f8311600181146153565760008415615344578287015190505b61534e85826152d0565b8655506153b6565b601f19841661536486614fee565b60005b8281101561538c57848901518255600182019150602085019450602081019050615367565b868310156153a957848901516153a5601f8916826152b2565b8355505b6001600288020188555050505b505050505050565b60006060820190506153d36000830186613b16565b81810360208301526153e5818561469f565b90506153f46040830184613b16565b949350505050565b60006060820190506154116000830186613b16565b8181036020830152615423818561469f565b90508181036040830152615437818461469f565b9050949350505050565b600061544c826136a2565b9150615457836136a2565b925082820190508082111561546f5761546e614c0c565b5b92915050565b60008151905061548481613c40565b92915050565b6000602082840312156154a05761549f613698565b5b60006154ae84828501615475565b91505092915050565b600381106154c8576154c7614b4b565b5b50565b60008190506154d9826154b7565b919050565b60006154e9826154cb565b9050919050565b6154f9816154de565b82525050565b60006040820190506155146000830185614d30565b61552160208301846154f0565b9392505050565b600061553b61553684613a0a565b6139ef565b90508281526020810184848401111561555757615556613979565b5b615562848285614675565b509392505050565b600082601f83011261557f5761557e6137ac565b5b815161558f848260208601615528565b91505092915050565b6000602082840312156155ae576155ad613698565b5b600082015167ffffffffffffffff8111156155cc576155cb61369d565b5b6155d88482850161556a565b91505092915050565b60006155ec826136a2565b91506155f7836136a2565b925082820390508181111561560f5761560e614c0c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4d65726b6c6550726f6f663a20696e76616c6964206d756c746970726f6f6600600082015250565b600061567a601f83614cb3565b915061568582615644565b602082019050919050565b600060208201905081810360008301526156a98161566d565b905091905056fea2646970667358221220520fc7fce83a2c69bf8ff26a1c5d1a41432aff5bde8feeb264c7ec270dcf1e1d64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "address": "0xB5755Be401c1c66667B8b7Ed6b566b430873A7d1" -} \ No newline at end of file diff --git a/contracts/serrano/AccessControlConditions.json b/contracts/serrano/AccessControlConditions.json deleted file mode 100644 index b587b3b..0000000 --- a/contracts/serrano/AccessControlConditions.json +++ /dev/null @@ -1,278 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "key", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "permanent", - "type": "bool" - }, - { - "indexed": false, - "internalType": "address", - "name": "creator", - "type": "address" - } - ], - "name": "ConditionStored", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "key", - "type": "uint256" - } - ], - "name": "getCondition", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "securityHash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "permanent", - "type": "bool" - }, - { - "internalType": "address", - "name": "creator", - "type": "address" - } - ], - "internalType": "struct AccessControlConditions.StoredCondition", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newSigner", - "type": "address" - } - ], - "name": "setSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "signer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "key", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "securityHash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "permanent", - "type": "bool" - } - ], - "name": "storeCondition", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "key", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "securityHash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "permanent", - "type": "bool" - }, - { - "internalType": "address", - "name": "creatorAddress", - "type": "address" - } - ], - "name": "storeConditionWithSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "storedConditions", - "outputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "securityHash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "permanent", - "type": "bool" - }, - { - "internalType": "address", - "name": "creator", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/serrano/PKPHelper.json b/contracts/serrano/PKPHelper.json deleted file mode 100644 index 8c356b8..0000000 --- a/contracts/serrano/PKPHelper.json +++ /dev/null @@ -1,274 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_pkpNft", - "type": "address" - }, - { - "internalType": "address", - "name": "_pkpPermissions", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "name": "mintNextAndAddAuthMethods", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes[]", - "name": "permittedIpfsCIDs", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedIpfsCIDScopes", - "type": "uint256[][]" - }, - { - "internalType": "address[]", - "name": "permittedAddresses", - "type": "address[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAddressScopes", - "type": "uint256[][]" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "name": "mintNextAndAddAuthMethodsWithTypes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC721Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpNFT", - "outputs": [ - { - "internalType": "contract PKPNFT", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpPermissions", - "outputs": [ - { - "internalType": "contract PKPPermissions", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPkpNftAddress", - "type": "address" - } - ], - "name": "setPkpNftAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPkpPermissionsAddress", - "type": "address" - } - ], - "name": "setPkpPermissionsAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/serrano/PKPNFT.json b/contracts/serrano/PKPNFT.json deleted file mode 100644 index 62bd5be..0000000 --- a/contracts/serrano/PKPNFT.json +++ /dev/null @@ -1,1048 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newFreeMintSigner", - "type": "address" - } - ], - "name": "FreeMintSignerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newMintCost", - "type": "uint256" - } - ], - "name": "MintCostSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "pkpNftMetadataAddress", - "type": "address" - } - ], - "name": "PkpNftMetadataAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "pkpPermissionsAddress", - "type": "address" - } - ], - "name": "PkpPermissionsAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "PkpRouted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "routerAddress", - "type": "address" - } - ], - "name": "RouterAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrew", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "exists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "freeMintId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "freeMintGrantAndBurnNext", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "freeMintId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "freeMintNext", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "freeMintId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "freeMintSigTest", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "freeMintSigner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getEthAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPubkey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "getUnmintedRoutedTokenIdCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mintCost", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - } - ], - "name": "mintGrantAndBurnNext", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - } - ], - "name": "mintGrantAndBurnSpecific", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "mintNext", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "mintSpecific", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpNftMetadata", - "outputs": [ - { - "internalType": "contract PKPNFTMetadata", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpPermissions", - "outputs": [ - { - "internalType": "contract PKPPermissions", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "pkpRouted", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "prefixed", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "redeemedFreeMintIds", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "router", - "outputs": [ - { - "internalType": "contract PubkeyRouter", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newFreeMintSigner", - "type": "address" - } - ], - "name": "setFreeMintSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newMintCost", - "type": "uint256" - } - ], - "name": "setMintCost", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pkpNftMetadataAddress", - "type": "address" - } - ], - "name": "setPkpNftMetadataAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pkpPermissionsAddress", - "type": "address" - } - ], - "name": "setPkpPermissionsAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "routerAddress", - "type": "address" - } - ], - "name": "setRouterAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenOfOwnerByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "unmintedRoutedTokenIds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] \ No newline at end of file diff --git a/contracts/serrano/PKPPermissions.json b/contracts/serrano/PKPPermissions.json deleted file mode 100644 index e9c5d8e..0000000 --- a/contracts/serrano/PKPPermissions.json +++ /dev/null @@ -1,889 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_pkpNft", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "userPubkey", - "type": "bytes" - } - ], - "name": "PermittedAuthMethodAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "PermittedAuthMethodRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "PermittedAuthMethodScopeAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "PermittedAuthMethodScopeRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "group", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "RootHashUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "scopes", - "type": "uint256[]" - } - ], - "name": "addPermittedAction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "user", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "scopes", - "type": "uint256[]" - } - ], - "name": "addPermittedAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "userPubkey", - "type": "bytes" - } - ], - "internalType": "struct PKPPermissions.AuthMethod", - "name": "authMethod", - "type": "tuple" - }, - { - "internalType": "uint256[]", - "name": "scopes", - "type": "uint256[]" - } - ], - "name": "addPermittedAuthMethod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "addPermittedAuthMethodScope", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "authMethods", - "outputs": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "userPubkey", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "getAuthMethodId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getEthAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPermittedActions", - "outputs": [ - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPermittedAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "maxScopeId", - "type": "uint256" - } - ], - "name": "getPermittedAuthMethodScopes", - "outputs": [ - { - "internalType": "bool[]", - "name": "", - "type": "bool[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPermittedAuthMethods", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "userPubkey", - "type": "bytes" - } - ], - "internalType": "struct PKPPermissions.AuthMethod[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPubkey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "getTokenIdsForAuthMethod", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "getUserPubkeyForAuthMethod", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - } - ], - "name": "isPermittedAction", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "isPermittedAddress", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "isPermittedAuthMethod", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "isPermittedAuthMethodScopePresent", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpNFT", - "outputs": [ - { - "internalType": "contract PKPNFT", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - } - ], - "name": "removePermittedAction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "removePermittedAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - } - ], - "name": "removePermittedAuthMethod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "authMethodType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "id", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "scopeId", - "type": "uint256" - } - ], - "name": "removePermittedAuthMethodScope", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPkpNftAddress", - "type": "address" - } - ], - "name": "setPkpNftAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "group", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "setRootHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "group", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "verifyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "group", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "bool[]", - "name": "proofFlags", - "type": "bool[]" - }, - { - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "verifyStates", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/serrano/PubkeyRouter.json b/contracts/serrano/PubkeyRouter.json deleted file mode 100644 index 386933e..0000000 --- a/contracts/serrano/PubkeyRouter.json +++ /dev/null @@ -1,415 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_pkpNft", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newPkpNftAddress", - "type": "address" - } - ], - "name": "PkpNftAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "PubkeyRoutingDataSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "nodeAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "PubkeyRoutingDataVote", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "ethAddressToPkpId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getEthAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPubkey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getRoutingData", - "outputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct PubkeyRouter.PubkeyRoutingData", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "isRouted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpNFT", - "outputs": [ - { - "internalType": "contract PKPNFT", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pubkeyRegistrations", - "outputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct PubkeyRouter.PubkeyRoutingData", - "name": "routingData", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "nodeVoteCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nodeVoteThreshold", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pubkeys", - "outputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPkpNftAddress", - "type": "address" - } - ], - "name": "setPkpNftAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "setRoutingData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "voteForRoutingData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/serrano/SoloNetPKP.json b/contracts/serrano/SoloNetPKP.json deleted file mode 100644 index d77081c..0000000 --- a/contracts/serrano/SoloNetPKP.json +++ /dev/null @@ -1,1065 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newFreeMintSigner", - "type": "address" - } - ], - "name": "FreeMintSignerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newMintCost", - "type": "uint256" - } - ], - "name": "MintCostSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "minter", - "type": "address" - } - ], - "name": "MinterPermitted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "minter", - "type": "address" - } - ], - "name": "MinterRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "pkpNftMetadataAddress", - "type": "address" - } - ], - "name": "PkpNftMetadataAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "pkpPermissionsAddress", - "type": "address" - } - ], - "name": "PkpPermissionsAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "PkpRouted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "stakingAddress", - "type": "address" - } - ], - "name": "StakingAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrew", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - } - ], - "name": "_getTokenIdToMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPermittedMinter", - "type": "address" - } - ], - "name": "addPermittedMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "ethAddressToPkpId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "exists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "freeMintId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "freeMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "freeMintId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "freeMintGrantAndBurn", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "freeMintId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "freeMintSigTest", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "freeMintSigner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getEthAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getPubkey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "mintCost", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "ipfsCID", - "type": "bytes" - } - ], - "name": "mintGrantAndBurn", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpNftMetadata", - "outputs": [ - { - "internalType": "contract PKPNFTMetadata", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpPermissions", - "outputs": [ - { - "internalType": "contract PKPPermissions", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "prefixed", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pubkeys", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "redeemedFreeMintIds", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPermittedMinter", - "type": "address" - } - ], - "name": "removePermittedMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newFreeMintSigner", - "type": "address" - } - ], - "name": "setFreeMintSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newMintCost", - "type": "uint256" - } - ], - "name": "setMintCost", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pkpNftMetadataAddress", - "type": "address" - } - ], - "name": "setPkpNftMetadataAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pkpPermissionsAddress", - "type": "address" - } - ], - "name": "setPkpPermissionsAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakingAddress", - "type": "address" - } - ], - "name": "setStakingAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "staking", - "outputs": [ - { - "internalType": "contract Staking", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "tokenOfOwnerByIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] \ No newline at end of file diff --git a/contracts/serrano/SoloNetPKPHelper.json b/contracts/serrano/SoloNetPKPHelper.json deleted file mode 100644 index b95e88c..0000000 --- a/contracts/serrano/SoloNetPKPHelper.json +++ /dev/null @@ -1,274 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_pkpNft", - "type": "address" - }, - { - "internalType": "address", - "name": "_pkpPermissions", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "name": "mintAndAddAuthMethods", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "bytes[]", - "name": "permittedIpfsCIDs", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedIpfsCIDScopes", - "type": "uint256[][]" - }, - { - "internalType": "address[]", - "name": "permittedAddresses", - "type": "address[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAddressScopes", - "type": "uint256[][]" - }, - { - "internalType": "uint256[]", - "name": "permittedAuthMethodTypes", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodIds", - "type": "bytes[]" - }, - { - "internalType": "bytes[]", - "name": "permittedAuthMethodPubkeys", - "type": "bytes[]" - }, - { - "internalType": "uint256[][]", - "name": "permittedAuthMethodScopes", - "type": "uint256[][]" - }, - { - "internalType": "bool", - "name": "addPkpEthAddressAsPermittedAddress", - "type": "bool" - }, - { - "internalType": "bool", - "name": "sendPkpToItself", - "type": "bool" - } - ], - "name": "mintAndAddAuthMethodsWithTypes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC721Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpNFT", - "outputs": [ - { - "internalType": "contract SoloNetPKP", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pkpPermissions", - "outputs": [ - { - "internalType": "contract PKPPermissions", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPkpNftAddress", - "type": "address" - } - ], - "name": "setPkpNftAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPkpPermissionsAddress", - "type": "address" - } - ], - "name": "setPkpPermissionsAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] \ No newline at end of file diff --git a/copy_abis.sh b/copy_abis.sh deleted file mode 100755 index 0ec0cf1..0000000 --- a/copy_abis.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -# change this path to wherever your LitNodeContracts repo lives - -CURRENT_DIR=$(pwd) - -cd ../RustNode/LitNodeContracts -npx hardhat compile - -cat artifacts/contracts/PubkeyRouter.sol/PubkeyRouter.json | jq .abi > $CURRENT_DIR/contracts/PubkeyRouter.json - -cat artifacts/contracts/PKPPermissions.sol/PKPPermissions.json | jq .abi > $CURRENT_DIR/contracts/PKPPermissions.json - -cat artifacts/contracts/PKPHelper.sol/PKPHelper.json | jq .abi > $CURRENT_DIR/contracts/PKPHelper.json - -# cat artifacts/contracts/Staking.sol/Staking.json | jq .abi > ../lit_node_rust/abis/Staking.json - -cat artifacts/contracts/AccessControlConditions.sol/AccessControlConditions.json | jq .abi > $CURRENT_DIR/contracts/AccessControlConditions.json - -# cat artifacts/contracts/RateLimitNFT.sol/RateLimitNFT.json | jq .abi > ../lit_node_rust/abis/RateLimitNFT.json \ No newline at end of file diff --git a/example-server.d.ts b/example-server.d.ts deleted file mode 100644 index 896e680..0000000 --- a/example-server.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { AuthenticatorDevice } from "@simplewebauthn/typescript-types"; - -/** - * You'll need a database to store a few things: - * - * 1. Users - * - * You'll need to be able to associate registration and authentications challenges, and - * authenticators to a specific user. See `LoggedInUser` below for an idea of the minimum amount of - * info you'll need to track for a specific user during these flows. - * - * 2. Challenges - * - * The totally-random-unique-every-time values you pass into every execution of - * `generateRegistrationOptions()` or `generateAuthenticationOptions()` MUST be stored until - * `verifyRegistrationResponse()` or `verifyAuthenticationResponse()` (respectively) is called to verify - * that the response contains the signed challenge. - * - * These values only need to be persisted for `timeout` number of milliseconds (see the `generate` - * methods and their optional `timeout` parameter) - * - * 3. Authenticator Devices - * - * After registration, you'll need to store three things about the authenticator: - * - * - Base64-encoded "Credential ID" (varchar) - * - Base64-encoded "Public Key" (varchar) - * - Counter (int) - * - * Each authenticator must also be associated to a user so that you can generate a list of - * authenticator credential IDs to pass into `generateAuthenticationOptions()`, from which one is - * expected to generate an authentication response. - */ -interface LoggedInUser { - id: string; - username: string; - devices: AuthenticatorDevice[]; - currentChallenge?: string; -} diff --git a/fido-conformance-mds/.gitkeep b/fido-conformance-mds/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/fido-conformance.ts b/fido-conformance.ts deleted file mode 100644 index 276157d..0000000 --- a/fido-conformance.ts +++ /dev/null @@ -1,359 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -import fs from "fs"; -import express from "express"; -import fetch from "node-fetch"; -import base64url from "base64url"; - -import { - generateRegistrationOptions, - verifyRegistrationResponse, - generateAuthenticationOptions, - verifyAuthenticationResponse, - MetadataService, - MetadataStatement, - SettingsService, -} from "@simplewebauthn/server"; -import { - AuthenticationCredentialJSON, - RegistrationCredentialJSON, -} from "@simplewebauthn/typescript-types"; - -import { rpID } from "./index"; -import { LoggedInUser } from "./example-server"; -import config from "./config"; - -interface LoggedInFIDOUser extends LoggedInUser { - currentAuthenticationUserVerification?: UserVerificationRequirement; -} - -/** - * Create paths specifically for testing with the FIDO Conformance Tools - */ -export const fidoConformanceRouter = express.Router(); -export const fidoRouteSuffix = "/fido"; - -const rpName = "FIDO Conformance Test"; - -/** - * Load JSON metadata statements provided by the Conformance Tools - * - * FIDO2 > TESTS CONFIGURATION > DOWNLOAD SERVER METADATA (button) - */ -const statements: MetadataStatement[] = []; - -try { - // Update this to whatever folder you extracted the statements to - const conformanceMetadataPath = "./fido-conformance-mds"; - const conformanceMetadataFilenames = fs.readdirSync( - conformanceMetadataPath, - ); - for (const statementPath of conformanceMetadataFilenames) { - if (statementPath.endsWith(".json")) { - const contents = fs.readFileSync( - `${conformanceMetadataPath}/${statementPath}`, - "utf-8", - ); - statements.push(JSON.parse(contents)); - } - } -} catch (err) { - // pass -} - -/** - * Initialize MetadataService with Conformance Testing-specific statements. - */ -fetch("https://mds3.certinfra.fidoalliance.org/getEndpoints", { - method: "POST", - body: JSON.stringify({ - endpoint: `${config.expectedOrigins[0]}${fidoRouteSuffix}`, // TODO: this is a hack using the first in the array. - }), - headers: { "Content-Type": "application/json" }, -}) - .then((resp) => resp.json()) - .then((json) => { - const mdsServers: string[] = json.result; - - return MetadataService.initialize({ - statements, - mdsServers, - verificationMode: "strict", - }); - }) - .catch(console.error) - .finally(() => { - console.log("🔐 FIDO Conformance routes ready"); - }); - -const inMemoryUserDeviceDB: { [username: string]: LoggedInFIDOUser } = { - // [username]: string: { - // id: loggedInUserId, - // username: 'user@yourdomain.com', - // devices: [ - // /** - // * { - // * credentialID: string, - // * publicKey: string, - // * counter: number, - // * } - // */ - // ], - // currentChallenge: undefined, - // currentAuthenticationUserVerification: undefined, - // }, -}; -// A cheap way of remembering who's "logged in" between the request for options and the response -let loggedInUsername: string | undefined = undefined; - -const supportedAlgorithmIDs = [ - -7, -8, -35, -36, -37, -38, -39, -257, -258, -259, -65535, -]; - -/** - * [FIDO2] Server Tests > MakeCredential Request - */ -fidoConformanceRouter.post("/attestation/options", (req, res) => { - const { body } = req; - const { - username, - displayName, - authenticatorSelection, - attestation, - extensions, - } = body; - - loggedInUsername = username; - - let user = inMemoryUserDeviceDB[username]; - if (!user) { - const newUser = { - id: username, - username, - devices: [], - }; - - inMemoryUserDeviceDB[username] = newUser; - user = newUser; - } - - const { devices } = user; - - const opts = generateRegistrationOptions({ - rpName, - rpID, - userID: username, - userName: username, - userDisplayName: displayName, - attestationType: attestation, - authenticatorSelection, - extensions, - excludeCredentials: devices.map((dev) => ({ - id: dev.credentialID, - type: "public-key", - transports: ["usb", "ble", "nfc", "internal"], - })), - supportedAlgorithmIDs, - }); - - user.currentChallenge = opts.challenge; - - return res.send({ - ...opts, - status: "ok", - errorMessage: "", - }); -}); - -/** - * [FIDO2] Server Tests > MakeCredential Response - */ -fidoConformanceRouter.post("/attestation/result", async (req, res) => { - const body: RegistrationCredentialJSON = req.body; - - const user = inMemoryUserDeviceDB[`${loggedInUsername}`]; - - const expectedChallenge = user.currentChallenge; - - let verification; - try { - verification = await verifyRegistrationResponse({ - credential: body, - expectedChallenge: `${expectedChallenge}`, - expectedOrigin: config.expectedOrigins, - supportedAlgorithmIDs, - }); - } catch (error) { - const _error: Error = error as Error; - console.error(`RP - registration: ${_error.message}`); - return res.status(400).send({ errorMessage: _error.message }); - } - - const { verified, registrationInfo } = verification; - - if (verified && registrationInfo) { - const { credentialPublicKey, credentialID, counter } = registrationInfo; - - const existingDevice = user.devices.find( - (device) => device.credentialID === credentialID, - ); - - if (!existingDevice) { - /** - * Add the returned device to the user's list of devices - */ - user.devices.push({ - credentialPublicKey, - credentialID, - counter, - }); - } - } - - return res.send({ - status: verified ? "ok" : "", - errorMessage: "", - }); -}); - -/** - * [FIDO2] Server Tests > GetAuthentication Request - */ -fidoConformanceRouter.post("/assertion/options", (req, res) => { - const { body } = req; - const { username, userVerification, extensions } = body; - - loggedInUsername = username; - - const user = inMemoryUserDeviceDB[username]; - - const { devices } = user; - - const opts = generateAuthenticationOptions({ - extensions, - userVerification, - allowCredentials: devices.map((dev) => ({ - id: dev.credentialID, - type: "public-key", - transports: ["usb", "ble", "nfc", "internal"], - })), - }); - - user.currentChallenge = opts.challenge; - user.currentAuthenticationUserVerification = userVerification; - - return res.send({ - ...opts, - status: "ok", - errorMessage: "", - }); -}); - -fidoConformanceRouter.post("/assertion/result", async (req, res) => { - const body: AuthenticationCredentialJSON = req.body; - const { id } = body; - - const user = inMemoryUserDeviceDB[`${loggedInUsername}`]; - - // Pull up values specified when generation authentication options - const expectedChallenge = user.currentChallenge; - const userVerification = user.currentAuthenticationUserVerification; - - if (!id) { - const msg = `Invalid id: ${id}`; - console.error(`RP - authentication: ${msg}`); - return res.status(400).send({ errorMessage: msg }); - } - - const credIDBuffer = base64url.toBuffer(id); - const existingDevice = user.devices.find((device) => - device.credentialID.equals(credIDBuffer), - ); - - if (!existingDevice) { - const msg = `Could not find device matching ${id}`; - console.error(`RP - authentication: ${msg}`); - return res.status(400).send({ errorMessage: msg }); - } - - let verification; - try { - verification = await verifyAuthenticationResponse({ - credential: body, - expectedChallenge: `${expectedChallenge}`, - expectedOrigin: config.expectedOrigins, - expectedRPID: rpID, - authenticator: existingDevice, - advancedFIDOConfig: { userVerification }, - }); - } catch (error) { - const _error = error as Error; - console.error(`RP - authentication: ${_error.message}`); - return res.status(400).send({ errorMessage: _error.message }); - } - - const { verified, authenticationInfo } = verification; - - if (verified) { - existingDevice.counter = authenticationInfo.newCounter; - } - - return res.send({ - status: verified ? "ok" : "", - errorMessage: "", - }); -}); - -/** - * A catch-all for future test routes we might need to support but haven't yet defined (helps with - * discovering which routes, what methods, and what data need to be defined) - */ -fidoConformanceRouter.all("*", (req, res, next) => { - console.log(req.url); - console.log(req.method); - console.log(req.body); - - next(); -}); - -/** - * MDS3ROOT - * - * Downloaded from https://mds3.certinfra.fidoalliance.org/ - * - * Valid until 2045-01-31 @ 00:00 PST - * - * SHA256 Fingerprint - * 66:D9:77:0B:57:71:10:9B:8D:83:55:7B:A2:7D:58:9B:56:BD:B3:BF:DB:DE:A2:D2:42:C4:CA:0D:57:70:A4:7C - */ -export const MDS3ROOT = `-----BEGIN CERTIFICATE----- -MIICaDCCAe6gAwIBAgIPBCqih0DiJLW7+UHXx/o1MAoGCCqGSM49BAMDMGcxCzAJ -BgNVBAYTAlVTMRYwFAYDVQQKDA1GSURPIEFsbGlhbmNlMScwJQYDVQQLDB5GQUtF -IE1ldGFkYXRhIDMgQkxPQiBST09UIEZBS0UxFzAVBgNVBAMMDkZBS0UgUm9vdCBG -QUtFMB4XDTE3MDIwMTAwMDAwMFoXDTQ1MDEzMTIzNTk1OVowZzELMAkGA1UEBhMC -VVMxFjAUBgNVBAoMDUZJRE8gQWxsaWFuY2UxJzAlBgNVBAsMHkZBS0UgTWV0YWRh -dGEgMyBCTE9CIFJPT1QgRkFLRTEXMBUGA1UEAwwORkFLRSBSb290IEZBS0UwdjAQ -BgcqhkjOPQIBBgUrgQQAIgNiAASKYiz3YltC6+lmxhPKwA1WFZlIqnX8yL5RybSL -TKFAPEQeTD9O6mOz+tg8wcSdnVxHzwnXiQKJwhrav70rKc2ierQi/4QUrdsPes8T -EirZOkCVJurpDFbXZOgs++pa4XmjYDBeMAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBQGcfeCs0Y8D+lh6U5B2xSrR74eHTAfBgNVHSMEGDAW -gBQGcfeCs0Y8D+lh6U5B2xSrR74eHTAKBggqhkjOPQQDAwNoADBlAjEA/xFsgri0 -xubSa3y3v5ormpPqCwfqn9s0MLBAtzCIgxQ/zkzPKctkiwoPtDzI51KnAjAmeMyg -X2S5Ht8+e+EQnezLJBJXtnkRWY+Zt491wgt/AwSs5PHHMv5QgjELOuMxQBc= ------END CERTIFICATE----- -`; - -// Set above root cert for use by MetadataService -SettingsService.setRootCertificates({ - identifier: "mds", - certificates: [MDS3ROOT], -}); -// Reset preset root certificates -SettingsService.setRootCertificates({ identifier: "apple", certificates: [] }); -SettingsService.setRootCertificates({ - identifier: "android-key", - certificates: [], -}); -SettingsService.setRootCertificates({ - identifier: "android-safetynet", - certificates: [], -}); diff --git a/index.ts b/index.ts deleted file mode 100644 index 39dca61..0000000 --- a/index.ts +++ /dev/null @@ -1,281 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -/** - * An example Express server showing off a simple integration of @simplewebauthn/server. - * - * The webpages served from ./public use @simplewebauthn/browser. - */ - -import fs from "fs"; -import http from "http"; -import https from "https"; - -import base64url from "base64url"; -import dotenv from "dotenv"; -import express from "express"; - -dotenv.config(); - -import type { - GenerateAuthenticationOptionsOpts, - GenerateRegistrationOptionsOpts, -} from "@simplewebauthn/server"; -import { - // Authentication - generateAuthenticationOptions, - generateRegistrationOptions, -} from "@simplewebauthn/server"; - -import { LoggedInUser } from "./example-server"; - -import cors from "cors"; -import { - googleOAuthVerifyToMintHandler, - googleOAuthVerifyToFetchPKPsHandler, -} from "./routes/auth/google"; -import { getAuthStatusHandler } from "./routes/auth/status"; -import limiter from "./routes/middlewares/limiter"; -import { storeConditionHandler } from "./routes/storeCondition"; -import apiKeyGateAndTracking from "./routes/middlewares/apiKeyGateAndTracking"; -import { - webAuthnVerifyRegistrationHandler, - webAuthnGenerateRegistrationOptionsHandler, - webAuthnVerifyToFetchPKPsHandler, -} from "./routes/auth/webAuthn"; -import { - discordOAuthVerifyToFetchPKPsHandler, - discordOAuthVerifyToMintHandler, -} from "./routes/auth/discord"; -import { - walletVerifyToMintHandler, - walletVerifyToFetchPKPsHandler, -} from "./routes/auth/wallet"; - -import { - fetchPKPsHandler, - mintNextAndAddAuthMethodsHandler, -} from "./routes/auth/mintAndFetch"; - -import config from "./config"; -import { - stytchOtpVerifyToFetchPKPsHandler, - stytchOtpVerifyToMintHandler, -} from "./routes/auth/stytchOtp"; -import { - otpVerifyToFetchPKPsHandler, - otpVerifyToMintHandler, -} from "./routes/auth/otp"; - -import { mintClaimedKeyId } from "./routes/auth/claim"; -import { registerPayerHandler } from "./routes/delegate/register"; -import { addPayeeHandler } from "./routes/delegate/user"; - -const app = express(); - -const { ENABLE_CONFORMANCE, ENABLE_HTTPS, RP_ID = "localhost" } = process.env; - -app.use(express.static("./public/")); -app.use(express.json()); -app.use(cors()); - -app.use(limiter); -app.use(apiKeyGateAndTracking); - -/** - * If the words "metadata statements" mean anything to you, you'll want to enable this route. It - * contains an example of a more complex deployment of SimpleWebAuthn with support enabled for the - * FIDO Metadata Service. This enables greater control over the types of authenticators that can - * interact with the Rely Party (a.k.a. "RP", a.k.a. "this server"). - */ -if (ENABLE_CONFORMANCE === "true") { - import("./fido-conformance").then( - ({ fidoRouteSuffix, fidoConformanceRouter }) => { - app.use(fidoRouteSuffix, fidoConformanceRouter); - }, - ); -} - -/** - * RP ID represents the "scope" of websites on which a authenticator should be usable. The Origin - * represents the expected URL from which registration or authentication occurs. - */ -export const rpID = RP_ID; - -/** - * 2FA and Passwordless WebAuthn flows expect you to be able to uniquely identify the user that - * performs registration or authentication. The user ID you specify here should be your internal, - * _unique_ ID for that user (uuid, etc...). Avoid using identifying information here, like email - * addresses, as it may be stored within the authenticator. - * - * Here, the example server assumes the following user has completed login: - */ -const loggedInUserId = "internalUserId"; - -const inMemoryUserDeviceDB: { [loggedInUserId: string]: LoggedInUser } = { - [loggedInUserId]: { - id: loggedInUserId, - username: `user@${rpID}`, - devices: [], - /** - * A simple way of storing a user's current challenge being signed by registration or authentication. - * It should be expired after `timeout` milliseconds (optional argument for `generate` methods, - * defaults to 60000ms) - */ - currentChallenge: undefined, - }, -}; - -/** - * Registration (a.k.a. "Registration") - */ -app.get("/generate-registration-options", (req, res) => { - const user = inMemoryUserDeviceDB[loggedInUserId]; - - const { - /** - * The username can be a human-readable name, email, etc... as it is intended only for display. - */ - username, - devices, - } = user; - - const opts: GenerateRegistrationOptionsOpts = { - rpName: "SimpleWebAuthn Example", - rpID, - userID: loggedInUserId, - userName: username, - timeout: 60000, - attestationType: "none", - /** - * Passing in a user's list of already-registered authenticator IDs here prevents users from - * registering the same device multiple times. The authenticator will simply throw an error in - * the browser if it's asked to perform registration when one of these ID's already resides - * on it. - */ - excludeCredentials: devices.map((dev) => ({ - id: dev.credentialID, - type: "public-key", - transports: dev.transports, - })), - /** - * The optional authenticatorSelection property allows for specifying more constraints around - * the types of authenticators that users to can use for registration - */ - authenticatorSelection: { - userVerification: "required", - residentKey: "required", - }, - /** - * Support the two most common algorithms: ES256, and RS256 - */ - supportedAlgorithmIDs: [-7], - }; - - const options = generateRegistrationOptions(opts); - - /** - * The server needs to temporarily remember this value for verification, so don't lose it until - * after you verify an authenticator response. - */ - inMemoryUserDeviceDB[loggedInUserId].currentChallenge = options.challenge; - - res.send(options); -}); - -/** - * Login (a.k.a. "Authentication") - */ -app.get("/generate-authentication-options", (req, res) => { - // You need to know the user by this point - const user = inMemoryUserDeviceDB[loggedInUserId]; - - const opts: GenerateAuthenticationOptionsOpts = { - timeout: 60000, - allowCredentials: user.devices.map((dev) => ({ - id: dev.credentialID, - type: "public-key", - transports: dev.transports, - })), - userVerification: "required", - rpID, - }; - - const options = generateAuthenticationOptions(opts); - - /** - * The server needs to temporarily remember this value for verification, so don't lose it until - * after you verify an authenticator response. - */ - inMemoryUserDeviceDB[loggedInUserId].currentChallenge = options.challenge; - - res.send(options); -}); - -// --- Store condition -app.post("/store-condition", storeConditionHandler); - -// --- Mint PKP for authorized account -app.post("/mint-next-and-add-auth-methods", mintNextAndAddAuthMethodsHandler); - -// --- Fetch PKPs tied to authorized account -app.post("/fetch-pkps-by-auth-method", fetchPKPsHandler); - -// --- Poll minting progress -app.get("/auth/status/:requestId", getAuthStatusHandler); - -// -- Payment Delegation -app.post("/register-payer", registerPayerHandler); -app.post("/add-users", addPayeeHandler); - -// *** Deprecated *** - -app.post("/auth/google", googleOAuthVerifyToMintHandler); -app.post("/auth/discord", discordOAuthVerifyToMintHandler); -app.post("/auth/wallet", walletVerifyToMintHandler); -app.post("/auth/otp", otpVerifyToMintHandler); -app.post("/auth/stytch-otp", stytchOtpVerifyToMintHandler); - -app.post("/auth/google/userinfo", googleOAuthVerifyToFetchPKPsHandler); -app.post("/auth/discord/userinfo", discordOAuthVerifyToFetchPKPsHandler); -app.post("/auth/wallet/userinfo", walletVerifyToFetchPKPsHandler); -app.post("/auth/otp/userinfo", otpVerifyToFetchPKPsHandler); -app.post("/auth/stytch-otp/userinfo", stytchOtpVerifyToFetchPKPsHandler); - -app.post("/auth/webauthn/userinfo", webAuthnVerifyToFetchPKPsHandler); - -app.post( - "/auth/webauthn/verify-registration", - webAuthnVerifyRegistrationHandler, -); -app.get( - "/auth/webauthn/generate-registration-options", - webAuthnGenerateRegistrationOptionsHandler, -); -app.post("/auth/claim", mintClaimedKeyId); - - -if (ENABLE_HTTPS) { - const host = "0.0.0.0"; - const port = 443; - - https - .createServer( - { - /** - * See the README on how to generate this SSL cert and key pair using mkcert - */ - key: fs.readFileSync(`./${rpID}.key`), - cert: fs.readFileSync(`./${rpID}.crt`), - }, - app, - ) - .listen(port, host, () => { - console.log(`🚀 1: Server ready at ${host}:${port}`); - }); -} else { - const host = "127.0.0.1"; - const port = config.port; - - http.createServer(app).listen(port, () => { - console.log(`🚀 2: Server ready at ${host}:${port} 🌶️ NETWORK: ${process.env.NETWORK} | RPC: ${process.env.LIT_TXSENDER_RPC_URL} |`); - }); -} diff --git a/lib/redisClient.ts b/lib/redisClient.ts deleted file mode 100644 index a668c0a..0000000 --- a/lib/redisClient.ts +++ /dev/null @@ -1,19 +0,0 @@ -import config from "../config"; - -import * as redis from "redis"; - -let redisClient: redis.RedisClientType; - -(async () => { - redisClient = redis.createClient({ - url: config.redisUrl, - }); - - redisClient.on("error", (error: Error) => - console.error(`Error : ${error}`), - ); - - await redisClient.connect(); -})(); - -export default redisClient!; diff --git a/lib/sequencer.ts b/lib/sequencer.ts deleted file mode 100644 index 70cf70f..0000000 --- a/lib/sequencer.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Wallet, providers } from "ethers"; -import crypto from "crypto"; -export type Action = { - //TODO: Support arbitrary param count. - action: (params: any[]) => Promise; - params: any[]; - transactionData: Record; -}; - -export type ActionWrapper = { - action: Action; - id: string; - resolve: any; - reject: any; -}; - -export class SequencerError extends Error { - private _id: string; - constructor(message: string, id: string) { - super(message); - this._id = id; - } - - get Id(): string { - return this._id; - } - - public override toString(): string { - return ` - Message: ${this.message} - Name: ${this.name} - Id: ${this._id} - Stack: ${this.stack} - `; - } -} - -export class Sequencer { - private static _instance: Sequencer; - private static _wallet: Wallet | providers.JsonRpcProvider; - - private _queue: ActionWrapper[] = []; - private _running: boolean = false; - private _waitTime: number = process.env.CHAIN_POLLING_INTERVAL_MS - ? parseInt(process.env.CHAIN_POLLING_INTERVAL_MS, 10) - : 200; - private _nonce: number = -1; - private _pollingPromise: Promise | undefined; - private _actionIndex: Record> = {}; - - static get Instance(): Sequencer { - if (!Sequencer._instance) Sequencer._instance = new Sequencer(); - - return Sequencer._instance; - } - - static set Wallet(value: Wallet | providers.JsonRpcProvider) { - Sequencer._wallet = value; - } - - constructor() {} - - public wait(item: Action): Promise { - let rlv; - let rjct; - let prms = new Promise(async (resolve, reject) => { - rlv = resolve; - rjct = reject; - }); - let id = this._uuidv4(); - this._queue.push({ - action: item, - id, - resolve: rlv, - reject: rjct, - }); - - this._actionIndex[id] = prms; - - if (!this._running) this.start(); - - return prms; - } - - public async start(): Promise { - this._running = true; - this._doStartQueueListener(); - } - - private _doStartQueueListener(): Promise { - this._pollingPromise = new Promise(async (resolve, reject) => { - while (this._running) { - if (this._queue.length < 1) { - await new Promise((resolve, reject) => { - setTimeout(() => resolve(), this._waitTime); - }); - continue; - } - // shift cannot return null with the above check - const next: ActionWrapper = - this._queue.shift() as ActionWrapper; - try { - let nonce = - this._nonce === -1 - ? //@ts-ignore - await Sequencer._wallet.getTransactionCount() - : this._nonce += 1; - console.log("Nonce for tx: ", nonce); - let params = next.action.params; - let transactionData = next.action.transactionData - ? next.action.transactionData - : {}; - transactionData["nonce"] = nonce; - params.push(transactionData); - let res = await next.action.action.apply( - this, - params as any, - ); - next.resolve(res); - delete this._actionIndex[next.id]; - } catch (e) { - e = new SequencerError((e as Error).message, next.id); - console.error( - "[Sequencer] error while executing queued action", - (e as SequencerError).toString(), - ); - this._flush(e as Error); - this._nonce = -1; - } - } - }); - - return this._pollingPromise; - } - - private _uuidv4() { - //@ts-ignore - return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) => - ( - crypto.webcrypto.getRandomValues(new Uint8Array(1))[0] & - (15 >> (c / 4)) - ).toString(16), - ); - } - - private _flush(e: Error): void { - while (this._queue.length > 0) { - const action = this._queue.pop(); - action?.reject(e); - } - this._pollingPromise = undefined; - } -} diff --git a/lit.ts b/lit.ts deleted file mode 100644 index b2517f0..0000000 --- a/lit.ts +++ /dev/null @@ -1,911 +0,0 @@ -import { ethers, utils } from "ethers"; -import fs from "fs"; -import { RedisClientType } from "redis"; -import config from "./config"; -import redisClient from "./lib/redisClient"; -import { AuthMethodType, PKP, StoreConditionWithSigner } from "./models"; -import { Sequencer } from "./lib/sequencer"; -import { parseEther } from "ethers/lib/utils"; -import { CapacityToken } from "lit"; -import { LIT_NETWORK_VALUES } from "@lit-protocol/constants"; -// import { -// manzano, -// datilDev, -// datilTest, -// habanero, -// datil, -// } from "@lit-protocol/contracts"; - -import { - datil, - datilDev, - datilTest, - habanero, - manzano, -} from "@lit-protocol/contracts"; - -function getContractFromWorker( - network: LIT_NETWORK_VALUES, - contractName: string, - signer?: ethers.Wallet, -) { - signer = signer ?? getSigner(); - - let contractsDataRes; - switch (network) { - case "manzano": - contractsDataRes = manzano; - break; - case "habanero": - contractsDataRes = habanero; - break; - case "datil-dev": - contractsDataRes = datilDev; - break; - case "datil-test": - contractsDataRes = datilTest; - - break; - case "datil": - contractsDataRes = datil; - break; - default: - throw new Error(`Unsupported network: ${network}`); - } - - const contractList = contractsDataRes.data as any; - - console.log( - `Attempting to get contract "${contractName} from "${network}"`, - ); - - // find object where name is == contractName - const contractData = contractList.find( - (contract: any) => contract.name === contractName, - ); - - // -- validate - if (!contractData) { - throw new Error(`No contract found with name ${contractName}`); - } - - const contract = contractData.contracts[0]; - console.log(`Contract address: ${contract.address_hash}"`); - - // -- ethers contract - const ethersContract = new ethers.Contract( - contract.address_hash, - contract.ABI, - signer, - ); - - return ethersContract; -} - -export function getProvider() { - return new ethers.providers.JsonRpcProvider( - process.env.LIT_TXSENDER_RPC_URL, - ); -} - -function getSigner() { - const provider = getProvider(); - const privateKey = process.env.LIT_TXSENDER_PRIVATE_KEY!; - const signer = new ethers.Wallet(privateKey, provider); - return signer; -} - -function getContract(abiPath: string, deployedContractAddress: string) { - const signer = getSigner(); - const contractJson = JSON.parse(fs.readFileSync(abiPath, "utf8")); - - let ethersContract; - - // -- when passing in the API directly - try { - ethersContract = new ethers.Contract( - deployedContractAddress, - contractJson, - signer, - ); - - // -- when reading from a file which we have to access the ABI property - } catch (e) { - ethersContract = new ethers.Contract( - deployedContractAddress, - contractJson.abi, - signer, - ); - } - return ethersContract; -} - -function getAccessControlConditionsContract() { - switch (config.network) { - case "serrano": - return getContract( - "./contracts/serrano/AccessControlConditions.json", - config?.serranoContract - ?.accessControlConditionsAddress as string, - ); - case "cayenne": - return getContract( - "./contracts/cayenne/AccessControlConditions.json", - config?.cayenneContracts - ?.accessControlConditionsAddress as string, - ); - } -} - -function getPkpHelperContractAbiPath() { - if (config.useSoloNet) { - return "./contracts/serrano/SoloNetPKPHelper.json"; - } - - switch (config.network) { - case "serrano": - return "./contracts/serrano/PKPHelper.json"; - case "cayenne": - return "./contracts/cayenne/PKPHelper.json"; - } -} - -function getPkpNftContractAbiPath() { - if (config.useSoloNet) { - return "./contracts/serrano/SoloNetPKP.json"; - } - switch (config.network) { - case "serrano": - return "./contracts/serrano/PKPNFT.json"; - case "cayenne": - return "./contracts/cayenne/PKPNFT.json"; - } -} - -async function getPkpHelperContract(network: string) { - let contract: ethers.Contract | undefined; - - switch (network) { - case "serrano": - contract = getContract( - getPkpHelperContractAbiPath()!, - config?.serranoContract?.pkpHelperAddress as string, - ); - break; - case "cayenne": - contract = getContract( - getPkpHelperContractAbiPath()!, - config?.cayenneContracts?.pkpHelperAddress as string, - ); - break; - case "manzano": - contract = getContractFromWorker("manzano", "PKPHelper"); - break; - case "habanero": - contract = getContractFromWorker("habanero", "PKPHelper"); - break; - case "datil-dev": - contract = getContractFromWorker("datil-dev", "PKPHelper"); - break; - case "datil-test": - contract = getContractFromWorker("datil-test", "PKPHelper"); - break; - case "datil": - contract = getContractFromWorker("datil", "PKPHelper"); - break; - default: - throw new Error(`Unsupported network: ${network}`); - } - - if (!contract) { - throw new Error("PKP Helper contract not available"); - } - - return contract; -} - -async function getPermissionsContract() { - let contract: ethers.Contract | undefined; - - switch (config.network) { - case "serrano": - contract = getContract( - "./contracts/serrano/PKPPermissions.json", - config?.serranoContract?.pkpPermissionsAddress as string, - ); - break; - case "cayenne": - contract = getContract( - "./contracts/cayenne/PKPPermissions.json", - config?.cayenneContracts?.pkpPermissionsAddress as string, - ); - break; - case "manzano": - contract = getContractFromWorker("manzano", "PKPPermissions"); - break; - case "habanero": - contract = getContractFromWorker("habanero", "PKPPermissions"); - break; - case "datil-dev": - contract = getContractFromWorker("datil-dev", "PKPPermissions"); - break; - case "datil-test": - contract = getContractFromWorker("datil-test", "PKPPermissions"); - break; - case "datil": - contract = getContractFromWorker("datil", "PKPPermissions"); - break; - default: - throw new Error(`Unsupported network: ${config.network}`); - } - - if (!contract) { - throw new Error("PKPPermissions contract not available"); - } - - return contract; -} - -async function getPaymentDelegationContract() { - switch (config.network) { - case "manzano": - return getContractFromWorker("manzano", "PaymentDelegation"); - case "habanero": - return getContractFromWorker("habanero", "PaymentDelegation"); - default: - throw new Error( - "PaymentDelegation contract not available for this network", - ); - } -} - -async function getPkpNftContract(network: string) { - let contract: ethers.Contract | undefined; - - switch (network) { - case "serrano": - contract = getContract( - getPkpNftContractAbiPath()!, - config?.serranoContract?.pkpNftAddress as string, - ); - break; - case "cayenne": - contract = getContract( - getPkpNftContractAbiPath()!, - config?.cayenneContracts?.pkpNftAddress as string, - ); - break; - case "manzano": - contract = getContractFromWorker("manzano", "PKPNFT"); - break; - case "habanero": - contract = getContractFromWorker("habanero", "PKPNFT"); - break; - case "datil-dev": - contract = getContractFromWorker("datil-dev", "PKPNFT"); - break; - case "datil-test": - contract = getContractFromWorker("datil-test", "PKPNFT"); - break; - case "datil": - contract = getContractFromWorker("datil", "PKPNFT"); - break; - } - - if (!contract) { - throw new Error("PKP NFT contract not available"); - } - - return contract; -} - -function prependHexPrefixIfNeeded(hexStr: string) { - if (hexStr.substring(0, 2) === "0x") { - return hexStr; - } - return `0x${hexStr}`; -} - -export async function getPkpEthAddress(tokenId: string) { - const pkpNft = await getPkpNftContract(config.network); - - return pkpNft.getEthAddress(tokenId)!; -} - -export async function getPkpPublicKey(tokenId: string) { - const pkpNft = await getPkpNftContract(config.network); - - return pkpNft.getPubkey(tokenId); -} - -export async function setSequencerWallet( - wallet: ethers.Wallet | ethers.providers.JsonRpcProvider, -) { - Sequencer.Wallet = wallet; -} - -export async function storeConditionWithSigner( - storeConditionRequest: StoreConditionWithSigner, -): Promise { - console.log("Storing condition"); - const accessControlConditions = getAccessControlConditionsContract(); - const tx = accessControlConditions?.storeConditionWithSigner( - prependHexPrefixIfNeeded(storeConditionRequest.key), - prependHexPrefixIfNeeded(storeConditionRequest.value), - prependHexPrefixIfNeeded(storeConditionRequest.securityHash), - storeConditionRequest.chainId, - storeConditionRequest.permanent, - utils.getAddress(storeConditionRequest.creatorAddress), - ); - console.log("tx", tx); - return tx; -} - -export async function mintPKPV2({ - keyType, - permittedAuthMethodTypes, - permittedAuthMethodIds, - permittedAuthMethodPubkeys, - permittedAuthMethodScopes, - addPkpEthAddressAsPermittedAddress, - sendPkpToItself, -}: { - keyType: string; - permittedAuthMethodTypes: string[]; - permittedAuthMethodIds: string[]; - permittedAuthMethodPubkeys: string[]; - permittedAuthMethodScopes: string[][]; - addPkpEthAddressAsPermittedAddress: boolean; - sendPkpToItself: boolean; -}): Promise { - console.log( - "In mintPKPV2", - keyType, - permittedAuthMethodTypes, - permittedAuthMethodIds, - permittedAuthMethodPubkeys, - permittedAuthMethodScopes, - addPkpEthAddressAsPermittedAddress, - sendPkpToItself, - ); - - const pkpHelper = await getPkpHelperContract(config.network); - - const pkpNft = await getPkpNftContract(config.network); - - // first get mint cost - const mintCost = await pkpNft.mintCost(); - - const mintTxData = - await pkpHelper.populateTransaction.mintNextAndAddAuthMethods( - keyType, - permittedAuthMethodTypes, - permittedAuthMethodIds, - permittedAuthMethodPubkeys, - permittedAuthMethodScopes, - addPkpEthAddressAsPermittedAddress, - sendPkpToItself, - { value: mintCost }, - ); - - // on our new arb l3, the stylus gas estimation can be too low when interacting with stylus contracts. manually estimate gas and add 5%. - let gasLimit; - - try { - gasLimit = await pkpNft.provider.estimateGas(mintTxData); - // since the gas limit is a BigNumber we have to use integer math and multiply by 200 then divide by 100 instead of just multiplying by 1.05 - gasLimit = gasLimit - .mul( - ethers.BigNumber.from( - parseInt(process.env["GAS_LIMIT_INCREASE_PERCENTAGE"]!) || - 200, - ), - ) - .div(ethers.BigNumber.from(100)); - - console.log("adjustedGasLimit:", gasLimit); - } catch (e) { - console.error("❗️ Error while estimating gas, using default"); - gasLimit = ethers.utils.hexlify(5000000); - } - - try { - const tx = await pkpHelper.mintNextAndAddAuthMethods( - keyType, - permittedAuthMethodTypes, - permittedAuthMethodIds, - permittedAuthMethodPubkeys, - permittedAuthMethodScopes, - addPkpEthAddressAsPermittedAddress, - sendPkpToItself, - { value: mintCost, gasLimit: gasLimit }, - ); - - await tx.wait(); - console.log("tx", tx); - return tx; - } catch (e: any) { - console.log("❗️ Error while minting pkp:", e); - throw e; - } -} - -export async function mintPKP({ - authMethodType, - authMethodId, - authMethodPubkey, -}: { - authMethodType: AuthMethodType; - authMethodId: string; - authMethodPubkey: string; -}): Promise { - console.log("in mintPKP"); - const pkpHelper = await getPkpHelperContract(config.network); - const pkpNft = await getPkpNftContract(config.network); - - // first get mint cost - const mintCost = await pkpNft.mintCost(); - - const sequencer = Sequencer.Instance; - - Sequencer.Wallet = getSigner(); - // then, mint PKP using helper - if (config.useSoloNet) { - console.info("Minting PKP against SoloNet PKPHelper contract", { - authMethodType, - authMethodId, - authMethodPubkey, - }); - - // Get next unminted PKP pubkey. - const pkpPubkeyForPkpNft = await getNextAvailablePkpPubkey(redisClient); - - const tx = await sequencer - .wait({ - action: pkpHelper.mintAndAddAuthMethods, - params: [ - pkpPubkeyForPkpNft, // In SoloNet, we choose which PKP pubkey we would like to attach to the minted PKP. - [authMethodType], - [authMethodId], - [authMethodPubkey], - [[ethers.BigNumber.from(1)]], - true, - false, - ], - transactionData: { value: mintCost }, - }) - .catch((e) => { - console.error("Error while minting pkp", e); - }); - - console.log("tx", tx); - return tx; - } else { - console.info("Minting PKP against PKPHelper contract", { - authMethodType, - authMethodId, - authMethodPubkey, - }); - const tx = await sequencer.wait({ - action: pkpHelper.mintNextAndAddAuthMethods, - params: [ - 2, - [authMethodType], - [authMethodId], - [authMethodPubkey], - [[ethers.BigNumber.from(1)]], - true, - true, - ], - transactionData: { value: mintCost }, - }); - console.log("tx", tx); - return tx; - } -} - -export async function claimPKP({ - keyId, - signatures, - authMethodType, - authMethodId, - authMethodPubkey, -}: { - keyId: string; - signatures: ethers.Signature[]; - authMethodType: AuthMethodType; - authMethodId: string; - authMethodPubkey: string; -}): Promise { - console.log("in claimPKP"); - const pkpHelper = await getPkpHelperContract(config.network); - const pkpNft = await getPkpNftContract(config.network); - - // first get mint cost - const mintCost = await pkpNft.mintCost(); - const sequencer = Sequencer.Instance; - - Sequencer.Wallet = getSigner(); - - // then, mint PKP using helper - if (config.useSoloNet) { - console.info("Minting PKP against SoloNet PKPHelper contract", { - authMethodType, - authMethodId, - authMethodPubkey, - }); - - // Get next unminted PKP pubkey. - const pkpPubkeyForPkpNft = await getNextAvailablePkpPubkey(redisClient); - - const tx = await sequencer - .wait({ - action: pkpHelper.mintAndAddAuthMethods, - params: [ - pkpPubkeyForPkpNft, // In SoloNet, we choose which PKP pubkey we would like to attach to the minted PKP. - [authMethodType], - [authMethodId], - [authMethodPubkey], - [[ethers.BigNumber.from("1")]], - true, - false, - ], - transactionData: { value: mintCost }, - }) - .catch((e) => { - console.error("Error while minting pkp", e); - }); - - console.log("tx", tx); - return tx; - } else { - console.info("Minting PKP against PKPHelper contract", { - authMethodType, - authMethodId, - authMethodPubkey, - }); - let tx = await sequencer.wait({ - action: pkpHelper.claimAndMintNextAndAddAuthMethods, - params: [ - [2, `0x${keyId}`, signatures], - [ - 2, - [], - [], - [], - [], - [authMethodType], - [`0x${authMethodId}`], - [authMethodPubkey], - [[ethers.BigNumber.from(1)]], - ], - ], - transactionData: { value: mintCost }, - }); - console.log("tx", tx); - return tx; - } -} - -export async function getPKPsForAuthMethod({ - authMethodType, - idForAuthMethod, -}: { - authMethodType: AuthMethodType; - idForAuthMethod: string; -}) { - if (!authMethodType || !idForAuthMethod) { - throw new Error( - "Auth method type and id are required to fetch PKPs by auth method", - ); - } - - const pkpPermissions = await getPermissionsContract(); - if (pkpPermissions) { - try { - const tokenIds = await pkpPermissions.getTokenIdsForAuthMethod( - authMethodType, - idForAuthMethod, - ); - const pkps: PKP[] = []; - for (let i = 0; i < tokenIds.length; i++) { - const pubkey = await pkpPermissions.getPubkey(tokenIds[i]); - if (pubkey) { - const ethAddress = ethers.utils.computeAddress(pubkey); - pkps.push({ - tokenId: tokenIds[i], - publicKey: pubkey, - ethAddress: ethAddress, - }); - } - } - return pkps; - } catch (err: unknown) { - throw new Error(`Unable to get PKPs for auth method: ${(err as Error).message}`); - } - } else { - throw new Error("Unable to connect to PKP Permissions contract"); - } -} - -export async function getPubkeyForAuthMethod({ - authMethodType, - authMethodId, -}: { - authMethodType: AuthMethodType; - authMethodId: string; -}): Promise { - const permissionsContract = await getPermissionsContract(); - const pubkey = permissionsContract.getUserPubkeyForAuthMethod( - authMethodType, - authMethodId, - ); - return pubkey; -} - -export async function sendLitTokens( - recipientPublicKey: string, - amount: string, -) { - const signer = getSigner(); - - const tx = await signer.sendTransaction({ - to: recipientPublicKey, - value: parseEther(amount), - }); - - const reciept = await tx.wait(); - - console.log("Sent LIT tokens", reciept.blockHash); - - return reciept.blockHash; -} - -export async function mintCapacityCredits({ - signer, -}: { - signer: ethers.Wallet; -}) { - if (config.network === "serrano" || config.network === "cayenne") { - throw new Error( - `Payment delegation is not available on ${config.network}`, - ); - } - - const contract = await getContractFromWorker( - config.network, - "RateLimitNFT", - signer, - ); - - if (!contract) { - throw new Error("Contract is not available"); - } - - // set the expiration to midnight, 15 days from now - const timestamp = Date.now() + 15 * 24 * 60 * 60 * 1000; - const futureDate = new Date(timestamp); - futureDate.setUTCHours(0, 0, 0, 0); - - // Get the Unix timestamp in seconds - const expires = Math.floor(futureDate.getTime() / 1000); - console.log("expires is set to", expires); - - const requestsPerKilosecond = 150; - - let cost; - try { - cost = await contract.functions.calculateCost( - requestsPerKilosecond, - expires, - ); - } catch (e) { - console.error( - "Unable to estimate gas cost for minting capacity credits", - e, - ); - return; - } - - const tx = await contract.functions.mint(expires, { - value: cost.toString(), - }); - console.log("mint tx hash: ", tx.hash); - const res = await tx.wait(); - - const tokenIdFromEvent = res.events[0].topics[3]; - - return { tx, capacityTokenId: tokenIdFromEvent }; -} - -function normalizeTokenURI(tokenURI: string) { - const base64 = tokenURI[0]; - - const data = base64.split("data:application/json;base64,")[1]; - const dataToString = Buffer.from(data, "base64").toString("binary"); - - return JSON.parse(dataToString); -} - -function normalizeCapacity(capacity: any) { - const [requestsPerMillisecond, expiresAt] = capacity[0]; - - return { - requestsPerMillisecond: parseInt(requestsPerMillisecond.toString()), - expiresAt: { - timestamp: parseInt(expiresAt.toString()), - }, - }; -} - -async function queryCapacityCredit( - contract: ethers.Contract, - owner: string, - tokenIndexForUser: number, -) { - console.log( - `Querying capacity credit for owner ${owner} at index ${tokenIndexForUser}`, - ); - - const tokenId = ( - await contract.functions.tokenOfOwnerByIndex(owner, tokenIndexForUser) - ).toString(); - console.log(`Actually querying tokenId ${tokenId}`); - - try { - const [URI, capacity, isExpired] = await Promise.all([ - contract.functions.tokenURI(tokenId).then(normalizeTokenURI), - contract.functions.capacity(tokenId).then(normalizeCapacity), - contract.functions.isExpired(tokenId), - ]); - - return { - tokenId, - URI, - capacity, - isExpired: isExpired[0], - } as CapacityToken; - } catch (e) { - // Makes the stack trace a bit more clear as to what actually failed - throw new Error( - `Failed to fetch details for capacity token ${tokenId}: ${e}`, - ); - } -} - -export async function queryCapacityCredits(signer: ethers.Wallet) { - if (config.network === "serrano" || config.network === "cayenne") { - throw new Error( - `Payment delegation is not available on ${config.network}`, - ); - } - - const contract = await getContractFromWorker( - config.network, - "RateLimitNFT", - ); - const count = parseInt(await contract.functions.balanceOf(signer.address)); - - return Promise.all( - [...new Array(count)].map((_, i) => - queryCapacityCredit(contract, signer.address, i), - ), - ) as Promise; -} - -export async function addPaymentDelegationPayee({ - wallet, - payeeAddresses, -}: { - wallet: ethers.Wallet; - payeeAddresses: string[]; -}) { - if (config.network === "serrano" || config.network === "cayenne") { - throw new Error( - `Payment delegation is not available on ${config.network}`, - ); - } - - // get the first token that is not expired - const capacityTokens: CapacityToken[] = await queryCapacityCredits(wallet); - console.log("Got capacity tokens", JSON.stringify(capacityTokens, null, 2)); - const capacityToken = capacityTokens.find((token) => !token.isExpired); - - let tokenId: number | null = null; - - if (!capacityToken) { - // mint a new token - const minted = await mintCapacityCredits({ signer: wallet }); - - if (!minted) { - throw new Error("Failed to mint capacity credits"); - } - - console.log( - "No capacity token found, minted a new one:", - minted.capacityTokenId, - ); - tokenId = minted.capacityTokenId; - } else { - tokenId = capacityToken.tokenId; - } - - if (!tokenId) { - throw new Error("Failed to get ID for capacity token"); - } - - // add payer in contract - const provider = getProvider(); - const paymentDelegationContract = await getContractFromWorker( - config.network, - "PaymentDelegation", - wallet, - ); - - const tx = await paymentDelegationContract.functions.delegatePaymentsBatch( - payeeAddresses, - ); - console.log("tx hash for delegatePaymentsBatch()", tx.hash); - await tx.wait(); - return tx; -} - -// export function packAuthData({ -// credentialPublicKey, -// credentialID, -// counter, -// }: { -// credentialPublicKey: Buffer; -// credentialID: Buffer; -// counter: number; -// }): Buffer { -// // mint a PKP for this user -// // first, pack the credential public key, credential id, and counter into bytes -// const formattedJson = JSON.stringify({ -// pubkey: credentialPublicKey.toString("base64"), -// cid: credentialID.toString("base64"), -// counter, -// }); -// console.log("formattedJson", formattedJson); -// const packed = Buffer.from(formattedJson, "utf8"); -// console.log("packed", packed); -// return packed; -// } - -/** - * This function returns the next available PKP that can be minted. Specifically, - * - * 1. Gets 1 unminted PKP from the data store - eg. ZRANGEBYSCORE myzset 0 0 LIMIT 0 1 - * (assuming all unminted PKPs have a score of 0) - * 2. Sets the score of the PKP to 1 to mark it as "used", optimistically - eg. ZADD myzset 1 0x1234 - * 3. Returns the PKP public key. - */ -export async function getNextAvailablePkpPubkey(redisClient: RedisClientType) { - // 1. Get 1 unminted PKP from the data store - const unmintedPkpPubkey = await redisClient.zRangeByScore( - "pkp_public_keys", - 0, - 0, - { - LIMIT: { - offset: 0, - count: 1, - }, - }, - ); - - if (unmintedPkpPubkey.length === 0) { - throw new Error("No more PKPs available"); - } - - const unmintedPkpPubkeyToUse = unmintedPkpPubkey[0]; - - // 2. Set the score of the PKP to 1 to mark it as "used", optimistically - await redisClient.zAdd("pkp_public_keys", { - score: 1, - value: unmintedPkpPubkeyToUse, - }); - - // 3. Return the PKP public key - return unmintedPkpPubkeyToUse; -} diff --git a/models/index.ts b/models/index.ts deleted file mode 100644 index c7d2d25..0000000 --- a/models/index.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { LIT_NETWORK_VALUES } from "@lit-protocol/constants"; -import type { RegistrationCredentialJSON } from "@simplewebauthn/typescript-types"; -import { ethers } from "ethers"; - -export interface GoogleOAuthVerifyRegistrationRequest { - idToken: string; -} - -export interface DiscordOAuthVerifyRegistrationRequest { - accessToken: string; -} - -export interface OTPAuthVerifyRegistrationRequest { - accessToken: string; -} - -export interface MintNextAndAddAuthMethodsRequest { - keyType: string; - permittedAuthMethodTypes: string[]; - permittedAuthMethodIds: string[]; - permittedAuthMethodPubkeys: string[]; - permittedAuthMethodScopes: string[][]; - addPkpEthAddressAsPermittedAddress: boolean; - sendPkpToItself: boolean; -} - -export interface Claim { - derivedKeyId: string; - signatures: ethers.Signature[]; - pubkey: string; - authMethodType: number; -} - -export interface ClaimAndMintResponse { - tx: string; -} -export interface MintNextAndAddAuthMethodsResponse - extends AuthMethodVerifyRegistrationResponse {} - -export interface FetchRequest { - authMethodId: string; - authMethodType: number; - authMethodPubKey?: string; -} - -export interface AuthMethodVerifyRegistrationResponse { - requestId?: string; - error?: string; -} - -export interface AuthMethodVerifyToFetchResponse { - pkps?: PKP[]; - error?: string; -} - -export interface WebAuthnVerifyRegistrationRequest { - credential: RegistrationCredentialJSON; -} - -export interface GetAuthStatusRequestParams { - requestId: string; -} - -export interface GetAuthStatusResponse { - status?: AuthStatus; - pkpTokenId?: string; - pkpEthAddress?: string; - pkpPublicKey?: string; - error?: string; -} - -export enum AuthStatus { - InProgress = "InProgress", - Succeeded = "Succeeded", - Failed = "Failed", -} - -export interface StoreConditionRequest { - sessionSig: SessionSig; - key: string; - value: string; - securityHash: string; - chainId: number; - permanent: boolean; - capabilityProtocolPrefix: CapabilityProtocolPrefix; -} - -export interface StoreConditionResponse { - txHash?: string; - error?: string; -} - -export interface OtpVerificationPayload { - userId: string; - status: boolean; -} - -export interface StoreConditionWithSigner { - key: string; - value: string; - securityHash: string; - chainId: number; - permanent: boolean; - creatorAddress: string; -} - -export interface AuthSig { - sig: string; - derivedVia: string; - signedMessage: string; - address: string; -} - -export interface SessionSig { - sig: string; - derivedVia: string; - signedMessage: string; - address: string; - algo: string; -} - -export interface SessionSigSignedMessage { - sessionKey: string; - resources: string[]; - capabilities: Array; - issuedAt: string; - expiration: string; -} - -export interface Contract { - accessControlConditionsAddress: string; - pkpHelperAddress: string; - pkpPermissionsAddress: string; - pkpNftAddress: string; -} - -export interface Config { - redisUrl: string; - port: number; - enableHttps: boolean; - expectedOrigins: string[]; - serranoContract?: Contract; - cayenneContracts?: Contract; - datilDevContracts?: Contract; - useSoloNet: boolean; - network: LIT_NETWORK_VALUES; -} - -export enum CapabilityProtocolPrefix { - LitEncryptionCondition = "litEncryptionCondition", - LitSigningCondition = "litSigningCondition", -} - -export interface CapabilityObject { - def?: string[]; - tar?: { [key: string]: string }; - ext?: { [key: string]: string }; -} - -export enum AuthMethodType { - EthWallet = 1, - LitAction, - WebAuthn, - Discord, - Google, - GoogleJwt, - OTP, - StytchOtp = 9, -} - -export interface PKP { - tokenId: string; - publicKey: string; - ethAddress: string; -} - -export interface ResolvedAuthMethod { - appId: string; - userId: string; -} diff --git a/package.json b/package.json index 3552733..cf732d2 100644 --- a/package.json +++ b/package.json @@ -1,51 +1,34 @@ { - "name": "relay-server", - "version": "1.0.0", - "description": "Relay Server for facilitating interactions with Lit Protocol smart contracts.", - "main": "index.js", - "scripts": { - "dev": "nodemon index.ts", - "start": "node dist/index.js", - "build": "tsc", - "postinstall": "cp patch/ethersCompat.d.ts node_modules/siwe/dist/ethersCompat.d.ts" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "@lit-protocol/constants": "^6.2.4", - "@lit-protocol/contracts": "^0.0.39", - "@lit-protocol/lit-node-client-nodejs": "^6.2.4", - "@simplewebauthn/server": "6.2.1", - "base64url": "^3.0.1", - "cbor": "^8.1.0", - "cors": "^2.8.5", - "dotenv": "^16.0.3", - "elliptic": "^6.5.4", - "ethereum-cryptography": "^2.1.3", - "ethers": "^5.7.2", - "express": "^4.17.1", - "express-rate-limit": "^6.6.0", - "google-auth-library": "^8.7.0", - "js-base64": "^3.7.2", - "node-fetch": "^2.6.0", - "rate-limit-redis": "^3.0.1", - "redis": "^4.4.0", - "siwe": "^2.3.2", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1", - "uint8arrays": "^3.0.0" - }, - "devDependencies": { - "@types/cbor": "^6.0.0", - "@types/cors": "^2.8.12", - "@types/elliptic": "^6.4.14", - "@types/express": "^4.17.13", - "@types/jwk-to-pem": "^2.0.1", - "@types/node": "^16.7.4", - "@types/node-fetch": "^2.5.12", - "nodemon": "^2.0.12", - "ts-node": "^10.2.1", - "typescript": "^4.4.2" - } + "name": "relay-server-naga", + "version": "1.0.0", + "description": "Lit Protocol Auth Service", + "module": "src/server.ts", + "type": "module", + "scripts": { + "start": "bun run src/server.ts" + }, + "dependencies": { + "@elysiajs/bearer": "^1.2.0", + "@elysiajs/cors": "^1.2.0", + "@elysiajs/swagger": "^1.2.0", + "@lit-protocol/constants": "^7.0.6", + "@lit-protocol/contracts": "0.0.87", + "@simplewebauthn/server": "6.2.1", + "@simplewebauthn/typescript-types": "^8.3.4", + "@t3-oss/env-core": "^0.7.1", + "cors": "^2.8.5", + "elysia": "^1.2.12", + "elysia-rate-limit": "^4.1.0", + "google-auth-library": "^9.15.1", + "json-with-bigint": "^2.4.2", + "pino": "^9.6.0", + "pino-pretty": "^13.0.0", + "redis": "^4.6.13", + "viem": "^2.23.2", + "zod": "^3.24.2" + }, + "devDependencies": { + "bun-types": "latest", + "typescript": "^5.3.3" + } } diff --git a/patch/ethersCompat.d.ts b/patch/ethersCompat.d.ts deleted file mode 100644 index ce04e9b..0000000 --- a/patch/ethersCompat.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -// This file is used to patch a compatibility issue with siwe and -// ethers v5. - -import { ethers } from 'ethers'; -type ProviderV5 = ethers.providers.Provider; -// @ts-expect-error -- v6 compatibility hack -type ProviderV6 = ethers.Provider; -export type Provider = ProviderV6 extends undefined ? ProviderV5 : ProviderV6; -export declare const verifyMessage: any; -export declare const hashMessage: any; -export declare const getAddress: any; -export { }; diff --git a/public/index.html b/public/index.html deleted file mode 100644 index 3037f80..0000000 --- a/public/index.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - SimpleWebAuthn Example Site - - -
-

SimpleWebAuthn Example Site

- -
-
- -

-

-
- Console - -
-
- -
-
-
- - -
- - -
-
- -
-

-

-
- Console - -
-
-
- -

-
- - - diff --git a/public/styles.css b/public/styles.css deleted file mode 100644 index 684cad5..0000000 --- a/public/styles.css +++ /dev/null @@ -1,95 +0,0 @@ -:root { - --background: #f7f7f7; - --text: black; - --button: white; - --button-active: #eeeeee; - --button-hover: #efefef; -} - -* { - font-size: 16px; - font-family: 'Courier New', Courier, monospace; -} - -body { - margin: 0; - padding: 0; - display: flex; - justify-content: center; - align-items: center; - height: 100vh; - background: var(--background); - color: var(--text); -} - -h1 { - font-size: 2.25rem; -} - -button { - padding: 0.5rem; - background: var(--button); - color: var(--text); - border-radius: 0.25rem; - width: 13rem; -} - -button:active { - background: var(--button-active); -} - -button:hover { - background: var(--button-hover); -} - -details { - margin: 0.75rem 0; -} - -.container { - width: 95%; - margin: auto; - text-align: center; - padding: 0.5rem; -} - -.error { - color: red; -} - -.success { - color: #11a000; -} - -#regDebug, #authDebug { - background: var(--button-hover); - color: var(--text); - border-radius: 0.25rem; - text-align: left; - font-size: 0.7rem; - padding: 0.5rem; - height: 15rem; - width: 95%; - overflow-y: auto; -} - -/* Desktop Styles */ -@media (min-width: 75rem) { - * { - font-size: 20px; - } - - .container { - width: 45rem; - } -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #1c2128; - --text: #adbac7; - --button: #373e47; - --button-active: #eeeeee; - --button-hover: #444c56; - } -} diff --git a/requests/get-status-requestId.http b/requests/get-status-requestId.http deleted file mode 100644 index f7c7d74..0000000 --- a/requests/get-status-requestId.http +++ /dev/null @@ -1,5 +0,0 @@ -# Poll status of minting PKP transaction -# GET /auth/status/:requestId - -GET http://127.0.0.1:6380/auth/status/0xa5dfce3341fa9ca44e3cbaa41da2cf7f6d6858ca5a3b71eafae090ab5ca249af -api-key: your-api-key-value \ No newline at end of file diff --git a/requests/mint-next-and-add-auth-methods.http b/requests/mint-next-and-add-auth-methods.http deleted file mode 100644 index 97ee213..0000000 --- a/requests/mint-next-and-add-auth-methods.http +++ /dev/null @@ -1,13 +0,0 @@ -POST http://127.0.0.1:6380/mint-next-and-add-auth-methods -Content-Type: application/json -api-key: your-api-key-value - -{ - "keyType": 2, - "permittedAuthMethodTypes": [2], - "permittedAuthMethodIds": ["0x170d13600caea2933912f39a0334eca3d22e472be203f937c4bad0213d92ed71"], - "permittedAuthMethodPubkeys": ["0x"], - "permittedAuthMethodScopes": [[1]], - "addPkpEthAddressAsPermittedAddress": true, - "sendPkpToItself": true -} diff --git a/routes/auth/claim.ts b/routes/auth/claim.ts deleted file mode 100644 index b4ae355..0000000 --- a/routes/auth/claim.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Request } from "express"; -import { Response } from "express-serve-static-core"; -import { ParsedQs } from "qs"; -import { AuthMethodType } from "../../models/index"; -import { - AuthMethodVerifyRegistrationResponse, - Claim, - ClaimAndMintResponse, -} from "../../models"; -import { claimPKP } from "../../lit"; - -export async function mintClaimedKeyId( - req: Request< - {}, - AuthMethodVerifyRegistrationResponse, - Claim, - ParsedQs, - Record - >, - res: Response< - AuthMethodVerifyRegistrationResponse, - Record, - number - >, -) { - const { derivedKeyId, authMethodType, signatures } = req.body; - try { - let mintTx = await claimPKP({ - keyId: derivedKeyId, - signatures, - authMethodType, - authMethodId: derivedKeyId, - authMethodPubkey: "0x", - }); - console.info("claimed key id: transaction hash (request id): ", { - requestId: mintTx.hash - }); - return res.status(200).json({ - requestId: mintTx.hash - }); - } catch (e) { - console.error("Unable to claim key with key id: ", derivedKeyId, e); - return res.status(500).json({ - error: `Unable to claim key with derived id: ${derivedKeyId}`, - }); - } -} diff --git a/routes/auth/discord.ts b/routes/auth/discord.ts deleted file mode 100644 index f141d3f..0000000 --- a/routes/auth/discord.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { Request } from "express"; -import { Response } from "express-serve-static-core"; -import { ParsedQs } from "qs"; -import { - AuthMethodType, - DiscordOAuthVerifyRegistrationRequest, - AuthMethodVerifyRegistrationResponse, - AuthMethodVerifyToFetchResponse, - ResolvedAuthMethod -} from "../../models"; -import { utils } from "ethers"; -import { toUtf8Bytes } from "ethers/lib/utils"; -import { mintPKP, getPKPsForAuthMethod } from "../../lit"; - -// Verify Discord access token by fetching current user info -async function verifyAndFetchDiscordAppIdAndUserId( - accessToken: string, -): Promise { - const meResponse = await fetch("https://discord.com/api/oauth2/@me", { - method: "GET", - headers: { - authorization: `Bearer ${accessToken}`, - }, - }); - if (meResponse.ok) { - const resp = await meResponse.json(); - return { - appId: resp.application.id, - userId: resp.user.id, - }; - } else { - throw new Error("Unable to verify Discord account"); - } -} - -// Mint PKP for verified Discord account -export async function discordOAuthVerifyToMintHandler( - req: Request< - {}, - AuthMethodVerifyRegistrationResponse, - DiscordOAuthVerifyRegistrationRequest, - ParsedQs, - Record - >, - res: Response< - AuthMethodVerifyRegistrationResponse, - Record, - number - >, -) { - // get Discord access token from body - const { accessToken } = req.body; - - // verify access token by fetching user info - let userId: string; - let appId: string; - try { - let resolvedAuthMethod = await verifyAndFetchDiscordAppIdAndUserId(accessToken); - userId = resolvedAuthMethod.userId; - appId = resolvedAuthMethod.appId; - console.info("Successfully verified Discord account", resolvedAuthMethod); - } catch (err) { - return res.status(400).json({ - error: "Unable to verify Discord account", - }); - } - - // mint PKP for user - try { - const authMethodId = utils.keccak256( - toUtf8Bytes(`${userId}:${appId}`), - ); - const mintTx = await mintPKP({ - authMethodType: AuthMethodType.Discord, - authMethodId, - authMethodPubkey: "0x", - }); - console.info("Minting PKP with Discord auth", { - requestId: mintTx.hash, - }); - return res.status(200).json({ - requestId: mintTx.hash, - }); - } catch (err) { - console.error("[Discord] Unable to mint PKP for given Discord account", { err }); - return res.status(500).json({ - error: "[Discord] Unable to mint PKP for given Discord account", - }); - } -} - -// Fetch PKPs for verified Discord account -export async function discordOAuthVerifyToFetchPKPsHandler( - req: Request< - {}, - AuthMethodVerifyToFetchResponse, - DiscordOAuthVerifyRegistrationRequest, - ParsedQs, - Record - >, - res: Response, number>, -) { - // get Discord access token from body - const { accessToken } = req.body; - - // verify access token by fetching user info - let userId: string; - let appId: string; - try { - const resolvedAuthMethod = await verifyAndFetchDiscordAppIdAndUserId(accessToken); - userId = resolvedAuthMethod.userId; - appId = resolvedAuthMethod.appId; - console.info("Successfully verified Discord account", { - userId: userId, - appId: appId, - }); - } catch (err) { - return res.status(400).json({ - error: "Unable to verify Discord account", - }); - } - - // fetch PKP for user - try { - const idForAuthMethod = utils.keccak256( - toUtf8Bytes(`${userId}:${appId}`), - ); - const pkps = await getPKPsForAuthMethod({ - authMethodType: AuthMethodType.Discord, - idForAuthMethod, - }); - console.info("Fetched PKPs with Discord auth", { - pkps: pkps, - }); - return res.status(200).json({ - pkps: pkps, - }); - } catch (err) { - console.error("Unable to fetch PKPs for given Discord account", { - err, - }); - return res.status(500).json({ - error: "Unable to fetch PKPs for given Discord account", - }); - } -} diff --git a/routes/auth/google.ts b/routes/auth/google.ts deleted file mode 100644 index ea91700..0000000 --- a/routes/auth/google.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { Request } from "express"; -import { Response } from "express-serve-static-core"; -import { ParsedQs } from "qs"; -import { - AuthMethodType, - GoogleOAuthVerifyRegistrationRequest, - AuthMethodVerifyRegistrationResponse, - AuthMethodVerifyToFetchResponse, -} from "../../models"; -import { OAuth2Client, TokenPayload } from "google-auth-library"; -import { utils } from "ethers"; -import { toUtf8Bytes } from "ethers/lib/utils"; -import { mintPKP, getPKPsForAuthMethod } from "../../lit"; - -const CLIENT_ID = - process.env.GOOGLE_CLIENT_ID || - "355007986731-llbjq5kbsg8ieb705mo64nfnh88dhlmn.apps.googleusercontent.com"; - -const client = new OAuth2Client(CLIENT_ID); - -// Validate given Google ID token -async function verifyIDToken(idToken: string): Promise { - const ticket = await client.verifyIdToken({ - idToken, - }); - return ticket.getPayload()!; -} - -// Mint PKP for verified Google account -export async function googleOAuthVerifyToMintHandler( - req: Request< - {}, - AuthMethodVerifyRegistrationResponse, - GoogleOAuthVerifyRegistrationRequest, - ParsedQs, - Record - >, - res: Response< - AuthMethodVerifyRegistrationResponse, - Record, - number - >, -) { - // get idToken from body - const { idToken } = req.body; - - // verify Google ID token - let tokenPayload: TokenPayload | null = null; - try { - tokenPayload = await verifyIDToken(idToken); - console.info("Successfully verified Google account", { - userId: tokenPayload.sub, - }); - } catch (err) { - console.error("Unable to verify Google account", { err }); - return res.status(400).json({ - error: "Unable to verify Google account", - }); - } - - // mint PKP for user - try { - const authMethodId = utils.keccak256( - toUtf8Bytes(`${tokenPayload.sub}:${tokenPayload.aud}`), - ); - const mintTx = await mintPKP({ - authMethodType: AuthMethodType.GoogleJwt, - authMethodId, - authMethodPubkey: "0x", - }); - console.info("Minting PKP with Google auth", { - requestId: mintTx.hash, - }); - return res.status(200).json({ - requestId: mintTx.hash, - }); - } catch (err) { - console.error("[Google] Unable to mint PKP for given Google account", { err }); - return res.status(500).json({ - error: "[Google] Unable to mint PKP for given Google account", - }); - } -} - -// Fetch PKPs for verified Google account -export async function googleOAuthVerifyToFetchPKPsHandler( - req: Request< - {}, - AuthMethodVerifyToFetchResponse, - GoogleOAuthVerifyRegistrationRequest, - ParsedQs, - Record - >, - res: Response, number>, -) { - // get idToken from body - const { idToken } = req.body; - - // verify idToken - let tokenPayload: TokenPayload | null = null; - try { - tokenPayload = await verifyIDToken(idToken); - console.info("Successfully verified Google account", { - userId: tokenPayload.sub, - }); - } catch (err) { - console.error("Unable to verify Google account", { err }); - return res.status(400).json({ - error: "Unable to verify Google account", - }); - } - - // fetch PKPs for user - try { - const idForAuthMethod = utils.keccak256( - toUtf8Bytes(`${tokenPayload.sub}:${tokenPayload.aud}`), - ); - const pkps = await getPKPsForAuthMethod({ - authMethodType: AuthMethodType.GoogleJwt, - idForAuthMethod, - }); - console.info("Fetched PKPs with Google auth", { - pkps: pkps, - }); - return res.status(200).json({ - pkps: pkps, - }); - } catch (err) { - console.error("Unable to fetch PKPs for given Google account", { err }); - return res.status(500).json({ - error: "Unable to fetch PKPs for given Google account", - }); - } -} diff --git a/routes/auth/mintAndFetch.ts b/routes/auth/mintAndFetch.ts deleted file mode 100644 index ba8c6ea..0000000 --- a/routes/auth/mintAndFetch.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Request } from "express"; -import { Response } from "express-serve-static-core"; -import { ParsedQs } from "qs"; -import { getPKPsForAuthMethod, mintPKPV2 } from "../../lit"; -import { - AuthMethodVerifyToFetchResponse, - FetchRequest, - MintNextAndAddAuthMethodsRequest, - MintNextAndAddAuthMethodsResponse, -} from "../../models"; - -export async function mintNextAndAddAuthMethodsHandler( - req: Request< - {}, - MintNextAndAddAuthMethodsResponse, - MintNextAndAddAuthMethodsRequest, - ParsedQs, - Record - >, - res: Response< - MintNextAndAddAuthMethodsResponse, - Record, - number - >, -) { - // mint PKP for user - try { - const mintTx = await mintPKPV2(req.body); - console.info("Minted PKP", { - requestId: mintTx.hash, - }); - return res.status(200).json({ - requestId: mintTx.hash, - }); - } catch (err) { - console.error("[mintNextAndAddAuthMethodsHandler] Unable to mint PKP", { - err, - }); - return res.status(500).json({ - error: `[mintNextAndAddAuthMethodsHandler] Unable to mint PKP ${JSON.stringify( - err, - )}`, - }); - } -} - -// Fetch PKPs for verified Discord account -export async function fetchPKPsHandler( - req: Request< - {}, - AuthMethodVerifyToFetchResponse, - FetchRequest, - ParsedQs, - Record - >, - res: Response, number>, -) { - // get Discord access token from body - const { authMethodType, authMethodId } = req.body; - - try { - const pkps = await getPKPsForAuthMethod({ - authMethodType: authMethodType, - idForAuthMethod: authMethodId, - }); - console.info("Fetched PKPs with auth type", authMethodType, { - pkps: pkps, - }); - return res.status(200).json({ - pkps: pkps, - }); - } catch (err) { - console.error( - `Unable to fetch PKPs for given auth type ${authMethodType}`, - { - err, - }, - ); - return res.status(500).json({ - error: `Unable to fetch PKPs for given auth method type: ${authMethodType}`, - }); - } -} diff --git a/routes/auth/otp.ts b/routes/auth/otp.ts deleted file mode 100644 index 7eeeb65..0000000 --- a/routes/auth/otp.ts +++ /dev/null @@ -1,187 +0,0 @@ -import { Request } from "express"; -import { Response } from "express-serve-static-core"; -import { ParsedQs } from "qs"; -import { - AuthMethodType, - AuthMethodVerifyRegistrationResponse, - AuthMethodVerifyToFetchResponse, - OTPAuthVerifyRegistrationRequest, - OtpVerificationPayload, -} from "../../models"; -import { getPKPsForAuthMethod, mintPKP } from "../../lit"; -import fetch from "node-fetch"; -import { utils } from "ethers"; -import { toUtf8Bytes } from "ethers/lib/utils"; - -// TODO: UPDATE TO DEPLOYED DOMAIN -const AUTH_SERVER_URL = - process.env.AUTH_SERVER_URL || "https://auth-api.litgateway.com/api/otp/verify"; - -async function verifyOtpJWT(jwt: string): Promise { - const res = await fetch(AUTH_SERVER_URL, { - redirect: "error", - method: "POST", - headers: { - "Content-Type": "application/json", - 'api-key': '67e55044-10b1-426f-9247-bb680e5fe0c8_relayer' - }, - body: JSON.stringify({ - token: jwt, - }), - }); - if (res.status < 200 || res.status > 299) { - throw new Error("Error while verifying token on remote endpoint"); - } - const respBody = await res.json(); - - return respBody as OtpVerificationPayload; -} - -export async function otpVerifyToMintHandler( - req: Request< - {}, - AuthMethodVerifyRegistrationResponse, - OTPAuthVerifyRegistrationRequest, - ParsedQs, - Record - >, - res: Response< - AuthMethodVerifyRegistrationResponse, - Record, - number - >, -) { - const { accessToken } = req.body; - let payload: OtpVerificationPayload | null; - - const tmpToken = (" " + accessToken).slice(1); - let userId; - let tokenBody: Record; - let orgId; - try { - tokenBody = parseJWT(tmpToken); - orgId = (tokenBody.orgId as string).toLowerCase(); - let message: string = tokenBody['extraData'] as string; - let contents = message.split("|"); - - if (contents.length !== 2) { - throw new Error("invalid message format in token message aborting op"); - } - - userId = contents[0]; - - payload = await verifyOtpJWT(accessToken); - if (payload.userId !== userId) { - throw new Error("UserId does not match token contents"); - } - console.info("Sucessful verification of OTP token", { - userid: payload.userId, - }); - } catch (e) { - console.error("unable to verify OTP token", e); - return res.status(400).json({ - error: "Unable to verify OTP token", - }); - } - - // mint PKP for user - try { - const authMethodId = utils.keccak256(toUtf8Bytes(`${userId}:${orgId}`)); - const mintTx = await mintPKP({ - authMethodType: AuthMethodType.OTP, - authMethodId, - authMethodPubkey: "0x", - }); - console.info("Minting PKP OTP", { - requestId: mintTx.hash, - }); - return res.status(200).json({ - requestId: mintTx.hash, - }); - } catch (err) { - console.error("[OTP] Unable to mint PKP for given OTP request", { err }); - return res.status(500).json({ - error: "[OTP] Unable to mint PKP for given OTP request", - }); - } -} - -export async function otpVerifyToFetchPKPsHandler( - req: Request< - {}, - AuthMethodVerifyToFetchResponse, - OTPAuthVerifyRegistrationRequest, - ParsedQs, - Record - >, - res: Response, number>, -) { - const { accessToken } = req.body; - - const tmpToken = (" " + accessToken).slice(1); - let userId; - let tokenBody: Record; - try { - tokenBody = parseJWT(tmpToken); - - let message: string = tokenBody.extraData as string; - let contents = message.split("|"); - - if (contents.length !== 2) { - throw new Error("invalid message format in token message"); - } - - userId = contents[0]; - console.log(userId); - const resp = await verifyOtpJWT(accessToken); - if (resp.userId !== userId) { - throw new Error("UserId does not match token contents"); - } - console.info("Sucessful verification of OTP token", { - userid: resp.userId, - }); - } catch (e) { - console.error("unable to verify OTP token"); - return res.status(400).json({ - error: "Unable to verify OTP token", - }); - } - - // fetch PKPs for user - try { - let idForAuthMethod = userId as string; - let orgId = (tokenBody.orgId as string).toLowerCase(); - idForAuthMethod = utils.keccak256(toUtf8Bytes(`${userId}:${orgId}`)); - const pkps = await getPKPsForAuthMethod({ - authMethodType: AuthMethodType.OTP, - idForAuthMethod, - }); - console.info("Fetched PKPs with OTP auth", { - pkps: pkps, - }); - return res.status(200).json({ - pkps: pkps, - }); - } catch (err) { - console.error("Unable to fetch PKPs for given userId", { err }); - return res.status(500).json({ - error: "Unable to fetch PKPs for given user Id", - }); - } -} - -/** - * - * @param jwt token to parse - * @returns {string}- userId contained within the token message - */ -function parseJWT(jwt: string): Record { - let parts = jwt.split("."); - if (parts.length !== 3) { - throw new Error("Invalid token length"); - } - let body = Buffer.from(parts[1], 'base64'); - let parsedBody: Record = JSON.parse(body.toString('ascii')); - console.log("JWT body: ", parsedBody); - return parsedBody; -} \ No newline at end of file diff --git a/routes/auth/status.ts b/routes/auth/status.ts deleted file mode 100644 index 8f0205e..0000000 --- a/routes/auth/status.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { errors, providers } from "ethers"; -import { Request } from "express"; -import { Response } from "express-serve-static-core"; -import { ParsedQs } from "qs"; -import { getPkpEthAddress, getPkpPublicKey, getProvider } from "../../lit"; -import { - AuthStatus, - GetAuthStatusRequestParams, - GetAuthStatusResponse, -} from "../../models"; -import { getTokenIdFromTransferEvent } from "../../utils/receipt"; - -const safeBlockConfirmations = parseInt( - process.env.SAFE_BLOCK_CONFIRMATIONS || "1", -); - -export async function getAuthStatusHandler( - req: Request< - GetAuthStatusRequestParams, - GetAuthStatusResponse, - {}, - ParsedQs, - Record - >, - res: Response, number>, -) { - // get requestId from params - const { requestId } = req.params; - - // query the chain using requestId as the txHash. - const provider = getProvider(); - - let mintReceipt: providers.TransactionReceipt; - try { - mintReceipt = await provider.waitForTransaction( - requestId, - safeBlockConfirmations, - 30000, - ); // 30000ms is the max we will wait for. - console.log("mint PKP receipt", { mintReceipt }); - } catch (err: any) { - console.error("Error waiting for transaction hash", { - txHash: requestId, - err, - }); - - if (err.code === errors.TIMEOUT) { - return res.status(200).json({ - status: AuthStatus.InProgress, - }); - } - return res.status(500).json({ - error: "Unable to fetch status of request", - }); - } - - console.debug(mintReceipt.logs); - - // Once tx hash received, fetch eth adddress from chain - let tokenIdFromEvent: string; - try { - tokenIdFromEvent = await getTokenIdFromTransferEvent(mintReceipt); - } catch (err) { - console.error("Error fetching tokenId from receipt", { - err, - }); - return res.status(500).json({ - error: "Unable to fetch tokenId from receipt", - }); - } - - try { - const pkpEthAddress = await getPkpEthAddress(tokenIdFromEvent); - const pkpPublicKey = await getPkpPublicKey(tokenIdFromEvent); - - return res.status(200).json({ - status: AuthStatus.Succeeded, - pkpTokenId: tokenIdFromEvent, - pkpEthAddress, - pkpPublicKey, - }); - } catch (err) { - console.error("Error fetching PKP information", { - tokenIdFromEvent, - err, - }); - return res.status(500).json({ - error: "Unable to fetch PKP information", - }); - } -} diff --git a/routes/auth/stytchOtp.ts b/routes/auth/stytchOtp.ts deleted file mode 100644 index fb9e1df..0000000 --- a/routes/auth/stytchOtp.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { Request } from "express"; -import { Response } from "express-serve-static-core"; -import { ParsedQs } from "qs"; -import { - AuthMethodType, - AuthMethodVerifyRegistrationResponse, - AuthMethodVerifyToFetchResponse, - OTPAuthVerifyRegistrationRequest, - OtpVerificationPayload, -} from "../../models"; -import { getPKPsForAuthMethod, mintPKP } from "../../lit"; -import fetch from "node-fetch"; -import { utils } from "ethers"; -import { toUtf8Bytes } from "ethers/lib/utils"; - -export async function stytchOtpVerifyToMintHandler( - req: Request< - {}, - AuthMethodVerifyRegistrationResponse, - OTPAuthVerifyRegistrationRequest, - ParsedQs, - Record - >, - res: Response< - AuthMethodVerifyRegistrationResponse, - Record, - number - >, -) { - const { accessToken } = req.body; - const tmpToken = (" " + accessToken).slice(1); - let userId: string; - let tokenBody: Record; - let orgId: string; - try { - tokenBody = parseJWT(tmpToken); - const audience = (tokenBody['aud'] as string[])[0]; - if (!audience) { - return res.status(401).json({ - error: "Unable to parse project Id from token", - }); - } - orgId = audience; - - if (tokenBody['sub']) { - userId = tokenBody['sub'] as string; - } else { - return res.status(401).json({ - error: "Unable to parse user Id from token", - }); - } - } catch (e) { - console.error("unable to verify OTP token ", e); - return res.status(400).json({ - error: "Unable to verify OTP token", - }); - } - - // mint PKP for user - try { - const authMethodId = utils.keccak256(toUtf8Bytes(`${userId.toLowerCase()}:${orgId.toLowerCase()}`)); - const mintTx = await mintPKP({ - authMethodType: AuthMethodType.StytchOtp, - authMethodId, - authMethodPubkey: "0x", - }); - console.info("Minting PKP OTP", { - requestId: mintTx.hash, - }); - return res.status(200).json({ - requestId: mintTx.hash, - }); - } catch (err) { - console.error("[Stytch OTP] Unable to mint PKP for given OTP request", { err }); - return res.status(500).json({ - error: "[Stytch OTP] Unable to mint PKP for given OTP request", - }); - } -} - -export async function stytchOtpVerifyToFetchPKPsHandler( - req: Request< - {}, - AuthMethodVerifyToFetchResponse, - OTPAuthVerifyRegistrationRequest, - ParsedQs, - Record - >, - res: Response, number>, -) { - const { accessToken } = req.body; - - const tmpToken = (" " + accessToken).slice(1); - let userId: string; - let orgId: string; - let tokenBody: Record; - try { - - tokenBody = parseJWT(tmpToken); - const audience = (tokenBody['aud'] as string[])[0]; - if (!audience) { - return res.status(401).json({ - error: "Unable to parse project Id from token", - }); - } - orgId = audience; - if (tokenBody['sub']) { - userId = tokenBody['sub'] as string; - } else { - return res.status(401).json({ - error: "Unable to parse user Id from token", - }); - } - } catch (e) { - console.error("unable to verify OTP token"); - return res.status(400).json({ - error: "Unable to verify OTP token", - }); - } - - // fetch PKPs for user - try { - let idForAuthMethod: string; - idForAuthMethod = utils.keccak256(toUtf8Bytes(`${userId.toLowerCase()}:${orgId.toLowerCase()}`)); - const pkps = await getPKPsForAuthMethod({ - authMethodType: AuthMethodType.StytchOtp, - idForAuthMethod, - }); - console.info("Fetched PKPs with OTP auth", { - pkps: pkps, - }); - return res.status(200).json({ - pkps: pkps, - }); - } catch (err) { - console.error("Unable to fetch PKPs for given userId", { err }); - return res.status(500).json({ - error: "Unable to fetch PKPs for given user Id", - }); - } -} - -/** - * - * @param jwt token to parse - * @returns {string}- userId contained within the token message - */ -function parseJWT(jwt: string): Record { - let parts = jwt.split("."); - if (parts.length !== 3) { - throw new Error("Invalid token length"); - } - let body = Buffer.from(parts[1], 'base64'); - let parsedBody: Record = JSON.parse(body.toString('ascii')); - console.log("JWT body: ", parsedBody); - return parsedBody; -} diff --git a/routes/auth/wallet.ts b/routes/auth/wallet.ts deleted file mode 100644 index 4be8008..0000000 --- a/routes/auth/wallet.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { Request } from "express"; -import { Response } from "express-serve-static-core"; -import { ParsedQs } from "qs"; -import { - AuthMethodType, - AuthSig, - AuthMethodVerifyRegistrationResponse, - AuthMethodVerifyToFetchResponse, -} from "../../models"; -import { ethers, utils } from "ethers"; -import { mintPKP, getPKPsForAuthMethod } from "../../lit"; -import { toUint8Array } from "js-base64"; - -// Check that the message has been signed by the given address -function verifyAuthSig(authSig: AuthSig): boolean { - const recoveredAddr = utils.verifyMessage( - authSig.signedMessage, - authSig.sig, - ); - - return recoveredAddr.toLowerCase() === authSig.address.toLowerCase(); -} - -// Mint PKP for verified Eth wallet -export async function walletVerifyToMintHandler( - req: Request< - {}, - AuthMethodVerifyRegistrationResponse, - AuthSig, - ParsedQs, - Record - >, - res: Response< - AuthMethodVerifyRegistrationResponse, - Record, - number - >, -) { - // get wallet auth sig from body - const authSig = req.body; - - // verify auth sig - const verified: boolean = verifyAuthSig(authSig); - if (verified) { - console.info("Successfully verified authentication signature", { - address: authSig.address, - }); - } else { - console.error("Unable to verify authentication signature", { - address: authSig.address, - }); - return res.status(400).json({ - error: "Unable to verify authentication signature", - }); - } - - // mint PKP for user - try { - const authMethodId = ethers.utils.keccak256(toUint8Array(`${authSig.address}:lit`)); - const mintTx = await mintPKP({ - authMethodType: AuthMethodType.EthWallet, - authMethodId, - authMethodPubkey: "0x", - }); - console.info("Minting PKP with Eth wallet", { - requestId: mintTx.hash, - }); - return res.status(200).json({ - requestId: mintTx.hash, - }); - } catch (err) { - console.error("[Wallet] Unable to mint PKP for given Eth wallet", { err }); - return res.status(500).json({ - error: "[Wallet] Unable to mint PKP for given Eth wallet", - }); - } -} - -// Fetch PKPs for verified Eth wallet -export async function walletVerifyToFetchPKPsHandler( - req: Request< - {}, - AuthMethodVerifyToFetchResponse, - AuthSig, - ParsedQs, - Record - >, - res: Response, number>, -) { - // get auth sig from body - const authSig = req.body; - - // verify auth sig - const verified: boolean = verifyAuthSig(authSig); - if (verified) { - console.info("Successfully verified authentication signature", { - address: authSig.address, - }); - } else { - console.error("Unable to verify authentication signature", { - address: authSig.address, - }); - return res.status(400).json({ - error: "Unable to verify authentication signature", - }); - } - - // fetch PKP for user - try { - const idForAuthMethod = ethers.utils.keccak256(toUint8Array(`${authSig.address}:lit`)); - const pkps = await getPKPsForAuthMethod({ - authMethodType: AuthMethodType.EthWallet, - idForAuthMethod, - }); - console.info("Fetched PKPs with Eth wallet", { - pkps: pkps, - }); - return res.status(200).json({ - pkps: pkps, - }); - } catch (err) { - console.error("Unable to fetch PKPs for given Eth wallet", { err }); - return res.status(500).json({ - error: "Unable to fetch PKPs for given Eth wallet", - }); - } -} diff --git a/routes/auth/webAuthn.ts b/routes/auth/webAuthn.ts deleted file mode 100644 index 6e9af0f..0000000 --- a/routes/auth/webAuthn.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { - generateRegistrationOptions, - GenerateRegistrationOptionsOpts, -} from "@simplewebauthn/server"; -import { Request } from "express"; -import { Response } from "express-serve-static-core"; -import { ParsedQs } from "qs"; -import { - AuthMethodType, - AuthMethodVerifyRegistrationResponse, - AuthMethodVerifyToFetchResponse, - WebAuthnVerifyRegistrationRequest, -} from "../../models"; - -import type { - VerifiedRegistrationResponse, - VerifyRegistrationResponseOpts, -} from "@simplewebauthn/server"; -import { verifyRegistrationResponse } from "@simplewebauthn/server"; - -import { ethers, utils } from "ethers"; -import { hexlify, keccak256, toUtf8Bytes } from "ethers/lib/utils"; -import config from "../../config"; -import { - getPKPsForAuthMethod, - getPubkeyForAuthMethod, - mintPKP, -} from "../../lit"; -import { getDomainFromUrl } from "../../utils/string"; - -/** - * Generates WebAuthn registration options for a given username. - */ -export function webAuthnGenerateRegistrationOptionsHandler( - req: Request<{}, {}, {}, ParsedQs, Record>, - res: Response<{}, Record, number>, -) { - // Get username from query string - const username = req.query.username as string | undefined; - - // Get RP_ID from request Origin. - const rpID = getDomainFromUrl(req.get("Origin") || "localhost"); - - const authenticatorUsername = generateUsernameForOptions(username); - const opts: GenerateRegistrationOptionsOpts = { - rpName: "Lit Protocol", - rpID, - userID: keccak256(toUtf8Bytes(authenticatorUsername)).slice(2), - userName: authenticatorUsername, - timeout: 60000, - attestationType: "direct", // TODO: change to none - authenticatorSelection: { - userVerification: "required", - residentKey: "required", - }, - supportedAlgorithmIDs: [-7], // ES256 - }; - - const options = generateRegistrationOptions(opts); - - return res.json(options); -} - -export async function webAuthnVerifyRegistrationHandler( - req: Request< - {}, - AuthMethodVerifyRegistrationResponse, - WebAuthnVerifyRegistrationRequest, - ParsedQs, - Record - >, - res: Response< - AuthMethodVerifyRegistrationResponse, - Record, - number - >, -) { - // Get RP_ID from request Origin. - const requestOrigin = req.get("Origin") || "localhost"; - const rpID = getDomainFromUrl(requestOrigin); - - // Check if PKP already exists for this credentialRawId. - console.log("credentialRawId", req.body.credential.rawId); - - const authMethodId = generateAuthMethodId(req.body.credential.rawId); - try { - const pubKey = await getPubkeyForAuthMethod({ - authMethodType: AuthMethodType.WebAuthn, - authMethodId, - }); - - if (pubKey !== "0x" && !ethers.BigNumber.from(pubKey).isZero()) { - console.info("PKP already exists for this credential raw ID"); - return res.status(400).send({ - error: "PKP already exists for this credential raw ID, please try another one", - }); - } - } catch (error) { - const _error = error as Error; - console.error(_error); - return res.status(500).send({ - error: "Unable to verify if PKP already exists", - }); - } - - // WebAuthn verification. - let verification: VerifiedRegistrationResponse; - try { - const opts: VerifyRegistrationResponseOpts = { - credential: req.body.credential, - expectedChallenge: () => true, // we don't work with challenges in registration - expectedOrigin: [requestOrigin], - expectedRPID: rpID, - requireUserVerification: true, - }; - verification = await verifyRegistrationResponse(opts); - } catch (error) { - const _error = error as Error; - console.error(_error); - return res.status(400).send({ error: _error.message }); - } - - const { verified, registrationInfo } = verification; - - // Mint PKP for user. - if (!verified || !registrationInfo) { - console.error("Unable to verify registration", { verification }); - return res.status(400).json({ - error: "Unable to verify registration", - }); - } - - const { credentialPublicKey } = registrationInfo; - console.log("registrationInfo", { registrationInfo }); - - try { - const cborEncodedCredentialPublicKey = hexlify( - utils.arrayify(credentialPublicKey), - ); - console.log("cborEncodedCredentialPublicKey", { - cborEncodedCredentialPublicKey, - }); - - const mintTx = await mintPKP({ - authMethodType: AuthMethodType.WebAuthn, - authMethodId, - // We want to use the CBOR encoding here to retain as much information as possible - // about the COSE (public) key. - authMethodPubkey: cborEncodedCredentialPublicKey, - }); - - return res.status(200).json({ - requestId: mintTx.hash, - }); - } catch (error) { - const _error = error as Error; - console.error("[WebAuthn] Unable to mint PKP for user", { _error }); - return res.status(500).json({ - error: "[WebAuthn] Unable to mint PKP for user", - }); - } -} - -export async function webAuthnVerifyToFetchPKPsHandler( - req: Request< - {}, - AuthMethodVerifyToFetchResponse, - any, - ParsedQs, - Record - >, - res: Response, number>, -) { - // Check if PKP already exists for this credentialRawId. - console.log("credentialRawId", req.body.rawId); - - try { - const idForAuthMethod = generateAuthMethodId(req.body.rawId); - - const pkps = await getPKPsForAuthMethod({ - authMethodType: AuthMethodType.WebAuthn, - idForAuthMethod, - }); - console.info("Fetched PKPs with WebAuthn", { - pkps: pkps, - }); - return res.status(200).json({ - pkps: pkps, - }); - } catch (err) { - console.error("Unable to fetch PKPs for given WebAuthn", { err }); - return res.status(500).json({ - error: "Unable to fetch PKPs for given WebAuthn", - }); - } -} - -function generateAuthMethodId(credentialRawId: string): string { - return utils.keccak256(toUtf8Bytes(`${credentialRawId}:lit`)); -} - -// Generate default username given timestamp, using timestamp format YYYY-MM-DD HH:MM:SS) -function generateDefaultUsername(): string { - const date = new Date(); - const year = date.getFullYear(); - const month = date.getMonth() + 1; - const day = date.getDate(); - const hours = date.getHours(); - const minutes = date.getMinutes(); - const seconds = date.getSeconds(); - - return `Usernameless user (${year}-${month}-${day} ${hours}:${minutes}:${seconds})`; -} - -function generateUsernameForOptions(username?: string): string { - return !!username ? username : generateDefaultUsername(); -} diff --git a/routes/delegate/register.ts b/routes/delegate/register.ts deleted file mode 100644 index e0be77f..0000000 --- a/routes/delegate/register.ts +++ /dev/null @@ -1,103 +0,0 @@ -import crypto from 'crypto'; - -import { Request, Response } from 'express'; -import { ethers, utils, type Wallet } from 'ethers'; -import { getProvider, mintCapacityCredits, sendLitTokens } from '../../lit'; - -// Takes an arbitrary string, and converts it deterministically to a number -// -// FIXME: This is a naive implementation, and could result in collisions -// in the future. We should consider using a formalized api-key -// that contains a unique identifier for the user. -export function normalizeApiKey(apiKey: string): number { - const hash = crypto - .createHash('sha256') - .update(apiKey) - .digest('hex'); - - return parseInt(hash, 16); -} - -export function generatePayerSecret(): string { - return crypto.randomBytes(64).toString('base64'); -} - -export async function deriveWallet(apiKey: string, payerSecret: string) { - const mnemonic = process.env.LIT_DELEGATION_ROOT_MNEMONIC; - - if (!mnemonic) { - throw new Error("Mnemonic not set"); - } - - const hdWallet = utils.HDNode.fromMnemonic(mnemonic); - const userPath = `m/44'/60'/0'/0/${normalizeApiKey(apiKey + payerSecret) % 2147483647}`; - - const key = hdWallet.derivePath(userPath); - - if (!key.publicKey || !key.privateKey) { - throw new Error("Failed to derive public key"); - } - - return new ethers.Wallet(key.privateKey, getProvider()); -} - -async function fundWallet(wallet: Wallet) { - console.log(`Funding wallet ${wallet.address} with 0.001 LIT`); - - const tx = await sendLitTokens(wallet.address, "0.001"); - - if (!tx) { - throw new Error("Failed to fund wallet"); - } - - console.log(`Funded wallet ${wallet.address} with 0.001 LIT`); - - return wallet; -} - -async function createCapacityCredits(wallet: Wallet) { - const tx = await mintCapacityCredits({ signer: wallet }); - - if (!tx) { - throw new Error("Failed to mint capacity credits"); - } - - console.log(`Minted capacity credits for ${wallet.address}`); - console.log('NFT id is', tx.capacityTokenId); - - return wallet; -} - -export async function registerPayerHandler(req: Request, res: Response) { - const apiKey = req.header("api-key"); - - if (!apiKey) { - res.status(400).send({ - success: false, - error: "Missing API key" - }); - - return; - } - const secret = generatePayerSecret(); - const wallet = await deriveWallet(apiKey, secret) - - console.log(`secret: ${secret}`); - - return fundWallet(wallet) - .then(createCapacityCredits) - .then((wallet: Wallet) => { - res.status(200).json({ - success: true, - payerWalletAddress: wallet.address, - payerSecretKey: secret - }); - }) - .catch((err) => { - console.error("Failed to register payer", err); - res.status(500).json({ - success: false, - error: err.toString() - }); - }); -} \ No newline at end of file diff --git a/routes/delegate/user.ts b/routes/delegate/user.ts deleted file mode 100644 index 87bd8c0..0000000 --- a/routes/delegate/user.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Request, Response } from 'express'; -import { deriveWallet } from './register'; -import { addPaymentDelegationPayee } from '../../lit'; - -export async function addPayeeHandler(req: Request, res: Response) { - const payeeAddresses = req.body as string[]; - const apiKey = req.header('api-key'); - const payerSecret = req.header('payer-secret-key'); - - if (!apiKey || !payerSecret) { - res.status(400).json({ - success: false, - error: 'Missing or invalid API / Payer key' - }); - - return; - } - - if (!payeeAddresses || !Array.isArray(payeeAddresses) || payeeAddresses.length < 1) { - res.status(400).json({ - success: false, - error: 'Missing or invalid payee addresses' - }); - return; - } - - const wallet = await deriveWallet(apiKey, payerSecret); - let error: string | boolean = false; - - try { - const tx = await addPaymentDelegationPayee({ - wallet, - payeeAddresses - }); - - if (!tx) { - throw new Error('Failed to add payee: delegation transaction failed'); - } - } catch (err) { - console.error('Failed to add payee', err); - error = (err as Error).toString(); - } - - if (error) { - res.status(500).json({ - success: false, - error - }); - } else { - res.status(200).json({ - success: true - }); - } -} \ No newline at end of file diff --git a/routes/middlewares/apiKeyGateAndTracking.ts b/routes/middlewares/apiKeyGateAndTracking.ts deleted file mode 100644 index 23c0943..0000000 --- a/routes/middlewares/apiKeyGateAndTracking.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { NextFunction, Request } from "express"; -import { Response } from "express-serve-static-core"; -import { ParsedQs } from "qs"; -import redisClient from "../../lib/redisClient"; - -const API_KEY_HEADER_KEY = "api-key"; - -export default function apiKeyGateAndTracking( - req: Request<{}, any, any, ParsedQs, Record>, - res: Response, number>, - next: NextFunction, -) { - const apiKey = req.header(API_KEY_HEADER_KEY); - - if (!apiKey) { - return res.status(400).json({ - error: "Missing API key. If you do not have one, please request one at https://forms.gle/osJfmRR2PuZ46Xf98", - }); - } - - // increment tracking - const now = new Date(); - const trackingKey = `${now.getUTCFullYear()}-${now.getUTCMonth()}-${now.getUTCDate()}:${apiKey}`; - redisClient.incr(trackingKey); - - next(); -} diff --git a/routes/middlewares/limiter.ts b/routes/middlewares/limiter.ts deleted file mode 100644 index b90e25d..0000000 --- a/routes/middlewares/limiter.ts +++ /dev/null @@ -1,14 +0,0 @@ -import rateLimit from "express-rate-limit"; -import RedisStore from "rate-limit-redis"; -import redisClient from "../../lib/redisClient"; - -const limiter = rateLimit({ - // Redis store configuration - store: new RedisStore({ - sendCommand: (...args: string[]) => redisClient.sendCommand(args), - }), - max: 10, // Limit each IP to 10 requests per `window` - windowMs: 10 * 1000, // 10s -}); - -export default limiter; diff --git a/routes/storeCondition.ts b/routes/storeCondition.ts deleted file mode 100644 index 7deda18..0000000 --- a/routes/storeCondition.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { Request } from "express"; -import { Response } from "express-serve-static-core"; -import { ParsedQs } from "qs"; -import { storeConditionWithSigner } from "../lit"; -import { - CapabilityProtocolPrefix, - StoreConditionRequest, - StoreConditionResponse, -} from "../models"; -import { getFullResourceUri, validateSessionSignature } from "../utils/auth"; - -const BYTE_STRING_LENGTH = 64; - -// TODO: Change into async post (with getter API) to handle more concurrent requests. -export async function storeConditionHandler( - req: Request< - {}, - StoreConditionResponse, - StoreConditionRequest, - ParsedQs, - Record - >, - res: Response, number>, -) { - // Validate capability protocol prefix. - if ( - req.body.capabilityProtocolPrefix !== - CapabilityProtocolPrefix.LitEncryptionCondition.toString() && - req.body.capabilityProtocolPrefix !== - CapabilityProtocolPrefix.LitSigningCondition.toString() - ) { - return res.status(400).json({ - error: `Only the following capability protocol prefixes are supported: ${[ - CapabilityProtocolPrefix.LitEncryptionCondition, - CapabilityProtocolPrefix.LitSigningCondition, - ]}`, - }); - } - - // Validate session signature. - const fullResourceUri = getFullResourceUri( - req.body.capabilityProtocolPrefix, - req.body.key.replace("0x", ""), - ); - const [creatorAddress, validationErr] = await validateSessionSignature( - req.body.sessionSig, - fullResourceUri, - req.body.capabilityProtocolPrefix, - ); - if (!!validationErr) { - console.error("Invalid sessionSig", { error: validationErr }); - return res.status(401).json({ - error: "Invalid sessionSig", - }); - } - console.info("Verified creator", { creatorAddress }); - - // Validate request body - let validationError = validateRequest(req.body); - if (!!validationError) { - return res.status(400).json({ - error: validationError.toString(), - }); - } - - // Call into AccessControlConditions.storeConditionWithSigner() - try { - const { key, value, securityHash, chainId, permanent } = req.body; - - const storeTx = await storeConditionWithSigner({ - key, - value, - securityHash, - chainId, - permanent, - creatorAddress, - }); - - return res.status(201).json({ - txHash: storeTx.hash, - }); - } catch (err) { - console.error("Unable to store condition with signer", { err }); - return res.status(500).end(); - } -} - -function validateRequest(requestBody: StoreConditionRequest): Error | null { - const keysToCheckExist: Array = [ - "key", - "value", - "securityHash", - "chainId", - "permanent", - ]; - const keysToCheckByteStringLength: Array< - keyof Pick - > = ["key", "value", "securityHash"]; - - // Check values exist - const requestBodyKeys = Object.keys(requestBody); - for (const k of keysToCheckExist) { - if (requestBodyKeys.indexOf(k) === -1) { - return new Error(`${k} not provided`); - } - } - - // Check 32 bytes long - for (const k of keysToCheckByteStringLength) { - if (requestBody[k].length != BYTE_STRING_LENGTH) { - return new Error(`${k} is not ${BYTE_STRING_LENGTH} long`); - } - } - - // Check chainId is valid. - if (!validateChainId(requestBody.chainId)) { - return new Error("chainId invalid"); - } - - return null; -} - -function validateChainId(chainId: number): boolean { - // TODO: something more sophisticated? - return true; -} diff --git a/scripts/load_pkp_public_keys.ts b/scripts/load_pkp_public_keys.ts deleted file mode 100644 index 435b535..0000000 --- a/scripts/load_pkp_public_keys.ts +++ /dev/null @@ -1,55 +0,0 @@ -// npx ts-node scripts/load_pkp_public_keys.ts - -import * as redis from "redis"; - -const redisUrl = "redis://localhost:6379"; -const pkpPulicKeysToLoad = [ - "0x0453e72a162121e53696486d990743846a860c4ca753b12673f09e54f23148a3ecbed1e9dff18190d45fa44ff64fefb32dc957eeda530a06efe00575839cea5bff", - "0x04ca4b4d4980c156c3888e46336f57fd66ac6ccf6975102bcf63cb92cdacd8b1edb674a9f24ab0dd363e34fc2e8a5b282831a0988c0f7deb379073141b7fd02cbd", - "0x04f04c55b28fbbffbd9ea0eec1471f79170d014b6071d9778e744d6af13adbd2e2bc7241bad822f583a22e7a683d7e3ea70765af8591a549b67eb95701d6f5bf6f", - "0x0406304e88a305b1bdf47e81ebf3dc20fb42a257acc6f8aa201601bca785d06cf246ce3917232faa83e536d8d33727b50e78dbff342fc8d7c8384332eb2484734f", - "0x0490befd1ba3d43a0f54f3ace732c244f3a42d346e1fdc916a03abe228e0f0bb0cb08ae8d911bfc2a85a4c87b22f82d93263ad5ae5d3446dc59b893ce1b6b21dde", - "0x04b3cc2293c2dbea1059b44c99d328effc6e25a0aeaae1370071628c6d84f0f2a76acb72fe249c1a43377daed81820a0a6ad72012bab8f505e3089c263690d2446", - "0x0426fd4c16e701acf3425904c8b114c479b9952c1bfea6ef8fdc5c814dcd58a478f1c876ccef39eb9d9fcff466db1a876d0e95525a9a699d3d1ffbdee8764d1c50", - "0x04db559004a5b70b19ad270411c7a129aadcd3d5af907dbeb9c7d5f7e63d362d8117a2960ad52d2f7913ab279b45726ddf385f2a080593c2498b741b546d445fb5", - "0x04d47e81640e8de135b32f8238c4bee13d989bdcc7ede053c8e19922ef108e6f27beb56a17add921b9e3e880fcd3f126b24daac3b22d2564f5583d87fc527eaa0b", - "0x0495bcdb03e71117808a73981239a19b101dfc4b27effc469149e3d9dc149ce18ea7d70a6a74a3415aa63c4e923cc84dc4eff5d578bb580fa6a201bca574093bbf", - "0x040e9c2a9d9b908ca1385690e9b230024ed7293a525fe75d6b2cfbc50a8ae01b1ed4886141a5cecd9d45b65d0e24bce13d0693111d660bb16de657b81fb11956c1", - "0x04557231899900f437b30c8b5f3ce3c081fc06dca9877b68c699a4aaede24a66b9583d7f0bfc21143b68839e45b12ca4645ece4d240d0e79f8e300507468f52a19", - "0x047519f020297a1994f06e52d48614800aabb668755f5694c071fc475e81dfb95a4fd25a6cbd038302fe9db6aa8f0590fb7fc4964cf31eaf58eb0b1eae54e2dba3", - "0x04bb5a1944aa54184d1b4acc86efa567be56051065e1e57c07f5930fc883b7810388ea4248de215aad41db75deceb6eb0eaa9061653aefe9e67faffec6082a1e35", - "0x0407cce2f9d5b02eb6f5b63a5372c00c0844e35ba6e075f076179c180e7111e1721f57fec8693d99b5a8ed02f28dd35b9ab65c9ead0b38b8b97b3230f640471198", - "0x047284e304238518e6e9a8a072d9908fdfa9d40c1fd21ea7145df54a5122389d47fa1d279e83f5e3d065ccaabf967a485b8b5066a9d6fee3b6454733478c0193af", - "0x04eed758b9a14e032786a0cf66bff64b7d95d4728752f214e3ce3e24112304b9d0507789eefeab4194c30ac9a61ef7626aa62cc599d5c72da74e478983e92d8974", - "0x04364d3972d1a9c5968ca65987a9802167f3573ef2e183f0dda7764bddae5ce922c873ee79aa5969abeeee37c6f52ab62d1d8899d1faa739992e189dfb051820c8", -]; - -let redisClient: redis.RedisClientType; - -(async () => { - redisClient = redis.createClient({ - url: redisUrl, - }); - - redisClient.on("error", (error: Error) => - console.error(`Error : ${error}`), - ); - - await redisClient.connect(); -})(); - -async function run() { - for (const key of pkpPulicKeysToLoad) { - // Set the score to 0 so that the PKP is marked as unminted. - await redisClient.zAdd("pkp_public_keys", { - score: 0, - value: key, - }); - } - - console.info("Done"); - - process.exit(0); -} - -run(); diff --git a/src/config/env.ts b/src/config/env.ts new file mode 100644 index 0000000..4e191fb --- /dev/null +++ b/src/config/env.ts @@ -0,0 +1,60 @@ +import { createEnv } from "@t3-oss/env-core"; +import { z } from "zod"; + +export const env = createEnv({ + server: { + PORT: z + .string() + .transform((val: string): number => Number(val)) + .default("3001"), + + // ======= REQUIRED CONFIGURATION ======= + // Network & Chain + NETWORK: z.enum(["datil-dev", "datil-test", "datil"]), + LIT_TXSENDER_RPC_URL: z.string().url(), + LIT_TXSENDER_PRIVATE_KEY: z.string().min(1), + LOG_LEVEL: z.enum(["info", "debug", "warn", "error"]).default("info"), + ENABLE_API_KEY_GATE: z + .string() + .transform((val: string): boolean => val === "true") + .default("true"), + + // ---------- Network & Chain Settings ---------- + GAS_LIMIT_INCREASE_PERCENTAGE: z + .string() + .transform((val: string): number => Number(val)) + .default("15"), + + // ---------- RATE LIMITER ---------- + MAX_REQUESTS_PER_WINDOW: z + .string() + .transform((val: string): number => Number(val)) + .default("10") + .describe("Limit each IP to 10 requests per window"), + WINDOW_MS: z + .string() + .transform((val: string): number => Number(val)) + .default("10000") + .describe("10 second window"), + + // ---------- Redis ---------- + REDIS_URL: z.string().url().default("redis://localhost:6379"), + + // ---------- WebAuthn ---------- + RP_ID: z.string().default("localhost"), + WEBAUTHN_RP_NAME: z.string().default("Lit Protocol"), + WEBAUTHN_TIMEOUT: z + .string() + .transform((val: string): number => Number(val)) + .default("6000"), + }, + + clientPrefix: "PUBLIC_", + + client: { + // PUBLIC_CLERK_PUBLISHABLE_KEY: z.string().min(1), + }, + + runtimeEnv: process.env, + emptyStringAsUndefined: true, +}); diff --git a/src/middleware/apiKeyGate.ts b/src/middleware/apiKeyGate.ts new file mode 100644 index 0000000..f48e073 --- /dev/null +++ b/src/middleware/apiKeyGate.ts @@ -0,0 +1,41 @@ +import { Elysia } from "elysia"; +import { env } from "config/env"; +import { redisClient } from "../services/redis/redis"; + +export const apiKeyGateAndTracking = new Elysia().onRequest( + async ({ request, set }) => { + if (!env.ENABLE_API_KEY_GATE) { + return; + } + + if ( + request.url.includes("/index.html") || + request.url.includes("/admin.html") || + request.url.includes("/request-key") || + request.url.includes("/swagger") + ) { + return; + } + + const apiKey = request.headers.get("x-api-key"); + + if (!apiKey) { + set.status = 401; + return new Response( + JSON.stringify({ + error: + "Missing API key. If you do not have one, please request one at https://forms.gle/osJfmRR2PuZ46Xf98", + }), + { + headers: { "content-type": "application/json" }, + status: 401, + } + ); + } + + // Track API usage by date + const now = new Date(); + const trackingKey = `${now.getUTCFullYear()}-${now.getUTCMonth()}-${now.getUTCDate()}:${apiKey}`; + await redisClient.incr(trackingKey); + } +); diff --git a/src/middleware/rateLimiter.ts b/src/middleware/rateLimiter.ts new file mode 100644 index 0000000..e7802fe --- /dev/null +++ b/src/middleware/rateLimiter.ts @@ -0,0 +1,9 @@ +import { rateLimit } from "elysia-rate-limit"; +import { env } from "config/env"; + +export const rateLimiter = rateLimit({ + max: Number(env.MAX_REQUESTS_PER_WINDOW), + duration: Number(env.WINDOW_MS), + headers: true, + errorResponse: "Rate limit exceeded", +}); diff --git a/src/server.spec.ts b/src/server.spec.ts new file mode 100644 index 0000000..c2a1f6f --- /dev/null +++ b/src/server.spec.ts @@ -0,0 +1,209 @@ +/** + * Test suite for the Relay Server API endpoints + * Tests the PKP minting and auth methods endpoints + */ +import { describe, expect, test } from "bun:test"; +import { app } from "./server"; +import { logger } from "services/lit/LitChainClient/utils/logger"; +import { env } from "config/env"; + +describe("Relay Server API - PKP Endpoints", () => { + test("POST /pkp/mint", async () => { + // Test payload based on the successful unit test + const payload = { + keyType: 2, + permittedAuthMethodTypes: [2], + permittedAuthMethodIds: [ + "170d13600caea2933912f39a0334eca3d22e472be203f937c4bad0213d92ed71", + ], + permittedAuthMethodPubkeys: ["0x"], + permittedAuthMethodScopes: [[1]], + addPkpEthAddressAsPermittedAddress: true, + sendPkpToItself: true, + }; + + const response = await app.handle( + new Request("http://localhost/pkp/mint", { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-api-key": "1234567890", + }, + body: JSON.stringify(payload), + }) + ); + + expect(response.status).toBe(200); + + const responseData = await response.json(); + + logger.info("mint hash:", responseData.hash); + + // Verify the response structure + expect(responseData).toHaveProperty("hash"); + expect(responseData).toHaveProperty("receipt"); + expect(responseData).toHaveProperty("decodedLogs"); + }); + + test("POST /pkp/claim", async () => { + const payload = { + derivedKeyId: + "d8ed9605dd8b149982fedc4fd5b2097600fa592ea987580419a397d9f76bd04e", + signatures: [ + { + r: "0x5ad9ef4b86073752835fe22892656a3b9c22b1bbbfa5e1d2b53154ba1ed62bce", + s: "0x32854d9dd249272f9816a9f17fe8cb09d00addad939aa9c20a47bcc600ecbdaa", + v: 28, + }, + { + r: "0x1d75603a9ddbc87ebab283cafbea777e592a9d4ef9fa1b09183a473a31732912", + s: "0x5ff6886776c3d0ecf75348fb64f077a14584b55e951f3b1a664e71367aaf11a4", + v: 28, + }, + { + r: "0x0391d6884faa412805e34c2ffee5ec6133ebf9951ab932a2d7b3807a657cbeea", + s: "0x0d414fe29d3e921d265523de956e0a6f9ce8f565858204c7404e73e79c6c397b", + v: 28, + }, + ], + authMethodType: 1, + authMethodId: "0x", + authMethodPubkey: "0x", + }; + + const response = await app.handle( + new Request("http://localhost/pkp/claim", { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-api-key": "1234567890", + }, + body: JSON.stringify(payload), + }) + ); + + if (response.status === 500) { + const errorResponse = await response.json(); + logger.info("error response:", errorResponse); + } else { + expect(response.status).toBe(200); + + const responseData = await response.json(); + + logger.info("claim hash:", responseData.requestId); + + expect(responseData).toHaveProperty("requestId"); + } + }); + + test("POST /pkp/webauthn/generate-registration-options", async () => { + const payload = { + username: "Anson", + }; + + const response = await app.handle( + new Request( + "http://localhost/pkp/webauthn/generate-registration-options", + { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-api-key": "1234567890", + }, + body: JSON.stringify(payload), + } + ) + ); + const result = await response.json(); + expect(response.status).toBe(200); + expect(result.rp.name).toBe("Lit Protocol"); + expect(result.rp.id).toBe("localhost"); + expect(result.user.name).toBe("Anson"); + }); +}); + +describe("Rate Limiter", () => { + test("should limit requests according to configuration", async () => { + const maxRequests = Number(env.MAX_REQUESTS_PER_WINDOW); + const endpoint = "http://localhost/test-rate-limit"; + + // Make maxRequests number of requests + for (let i = 0; i < maxRequests; i++) { + const response = await app.handle( + new Request(endpoint, { + method: "GET", + headers: { + "x-api-key": "1234567890", + }, + }) + ); + expect(response.status).toBe(200); + } + + // The next request should be rate limited + const limitedResponse = await app.handle( + new Request(endpoint, { + method: "GET", + headers: { + "x-api-key": "1234567890", + }, + }) + ); + + console.log("limitedResponse.status:", limitedResponse.status); + + expect(limitedResponse.status).toBe(429); + expect(await limitedResponse.text()).toBe("Rate limit exceeded"); + }); +}); + +describe("API Key Authentication", () => { + test("should reject requests without API key", async () => { + const payload = { + username: "Anson", + }; + + const response = await app.handle( + new Request( + "http://localhost/pkp/webauthn/generate-registration-options", + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(payload), + } + ) + ); + + expect(response.status).toBe(401); + const error = await response.json(); + expect(error.error).toBe( + "Missing API key. If you do not have one, please request one at https://forms.gle/osJfmRR2PuZ46Xf98" + ); + }); + + test("should accept requests with valid API key", async () => { + const payload = { + username: "Anson", + }; + + const response = await app.handle( + new Request( + "http://localhost/pkp/webauthn/generate-registration-options", + { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-api-key": "test-api-key", // You might want to use env.TEST_API_KEY here + }, + body: JSON.stringify(payload), + } + ) + ); + + expect(response.status).toBe(200); + const result = await response.json(); + expect(result.rp.name).toBe("Lit Protocol"); + }); +}); diff --git a/src/server.ts b/src/server.ts new file mode 100644 index 0000000..d810fcc --- /dev/null +++ b/src/server.ts @@ -0,0 +1,117 @@ +import { cors } from "@elysiajs/cors"; +import { swagger } from "@elysiajs/swagger"; +import { Elysia } from "elysia"; +import { JSONStringify as BigIntStringify } from "json-with-bigint"; +import { + ClaimRequestInput, + tClaimRequestSchema, +} from "services/lit/LitChainClient/schemas/ClaimRequestSchema"; +import { logger } from "services/lit/LitChainClient/utils/logger"; +import { + tWebAuthnRequestSchema, + WebAuthnRequestInput, +} from "services/lit/WebAuthn/schemas/WebAuthnRequest"; +import { env } from "./config/env"; +import { apiKeyGateAndTracking } from "./middleware/apiKeyGate"; +import { rateLimiter } from "./middleware/rateLimiter"; +import { + MintRequestInput, + tMintRequestSchema, +} from "./services/lit/LitChainClient/schemas/MintRequestSchema"; +import { LitPKPAuthRouter } from "./services/lit/LitPKPAuthRouter/router"; +import { privateKeyToAccount } from "viem/accounts"; +import { Hex } from "viem"; + +export const baseApp = new Elysia(); + +export const app = new Elysia() + .get("/test-rate-limit", () => ({ message: "OK" })) + .use(apiKeyGateAndTracking) + .use(cors()) + .use(rateLimiter) + .use( + swagger({ + version: "1.0.0", + exclude: ["/test-rate-limit"], + }) + ) + .onError(({ error }) => { + const _error = error as unknown as { shortMessage: string }; + return new Response(BigIntStringify({ error: _error.shortMessage }), { + headers: { "content-type": "application/json" }, + status: 500, + }); + }) + .group("/pkp", (app) => { + app.post( + "/mint", + async ({ body }: { body: MintRequestInput }) => { + const result = await LitPKPAuthRouter.mintNextAndAddAuthMethods({ + body, + }); + return new Response(BigIntStringify(result), { + headers: { "content-type": "application/json" }, + status: 200, + }); + }, + { body: tMintRequestSchema } + ); + app.post( + "/claim", + async ({ body }: { body: ClaimRequestInput }) => { + const result = + await LitPKPAuthRouter.claimAndMintNextAndAddAuthMethodsWithTypes({ + body, + }); + return new Response(BigIntStringify(result), { + headers: { "content-type": "application/json" }, + status: 200, + }); + }, + { body: tClaimRequestSchema } + ); + app.post( + "/webauthn/generate-registration-options", + async ({ + body, + request, + }: { + body: WebAuthnRequestInput; + request: Request; + }) => { + logger.info("request:", request); + + // get origin from request + const url = request.headers.get("origin") || "http://localhost"; + + const result = await LitPKPAuthRouter.generateRegistrationOptions({ + body: { + url, + ...(body.username && { username: body.username }), + }, + }); + + return new Response(BigIntStringify(result), { + headers: { "content-type": "application/json" }, + status: 200, + }); + }, + { body: tWebAuthnRequestSchema } + ); + return app; + }); + +// Start server if not imported as a module +if (import.meta.url === `file://${process.argv[1]}`) { + const port = env.PORT || 3000; + app.listen(port, () => { + console.log("\n🚀 Lit Protocol Auth Service"); + console.log(` URL: http://localhost:${port}`); + console.log(` Swagger: http://localhost:${port}/swagger`); + console.log(` API Key Gate: ${env.ENABLE_API_KEY_GATE}`); + console.log("\n🌐 Network Configuration"); + console.log(` Network: ${env.NETWORK}`); + console.log(` RPC URL: ${env.LIT_TXSENDER_RPC_URL}`); + console.log(` TX Sender Address: ${privateKeyToAccount(env.LIT_TXSENDER_PRIVATE_KEY as Hex).address}`); + }); +} diff --git a/src/services/lit/LitChainClient/_config.ts b/src/services/lit/LitChainClient/_config.ts new file mode 100644 index 0000000..59373ae --- /dev/null +++ b/src/services/lit/LitChainClient/_config.ts @@ -0,0 +1,58 @@ +import { _nagaDev, datil, datilDev, datilTest } from "@lit-protocol/contracts"; +import { env } from "config/env"; +import { Chain } from "viem"; + +/** + * Due to the usage of arbitrum stylus contracts, + * the gas limit is increased by 10% to avoid reverts due to out of gas errors + */ +const GAS_LIMIT_INCREASE_PERCENTAGE = env.GAS_LIMIT_INCREASE_PERCENTAGE; +export const GAS_LIMIT_ADJUSTMENT = BigInt(100 + GAS_LIMIT_INCREASE_PERCENTAGE); + +export type LitNetwork = string; + +export type NetworkContextType = + | typeof datilDev + | typeof datilTest + | typeof datil + | typeof _nagaDev; + +export const NETWORK_CONTEXT_BY_NETWORK: Record = { + custom: _nagaDev, + datil: datil, + "datil-dev": datilDev, + "datil-test": datilTest, +} as const; + +export const LIT_CONTRACT_NAME = { + PubkeyRouter: "PubkeyRouter", + PKPNFT: "PKPNFT", + PKPHelper: "PKPHelper", + PKPPermissions: "PKPPermissions", +} as const; + +export const chronicleYellowstone: Chain = { + id: 175188, + name: "Chronicle Yellowstone - Lit Protocol Testnet", + nativeCurrency: { + name: "Test LPX", + symbol: "tstLPX", + decimals: 18, + }, + rpcUrls: { + default: { + http: ["https://yellowstone-rpc.litprotocol.com/"], + webSocket: [], + }, + public: { + http: ["https://yellowstone-rpc.litprotocol.com/"], + webSocket: [], + }, + }, + blockExplorers: { + default: { + name: "Yellowstone Explorer", + url: "https://yellowstone-explorer.litprotocol.com/", + }, + }, +}; diff --git a/src/services/lit/LitChainClient/apis.ts b/src/services/lit/LitChainClient/apis.ts new file mode 100644 index 0000000..7a6906c --- /dev/null +++ b/src/services/lit/LitChainClient/apis.ts @@ -0,0 +1,7 @@ +import { claimAndMintNextAndAddAuthMethodsWithTypes } from "./apis/claimAndMintNextAndAddAuthMethodsWithTypes"; +import { mintNextAndAddAuthMethods } from "./apis/mintNextAndAddAuthMethods"; + +export const LitChainClientAPI = { + mintNextAndAddAuthMethods, + claimAndMintNextAndAddAuthMethodsWithTypes, +}; diff --git a/src/services/lit/LitChainClient/apis/claimAndMintNextAndAddAuthMethodsWithTypes.spec.ts b/src/services/lit/LitChainClient/apis/claimAndMintNextAndAddAuthMethodsWithTypes.spec.ts new file mode 100644 index 0000000..af2baa0 --- /dev/null +++ b/src/services/lit/LitChainClient/apis/claimAndMintNextAndAddAuthMethodsWithTypes.spec.ts @@ -0,0 +1,52 @@ +import { describe, expect, test } from "bun:test"; +import { CallExecutionError, ContractFunctionRevertedError } from "viem"; +import { claimAndMintNextAndAddAuthMethodsWithTypes } from "./claimAndMintNextAndAddAuthMethodsWithTypes"; + +describe("LitChainClient", () => { + test("claimAndMintNextAndAddAuthMethodsWithTypes", async () => { + try { + const tx = await claimAndMintNextAndAddAuthMethodsWithTypes({ + derivedKeyId: + "d8ed9605dd8b149982fedc4fd5b2097600fa592ea987580419a397d9f76bd04e", + signatures: [ + { + r: "0x5ad9ef4b86073752835fe22892656a3b9c22b1bbbfa5e1d2b53154ba1ed62bce", + s: "0x32854d9dd249272f9816a9f17fe8cb09d00addad939aa9c20a47bcc600ecbdaa", + v: 28, + }, + { + r: "0x1d75603a9ddbc87ebab283cafbea777e592a9d4ef9fa1b09183a473a31732912", + s: "0x5ff6886776c3d0ecf75348fb64f077a14584b55e951f3b1a664e71367aaf11a4", + v: 28, + }, + { + r: "0x0391d6884faa412805e34c2ffee5ec6133ebf9951ab932a2d7b3807a657cbeea", + s: "0x0d414fe29d3e921d265523de956e0a6f9ce8f565858204c7404e73e79c6c397b", + v: 28, + }, + ], + authMethodType: 1, + authMethodId: "0x", + authMethodPubkey: "0x", + }); + + expect(tx.receipt.logs.length).toBeGreaterThan(0); + expect(tx.hash).toBeDefined(); + expect(tx.decodedLogs.length).toBeGreaterThan(0); + } catch (error) { + console.warn(`❗️If you want to pass this test then you need to generate a new unique keyId eg. +const res = await devEnv.litNodeClient.executeJs({ + authContext: getEoaAuthContext(devEnv, alice), + code: \`(async () => { + Lit.Actions.claimKey({keyId: "my-very-unique-key-id"}); + })();\`, +}); + `); + + const reason = ( + (error as CallExecutionError).cause as ContractFunctionRevertedError + ).reason; + expect(reason).toBe("PubkeyRouter: pubkey already has routing data"); + } + }); +}); diff --git a/src/services/lit/LitChainClient/apis/claimAndMintNextAndAddAuthMethodsWithTypes.ts b/src/services/lit/LitChainClient/apis/claimAndMintNextAndAddAuthMethodsWithTypes.ts new file mode 100644 index 0000000..1dc77bf --- /dev/null +++ b/src/services/lit/LitChainClient/apis/claimAndMintNextAndAddAuthMethodsWithTypes.ts @@ -0,0 +1,72 @@ +import { env } from "config/env"; +import { + ClaimRequestInput, + ClaimRequestSchema, +} from "../schemas/ClaimRequestSchema"; +import { LitTxRes } from "../types"; +import { callWithAdjustedOverrides } from "../utils/callWithAdjustedOverrides"; +import { createLitContracts } from "../utils/createLitContracts"; +import { decodeLogs } from "../utils/decodeLogs"; + +/** + * Claims and mints a PKP using derived key ID and signatures, then adds authentication methods. + * + * @param {ClaimRequestInput} request - The request object containing PKP claiming parameters + * @param {string} request.derivedKeyId - The derived key ID for claiming + * @param {Signature[]} request.signatures - Array of signatures required for claiming + * @param {number} request.authMethodType - The type of authentication method to add + * @param {string} request.authMethodId - The ID of the authentication method + * @param {string} request.authMethodPubkey - The public key of the authentication method + * + * @returns {Promise} Object containing transaction hash, receipt, and decoded logs + */ +export async function claimAndMintNextAndAddAuthMethodsWithTypes( + request: ClaimRequestInput +): Promise { + const validatedRequest = ClaimRequestSchema.parse(request); + const { pkpHelperContract, pkpNftContract, publicClient } = + createLitContracts(env.NETWORK); + + // Get mint cost + const mintCost = await pkpNftContract.read.mintCost(); + const ECDSA_SECP256K1 = 2; + + const AUTH_METHOD_SCOPE = { + SIGN_ANYTHING: "1", + PERSONAL_SIGN: "2", + } as const; + + const claimMaterial = { + keyType: ECDSA_SECP256K1, + derivedKeyId: validatedRequest.derivedKeyId, + signatures: validatedRequest.signatures, + }; + + const authMethodData = { + keyType: ECDSA_SECP256K1, + permittedIpfsCIDs: [], + permittedIpfsCIDScopes: [], + permittedAddresses: [], + permittedAddressScopes: [], + permittedAuthMethodTypes: [validatedRequest.authMethodType], + permittedAuthMethodIds: [validatedRequest.authMethodId], + permittedAuthMethodPubkeys: [validatedRequest.authMethodPubkey], + permittedAuthMethodScopes: [[AUTH_METHOD_SCOPE.SIGN_ANYTHING]], + addPkpEthAddressAsPermittedAddress: true, + sendPkpToItself: true, + }; + + const hash = await callWithAdjustedOverrides( + pkpHelperContract, + "claimAndMintNextAndAddAuthMethodsWithTypes", + [claimMaterial, authMethodData], + { + value: mintCost, + } + ); + + const receipt = await publicClient.waitForTransactionReceipt({ hash }); + const decodedLogs = await decodeLogs(receipt.logs); + + return { hash, receipt, decodedLogs }; +} diff --git a/src/services/lit/LitChainClient/apis/mintNextAndAddAuthMethods.spec.ts b/src/services/lit/LitChainClient/apis/mintNextAndAddAuthMethods.spec.ts new file mode 100644 index 0000000..0b59aaf --- /dev/null +++ b/src/services/lit/LitChainClient/apis/mintNextAndAddAuthMethods.spec.ts @@ -0,0 +1,22 @@ +import { describe, expect, test } from "bun:test"; +import { mintNextAndAddAuthMethods } from "./mintNextAndAddAuthMethods"; + +describe("LitChainClient", () => { + test("mintNextAndAddAuthMethods", async () => { + const tx = await mintNextAndAddAuthMethods({ + keyType: 2, + permittedAuthMethodTypes: [2], + permittedAuthMethodIds: [ + "170d13600caea2933912f39a0334eca3d22e472be203f937c4bad0213d92ed71", + ], + permittedAuthMethodPubkeys: ["0x"], + permittedAuthMethodScopes: [[1]], + addPkpEthAddressAsPermittedAddress: true, + sendPkpToItself: true, + }); + + expect(tx.receipt.logs.length).toBeGreaterThan(0); + expect(tx.hash).toBeDefined(); + expect(tx.decodedLogs.length).toBeGreaterThan(0); + }); +}); diff --git a/src/services/lit/LitChainClient/apis/mintNextAndAddAuthMethods.ts b/src/services/lit/LitChainClient/apis/mintNextAndAddAuthMethods.ts new file mode 100644 index 0000000..53cf269 --- /dev/null +++ b/src/services/lit/LitChainClient/apis/mintNextAndAddAuthMethods.ts @@ -0,0 +1,58 @@ +import { env } from "config/env"; +import { + MintRequestInput, + MintRequestSchema, +} from "../schemas/MintRequestSchema"; +import { callWithAdjustedOverrides } from "../utils/callWithAdjustedOverrides"; +import { createLitContracts } from "../utils/createLitContracts"; +import { decodeLogs } from "../utils/decodeLogs"; +import { LitTxRes } from "../types"; + +/** + * Mints a new Programmable Key Pair (PKP) with specified authentication methods. + * + * @param {MintRequestInput} request - The request object containing PKP minting parameters + * @param {number} request.keyType - The type of key to mint + * @param {number[]} request.permittedAuthMethodTypes - Array of permitted authentication method types + * @param {string[]} request.permittedAuthMethodIds - Array of permitted authentication method IDs + * @param {string[]} request.permittedAuthMethodPubkeys - Array of permitted authentication method public keys + * @param {string[][]} request.permittedAuthMethodScopes - Array of scopes for each authentication method + * @param {boolean} request.addPkpEthAddressAsPermittedAddress - Whether to add the PKP's Ethereum address as a permitted address + * @param {boolean} request.sendPkpToItself - Whether to send the PKP to itself + * + * @returns {Promise} Object containing transaction hash, receipt, and decoded logs + */ +export async function mintNextAndAddAuthMethods( + request: MintRequestInput +): Promise { + const validatedRequest = MintRequestSchema.parse(request); + + const { pkpNftContract, pkpHelperContract, publicClient } = + createLitContracts(env.NETWORK); + + // Get mint cost + const mintCost = await pkpNftContract.read.mintCost(); + + const hash = await callWithAdjustedOverrides( + pkpHelperContract, + "mintNextAndAddAuthMethods", + [ + validatedRequest.keyType, + validatedRequest.permittedAuthMethodTypes, + validatedRequest.permittedAuthMethodIds, + validatedRequest.permittedAuthMethodPubkeys, + validatedRequest.permittedAuthMethodScopes, + validatedRequest.addPkpEthAddressAsPermittedAddress, + validatedRequest.sendPkpToItself, + ], + { + value: mintCost, + } + ); + + const receipt = await publicClient.waitForTransactionReceipt({ hash }); + + const decodedLogs = await decodeLogs(receipt.logs); + + return { hash, receipt, decodedLogs }; +} diff --git a/src/services/lit/LitChainClient/schemas/claimRequestSchema.ts b/src/services/lit/LitChainClient/schemas/claimRequestSchema.ts new file mode 100644 index 0000000..d7b42d3 --- /dev/null +++ b/src/services/lit/LitChainClient/schemas/claimRequestSchema.ts @@ -0,0 +1,38 @@ +import { z } from "zod"; +import { t } from "elysia"; +import { toBigInt, toHexString } from "../../utils/transformers"; + +export const ClaimRequestSchema = z.object({ + derivedKeyId: toHexString, + signatures: z.array( + z.object({ + r: toHexString, + s: toHexString, + v: z.number(), + }) + ), + authMethodType: toBigInt, + authMethodId: toHexString, + authMethodPubkey: toHexString, +}); + +// Define two types: +// The raw input type (e.g., number, string, etc.) +export type ClaimRequestInput = z.input; + +// The transformed output type (e.g., BigInt, etc.) +export type ClaimRequest = z.infer; + +export const tClaimRequestSchema = t.Object({ + derivedKeyId: t.String(), + signatures: t.Array( + t.Object({ + r: t.String(), + s: t.String(), + v: t.Number(), + }) + ), + authMethodType: t.Number(), + authMethodId: t.String(), + authMethodPubkey: t.String(), +}); diff --git a/src/services/lit/LitChainClient/schemas/mintRequestSchema.ts b/src/services/lit/LitChainClient/schemas/mintRequestSchema.ts new file mode 100644 index 0000000..b48251a --- /dev/null +++ b/src/services/lit/LitChainClient/schemas/mintRequestSchema.ts @@ -0,0 +1,37 @@ +import { z } from "zod"; +import { t } from "elysia"; + +import { + toBigInt, + toBigIntArray, + toHexStringArray, + toBigIntMatrix, + toBoolean, +} from "../../utils/transformers"; + +export const MintRequestSchema = z.object({ + keyType: toBigInt, + permittedAuthMethodTypes: toBigIntArray, + permittedAuthMethodIds: toHexStringArray, + permittedAuthMethodPubkeys: toHexStringArray, + permittedAuthMethodScopes: toBigIntMatrix, + addPkpEthAddressAsPermittedAddress: toBoolean, + sendPkpToItself: toBoolean, +}); + +// Define two types: +// The raw input type (e.g., number, string, etc.) +export type MintRequestInput = z.input; + +// The transformed output type (e.g., BigInt, etc.) +export type MintRequest = z.infer; + +export const tMintRequestSchema = t.Object({ + keyType: t.Number(), + permittedAuthMethodTypes: t.Array(t.Number()), + permittedAuthMethodIds: t.Array(t.String()), + permittedAuthMethodPubkeys: t.Array(t.String()), + permittedAuthMethodScopes: t.Array(t.Array(t.Number())), + addPkpEthAddressAsPermittedAddress: t.Boolean(), + sendPkpToItself: t.Boolean(), +}); diff --git a/src/services/lit/LitChainClient/types.ts b/src/services/lit/LitChainClient/types.ts new file mode 100644 index 0000000..413d8b9 --- /dev/null +++ b/src/services/lit/LitChainClient/types.ts @@ -0,0 +1,8 @@ +import { Hex, TransactionReceipt } from "viem"; +import { DecodedLog } from "./utils/decodeLogs"; + +export type LitTxRes = { + hash: Hex; + receipt: TransactionReceipt; + decodedLogs: DecodedLog[]; +}; diff --git a/src/services/lit/LitChainClient/utils/asyncHandler.ts b/src/services/lit/LitChainClient/utils/asyncHandler.ts new file mode 100644 index 0000000..030f2b4 --- /dev/null +++ b/src/services/lit/LitChainClient/utils/asyncHandler.ts @@ -0,0 +1,20 @@ +import { logger } from "./logger"; + +export function asyncHandler Promise>( + fn: T +): T { + return (async (...args: Parameters): Promise> => { + try { + return await fn(...args); + } catch (err) { + // Ensure we have an Error instance with preserved details + const error = err instanceof Error ? err : new Error(String(err), { cause: err }); + // Log the error object directly so that the stack is preserved + logger.error( + error, + `Error in asyncHandler for function: ${fn.name || "anonymous"}` + ); + throw error; + } + }) as T; +} diff --git a/src/services/lit/LitChainClient/utils/callWithAdjustedOverrides.ts b/src/services/lit/LitChainClient/utils/callWithAdjustedOverrides.ts new file mode 100644 index 0000000..248bb0b --- /dev/null +++ b/src/services/lit/LitChainClient/utils/callWithAdjustedOverrides.ts @@ -0,0 +1,51 @@ +import { Hash } from "viem"; +import { GAS_LIMIT_ADJUSTMENT } from "../_config"; + +/** + * Calls a contract method with adjusted gas overrides to handle Arbitrum Stylus contracts + * @param contract The contract instance to call + * @param methodName The name of the contract method to call + * @param args The arguments to pass to the contract method + * @param overrides Optional transaction overrides (e.g. value, gasLimit) + * @returns A Promise that resolves to the transaction hash + */ +export async function callWithAdjustedOverrides< + TContract extends { + write: Record Promise>; + }, + TMethodName extends keyof TContract["write"], + TArgs extends readonly unknown[], + TOverrides extends Record = Record +>( + contract: TContract, + methodName: TMethodName & string, + args: TArgs, + overrides?: TOverrides +): Promise { + // Get the write function from the contract + const writeFunction = contract.write[methodName]; + if (!writeFunction) { + throw new Error(`Method ${methodName} not found on contract`); + } + + // If overrides include a gas limit, adjust it + if (overrides && typeof overrides === "object" && "gas" in overrides) { + const currentGas = BigInt(overrides.gas as bigint | number); + const adjustedGas = + (currentGas * BigInt(GAS_LIMIT_ADJUSTMENT)) / BigInt(100); + overrides = { + ...overrides, + gas: adjustedGas, + }; + } + + // For contract methods that expect array arguments, we need to pass the first array argument + // This handles cases where the contract method expects [arg1, arg2, ...] but we pass [[arg1, arg2, ...]] + const contractArgs = + Array.isArray(args) && args.length === 1 && Array.isArray(args[0]) + ? args[0] + : args; + + // Call the contract method with the provided arguments and overrides + return writeFunction(contractArgs, overrides); +} diff --git a/src/services/lit/LitChainClient/utils/createLitContracts.ts b/src/services/lit/LitChainClient/utils/createLitContracts.ts new file mode 100644 index 0000000..247ab4c --- /dev/null +++ b/src/services/lit/LitChainClient/utils/createLitContracts.ts @@ -0,0 +1,71 @@ +import { env } from "config/env"; + +import { + createPublicClient, + createWalletClient, + getContract as getViemContract, + http, +} from "viem"; +import { privateKeyToAccount } from "viem/accounts"; +import { getContractData } from "./getContractData"; +import { + chronicleYellowstone, + LIT_CONTRACT_NAME, + LitNetwork, + NETWORK_CONTEXT_BY_NETWORK, +} from "../_config"; + +export const createLitContracts = (network: LitNetwork) => { + const transport = http(env.LIT_TXSENDER_RPC_URL); + const account = privateKeyToAccount( + env.LIT_TXSENDER_PRIVATE_KEY as `0x${string}` + ); + + const publicClient = createPublicClient({ + chain: chronicleYellowstone, + transport, + }); + + const walletClient = createWalletClient({ + chain: chronicleYellowstone, + transport, + account, + }); + + // -- Create network context + const networkContext = NETWORK_CONTEXT_BY_NETWORK[network]; + + if (!networkContext) { + throw new Error(`Network "${network}" not found`); + } + + const pkpNftContractData = getContractData( + networkContext, + LIT_CONTRACT_NAME.PKPNFT, + network + ); + + const pkpNftContract = getViemContract({ + address: pkpNftContractData.address as `0x${string}`, + abi: pkpNftContractData.abi, + client: { public: publicClient, wallet: walletClient }, + }); + + const pkpHelperContractData = getContractData( + networkContext, + LIT_CONTRACT_NAME.PKPHelper, + network + ); + + const pkpHelperContract = getViemContract({ + address: pkpHelperContractData.address as `0x${string}`, + abi: pkpHelperContractData.abi, + client: { public: publicClient, wallet: walletClient }, + }); + + return { + pkpNftContract, + pkpHelperContract, + publicClient, + }; +}; diff --git a/src/services/lit/LitChainClient/utils/decodeLogs.ts b/src/services/lit/LitChainClient/utils/decodeLogs.ts new file mode 100644 index 0000000..cbcb3ea --- /dev/null +++ b/src/services/lit/LitChainClient/utils/decodeLogs.ts @@ -0,0 +1,90 @@ +import { env } from "config/env"; +import { decodeEventLog, Log } from "viem"; +import { getContractData } from "./getContractData"; +import { LIT_CONTRACT_NAME, NETWORK_CONTEXT_BY_NETWORK } from "../_config"; + +export type DecodedLog = { + eventName: string; + args: { + [key: string]: any; + }; +}; + +/** + * Decodes event logs from Lit Protocol contract transactions + * @param logs Array of transaction logs to decode + * @returns Array of decoded logs with event names and parameters + */ +export const decodeLogs = async (logs: Log[]): Promise => { + // Get network context for contract ABIs + const networkContext = NETWORK_CONTEXT_BY_NETWORK[env.NETWORK]; + + if (!networkContext) { + throw new Error(`Network "${env.NETWORK}" not found`); + } + + // Get contract data for each contract type + const pkpNftData = getContractData( + networkContext, + LIT_CONTRACT_NAME.PKPNFT, + env.NETWORK + ); + const pkpHelperData = getContractData( + networkContext, + LIT_CONTRACT_NAME.PKPHelper, + env.NETWORK + ); + const pkpPermissionsData = getContractData( + networkContext, + LIT_CONTRACT_NAME.PKPPermissions, + env.NETWORK + ); + const pubkeyRouterData = getContractData( + networkContext, + LIT_CONTRACT_NAME.PubkeyRouter, + env.NETWORK + ); + + // Map contract addresses to their ABIs + const contractABIs = new Map(); + contractABIs.set(pkpNftData.address.toLowerCase(), pkpNftData.abi); + contractABIs.set(pkpHelperData.address.toLowerCase(), pkpHelperData.abi); + contractABIs.set( + pkpPermissionsData.address.toLowerCase(), + pkpPermissionsData.abi + ); + contractABIs.set( + pubkeyRouterData.address.toLowerCase(), + pubkeyRouterData.abi + ); + + // Decode each log + const decodedLogs = logs.map((log) => { + try { + const abi = contractABIs.get(log.address.toLowerCase()); + if (!abi) { + return { + ...log, + decoded: null, + error: "No matching ABI found for address", + }; + } + + const decoded = decodeEventLog({ + abi, + data: log.data, + topics: log.topics, + }); + + return decoded; + } catch (error) { + return { + ...log, + decoded: null, + error: error instanceof Error ? error.message : "Unknown error", + }; + } + }); + + return decodedLogs as DecodedLog[]; +}; diff --git a/src/services/lit/LitChainClient/utils/getContractData.ts b/src/services/lit/LitChainClient/utils/getContractData.ts new file mode 100644 index 0000000..aa62661 --- /dev/null +++ b/src/services/lit/LitChainClient/utils/getContractData.ts @@ -0,0 +1,30 @@ +import { LIT_CONTRACT_NAME, NetworkContextType, LitNetwork } from "../_config"; + +export function getContractData( + networkContext: NetworkContextType, + contractName: keyof typeof LIT_CONTRACT_NAME, + network: LitNetwork +) { + // if (network === "custom") { + // const data = networkContext as unknown as typeof _nagaDev; + // return { + // abi: data[contractName].abi, + // address: data[contractName].address, + // }; + // } + + const data = networkContext.data.find( + (item: { name: string }) => item.name === contractName + ); + + const contractData = data?.contracts[0]; + + if (!contractData?.ABI || !contractData?.address_hash) { + throw new Error(`Contract ${contractName} not found`); + } + + return { + abi: contractData.ABI, + address: contractData.address_hash, + }; +} diff --git a/src/services/lit/LitChainClient/utils/logger.ts b/src/services/lit/LitChainClient/utils/logger.ts new file mode 100644 index 0000000..5b497a3 --- /dev/null +++ b/src/services/lit/LitChainClient/utils/logger.ts @@ -0,0 +1,12 @@ +import { pino } from "pino"; +import { env } from "config/env"; + +export const logger = pino({ + level: env.LOG_LEVEL, + transport: { + target: "pino-pretty", + options: { + colorize: true, + }, + }, +}); diff --git a/src/services/lit/LitPKPAuthRouter/router.ts b/src/services/lit/LitPKPAuthRouter/router.ts new file mode 100644 index 0000000..14ffd2a --- /dev/null +++ b/src/services/lit/LitPKPAuthRouter/router.ts @@ -0,0 +1,42 @@ +import { asyncHandler } from "../LitChainClient/utils/asyncHandler"; +import { LitChainClientAPI } from "../LitChainClient/apis"; +import { MintRequestInput } from "../LitChainClient/schemas/MintRequestSchema"; +import { ClaimRequestInput } from "../LitChainClient/schemas/ClaimRequestSchema"; +import { JSONStringify as BigIntStringify } from "json-with-bigint"; +import { generateRegistrationOptions } from "../WebAuthn/apis/generationRegistrationOptions"; +import { WebAuthnRequestInput } from "../WebAuthn/schemas/WebAuthnRequest"; + +/** + * This router includes ALL the APIs for a PKP Auth Service + */ +export const LitPKPAuthRouter = { + mintNextAndAddAuthMethods: asyncHandler( + async ({ body }: { body: MintRequestInput }) => { + const mintRes = await LitChainClientAPI.mintNextAndAddAuthMethods(body); + return { + hash: mintRes.hash, + decodedLogs: BigIntStringify(mintRes.decodedLogs), + receipt: BigIntStringify(mintRes.receipt), + }; + } + ), + claimAndMintNextAndAddAuthMethodsWithTypes: asyncHandler( + async ({ body }: { body: ClaimRequestInput }) => { + const { derivedKeyId, signatures, authMethodType } = body; + const mintTx = + await LitChainClientAPI.claimAndMintNextAndAddAuthMethodsWithTypes({ + derivedKeyId, + signatures, + authMethodType, + authMethodId: derivedKeyId, + authMethodPubkey: "0x", + }); + return { requestId: mintTx.hash }; + } + ), + generateRegistrationOptions: asyncHandler( + async ({ body }: { body: WebAuthnRequestInput }) => { + return await generateRegistrationOptions(body); + } + ), +}; diff --git a/src/services/lit/WebAuthn/apis.ts b/src/services/lit/WebAuthn/apis.ts new file mode 100644 index 0000000..c851976 --- /dev/null +++ b/src/services/lit/WebAuthn/apis.ts @@ -0,0 +1,5 @@ +import { generateRegistrationOptions } from "./apis/generationRegistrationOptions"; + +export const WebAuthnAPI = { + generateRegistrationOptions, +}; diff --git a/src/services/lit/WebAuthn/apis/generationRegistrationOptions.spec.ts b/src/services/lit/WebAuthn/apis/generationRegistrationOptions.spec.ts new file mode 100644 index 0000000..8cafbec --- /dev/null +++ b/src/services/lit/WebAuthn/apis/generationRegistrationOptions.spec.ts @@ -0,0 +1,66 @@ +import { describe, expect, test } from "bun:test"; +import { env } from "config/env"; +import { generateRegistrationOptions } from "./generationRegistrationOptions"; + +describe("WebAuthn", () => { + test("generateRegistrationOptions", async () => { + const request = { + url: "https://example.com", + }; + const registrationOptions = await generateRegistrationOptions(request); + + // Expected output: + // { + // challenge: "SqPp7N4cfVjXXw3EVbnHelon53Bw8ke-4ZXP1ta7qzE", + // rp: { + // name: "Lit Protocol", + // id: "example.com", + // }, + // user: { + // id: "0x46c77a75b0cf14f03c1da4cb8294f406266f807b117387258dd521186c91b838", + // name: "Usernameless user (2025-02-17 22:07:38)", + // displayName: "Usernameless user (2025-02-17 22:07:38)", + // }, + // pubKeyCredParams: [ + // { + // alg: -7, + // type: "public-key", + // } + // ], + // timeout: 6000, + // attestation: "direct", + // excludeCredentials: [], + // authenticatorSelection: { + // userVerification: "required", + // residentKey: "required", + // requireResidentKey: true, + // }, + // extensions: undefined, + // } + expect(registrationOptions.challenge).toBeDefined(); + expect(registrationOptions.rp.name).toBe(env.WEBAUTHN_RP_NAME); + expect(registrationOptions.rp.id).toBe(new URL(request.url).hostname); + expect(registrationOptions.user.name).toBeDefined(); + expect(registrationOptions.user.id).toBeDefined(); + expect(registrationOptions.user.displayName).toBeDefined(); + expect(registrationOptions.pubKeyCredParams[0].alg).toBe(-7); + expect(registrationOptions.timeout).toBe(env.WEBAUTHN_TIMEOUT); + expect(registrationOptions.attestation).toBe("direct"); + expect(registrationOptions.excludeCredentials).toEqual([]); + expect(registrationOptions.authenticatorSelection?.userVerification).toBe( + "required" + ); + expect(registrationOptions.authenticatorSelection?.residentKey).toBe( + "required" + ); + }); + + test("generateRegistrationOptions with username", async () => { + const request = { + url: "https://example.com", + username: "testuser", + }; + const registrationOptions = await generateRegistrationOptions(request); + expect(registrationOptions.user.name).toBe(request.username); + }); +}); diff --git a/src/services/lit/WebAuthn/apis/generationRegistrationOptions.ts b/src/services/lit/WebAuthn/apis/generationRegistrationOptions.ts new file mode 100644 index 0000000..e97bb2d --- /dev/null +++ b/src/services/lit/WebAuthn/apis/generationRegistrationOptions.ts @@ -0,0 +1,43 @@ +import * as SimpleWebAuthnServer from "@simplewebauthn/server"; +import { env } from "config/env"; +import { keccak256, toBytes } from "viem"; +import { + WebAuthnRequestInput, + WebAuthnRequestSchema, +} from "../schemas/WebAuthnRequest"; +import { generateTimestampBasedUsername } from "../utils/generateUsername"; + +export const generateRegistrationOptions = async ( + request: WebAuthnRequestInput +) => { + const validatedRequest = WebAuthnRequestSchema.parse(request); + + // Relying Party Identifier - is usually the domain (or a registered domain suffix) of your website (e.g., "example.com"). The browser uses it to ensure that credentials are tied to your domain and not misused on another site. + const RP_ID = new URL(validatedRequest.url).hostname; + + const userName = validatedRequest.username + ? validatedRequest.username + : generateTimestampBasedUsername(); + + const userID = keccak256(toBytes(userName)); + + // https://www.iana.org/assignments/cose/cose.xhtml + // COSE Algorithm Identifier for ES256 + const ES256 = -7; + + const options: SimpleWebAuthnServer.GenerateRegistrationOptionsOpts = { + rpID: RP_ID, + rpName: env.WEBAUTHN_RP_NAME, + userID: userID, + userName: userName, + timeout: env.WEBAUTHN_TIMEOUT, + attestationType: "direct", // TODO: change to none (Anson: why?), + authenticatorSelection: { + userVerification: "required", + residentKey: "required", + }, + supportedAlgorithmIDs: [ES256], + }; + + return SimpleWebAuthnServer.generateRegistrationOptions(options); +}; diff --git a/src/services/lit/WebAuthn/schemas/WebAuthnRequest.ts b/src/services/lit/WebAuthn/schemas/WebAuthnRequest.ts new file mode 100644 index 0000000..39f7494 --- /dev/null +++ b/src/services/lit/WebAuthn/schemas/WebAuthnRequest.ts @@ -0,0 +1,19 @@ +import { z } from "zod"; +import { t } from "elysia"; + +export const WebAuthnRequestSchema = z.object({ + username: z.string().optional(), + url: z.string(), +}); + +// Define two types: +// The raw input type (e.g., number, string, etc.) +export type WebAuthnRequestInput = z.input; + +// The transformed output type (e.g., BigInt, etc.) +export type WebAuthnRequest = z.infer; + +export const tWebAuthnRequestSchema = t.Object({ + username: t.Optional(t.String()), + url: t.Optional(t.String()), +}); diff --git a/src/services/lit/WebAuthn/utils/generateUsername.spec.ts b/src/services/lit/WebAuthn/utils/generateUsername.spec.ts new file mode 100644 index 0000000..74ebbe0 --- /dev/null +++ b/src/services/lit/WebAuthn/utils/generateUsername.spec.ts @@ -0,0 +1,76 @@ +import { expect, test, describe } from "bun:test"; +import { generateTimestampBasedUsername } from "./generateUsername"; + +describe("generateTimestampBasedUsername", () => { + test("should generate username with correct format", () => { + const mockDate = new Date("2024-03-15T09:08:45.000Z"); + const originalDate = global.Date; + global.Date = class extends Date { + constructor() { + super(); + return mockDate; + } + } as DateConstructor; + + const username = generateTimestampBasedUsername(); + + // Test exact match + expect(username).toBe("Usernameless user (2024-03-15 09:08:45)"); + + // Test format pattern + const formatPattern = + /^Usernameless user \(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\)$/; + expect(formatPattern.test(username)).toBe(true); + + // Verify individual components + const matches = username.match( + /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/ + ); + expect(matches).not.toBeNull(); + if (matches) { + const [_, year, month, day, hour, minute, second] = matches; + expect(year).toBe("2024"); + expect(month).toBe("03"); + expect(day).toBe("15"); + expect(hour).toBe("09"); + expect(minute).toBe("08"); + expect(second).toBe("45"); + } + + // Clean up + global.Date = originalDate; + }); + + test("should handle single digit values correctly", () => { + const mockDate = new Date("2024-01-05T01:02:03.000Z"); + const originalDate = global.Date; + global.Date = class extends Date { + constructor() { + super(); + return mockDate; + } + } as DateConstructor; + + const username = generateTimestampBasedUsername(); + + // Test exact match + expect(username).toBe("Usernameless user (2024-01-05 01:02:03)"); + + // Verify padding of single digits + const matches = username.match( + /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/ + ); + expect(matches).not.toBeNull(); + if (matches) { + const [_, year, month, day, hour, minute, second] = matches; + expect(month).toBe("01"); // Should be padded + expect(day).toBe("05"); // Should be padded + expect(hour).toBe("01"); // Should be padded + expect(minute).toBe("02"); // Should be padded + expect(second).toBe("03"); // Should be padded + } + + // Clean up + global.Date = originalDate; + }); +}); diff --git a/src/services/lit/WebAuthn/utils/generateUsername.ts b/src/services/lit/WebAuthn/utils/generateUsername.ts new file mode 100644 index 0000000..061513d --- /dev/null +++ b/src/services/lit/WebAuthn/utils/generateUsername.ts @@ -0,0 +1,14 @@ +/** + * Generates a default username for users without a specified username. + * Format: "Usernameless user (YYYY-MM-DD HH:mm:ss)" + * + * @returns A formatted string containing timestamp-based username + * @example "Usernameless user (2025-02-17 21:47:37)" + */ +export function generateTimestampBasedUsername(): string { + const date = new Date(); + return `Usernameless user (${date + .toISOString() + .slice(0, 19) + .replace("T", " ")})`; +} diff --git a/src/services/lit/utils/transformers.ts b/src/services/lit/utils/transformers.ts new file mode 100644 index 0000000..14058b8 --- /dev/null +++ b/src/services/lit/utils/transformers.ts @@ -0,0 +1,76 @@ +import { z } from "zod"; +import { Hex } from "viem"; + +/** + * Ensures a hex string has '0x' prefix + * @param value - The hex string to check + * @returns The hex string with '0x' prefix + */ +export function hexPrefixed(value: string): Hex { + return value.startsWith("0x") ? (value as Hex) : (`0x${value}` as Hex); +} + +/** + * Safely converts a value to BigInt, returns 0n if conversion fails + */ +function safeBigInt(value: string | number): bigint { + try { + if (typeof value === "string" && value.trim() === "") return 0n; + return BigInt(value); + } catch { + return 0n; + } +} + +// Transform a number or string to a BigInt +// eg. "2" or 2 -> 2n +export const toBigInt = z + .union([z.string(), z.number()]) + .transform((n) => safeBigInt(n)); + +// Transform a number/string or array of numbers/strings to an array of BigInts +// eg. "1" -> [1n] +// eg. [1, "2", 3] -> [1n, 2n, 3n] +export const toBigIntArray = z + .union([z.string(), z.number(), z.array(z.union([z.string(), z.number()]))]) + .transform((val) => { + if (Array.isArray(val)) { + return val.map(safeBigInt); + } + return [safeBigInt(val)]; + }); + +// Transform a string to a hex string type +// eg. "123" -> "0x123" +export const toHexString = z.string().transform((s) => hexPrefixed(s)); + +// Transform a string or array of strings to an array of hex strings +// eg. undefined -> ["0x"] +// eg. "123" -> ["0x123"] +// eg. ["123", "456"] -> ["0x123", "0x456"] +export const toHexStringArray = z + .union([z.string(), z.array(z.string()), z.undefined()]) + .transform((val) => { + if (!val) return [hexPrefixed("")]; + if (Array.isArray(val)) { + return val.map(hexPrefixed); + } + return [hexPrefixed(val)]; + }); + +// Transform arrays of numbers/strings to arrays of arrays of BigInts +// eg. undefined -> [[]] +// eg. [[1, "2"], ["3", 4]] -> [[1n, 2n], [3n, 4n]] +export const toBigIntMatrix = z + .union([z.array(z.array(z.union([z.string(), z.number()]))), z.undefined()]) + .transform((val) => { + if (!val) return [[]]; + return val.map((inner) => inner.map(safeBigInt)); + }); + +// Transform undefined or boolean to boolean +// eg. undefined -> false +// eg. true -> true +export const toBoolean = z + .union([z.boolean(), z.undefined()]) + .transform((val) => Boolean(val ?? false)); diff --git a/src/services/redis/redis.ts b/src/services/redis/redis.ts new file mode 100644 index 0000000..e7f085d --- /dev/null +++ b/src/services/redis/redis.ts @@ -0,0 +1,15 @@ +import { createClient } from "redis"; +import { env } from "../../config/env"; + +export const redisClient = createClient({ + url: env.REDIS_URL, +}); + +redisClient.on("error", (error: Error) => { + console.error(`Redis Error: ${error}`); +}); + +// Connect to Redis +(async () => { + await redisClient.connect(); +})(); diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..afde574 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,22 @@ +import { env } from "config/env"; +import { createLitContracts } from "../LitChainClient/utils/createLitContracts"; + +/** + * Retrieves the Ethereum address for a given PKP token ID + * @param tokenId - The ID of the PKP token + * @returns The Ethereum address as a hex string + */ +export async function getPkpEthAddress(tokenId: string): Promise { + const { pkpNftContract } = createLitContracts(env.NETWORK); + return pkpNftContract.read.getEthAddress([BigInt(tokenId)]); +} + +/** + * Retrieves the public key for a given PKP token ID + * @param tokenId - The ID of the PKP token + * @returns The public key as a hex string + */ +export async function getPkpPublicKey(tokenId: string): Promise { + const { pkpNftContract } = createLitContracts(env.NETWORK); + return pkpNftContract.read.getPubkey([BigInt(tokenId)]); +} diff --git a/tsconfig.json b/tsconfig.json index e067ebb..4d34c84 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,28 +1,21 @@ { "compilerOptions": { - "target": "ES2018", - "lib": [ - "ES2018", - "DOM" - ], - "module": "commonjs", + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "types": ["bun-types"], "esModuleInterop": true, - "declaration": true, - "sourceMap": true, - "allowSyntheticDefaultImports": true, "strict": true, - "outDir": "dist", "skipLibCheck": true, - "skipDefaultLibCheck": true, - "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "outDir": "dist", + "rootDir": "src", + "baseUrl": "src", "paths": { - "*": [ - "./types/*" - ] - }, + "*": ["*"] + } }, - "exclude": [ - "node_modules", - "**/dist/*" - ] -} \ No newline at end of file + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/types/jszip.d.ts b/types/jszip.d.ts deleted file mode 100644 index 5f38d74..0000000 --- a/types/jszip.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Workaround for jszip type issues - -declare module 'jszip/dist/jszip.js' - -type JSZip = any; \ No newline at end of file diff --git a/types/lit.ts b/types/lit.ts deleted file mode 100644 index d243fc6..0000000 --- a/types/lit.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type CapacityToken = { - URI: { description: string; image_data: string; name: string }; - capacity: { - expiresAt: { formatted: string; timestamp: number }; - requestsPerMillisecond: number; - }; - isExpired: boolean; - tokenId: number; -}; \ No newline at end of file diff --git a/utils/auth.ts b/utils/auth.ts deleted file mode 100644 index bf0c6e8..0000000 --- a/utils/auth.ts +++ /dev/null @@ -1,302 +0,0 @@ -import { Base64 } from "js-base64"; -import { SiweMessage, SiweResponse } from "siwe"; -import nacl from "tweetnacl"; -import { fromString } from "uint8arrays"; -import { - AuthSig, - CapabilityObject, - CapabilityProtocolPrefix, - SessionSig, - SessionSigSignedMessage, -} from "../models"; - -function checkEd25519Signature(sessionSig: SessionSig): boolean { - const sigBytes = fromString(sessionSig.sig, "base16"); - const msgBytes = fromString(sessionSig.signedMessage, "utf8"); - const pubKeyBytes = fromString(sessionSig.address, "base16"); - - return nacl.sign.detached.verify(msgBytes, sigBytes, pubKeyBytes); -} - -function tryParseJson(jsonStr: string): [T | null, Error | null] { - try { - const parsedObject: T = JSON.parse(jsonStr); - return [parsedObject, null]; - } catch (e) { - const parseErr = new Error(`Unable to parse JSON: ${e}`); - return [null, parseErr]; - } -} - -function parseSIWEMessage( - siweMessage: string, -): [SiweMessage | null, Error | null] { - try { - return [new SiweMessage(siweMessage), null]; - } catch (err) { - const parseErr = new Error(`Unable to parse SIWE message: ${err}`); - console.error(parseErr); - return [null, parseErr]; - } -} - -export function getFullResourceUri( - protocolPrefix: CapabilityProtocolPrefix, - resourceUri: string, -): string { - return `${protocolPrefix}://${resourceUri}`; -} - -export function getResourceWildcardUri( - protocolPrefix: CapabilityProtocolPrefix, -): string { - return `${protocolPrefix}://*`; -} - -export function getSiweMessageUri(sessionPubKey: string) { - return `lit:session:${sessionPubKey}`; -} - -export async function validateSessionSignature( - sessionSig: SessionSig, - fullResourceUri: string, - capabilityProtocolPrefix: CapabilityProtocolPrefix, -): Promise<[string, Error | null]> { - const now = new Date(); - - // Check valid algo. - if (sessionSig.algo !== "ed25519") { - return ["", new Error(`Unsupported algo: ${sessionSig.algo}`)]; - } - - // Check valid derivedVia. - if (sessionSig.derivedVia !== "litSessionSignViaNacl") { - return [ - "", - new Error(`Unsupported derivedVia: ${sessionSig.derivedVia}`), - ]; - } - - // Validate ed25519 signature. - if (!checkEd25519Signature(sessionSig)) { - return ["", new Error(`Invalid signature: ${sessionSig.sig}`)]; - } - - // Parse session sig signed message. - const parseRes = tryParseJson( - sessionSig.signedMessage, - ); - if (!!parseRes[1]) { - return [ - "", - new Error( - `Unable to parse session sig signed message: ${parseRes[1]}`, - ), - ]; - } - const sessionSigSignedMessage = parseRes[0]!; - - // Validate session key signed message contains full resource URI or the wildcard for the corresponding - // capabilityProtocolPrefix. - if ( - sessionSigSignedMessage.resources.indexOf(fullResourceUri) === -1 && - sessionSigSignedMessage.resources.indexOf( - getResourceWildcardUri(capabilityProtocolPrefix), - ) === -1 - ) { - return [ - "", - new Error( - `Signed message resources does not contain the requested resource URI: ${fullResourceUri}`, - ), - ]; - } - - // Validate issuedAt is in the past - if (now.valueOf() < Date.parse(sessionSigSignedMessage.issuedAt)) { - return [ - "", - new Error(`Signed message contains issuedAt in the future`), - ]; - } - - // Validate expiresAt is in the future. - if (now.valueOf() > Date.parse(sessionSigSignedMessage.expiration)) { - return [ - "", - new Error(`Signed message contains expiration in the past`), - ]; - } - - // Check that the resource ID is authed in the capabilities. - try { - const [creatorAddress, validateCapabilityErr] = - await validateSessionCapability( - sessionSigSignedMessage.capabilities, - sessionSig.address, - fullResourceUri, - capabilityProtocolPrefix, - ); - if (!!validateCapabilityErr) { - return [ - "", - new Error( - `Invalid capabilities array: ${validateCapabilityErr}`, - ), - ]; - } - - return [creatorAddress, null]; - } catch (validationErr: any) { - return [ - "", - new Error( - `Unable to validate capabilities: ${validationErr.toString()}`, - ), - ]; - } -} - -async function validateSessionCapability( - capabilities: Array, - delegatedSessionPubKey: string, - fullResourceUri: string, - capabilityProtocolPrefix: CapabilityProtocolPrefix, -): Promise<[string, Error | null]> { - if (capabilities.length === 0) { - return ["", new Error(`Empty capabilities array`)]; - } - - for (let i = 0; i < capabilities.length; i++) { - const capability: AuthSig = capabilities[i]; - - // Parse SIWE message. - const parseRes = parseSIWEMessage(capability.signedMessage); - if (!!parseRes[1]) { - return [ - "", - new Error( - `Unable to parse session sig SIWE message: ${parseRes[1]}`, - ), - ]; - } - const siweMessage = parseRes[0]; - - // Validate SIWE message. - let verifyRes: SiweResponse; - try { - verifyRes = await siweMessage!.verify({ - signature: capability.sig, - time: new Date().toISOString(), - }); - if (!verifyRes.success) { - return [ - "", - new Error( - `Unable to verify SIWE message: ${verifyRes.error}`, - ), - ]; - } - } catch (verifyErr: any) { - return [ - "", - new Error( - `Error verifying SIWE message: ${JSON.stringify( - verifyErr, - )}`, - ), - ]; - } - const creatorAddress = verifyRes.data.address; - - // Validate resources array. - const validateResourcesErr = validateSiweResources( - verifyRes.data.resources!, - capabilityProtocolPrefix, - fullResourceUri, - ); - if (!!validateResourcesErr) { - return [ - "", - new Error( - `Invalid Resources field in SIWE message: ${validateResourcesErr}`, - ), - ]; - } - - // Validate that session pubkey is signed in the wallet-signed SIWE message. - if (getSiweMessageUri(delegatedSessionPubKey) !== verifyRes.data.uri) { - return ["", new Error("Invalid URI field in SIWE message")]; - } - - return [creatorAddress, null]; - } - - return ["", new Error(`Unable to find sufficient capabilities`)]; -} - -function validateSiweResources( - siweResources: string[], - capabilityProtocolPrefix: CapabilityProtocolPrefix, - requestedHashedResourceId: string, -): Error | null { - for (let i = 0; i < siweResources.length; i++) { - const siweResourceUri = siweResources[i]; - - // Get the encoded capability object - const encodedCapObject = siweResourceUri.split(":").pop(); - if (!encodedCapObject) { - continue; - } - - // Decode the capability object - const capabilityObjectStr = Base64.decode(encodedCapObject); - - // Deserialize into JSON. - const parseRes = tryParseJson(capabilityObjectStr); - if (!!parseRes[1]) { - return new Error( - `Unable to parse capability object: ${parseRes[1]}`, - ); - } - const capabilityObject = parseRes[0]!; - - // First check def key. - if (capabilityObject.def) { - for (const defaultAction of capabilityObject.def) { - if ( - defaultAction == capabilityProtocolPrefix.toString() || - defaultAction === "*" - ) { - return null; - } - } - } - - // Then check tar key for specific targets. - if (capabilityObject.tar) { - const tarKeys = Object.keys(capabilityObject.tar); - - for (let j = 0; j < tarKeys.length; j++) { - const resourceIdHash = tarKeys[j]; - const permittedActions = capabilityObject.tar[resourceIdHash]; - const isActionPermitted = - permittedActions.indexOf( - capabilityProtocolPrefix.toString(), - ) > -1 || permittedActions.indexOf("*") > -1; - if (resourceIdHash === "*" && isActionPermitted) { - return null; - } else if ( - resourceIdHash === requestedHashedResourceId && - isActionPermitted - ) { - return null; - } - } - } - } - - return new Error( - "SIWE ReCap does not delegate sufficient capabilities to specified resource.", - ); -} diff --git a/utils/cbor.ts b/utils/cbor.ts deleted file mode 100644 index b04f824..0000000 --- a/utils/cbor.ts +++ /dev/null @@ -1,34 +0,0 @@ -// copy-🍝 from https://github.com/MasterKale/SimpleWebAuthn/blob/33528afe001d4aca62052dce204c0398c3127ffd/packages/server/src/helpers/decodeCbor.ts - -import cbor from "cbor"; - -export function decodeCborFirst( - input: - | string - | Buffer - | ArrayBuffer - | Uint8Array - | Uint8ClampedArray - | DataView, -): any { - try { - // throws if there are extra bytes - return cbor.decodeFirstSync(input); - } catch (err) { - const _err = err as CborDecoderError; - // if the error was due to extra bytes, return the unpacked value - if (_err.value) { - return _err.value; - } - throw err; - } -} - -/** - * Intuited from a quick scan of `cbor.decodeFirstSync()` here: - * - * https://github.com/hildjj/node-cbor/blob/v5.1.0/lib/decoder.js#L189 - */ -class CborDecoderError extends Error { - value: any; -} diff --git a/utils/receipt.ts b/utils/receipt.ts deleted file mode 100644 index a411f2f..0000000 --- a/utils/receipt.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { providers } from "ethers"; - -const TRANSFER_EVENT_SIGNATURE = - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"; - -export async function getTokenIdFromTransferEvent( - receipt: providers.TransactionReceipt, -): Promise { - // Filter for the Transfer event. - const transferEventLog = receipt.logs.find((log) => { - return ( - log.topics.length > 0 && log.topics[0] === TRANSFER_EVENT_SIGNATURE - ); - }); - - // Validation - if (!transferEventLog) { - throw new Error("No Transfer event found in receipt"); - } - - if (transferEventLog.topics.length < 3) { - throw new Error("Transfer event does not have enough topics"); - } - - return transferEventLog.topics[3]; -} diff --git a/utils/string.ts b/utils/string.ts deleted file mode 100644 index 1abbf08..0000000 --- a/utils/string.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { URL } from "url"; - -export function getDomainFromUrl(url: string) { - const parsedUrl = new URL(url); - return parsedUrl.hostname; -} diff --git a/utils/toHash.ts b/utils/toHash.ts deleted file mode 100644 index 35a9171..0000000 --- a/utils/toHash.ts +++ /dev/null @@ -1,12 +0,0 @@ -// copy-🍝 from https://github.com/MasterKale/SimpleWebAuthn/blob/33528afe001d4aca62052dce204c0398c3127ffd/packages/server/src/helpers/toHash.ts#L8 - -import crypto from "crypto"; - -/** - * Returns hash digest of the given data using the given algorithm. - * @param data Data to hash - * @return The hash - */ -export function toHash(data: Buffer | string, algo = "SHA256"): Buffer { - return crypto.createHash(algo).update(data).digest(); -} diff --git a/utils/webAuthn/convertCOSEtoPKCS.ts b/utils/webAuthn/convertCOSEtoPKCS.ts deleted file mode 100644 index 8b22170..0000000 --- a/utils/webAuthn/convertCOSEtoPKCS.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { COSEAlgorithmIdentifier } from "@simplewebauthn/typescript-types"; -import { decodeCborFirst } from "../cbor"; - -/** - * Takes COSE-encoded public key and converts it to PKCS key - */ -export function convertCOSEtoPKCS(cosePublicKey: Buffer): Buffer { - const struct: COSEPublicKey = decodeCborFirst(cosePublicKey); - - const tag = Buffer.from([0x04]); - const x = struct.get(COSEKEYS.x); - const y = struct.get(COSEKEYS.y); - - if (!x) { - throw new Error("COSE public key was missing x"); - } - - if (y) { - return Buffer.concat([tag, x as Buffer, y as Buffer]); - } - - return Buffer.concat([tag, x as Buffer]); -} - -export type COSEPublicKey = Map; - -export enum COSEKEYS { - kty = 1, - alg = 3, - crv = -1, - x = -2, - y = -3, - n = -1, - e = -2, -} - -export enum COSEKTY { - OKP = 1, - EC2 = 2, - RSA = 3, -} - -export const COSERSASCHEME: { [key: string]: SigningSchemeHash } = { - "-3": "pss-sha256", - "-39": "pss-sha512", - "-38": "pss-sha384", - "-65535": "pkcs1-sha1", - "-257": "pkcs1-sha256", - "-258": "pkcs1-sha384", - "-259": "pkcs1-sha512", -}; - -// See https://w3c.github.io/webauthn/#sctn-alg-identifier -export const COSECRV: { [key: number]: string } = { - // alg: -7 - 1: "p256", - // alg: -35 - 2: "p384", - // alg: -36 - 3: "p521", - // alg: -8 - 6: "ed25519", -}; - -export const COSEALGHASH: { [key: string]: string } = { - "-65535": "sha1", - "-259": "sha512", - "-258": "sha384", - "-257": "sha256", - "-39": "sha512", - "-38": "sha384", - "-37": "sha256", - "-36": "sha512", - "-35": "sha384", - "-8": "sha512", - "-7": "sha256", -}; - -/** - * Imported from node-rsa's types - */ -type SigningSchemeHash = - | "pkcs1-ripemd160" - | "pkcs1-md4" - | "pkcs1-md5" - | "pkcs1-sha" - | "pkcs1-sha1" - | "pkcs1-sha224" - | "pkcs1-sha256" - | "pkcs1-sha384" - | "pkcs1-sha512" - | "pss-ripemd160" - | "pss-md4" - | "pss-md5" - | "pss-sha" - | "pss-sha1" - | "pss-sha224" - | "pss-sha256" - | "pss-sha384" - | "pss-sha512"; diff --git a/utils/webAuthn/convertCertBufferToPEM.ts b/utils/webAuthn/convertCertBufferToPEM.ts deleted file mode 100644 index f2d7b41..0000000 --- a/utils/webAuthn/convertCertBufferToPEM.ts +++ /dev/null @@ -1,33 +0,0 @@ -// copy-🍝 from https://github.com/MasterKale/SimpleWebAuthn/blob/33528afe001d4aca62052dce204c0398c3127ffd/packages/server/src/helpers/convertCertBufferToPEM.ts - -import base64url from "base64url"; -import type { Base64URLString } from "@simplewebauthn/typescript-types"; - -/** - * Convert buffer to an OpenSSL-compatible PEM text format. - */ -export function convertCertBufferToPEM( - certBuffer: Buffer | Base64URLString, -): string { - let b64cert: string; - - /** - * Get certBuffer to a base64 representation - */ - if (typeof certBuffer === "string") { - b64cert = base64url.toBase64(certBuffer); - } else { - b64cert = certBuffer.toString("base64"); - } - - let PEMKey = ""; - for (let i = 0; i < Math.ceil(b64cert.length / 64); i += 1) { - const start = 64 * i; - - PEMKey += `${b64cert.substr(start, 64)}\n`; - } - - PEMKey = `-----BEGIN CERTIFICATE-----\n${PEMKey}-----END CERTIFICATE-----\n`; - - return PEMKey; -} diff --git a/utils/webAuthn/convertPublicKeyToPEM.ts b/utils/webAuthn/convertPublicKeyToPEM.ts deleted file mode 100644 index 00ca5e2..0000000 --- a/utils/webAuthn/convertPublicKeyToPEM.ts +++ /dev/null @@ -1,73 +0,0 @@ -// copy-🍝 from https://github.com/MasterKale/SimpleWebAuthn/blob/33528afe001d4aca62052dce204c0398c3127ffd/packages/server/src/helpers/convertPublicKeyToPEM.ts - -import cbor from "cbor"; -import jwkToPem from "jwk-to-pem"; - -import { COSEKEYS, COSEKTY, COSECRV } from "./convertCOSEtoPKCS"; - -export function convertPublicKeyToPEM(publicKey: Buffer): string { - let struct; - try { - struct = cbor.decodeAllSync(publicKey)[0]; - } catch (err) { - const _err = err as Error; - throw new Error( - `Error decoding public key while converting to PEM: ${_err.message}`, - ); - } - - const kty = struct.get(COSEKEYS.kty); - - if (!kty) { - throw new Error("Public key was missing kty"); - } - - if (kty === COSEKTY.EC2) { - const crv = struct.get(COSEKEYS.crv); - const x = struct.get(COSEKEYS.x); - const y = struct.get(COSEKEYS.y); - - if (!crv) { - throw new Error("Public key was missing crv (EC2)"); - } - - if (!x) { - throw new Error("Public key was missing x (EC2)"); - } - - if (!y) { - throw new Error("Public key was missing y (EC2)"); - } - - const ecPEM = jwkToPem({ - kty: "EC", - // Specify curve as "P-256" from "p256" - crv: COSECRV[crv as number].replace("p", "P-"), - x: (x as Buffer).toString("base64"), - y: (y as Buffer).toString("base64"), - }); - - return ecPEM; - } else if (kty === COSEKTY.RSA) { - const n = struct.get(COSEKEYS.n); - const e = struct.get(COSEKEYS.e); - - if (!n) { - throw new Error("Public key was missing n (RSA)"); - } - - if (!e) { - throw new Error("Public key was missing e (RSA)"); - } - - const rsaPEM = jwkToPem({ - kty: "RSA", - n: (n as Buffer).toString("base64"), - e: (e as Buffer).toString("base64"), - }); - - return rsaPEM; - } - - throw new Error(`Could not convert public key type ${kty} to PEM`); -} diff --git a/utils/webAuthn/keys.ts b/utils/webAuthn/keys.ts deleted file mode 100644 index 7c62b70..0000000 --- a/utils/webAuthn/keys.ts +++ /dev/null @@ -1,21 +0,0 @@ -import cbor from "cbor"; -import { ec as EC } from "elliptic"; -import { COSEKEYS } from "./convertCOSEtoPKCS"; - -const ec = new EC("secp256k1"); - -export function decodeECKeyAndGetPublicKey( - cborEncodedPublicKey: Buffer, -): string { - const struct = cbor.decodeAllSync(cborEncodedPublicKey)[0]; - - const x = struct.get(COSEKEYS.x); - const y = struct.get(COSEKEYS.y); - - const key = ec.keyFromPublic({ - x, - y, - }); - - return key.getPublic(true, "hex"); -} diff --git a/utils/webAuthn/verifySignature.ts b/utils/webAuthn/verifySignature.ts deleted file mode 100644 index 2c6ec7f..0000000 --- a/utils/webAuthn/verifySignature.ts +++ /dev/null @@ -1,118 +0,0 @@ -// copy-🍝 from https://github.com/MasterKale/SimpleWebAuthn/blob/33528afe001d4aca62052dce204c0398c3127ffd/packages/server/src/helpers/verifySignature.ts#L31 - -import crypto from "crypto"; -import cbor from "cbor"; -import { verify as ed25519Verify } from "@noble/ed25519"; - -import { COSEKEYS, COSEKTY } from "./convertCOSEtoPKCS"; -import { convertCertBufferToPEM } from "./convertCertBufferToPEM"; -import { convertPublicKeyToPEM } from "./convertPublicKeyToPEM"; - -type VerifySignatureOptsLeafCert = { - signature: Buffer; - signatureBase: Buffer; - leafCert: Buffer; - hashAlgorithm?: string; -}; - -type VerifySignatureOptsCredentialPublicKey = { - signature: Buffer; - signatureBase: Buffer; - credentialPublicKey: Buffer; - hashAlgorithm?: string; -}; - -/** - * Verify an authenticator's signature - * - * @param signature attStmt.sig - * @param signatureBase Output from Buffer.concat() - * @param publicKey Authenticator's public key as a PEM certificate - * @param algo Which algorithm to use to verify the signature (default: `'sha256'`) - */ -export async function verifySignature( - opts: VerifySignatureOptsLeafCert | VerifySignatureOptsCredentialPublicKey, -): Promise { - const { signature, signatureBase, hashAlgorithm = "sha256" } = opts; - const _isLeafcertOpts = isLeafCertOpts(opts); - const _isCredPubKeyOpts = isCredPubKeyOpts(opts); - - if (!_isLeafcertOpts && !_isCredPubKeyOpts) { - throw new Error( - 'Must declare either "leafCert" or "credentialPublicKey"', - ); - } - - if (_isLeafcertOpts && _isCredPubKeyOpts) { - throw new Error( - 'Must not declare both "leafCert" and "credentialPublicKey"', - ); - } - - let publicKeyPEM = ""; - - if (_isCredPubKeyOpts) { - const { credentialPublicKey } = opts; - - // Decode CBOR to COSE - let struct; - try { - struct = cbor.decodeAllSync(credentialPublicKey)[0]; - } catch (err) { - const _err = err as Error; - throw new Error( - `Error decoding public key while converting to PEM: ${_err.message}`, - ); - } - - const kty = struct.get(COSEKEYS.kty); - - if (!kty) { - throw new Error("Public key was missing kty"); - } - - // Check key type - if (kty === COSEKTY.OKP) { - // Verify Ed25519 slightly differently - const x = struct.get(COSEKEYS.x); - - if (!x) { - throw new Error("Public key was missing x (OKP)"); - } - - return ed25519Verify(signature, signatureBase, x); - } else { - // Convert pubKey to PEM for ECC and RSA - publicKeyPEM = convertPublicKeyToPEM(credentialPublicKey); - } - } - - if (_isLeafcertOpts) { - const { leafCert } = opts; - publicKeyPEM = convertCertBufferToPEM(leafCert); - } - - return crypto - .createVerify(hashAlgorithm) - .update(signatureBase) - .verify(publicKeyPEM, signature); -} - -function isLeafCertOpts( - opts: VerifySignatureOptsLeafCert | VerifySignatureOptsCredentialPublicKey, -): opts is VerifySignatureOptsLeafCert { - return ( - Object.keys(opts as VerifySignatureOptsLeafCert).indexOf("leafCert") >= - 0 - ); -} - -function isCredPubKeyOpts( - opts: VerifySignatureOptsLeafCert | VerifySignatureOptsCredentialPublicKey, -): opts is VerifySignatureOptsCredentialPublicKey { - return ( - Object.keys(opts as VerifySignatureOptsCredentialPublicKey).indexOf( - "credentialPublicKey", - ) >= 0 - ); -} diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 8765ad1..0000000 --- a/yarn.lock +++ /dev/null @@ -1,2689 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@cosmjs/amino@0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.30.1.tgz#7c18c14627361ba6c88e3495700ceea1f76baace" - integrity sha512-yNHnzmvAlkETDYIpeCTdVqgvrdt1qgkOXwuRVi8s27UKI5hfqyE9fJ/fuunXE6ZZPnKkjIecDznmuUOMrMvw4w== - dependencies: - "@cosmjs/crypto" "^0.30.1" - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/utils" "^0.30.1" - -"@cosmjs/crypto@0.30.1", "@cosmjs/crypto@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.30.1.tgz#21e94d5ca8f8ded16eee1389d2639cb5c43c3eb5" - integrity sha512-rAljUlake3MSXs9xAm87mu34GfBLN0h/1uPPV6jEwClWjNkAMotzjC0ab9MARy5FFAvYHL3lWb57bhkbt2GtzQ== - dependencies: - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/utils" "^0.30.1" - "@noble/hashes" "^1" - bn.js "^5.2.0" - elliptic "^6.5.4" - libsodium-wrappers "^0.7.6" - -"@cosmjs/encoding@0.30.1", "@cosmjs/encoding@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.30.1.tgz#b5c4e0ef7ceb1f2753688eb96400ed70f35c6058" - integrity sha512-rXmrTbgqwihORwJ3xYhIgQFfMSrwLu1s43RIK9I8EBudPx3KmnmyAKzMOVsRDo9edLFNuZ9GIvysUCwQfq3WlQ== - dependencies: - base64-js "^1.3.0" - bech32 "^1.1.4" - readonly-date "^1.0.0" - -"@cosmjs/math@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.30.1.tgz#8b816ef4de5d3afa66cb9fdfb5df2357a7845b8a" - integrity sha512-yaoeI23pin9ZiPHIisa6qqLngfnBR/25tSaWpkTm8Cy10MX70UF5oN4+/t1heLaM6SSmRrhk3psRkV4+7mH51Q== - dependencies: - bn.js "^5.2.0" - -"@cosmjs/utils@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.30.1.tgz#6d92582341be3c2ec8d82090253cfa4b7f959edb" - integrity sha512-KvvX58MGMWh7xA+N+deCfunkA/ZNDvFLw4YbOmX3f/XBIkqrVY7qlotfy2aNb1kgp6h4B6Yc8YawJPDTfvWX7g== - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@lit-protocol/access-control-conditions@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/access-control-conditions/-/access-control-conditions-6.2.4.tgz#ecfa752c06c30bd38aeee7d0abc601e007a7dfe8" - integrity sha512-nobWVpuR7qdO1eBB1/nV+yxemx4ID+GtRpQoZXjIARw2XmraXNk3oPy/78ciuO2sO9slFusO5CdPx+OHsXyeZw== - dependencies: - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@lit-protocol/accs-schemas" "0.0.7" - "@lit-protocol/constants" "6.2.4" - "@lit-protocol/contracts" "^0.0.39" - "@lit-protocol/logger" "6.2.4" - "@lit-protocol/misc" "6.2.4" - "@lit-protocol/types" "6.2.4" - "@lit-protocol/uint8arrays" "6.2.4" - ajv "^8.12.0" - ethers "^5.7.1" - jszip "^3.10.1" - punycode "2.3.1" - siwe "^2.0.5" - tslib "1.14.1" - uint8arrays "^4.0.3" - util "0.12.5" - -"@lit-protocol/accs-schemas@0.0.7": - version "0.0.7" - resolved "https://registry.yarnpkg.com/@lit-protocol/accs-schemas/-/accs-schemas-0.0.7.tgz#aad45c27f8c1dc0363a08771bdab50b595dc34d7" - integrity sha512-n8fJ6NMh2T3KgSKe0CRB0Uam6ZwxUTQV0oQXY0vEmSL+Q2a1PsM2FX42szOM+O7LgY+Bko7AiCjjDHbqQoJydg== - dependencies: - ajv "^8.12.0" - -"@lit-protocol/auth-helpers@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/auth-helpers/-/auth-helpers-6.2.4.tgz#6d48c6d419622fa8198533c35f2f1c48ba0335a9" - integrity sha512-wy17BS5+LspZq/ehTe5OV06ahHNJv7Qd3y6bGOui1sAyzrCCTIUodcHNr+rqqIkv6LzEb/mkxmemHlX7oOWg0g== - dependencies: - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@lit-protocol/access-control-conditions" "6.2.4" - "@lit-protocol/accs-schemas" "0.0.7" - "@lit-protocol/constants" "6.2.4" - "@lit-protocol/contracts" "^0.0.39" - "@lit-protocol/logger" "6.2.4" - "@lit-protocol/misc" "6.2.4" - "@lit-protocol/types" "6.2.4" - "@lit-protocol/uint8arrays" "6.2.4" - ajv "^8.12.0" - ethers "^5.7.1" - jszip "^3.10.1" - punycode "2.3.1" - siwe "^2.0.5" - siwe-recap "0.0.2-alpha.0" - tslib "2.6.0" - uint8arrays "^4.0.3" - util "0.12.5" - -"@lit-protocol/bls-sdk@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/bls-sdk/-/bls-sdk-6.2.4.tgz#cce120a7d28d8372ac0476302b15a159c2b9e79f" - integrity sha512-NzS4iAShA8B/0gdOHW9xstZ1JpP9SejppL7Ec9wi4IdKMXwLlW/wRJ7zes6iCjpD75rz9SOLDtoMrBswi0Ju0Q== - dependencies: - tslib "1.14.1" - util "0.12.5" - -"@lit-protocol/constants@6.2.4", "@lit-protocol/constants@^6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/constants/-/constants-6.2.4.tgz#0f67d9dfd659d43c465c8d60963fe0a4734c891b" - integrity sha512-XeW0s7O7a9DerQ4QQ27v/22El5w75f2hNYBRFYM+Ep20d9f4ZaCAZt9j5wkzkbfWYpE6xu2PTECDmDFtqU154A== - dependencies: - "@ethersproject/abstract-provider" "5.7.0" - "@lit-protocol/accs-schemas" "0.0.7" - "@lit-protocol/contracts" "^0.0.39" - "@lit-protocol/types" "6.2.4" - ethers "^5.7.1" - jszip "^3.10.1" - siwe "^2.0.5" - tslib "1.14.1" - -"@lit-protocol/contracts-sdk@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/contracts-sdk/-/contracts-sdk-6.2.4.tgz#3d2f5efd9649862b160d92633fd1d64c56bf2540" - integrity sha512-BgOhFN6sWUm7nbB97eryFPQ3ESaP7arbA+iXIiRf9Wg2Clu+DQVTAE83PxLgNUewWdbJAaFHRCQrbYrSJTDucQ== - dependencies: - "@cosmjs/amino" "0.30.1" - "@cosmjs/crypto" "0.30.1" - "@cosmjs/encoding" "0.30.1" - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@lit-protocol/accs-schemas" "0.0.7" - "@lit-protocol/constants" "6.2.4" - "@lit-protocol/contracts" "^0.0.39" - "@lit-protocol/logger" "6.2.4" - "@lit-protocol/misc" "6.2.4" - "@lit-protocol/types" "6.2.4" - ajv "^8.12.0" - bitcoinjs-lib "^6.1.0" - ethers "^5.7.1" - jose "^4.14.4" - jszip "^3.10.1" - process "0.11.10" - punycode "2.3.1" - siwe "^2.0.5" - tslib "1.14.1" - uint8arrays "^4.0.3" - util "0.12.5" - -"@lit-protocol/contracts@^0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@lit-protocol/contracts/-/contracts-0.0.39.tgz#e2483f1ef3df63bd434bcc7c00414b8f2e8d9ec5" - integrity sha512-zz/TaKWUqFK2n7BqwKj9PeV0px89G7dnjkRJ9BM/eri356zodd/W5d5iGQUVdaFiCYKd/cibm4004BnuMlXLeg== - -"@lit-protocol/core@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/core/-/core-6.2.4.tgz#540567302da8e38ef733ce864c122509832007f8" - integrity sha512-r8zKTIoU+aNrR0nBf96xeB0RJvWw3K78d65+RQuVXa7wx8gtItC9XUb1MfeBqoZRli5Swih38S2glt5Mt6RuKQ== - dependencies: - "@cosmjs/amino" "0.30.1" - "@cosmjs/crypto" "0.30.1" - "@cosmjs/encoding" "0.30.1" - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@lit-protocol/access-control-conditions" "6.2.4" - "@lit-protocol/accs-schemas" "0.0.7" - "@lit-protocol/bls-sdk" "6.2.4" - "@lit-protocol/constants" "6.2.4" - "@lit-protocol/contracts" "^0.0.39" - "@lit-protocol/contracts-sdk" "6.2.4" - "@lit-protocol/crypto" "6.2.4" - "@lit-protocol/ecdsa-sdk" "6.2.4" - "@lit-protocol/logger" "6.2.4" - "@lit-protocol/misc" "6.2.4" - "@lit-protocol/nacl" "6.2.4" - "@lit-protocol/sev-snp-utils-sdk" "6.2.4" - "@lit-protocol/types" "6.2.4" - "@lit-protocol/uint8arrays" "6.2.4" - ajv "^8.12.0" - bitcoinjs-lib "^6.1.0" - bs58 "^5.0.0" - cross-fetch "3.1.4" - date-and-time "^2.4.1" - ethers "^5.7.1" - jose "^4.14.4" - jszip "^3.10.1" - multiformats "^9.7.1" - pako "1.0.11" - process "0.11.10" - punycode "2.3.1" - siwe "^2.0.5" - tslib "1.14.1" - uint8arrays "^4.0.3" - util "0.12.5" - -"@lit-protocol/crypto@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/crypto/-/crypto-6.2.4.tgz#ae2aa819533e963c6a2edf44a606951bd2b48d7d" - integrity sha512-NIrteNXlTSg1+QZteL/8lF737ncRMpoWAoU2EHv/QQNNQMeTRByv+IsqbnwX2zm7zvw07zLvxWrXdYgR4luXTg== - dependencies: - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@lit-protocol/accs-schemas" "0.0.7" - "@lit-protocol/bls-sdk" "6.2.4" - "@lit-protocol/constants" "6.2.4" - "@lit-protocol/contracts" "^0.0.39" - "@lit-protocol/ecdsa-sdk" "6.2.4" - "@lit-protocol/logger" "6.2.4" - "@lit-protocol/misc" "6.2.4" - "@lit-protocol/nacl" "6.2.4" - "@lit-protocol/sev-snp-utils-sdk" "6.2.4" - "@lit-protocol/types" "6.2.4" - "@lit-protocol/uint8arrays" "6.2.4" - ajv "^8.12.0" - cross-fetch "3.1.4" - ethers "^5.7.1" - jszip "^3.10.1" - pako "1.0.11" - punycode "2.3.1" - siwe "^2.0.5" - tslib "1.14.1" - uint8arrays "^4.0.3" - util "0.12.5" - -"@lit-protocol/ecdsa-sdk@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/ecdsa-sdk/-/ecdsa-sdk-6.2.4.tgz#4ab9b2b59b60c425beda27d0ca6febfc228895b1" - integrity sha512-NEyA6BVwXbEn3DgzE9PLY3XrzO1Ju51yNozZhYVzPlpbWx0vqGd/zBa7MKc5qIWBpi1JPoO+QBonv3/29CjycQ== - dependencies: - tslib "1.14.1" - util "0.12.5" - -"@lit-protocol/encryption@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/encryption/-/encryption-6.2.4.tgz#a8cce11357ac0c692f9ab7af01083a9fe7536eb4" - integrity sha512-6d8T69omItywhDX+2IA+JHgiV4Nnu6E4+769X4ceZzMaRI0LoPXMbQ4HaI6s3EtCJZmwROyxX1LtmvwfzNQ8RQ== - dependencies: - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@lit-protocol/accs-schemas" "0.0.7" - "@lit-protocol/bls-sdk" "6.2.4" - "@lit-protocol/constants" "6.2.4" - "@lit-protocol/contracts" "^0.0.39" - "@lit-protocol/crypto" "6.2.4" - "@lit-protocol/ecdsa-sdk" "6.2.4" - "@lit-protocol/logger" "6.2.4" - "@lit-protocol/misc" "6.2.4" - "@lit-protocol/nacl" "6.2.4" - "@lit-protocol/sev-snp-utils-sdk" "6.2.4" - "@lit-protocol/types" "6.2.4" - "@lit-protocol/uint8arrays" "6.2.4" - ajv "^8.12.0" - cross-fetch "3.1.4" - ethers "^5.7.1" - jszip "^3.10.1" - pako "1.0.11" - punycode "2.3.1" - siwe "^2.0.5" - tslib "1.14.1" - uint8arrays "^4.0.3" - util "0.12.5" - -"@lit-protocol/lit-node-client-nodejs@^6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/lit-node-client-nodejs/-/lit-node-client-nodejs-6.2.4.tgz#6db12dbfbe1add4ef1be0aad46af7bb077e87bfc" - integrity sha512-+CbTkuoIJlrhFO36ZjdSyaZ6DqQuNuyitj5PvkQqqxxRFhd1PLDkk2gEbGVQoA78Hk2T1k79F87rMLDoE91+5g== - dependencies: - "@cosmjs/amino" "0.30.1" - "@cosmjs/crypto" "0.30.1" - "@cosmjs/encoding" "0.30.1" - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/transactions" "5.7.0" - "@lit-protocol/access-control-conditions" "6.2.4" - "@lit-protocol/accs-schemas" "0.0.7" - "@lit-protocol/auth-helpers" "6.2.4" - "@lit-protocol/bls-sdk" "6.2.4" - "@lit-protocol/constants" "6.2.4" - "@lit-protocol/contracts" "^0.0.39" - "@lit-protocol/contracts-sdk" "6.2.4" - "@lit-protocol/core" "6.2.4" - "@lit-protocol/crypto" "6.2.4" - "@lit-protocol/ecdsa-sdk" "6.2.4" - "@lit-protocol/encryption" "6.2.4" - "@lit-protocol/logger" "6.2.4" - "@lit-protocol/misc" "6.2.4" - "@lit-protocol/misc-browser" "6.2.4" - "@lit-protocol/nacl" "6.2.4" - "@lit-protocol/sev-snp-utils-sdk" "6.2.4" - "@lit-protocol/types" "6.2.4" - "@lit-protocol/uint8arrays" "6.2.4" - ajv "^8.12.0" - bitcoinjs-lib "^6.1.0" - bs58 "^5.0.0" - cross-fetch "3.1.4" - date-and-time "^2.4.1" - ethers "^5.7.1" - jose "^4.14.4" - jszip "^3.10.1" - multiformats "^9.7.1" - pako "1.0.11" - process "0.11.10" - punycode "2.3.1" - siwe "^2.0.5" - siwe-recap "0.0.2-alpha.0" - tslib "^2.3.0" - uint8arrays "^4.0.3" - util "0.12.5" - -"@lit-protocol/logger@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/logger/-/logger-6.2.4.tgz#5f34081dc242720836bed9fd5fde10327906a658" - integrity sha512-o3yXdkBXcU/h+glwH6LMDzjFQnfmuzijDwPfQa39eMgKSdXVqwEoF9jGNhLS+0K1jYHgxTjenvbJVdz8GcfW+w== - dependencies: - "@ethersproject/abstract-provider" "5.7.0" - "@lit-protocol/accs-schemas" "0.0.7" - "@lit-protocol/constants" "6.2.4" - "@lit-protocol/contracts" "^0.0.39" - "@lit-protocol/types" "6.2.4" - ethers "^5.7.1" - jszip "^3.10.1" - punycode "2.3.1" - siwe "^2.0.5" - tslib "1.14.1" - uint8arrays "^4.0.3" - -"@lit-protocol/misc-browser@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/misc-browser/-/misc-browser-6.2.4.tgz#effd0ba1378c02cea94e165c1dfce3db3e2e2544" - integrity sha512-B7tXcdtb6xMmi3AtC2kzpUbVWkyh8//Lo+zYRe4zr1BFxkmf4f/JtXplfIkG01GXVo6q27mVCHgAZhTJTq++rw== - dependencies: - "@ethersproject/abstract-provider" "5.7.0" - "@lit-protocol/accs-schemas" "0.0.7" - "@lit-protocol/constants" "6.2.4" - "@lit-protocol/contracts" "^0.0.39" - "@lit-protocol/types" "6.2.4" - "@lit-protocol/uint8arrays" "6.2.4" - ethers "^5.7.1" - jszip "^3.10.1" - siwe "^2.0.5" - tslib "1.14.1" - -"@lit-protocol/misc@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/misc/-/misc-6.2.4.tgz#c00f96890349acbb839a016e3f2289f77a2495ec" - integrity sha512-3slWB+ebTw9p10NbxiPZdulIUHc7fyavYUQqupYk2AIAJJKdjlWmyFQRgZ8gJOtWdN8DBSXuuOKxVOCac08Esw== - dependencies: - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@lit-protocol/accs-schemas" "0.0.7" - "@lit-protocol/constants" "6.2.4" - "@lit-protocol/contracts" "^0.0.39" - "@lit-protocol/logger" "6.2.4" - "@lit-protocol/types" "6.2.4" - ajv "^8.12.0" - ethers "^5.7.1" - jszip "^3.10.1" - punycode "2.3.1" - siwe "^2.0.5" - tslib "1.14.1" - uint8arrays "^4.0.3" - util "0.12.5" - -"@lit-protocol/nacl@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/nacl/-/nacl-6.2.4.tgz#a1b25a922eb1bdf789ebbef30b339c802e4edf89" - integrity sha512-jVsoDPiffrpWqWmiYgV19tXOfVe+SzPJG9shZIGveDU2OsCgtb0Fhpk6LuuH4G0iwzD+K6qS0YKcQuOnMgpY2Q== - dependencies: - tslib "1.14.1" - -"@lit-protocol/sev-snp-utils-sdk@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/sev-snp-utils-sdk/-/sev-snp-utils-sdk-6.2.4.tgz#f5b48c8e666a28889bd8ed52f74abce651253ef0" - integrity sha512-k94cgi7lzfCHl8Qf7SwGCqcT1wgeUwki3FQQE5oQxvm/+SADFJLTWS/IeLO1eT4w99BINGvLdAs66RFq4FnqXg== - dependencies: - cross-fetch "3.1.4" - tslib "1.14.1" - -"@lit-protocol/types@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/types/-/types-6.2.4.tgz#26b74baf78755cf8ae33f1d5bc9344d459cf5a4f" - integrity sha512-aenWLkPEEvyJg6VRu+/IbDL4JilRk5aoQ+ayL/UORSZtTnpfRf23LBef9pchMWXnUYXIr4X/vrko0Ru+tostTQ== - dependencies: - "@ethersproject/abstract-provider" "5.7.0" - "@lit-protocol/accs-schemas" "0.0.7" - ethers "^5.7.1" - jszip "^3.10.1" - siwe "^2.0.5" - tslib "1.14.1" - -"@lit-protocol/uint8arrays@6.2.4": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@lit-protocol/uint8arrays/-/uint8arrays-6.2.4.tgz#6d02a131d9c2fd8041d2260758074dbdc175c27b" - integrity sha512-pGVO8DL+dwOs491q05nF5beHh5dBygOgO20nCNcyyb4RICRllWcT7y+duvkmw6N2dcM6tGGZUwMLmGyQD5U06Q== - dependencies: - "@ethersproject/abstract-provider" "5.7.0" - "@lit-protocol/accs-schemas" "0.0.7" - "@lit-protocol/contracts" "^0.0.39" - ethers "^5.7.1" - jszip "^3.10.1" - siwe "^2.0.5" - tslib "1.14.1" - -"@noble/curves@1.4.2", "@noble/curves@~1.4.0": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" - integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== - dependencies: - "@noble/hashes" "1.4.0" - -"@noble/ed25519@^1.6.1": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.3.tgz#57e1677bf6885354b466c38e2b620c62f45a7123" - integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ== - -"@noble/hashes@1.4.0", "@noble/hashes@^1", "@noble/hashes@^1.1.2", "@noble/hashes@^1.2.0", "@noble/hashes@~1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== - -"@peculiar/asn1-android@^2.1.7": - version "2.3.10" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-android/-/asn1-android-2.3.10.tgz#a2dde6227fa1ddea33d8ae7835768674e7a0baa6" - integrity sha512-z9Rx9cFJv7UUablZISe7uksNbFJCq13hO0yEAOoIpAymALTLlvUOSLnGiQS7okPaM5dP42oTLhezH6XDXRXjGw== - dependencies: - "@peculiar/asn1-schema" "^2.3.8" - asn1js "^3.0.5" - tslib "^2.6.2" - -"@peculiar/asn1-schema@^2.1.7", "@peculiar/asn1-schema@^2.3.8": - version "2.3.8" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz#04b38832a814e25731232dd5be883460a156da3b" - integrity sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA== - dependencies: - asn1js "^3.0.5" - pvtsutils "^1.3.5" - tslib "^2.6.2" - -"@peculiar/asn1-x509@^2.1.7": - version "2.3.8" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.3.8.tgz#865896e2b849cc3c55497ca685040ef889d357a3" - integrity sha512-voKxGfDU1c6r9mKiN5ZUsZWh3Dy1BABvTM3cimf0tztNwyMJPhiXY94eRTgsMQe6ViLfT6EoXxkWVzcm3mFAFw== - dependencies: - "@peculiar/asn1-schema" "^2.3.8" - asn1js "^3.0.5" - ipaddr.js "^2.1.0" - pvtsutils "^1.3.5" - tslib "^2.6.2" - -"@redis/bloom@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.2.0.tgz#d3fd6d3c0af3ef92f26767b56414a370c7b63b71" - integrity sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg== - -"@redis/client@1.5.17": - version "1.5.17" - resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.5.17.tgz#44d179f2b5b542754d6f218bb352bac3ccf150eb" - integrity sha512-IPvU9A31qRCZ7lds/x+ksuK/UMndd0EASveAvCvEtFFKIZjZ+m/a4a0L7S28KEWoR5ka8526hlSghDo4Hrc2Hg== - dependencies: - cluster-key-slot "1.1.2" - generic-pool "3.9.0" - yallist "4.0.0" - -"@redis/graph@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.1.tgz#8c10df2df7f7d02741866751764031a957a170ea" - integrity sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw== - -"@redis/json@1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.6.tgz#b7a7725bbb907765d84c99d55eac3fcf772e180e" - integrity sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw== - -"@redis/search@1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.1.6.tgz#33bcdd791d9ed88ab6910243a355d85a7fedf756" - integrity sha512-mZXCxbTYKBQ3M2lZnEddwEAks0Kc7nauire8q20oA0oA/LoA+E/b5Y5KZn232ztPb1FkIGqo12vh3Lf+Vw5iTw== - -"@redis/time-series@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.0.5.tgz#a6d70ef7a0e71e083ea09b967df0a0ed742bc6ad" - integrity sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg== - -"@scure/base@~1.1.6": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.7.tgz#fe973311a5c6267846aa131bc72e96c5d40d2b30" - integrity sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g== - -"@scure/bip32@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" - integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== - dependencies: - "@noble/curves" "~1.4.0" - "@noble/hashes" "~1.4.0" - "@scure/base" "~1.1.6" - -"@scure/bip39@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" - integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== - dependencies: - "@noble/hashes" "~1.4.0" - "@scure/base" "~1.1.6" - -"@simplewebauthn/server@6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@simplewebauthn/server/-/server-6.2.1.tgz#64a9793e5e4ed33d1fd9b53a6a80f33e916fe44e" - integrity sha512-0JPHrxhYkYislk60kCoExqyLW0yulxmD+1LAhOo9Oo3BlFFPnGIRgm5QNnDnXsDXX4WDqK8fU+RgPunCnUqcJw== - dependencies: - "@noble/ed25519" "^1.6.1" - "@peculiar/asn1-android" "^2.1.7" - "@peculiar/asn1-schema" "^2.1.7" - "@peculiar/asn1-x509" "^2.1.7" - "@simplewebauthn/typescript-types" "^6.2.1" - base64url "^3.0.1" - cbor "^5.1.0" - debug "^4.3.2" - jsrsasign "^10.4.0" - jwk-to-pem "^2.0.4" - node-fetch "^2.6.0" - -"@simplewebauthn/typescript-types@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@simplewebauthn/typescript-types/-/typescript-types-6.2.1.tgz#2a6c9f74f58539ec27f638cf33e658f4a9c57078" - integrity sha512-qScvkt0nP0Uy/xeeunlXAkJni9wtecsvxwLELSgiWRx/KRVZy1SGDHsKAfQowpIeDmLDyhWxUoN7qUgvgWCiAQ== - -"@spruceid/siwe-parser@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@spruceid/siwe-parser/-/siwe-parser-2.1.2.tgz#3e13e7d3ac0bfdaf109a07342590eb21daee2fc3" - integrity sha512-d/r3S1LwJyMaRAKQ0awmo9whfXeE88Qt00vRj91q5uv5ATtWIQEGJ67Yr5eSZw5zp1/fZCXZYuEckt8lSkereQ== - dependencies: - "@noble/hashes" "^1.1.2" - apg-js "^4.3.0" - uri-js "^4.4.1" - valid-url "^1.0.9" - -"@stablelib/binary@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" - integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== - dependencies: - "@stablelib/int" "^1.0.1" - -"@stablelib/int@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.1.tgz#75928cc25d59d73d75ae361f02128588c15fd008" - integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== - -"@stablelib/random@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" - integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/wipe@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" - integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== - -"@tsconfig/node10@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" - integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/bn.js@*": - version "5.1.5" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" - integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== - dependencies: - "@types/node" "*" - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/cbor@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@types/cbor/-/cbor-6.0.0.tgz#ddead015e14ef4463287d40cd92a6297a34dac8d" - integrity sha512-mGQ1lbYOwVti5Xlarn1bTeBZqgY0kstsdjnkoEovgohYKdBjGejHyNGXHdMBeqyQazIv32Jjp33+5pBEaSRy2w== - dependencies: - cbor "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/cors@^2.8.12": - version "2.8.17" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" - integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== - dependencies: - "@types/node" "*" - -"@types/elliptic@^6.4.14": - version "6.4.18" - resolved "https://registry.yarnpkg.com/@types/elliptic/-/elliptic-6.4.18.tgz#bc96e26e1ccccbabe8b6f0e409c85898635482e1" - integrity sha512-UseG6H5vjRiNpQvrhy4VF/JXdA3V/Fp5amvveaL+fs28BZ6xIKJBPnUPRlEaZpysD9MbpfaLi8lbl7PGUAkpWw== - dependencies: - "@types/bn.js" "*" - -"@types/express-serve-static-core@^4.17.33": - version "4.19.5" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz#218064e321126fcf9048d1ca25dd2465da55d9c6" - integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@^4.17.13": - version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/jwk-to-pem@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/jwk-to-pem/-/jwk-to-pem-2.0.3.tgz#ba06bc681c194473e9d8cdb85a835f2dd839fd92" - integrity sha512-I/WFyFgk5GrNbkpmt14auGO3yFK1Wt4jXzkLuI+fDBNtO5ZI2rbymyGd6bKzfSBEuyRdM64ZUwxU1+eDcPSOEQ== - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/node-fetch@^2.5.12": - version "2.6.11" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" - integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== - dependencies: - "@types/node" "*" - form-data "^4.0.0" - -"@types/node@*": - version "20.14.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.12.tgz#129d7c3a822cb49fc7ff661235f19cfefd422b49" - integrity sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ== - dependencies: - undici-types "~5.26.4" - -"@types/node@^16.7.4": - version "16.18.104" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.104.tgz#33d5f4886c54133af0ff02445e57c5254025ee53" - integrity sha512-OF3keVCbfPlkzxnnDBUZJn1RiCJzKeadjiW0xTEb0G1SUJ5gDVb3qnzZr2T4uIFvsbKJbXy1v2DN7e2zaEY7jQ== - -"@types/qs@*": - version "6.9.15" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" - integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/send@*": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.7" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" - integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - "@types/send" "*" - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-walk@^8.1.1: - version "8.3.3" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" - integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== - dependencies: - acorn "^8.11.0" - -acorn@^8.11.0, acorn@^8.4.1: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ajv@^8.12.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -apg-js@^4.3.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/apg-js/-/apg-js-4.4.0.tgz#09dcecab0731fbde233b9f2352fdd2d07e56b2cf" - integrity sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q== - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -arrify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -asn1.js@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1js@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.5.tgz#5ea36820443dbefb51cc7f88a2ebb5b462114f38" - integrity sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ== - dependencies: - pvtsutils "^1.3.2" - pvutils "^1.1.3" - tslib "^2.4.0" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" - integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== - -base64-js@^1.3.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base64url@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" - integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== - -bech32@1.1.4, bech32@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -bech32@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" - integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== - -bignumber.js@^9.0.0, bignumber.js@^9.0.1: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -bip174@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bip174/-/bip174-2.1.1.tgz#ef3e968cf76de234a546962bcf572cc150982f9f" - integrity sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ== - -bitcoinjs-lib@^6.1.0: - version "6.1.6" - resolved "https://registry.yarnpkg.com/bitcoinjs-lib/-/bitcoinjs-lib-6.1.6.tgz#f57c17c82511f860f11946d784c18da39f8618a8" - integrity sha512-Fk8+Vc+e2rMoDU5gXkW9tD+313rhkm5h6N9HfZxXvYU9LedttVvmXKTgd9k5rsQJjkSfsv6XRM8uhJv94SrvcA== - dependencies: - "@noble/hashes" "^1.2.0" - bech32 "^2.0.0" - bip174 "^2.1.1" - bs58check "^3.0.1" - typeforce "^1.11.3" - varuint-bitcoin "^1.1.2" - -bn.js@^4.0.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.2: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -bs58@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" - integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== - dependencies: - base-x "^4.0.0" - -bs58check@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-3.0.1.tgz#2094d13720a28593de1cba1d8c4e48602fdd841c" - integrity sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ== - dependencies: - "@noble/hashes" "^1.2.0" - bs58 "^5.0.0" - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.2, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -canonicalize@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-2.0.0.tgz#32be2cef4446d67fd5348027a384cae28f17226a" - integrity sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w== - -cbor@*: - version "9.0.2" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.2.tgz#536b4f2d544411e70ec2b19a2453f10f83cd9fdb" - integrity sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ== - dependencies: - nofilter "^3.1.0" - -cbor@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== - dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" - -cbor@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== - dependencies: - nofilter "^3.1.0" - -chokidar@^3.5.2: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -cluster-key-slot@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cors@^2.8.5: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-fetch@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39" - integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ== - dependencies: - node-fetch "2.6.1" - -date-and-time@^2.4.1: - version "2.4.3" - resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-2.4.3.tgz#116963998a8cecd478955ae053f31a6747a988df" - integrity sha512-xkS/imTmsyEdpp9ie5oV5UWolg3XkYWNySbT2W4ESWr6v4V8YrsHbhpk9fIeQcr0NFTnYbQJLXlgU1zrLItysA== - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.3.2: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== - dependencies: - ms "2.1.2" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dotenv@^16.0.3: - version "16.4.5" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" - integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== - -ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -elliptic@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -elliptic@^6.5.4: - version "6.5.6" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.6.tgz#ee5f7c3a00b98a2144ac84d67d01f04d438fa53e" - integrity sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -ethereum-cryptography@^2.1.3: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" - integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== - dependencies: - "@noble/curves" "1.4.2" - "@noble/hashes" "1.4.0" - "@scure/bip32" "1.4.0" - "@scure/bip39" "1.3.0" - -ethers@^5.7.1, ethers@^5.7.2: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - -express-rate-limit@^6.6.0: - version "6.11.2" - resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-6.11.2.tgz#6c42035603d3b52e4e2fb59f6ebaa89e628ef980" - integrity sha512-a7uwwfNTh1U60ssiIkuLFWHt4hAC5yxlLGU2VP0X4YNlyEDZAqF4tK3GD3NSitVBrCQmQ0++0uOyFOgC2y4DDw== - -express@^4.17.1: - version "4.19.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.2" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.6.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-text-encoding@^1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" - integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== - -fast-uri@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" - integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -gaxios@^5.0.0, gaxios@^5.0.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-5.1.3.tgz#f7fa92da0fe197c846441e5ead2573d4979e9013" - integrity sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA== - dependencies: - extend "^3.0.2" - https-proxy-agent "^5.0.0" - is-stream "^2.0.0" - node-fetch "^2.6.9" - -gcp-metadata@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-5.3.0.tgz#6f45eb473d0cb47d15001476b48b663744d25408" - integrity sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w== - dependencies: - gaxios "^5.0.0" - json-bigint "^1.0.0" - -generic-pool@3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" - integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -google-auth-library@^8.7.0: - version "8.9.0" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-8.9.0.tgz#15a271eb2ec35d43b81deb72211bd61b1ef14dd0" - integrity sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg== - dependencies: - arrify "^2.0.0" - base64-js "^1.3.0" - ecdsa-sig-formatter "^1.0.11" - fast-text-encoding "^1.0.0" - gaxios "^5.0.0" - gcp-metadata "^5.3.0" - gtoken "^6.1.0" - jws "^4.0.0" - lru-cache "^6.0.0" - -google-p12-pem@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-4.0.1.tgz#82841798253c65b7dc2a4e5fe9df141db670172a" - integrity sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ== - dependencies: - node-forge "^1.3.1" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -gtoken@^6.1.0: - version "6.1.2" - resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-6.1.2.tgz#aeb7bdb019ff4c3ba3ac100bbe7b6e74dce0e8bc" - integrity sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ== - dependencies: - gaxios "^5.0.1" - google-p12-pem "^4.0.0" - jws "^4.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - -inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -ipaddr.js@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" - integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-callable@^1.1.3: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-typed-array@^1.1.3: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -jose@^4.14.4: - version "4.15.9" - resolved "https://registry.yarnpkg.com/jose/-/jose-4.15.9.tgz#9b68eda29e9a0614c042fa29387196c7dd800100" - integrity sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA== - -js-base64@^3.7.2: - version "3.7.7" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" - integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== - -js-sha3@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -jsrsasign@^10.4.0: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jsrsasign/-/jsrsasign-10.9.0.tgz#cc3f316e7e4c112a976193f9d2c93deb5a0745ee" - integrity sha512-QWLUikj1SBJGuyGK8tjKSx3K7Y69KYJnrs/pQ1KZ6wvZIkHkWjZ1PJDpuvc1/28c1uP0KW9qn1eI1LzHQqDOwQ== - -jszip@^3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" - integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== - dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - setimmediate "^1.0.5" - -jwa@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" - integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jwk-to-pem@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/jwk-to-pem/-/jwk-to-pem-2.0.5.tgz#151310bcfbcf731adc5ad9f379cbc8b395742906" - integrity sha512-L90jwellhO8jRKYwbssU9ifaMVqajzj3fpRjDKcsDzrslU9syRbFqfkXtT4B89HYAap+xsxNcxgBSB09ig+a7A== - dependencies: - asn1.js "^5.3.0" - elliptic "^6.5.4" - safe-buffer "^5.0.1" - -jws@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" - integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== - dependencies: - jwa "^2.0.0" - safe-buffer "^5.0.1" - -libsodium-wrappers@^0.7.6: - version "0.7.14" - resolved "https://registry.yarnpkg.com/libsodium-wrappers/-/libsodium-wrappers-0.7.14.tgz#b21d9e8d58de686c6318a772805ee1c5d02035a5" - integrity sha512-300TtsePizhJZ7HjLmWr6hLHAgJUxIGhapSw+EwfCtDuWaEmEdGXSQv6j6qFw0bs9l4vS2NH9BtOHfXAq6h5kQ== - dependencies: - libsodium "^0.7.14" - -libsodium@^0.7.14: - version "0.7.14" - resolved "https://registry.yarnpkg.com/libsodium/-/libsodium-0.7.14.tgz#d9daace70dbc36051b947d37999bb6337c364c88" - integrity sha512-/pOd7eO6oZrfORquRTC4284OUJFcMi8F3Vnc9xtRBT0teLfOUxWIItaBFF3odYjZ7nlJNwnLdUVEUFHxVyX/Sw== - -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multiformats@^11.0.2: - version "11.0.2" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-11.0.2.tgz#b14735efc42cd8581e73895e66bebb9752151b60" - integrity sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg== - -multiformats@^12.0.1: - version "12.1.3" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-12.1.3.tgz#cbf7a9861e11e74f8228b21376088cb43ba8754e" - integrity sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw== - -multiformats@^9.4.2, multiformats@^9.7.1: - version "9.9.0" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" - integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -node-fetch@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-fetch@^2.6.0, node-fetch@^2.6.9: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-forge@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -nodemon@^2.0.12: - version "2.0.22" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" - integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== - dependencies: - chokidar "^3.5.2" - debug "^3.2.7" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^5.7.1" - simple-update-notifier "^1.0.7" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - -nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== - -nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -object-assign@^4: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -pako@1.0.11, pako@~1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - -punycode@2.3.1, punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pvtsutils@^1.3.2, pvtsutils@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.5.tgz#b8705b437b7b134cd7fd858f025a23456f1ce910" - integrity sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA== - dependencies: - tslib "^2.6.1" - -pvutils@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" - integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -rate-limit-redis@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/rate-limit-redis/-/rate-limit-redis-3.1.0.tgz#1af407dbe43e8d04b0234ca0b5d0318df8db4e55" - integrity sha512-guCQGRQhsOlTR4VNHRnksMeet/3ImfdxIQgWP6In4FphJjUbORe0F4XeFshLnbc9xcuFUv9jZL44TgUMSz4XPQ== - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -readonly-date@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/readonly-date/-/readonly-date-1.0.0.tgz#5af785464d8c7d7c40b9d738cbde8c646f97dcd9" - integrity sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ== - -redis@^4.4.0: - version "4.6.15" - resolved "https://registry.yarnpkg.com/redis/-/redis-4.6.15.tgz#b94599fbbd8279182b02f5bb34866c2a1556d71c" - integrity sha512-2NtuOpMW3tnYzBw6S8mbXSX7RPzvVFCA2wFJq9oErushO2UeBkxObk+uvo7gv7n0rhWeOj/IzrHO8TjcFlRSOg== - dependencies: - "@redis/bloom" "1.2.0" - "@redis/client" "1.5.17" - "@redis/graph" "1.1.1" - "@redis/json" "1.0.6" - "@redis/search" "1.1.6" - "@redis/time-series" "1.0.5" - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scrypt-js@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -semver@^5.7.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@~7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -simple-update-notifier@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" - integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== - dependencies: - semver "~7.0.0" - -siwe-recap@0.0.2-alpha.0: - version "0.0.2-alpha.0" - resolved "https://registry.yarnpkg.com/siwe-recap/-/siwe-recap-0.0.2-alpha.0.tgz#75a0902c10a8ba5b4471f40e4eafb0afb2f8db59" - integrity sha512-xqFUnvrACWW/Q4s5HQ02avg8IyH2RcgkUzfvN4scYaaHErotLVtTGDZkSS0sn/oNK4MXRt83lTqredsvXgt8iA== - dependencies: - canonicalize "^2.0.0" - multiformats "^11.0.2" - siwe "^2.1.4" - -siwe@^2.0.5, siwe@^2.1.4, siwe@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/siwe/-/siwe-2.3.2.tgz#0794ae25f734f3068de0ab093ddd2f7867bc2d67" - integrity sha512-aSf+6+Latyttbj5nMu6GF3doMfv2UYj83hhwZgUF20ky6fTS83uVhkQABdIVnEuS8y1bBdk7p6ltb9SmlhTTlA== - dependencies: - "@spruceid/siwe-parser" "^2.1.2" - "@stablelib/random" "^1.0.1" - uri-js "^4.4.1" - valid-url "^1.0.9" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -touch@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" - integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -ts-node@^10.2.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tslib@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== - -tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.1, tslib@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== - -tweetnacl-util@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typeforce@^1.11.3: - version "1.18.0" - resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" - integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== - -typescript@^4.4.2: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -uint8arrays@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" - integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== - dependencies: - multiformats "^9.4.2" - -uint8arrays@^4.0.3: - version "4.0.10" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-4.0.10.tgz#3ec5cde3348903c140e87532fc53f46b8f2e921f" - integrity sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA== - dependencies: - multiformats "^12.0.1" - -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -uri-js@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -valid-url@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" - integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== - -varuint-bitcoin@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz#e76c138249d06138b480d4c5b40ef53693e24e92" - integrity sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw== - dependencies: - safe-buffer "^5.1.1" - -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-typed-array@^1.1.14, which-typed-array@^1.1.2: - version "1.1.15" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.2" - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -yallist@4.0.0, yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==